AI大模型应用开发学习-9【20251028】

学习内容:

✅ Function Calling的概念与应用

  • 什么是Function Calling?
  • Function Calling 与 MCP的区别
    ✅ Qwen3 Function Calling使用
  • Qwen3的特点
  • 使用Qwen3完成天气调用 Function Calling
    ✅ 搭建业务助手
  • Qwen-Agent中的 Function Calling
  • 使用Function Calling完成数据库查询
  • 数据表可视化

学习产出:

门票助手系统技术文档

1. 项目概述

门票助手系统是基于大语言模型的智能数据分析应用,用于门票销售数据的查询、分析和可视化展示。系统使用ModelScope大模型平台提供的OpenAI兼容接口,结合SQL查询和数据可视化技术,为用户提供直观的门票销售数据分析服务。

1.1 主要功能

  • 自然语言转SQL:用户可通过自然语言提问,系统自动生成并执行SQL查询
  • 自动数据可视化:查询结果自动转换为柱状图,支持中文显示
  • 多模式交互:支持Web图形界面和终端命令行两种交互方式
  • 会话隔离:每个用户会话的数据独立存储,避免数据串扰
  • 错误处理与日志:完善的错误捕获和日志记录机制

2. 技术架构

2.1 技术栈

技术/框架用途版本
Python主要开发语言3.x
qwen-agent大模型代理框架-
ModelScope大模型平台-
pandas数据处理-
matplotlib数据可视化-
SQLAlchemy数据库连接-
Gradio (WebUI)Web界面-

2.2 系统架构图

┌─────────────┐     ┌───────────────┐     ┌──────────────┐
│ 用户交互层   │     │ 大模型代理层   │     │ 工具与执行层  │
│             │     │               │     │              │
│ - WebUI     │◄───►│ - qwen-agent  │◄───►│ - SQL查询     │
│ - 终端界面   │     │ - 函数调用     │     │ - 数据可视化  │
└─────────────┘     └───────────────┘     └──────────────┘
                                                │
                                          ┌───────────────┐
                                          │ 数据源        │
                                          │ - MySQL数据库 │
                                          └───────────────┘

3. 核心功能模块

3.1 大模型集成模块

负责与ModelScope大模型平台的对接,使用OpenAI兼容接口进行通信。

核心配置示例:

llm_cfg = {
    'model': 'Qwen/Qwen3-8B',
    'api_key': MODEL_SCOPE_API_KEY,
    'base_url': MODEL_SCOPE_BASE_URL,
    'enable_thinking': True,
    'tool_choice': 'auto'
}

3.2 SQL查询与可视化模块

系统的核心功能实现,负责执行SQL查询并自动生成可视化图表。

核心代码结构:

@register_tool('exc_sql')
class ExcSQLTool(BaseTool):
    """SQL查询工具,执行传入的SQL语句并返回结果,并自动进行可视化"""
    description = '对于生成的SQL,进行SQL查询,并自动可视化'
    parameters = [{'name': 'sql_input', 'type': 'string', 'description': '生成的SQL语句', 'required': True}]

    def call(self, params: str, **kwargs) -> str:
        # 执行SQL查询
        # 处理结果并生成Markdown表格
        # 自动推断字段并生成可视化图表
        # 返回包含表格和图表的Markdown格式文本

3.3 用户交互模块

系统提供两种交互模式:

3.3.1 Web图形界面

使用qwen-agent提供的WebUI组件,基于Gradio构建。

def app_gui():
    """图形界面模式"""
    bot = init_agent_service()
    chatbot_config = {
        'prompt.suggestions': [示例问题列表],
        'title': '智能门票助手'
    }
    WebUI(bot, chatbot_config=chatbot_config).run()
3.3.2 终端交互模式

提供命令行交互界面,支持连续对话和历史记录管理。

def app_tui():
    """终端交互模式"""
    bot = init_agent_service()
    messages = []
    # 主循环处理用户输入

4. 关键类与函数

4.1 核心类

ExcSQLTool

功能:执行SQL查询并生成可视化图表

参数

  • sql_input:要执行的SQL语句
  • database:数据库名称(可选,默认为’ubr’)

返回值:包含查询结果表格和可视化图表的Markdown格式文本

Assistant

功能:初始化门票助手,配置大模型和可用工具

参数

  • llm:大模型配置
  • name:助手名称
  • description:助手描述
  • system_message:系统提示词
  • function_list:可用工具列表

4.2 辅助函数

get_session_id

功能:生成会话唯一标识符,用于会话隔离

init_agent_service

功能:初始化大模型配置和助手实例

5. 数据库设计

系统连接到MySQL数据库,主要查询tkt_orders表:

CREATE TABLE tkt_orders (
    order_time DATETIME,     -- 订单日期
    account_id INT,          -- 预定用户ID
    gender VARCHAR(10),      -- 使用人性别
    age INT,                 -- 年龄
    province VARCHAR(30),    -- 使用人省份
    SKU VARCHAR(100),        -- 商品SKU名
    sales_channel VARCHAR(20), -- 销售渠道
    order_value DECIMAL(10,2), -- 订单金额
    quantity INT             -- 商品数量
);

6. 部署与配置

6.1 环境变量配置

系统依赖以下环境变量:

  • ModelScope_Api_Key:ModelScope平台的API密钥
  • ModelScope_Base_Url:ModelScope API的基础URL(可选,默认为’https://api-inference.modelscope.cn/v1’)

6.2 运行模式

系统支持两种运行模式,通过修改主函数中的调用切换:

if __name__ == '__main__':
    app_gui()      # 图形界面模式(默认)
    # app_tui()    # 终端交互模式

6.3 日志系统

系统配置了完善的日志记录,同时输出到文件和控制台。

7. 典型用例

7.1 销售量统计

用户提问:“2023年4、5、6月一日门票,二日门票的销量多少?帮我按照周进行统计”

系统流程:生成SQL → 执行查询 → 生成按周统计的销售数据图表

7.2 地域分析

用户提问:“2023年7月的不同省份的入园人数统计”

系统流程:生成按省份分组的SQL → 执行查询 → 生成省份分布柱状图

7.3 销售渠道分析

用户提问:“帮我查看2023年10月1-7日销售渠道订单金额排名”

系统流程:生成按销售渠道分组的SQL → 执行查询 → 生成销售渠道排名柱状图

8. 后续优化考量

8.1 错误处理增强

细化错误类型和处理策略,区分数据库连接错误、SQL语法错误等。

8.2 参数验证增强

增加对SQL输入的安全性检查,防止SQL注入攻击。

8.3 数据缓存机制

为频繁查询的结果添加缓存机制,提高响应速度。

8.4 图表生成优化

根据数据类型自动选择合适的图表类型,增强图表生成的健壮性和美观度。

9. 总结

门票助手系统是一个功能完整的智能数据分析应用,通过整合大语言模型的自然语言理解能力、SQL查询和数据可视化技术,为用户提供了直观、便捷的门票销售数据分析工具。系统架构清晰,代码组织合理,具有良好的可维护性和扩展性。

Q & A

Q:在部署一些本地化的工程的时候,一般的流程大概是怎样的
1)大模型本地化
Qwen3-32B
2)数据库连接
MySQL8.0, Redis, ES
3)单点登录

Q:我想开发智能客服,用于电商售后,现有学习的知识可以做吗,还需要哪些技术点
可以!
RAG,大模型选择 qwen-flash,业务场景(和AI进行交流,梳理业务场景和方案)

Q:为什么要开发 LLM应用,而不是直接用 DeepSeek网页
Function Call (高德天气、联网搜索、画图,… )
AI代码上生产必须一行一行审才放心

Q:为什么不直接调用。反而交给大模型调用
直接调用,传什么参数呢?(我们需要根据用户的提问,理解提取这个参数)
明天北京天气怎么样?
今天大连天气怎么样?

location, start_time => 大模型提参
大模型在Function Call中的作用:
1)理解用户的需求,选择适合的 Function Call
2)提取适合参数

Q:我问的其实就是说我们用function calling的时候都要去各种接口去申请账号吗
1)第三方服务,需要的
比如高德地图,墨迹天气
2)自己定义
send_email

个人调用不收,有免费限制
让大模型做决定,而不是写死

Q:这种调用和api调用有什么区别吗?
api调用 就是 LLM Function call中的一部分
LLM 交互,项目经理

可以用大模型再做二次的处理?

Q:LangChain 的tools就像包装好的functions 对吗?
是的

Q:function call需要模型支持,意思是不是需要大模型经过强化学习,返回function call需要的格式才叫做支持。是这样理解的吗
DeepSeek-V3, DeepSeek-R1 最早的版本是不支持Function Call
ChatGPT,
LangChain提出了function call, tool call

Q:大模型先语义理解,然后加工成json格式,接着传参么
对的

Q:function call与MCP在使用上有什么区别?
function call是给指定大模型提供的内部接口
MCP 是所有大模型提供的公共服务

Q:为什么要让LLM自己决定调用工具?这样会不会每次的输出不稳定?
LLM的好处和不足:
1)不足:
不稳定,这次调用 高德天气,下次可能调用 墨迹天气
2)好处:
因为用户的需求不是固定,问的问题 各种各样
LLM 泛化能力强

Q:和agent tool区别是啥
都是tool,LLM输出的reponse,需要自己解析
agent tool,在agent中 已经封装好了解析

Q:大模型怎么知道需要返回什么参数代表调用什么模型,是约定好了的吗?
输入参数 是需要告诉LLM
输出参数 LLM不需要提前知道,只要你将结果(可以是String,也可以是JSON)返回给LLM即可

Q:是不是langchain开发,就没有必要用function call了,就用langchain自身的tools。
langchain自己的tools是已经开发好的工具
如果我们想要打造自己的tool,需要自己定义
也可以用prompt稳定

Q:没有实现的tools怎么办,比如自己做的本地方法
高代码 开发这个 tool
比如 你想做股票价格的预测,你可以写一个 股票价格预测的函数,传入 股票代码,未来N天
定义函数的 输入和输出

Q:Temperature 设置得越低,是不是得到的置信度越高?
是的
大模型是一个概率性的生成工具,它学习了非常多的样本
Temperature 设置得越低答案越保守

Q:LangChain 的tools就像包装好的functions 对吗?
是的

Q:有function call的话要比没有多一次API call到大模型吧
AI native

Q:正常业务复杂点,查询肯定需要查视图,提示词里面怎么处理
将创建好的视图SQL 放到system prompt中

Q:调用千问和调用千问agent 主要区别是什么
qwen LLM 就是一堆参数,文本进,文本出
qwen-agent:理解成为一个"人",它的大脑(做决策,做理解)由qwen LLM来负责
tool
qwen-agent = qwen+ (tool + 知识库+开场白+gui)

Q:千问agent可以调用其他网站的API吗?
可以的

Q:查到数据以后的话术是LLM自己组织的语言吗?还是代码里要求LLM去解读数据
自己组织,LLM = 项目经理

Q:function call算不算简单的agent
Agent = 大而全的人
function call 是其中的一种能力

Q:exc_sql 与EXCTOOLSQL类是什么关系
exc_sql 是一个名称,在qwen-agent中的 工具名
EXCTOOLSQL 是代码实现

Q:在示例中, QWen好像也封装了一个类似LangChain的功能,QWen作为核心LLM,再附加一些工具类/LLM,内部实现是不是也是基于LangChain的?
功能和LangChain类似,但不是LangChain

Q:量化交易动不动就是投入几十亿,不是有了AI大模型就行吧
量化交易 是通过数据决策的,这里是传统AI
AI大模型 帮我们分析理解新闻

Q:不同的大模型 调用 function calling 的写法 格式 是不是不一样?如果不用dashscop 调用api 而是调用我本地部署的qwen 怎么写
qwen 都是一样的
openai 里面的function call的写法按照openai的写法(JSON格式的约束不同)

Q:每次调用大模型的时候都需要把所有的工具传给他吗?那不是很费token
传给它的是 工具的名称,参数的定义

Q:微服务的开发中,一般都要求功能解耦,方便维护。刚刚的例子表明大模型的开发中这种模式未必最优。那未来的开发中,如何平衡功能解耦与减少用大模型传递大量参数呢?
1)功能相对独立
2)如果功能A => 功能B,那么可以把 功能A和功能B 合并变成一个大的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值