AI学习Day3:从Chatbot到AI Agent,第一次实现DeepSeek Tool Calling
前言
在前两天的学习中,我们完成了:
-
Python环境搭建
-
大模型API调用
-
第一个Chatbot程序
-
Python函数基础
-
对Agent基本概念的理解
但是,一个普通的Chatbot和真正的AI Agent之间还有一个重要区别:
普通Chatbot:
用户输入
↓
大模型生成回答
AI Agent:
用户输入
↓
AI理解任务
↓
选择工具
↓
调用程序执行
↓
返回结果
↓
AI生成最终回答
今天的目标:
让大模型不只是聊天,而是能够主动调用Python函数完成任务。
这就是 Agent 的核心能力之一:
Function Calling(函数调用)
一、为什么需要Function Calling?
之前的程序通常是:
if "计算" in question:
calculator()
例如:
用户:
帮我计算123+456
程序:
发现计算两个字
调用计算函数
这种方式存在问题:
如果用户说:
123加456是多少?
或者:
求一下两个数字的和
程序可能无法判断。
原因:
程序只能匹配固定规则,而AI可以理解自然语言。
所以我们希望:
让AI自己判断:
用户需要计算
↓
调用calculator工具
二、什么是Tool?
在Agent中:
Tool(工具)本质上就是:
一个可以被AI调用的Python函数。
例如:
def calculator(a, b):
return a + b
这个函数就是一个工具。
它拥有:
-
工具名称:calculator
-
功能:计算两个数字
-
输入参数:a、b
-
输出结果:计算结果
未来Agent中的工具可能包括:
calculator()
search_web()
read_pdf()
ocr_image()
translate()
三、Function Calling工作流程
完整流程:
用户
↓
大模型理解需求
↓
决定调用工具
↓
返回工具名称和参数
↓
Python执行函数
↓
返回结果
↓
大模型生成最终回答
例如:
用户:
计算123和456
AI返回:
{
"name":"calculator",
"arguments":{
"a":123,
"b":456
}
}
Python收到后:
执行:
calculator(123,456)
得到:
579
再交给AI组织语言。
四、工具描述(Tool Schema)
问题:
AI怎么知道我们有哪些工具?
答案:
需要告诉AI工具的信息。
例如:
{
"name":"calculator",
"description":"计算两个数字相加",
"parameters":{
"a":"第一个数字",
"b":"第二个数字"
}
}
这相当于给AI提供工具说明书。
五、第一个DeepSeek Function Calling程序
1. 定义工具
def calculator(a,b):
return a+b
这个函数负责实际计算。
2. 注册工具
为了方便管理多个工具,我们创建工具表:
tools_map = {
"calculator": calculator
}
这里使用了Python中的一个重要思想:
函数也可以作为变量保存。
以后增加工具:
tools_map = {
"calculator": calculator,
"multiply": multiply,
"weather": weather
}
程序可以自动找到对应函数。
六、让DeepSeek选择工具
发送工具描述:
tools=[
{
"type":"function",
"function":{
"name":"calculator",
"description":"计算两个数字相加"
}
}
]
然后调用:
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{
"role":"user",
"content":"计算123和456"
}
],
tools=tools
)
此时:
AI不直接计算。
而是返回:
我要调用calculator工具
参数:
a=123
b=456
七、解析AI返回的工具调用
获取:
message=response.choices[0].message
查看:
message.tool_calls
可以得到:
工具名称:
calculator
参数:
{
"a":123,
"b":456
}
八、自动执行工具
获取工具名称:
tool_name = tool_call.function.name
找到函数:
function = tools_map[tool_name]
执行:
result = function(**arguments)
这里使用了Python的新知识:
字典解包 **
例如:
arguments={
"a":123,
"b":456
}
执行:
function(**arguments)
等价于:
function(
a=123,
b=456
)
九、把结果返回给AI
工具执行完成后:
Python:
579
需要告诉AI:
calculator执行结果:
579
然后AI生成:
123和456相加结果是579。
这样,一个完整的Agent闭环就形成了。
十、完整Agent结构
最终结构:
用户
|
↓
DeepSeek
|
↓
Tool Calling
|
↓
Python函数
|
↓
执行结果
|
↓
DeepSeek
|
↓
最终回答
十一、今天学习的新知识
1. Function Calling
让AI调用外部函数完成任务。
2. Tool
AI可以使用的工具。
本质:
Python函数。
3. Tool Registry
工具注册表。
本质:
Python字典。
例如:
{
"工具名称":函数
}
4. Router思想
根据AI返回的工具名称:
自动找到对应函数。
流程:
工具名称
↓
字典查询
↓
执行函数
十二、今天最大的收获
今天最大的变化:
从:
Chatbot
用户问什么
AI回答什么
升级到:
Agent
用户提出目标
AI决定如何完成
调用工具执行
返回结果
这也是未来很多AI应用的基础。
例如:
-
AI文件助手
-
PDF问答Agent
-
OCR识别Agent
-
网络搜索Agent
-
自动化办公Agent
总结
今天通过DeepSeek实现了第一个简单Agent。
虽然代码并不复杂,但理解了AI Agent最核心的思想:
大模型负责理解和决策,程序负责执行具体任务。
后续学习中,会继续扩展更多工具,让Agent拥有更多能力。
更多推荐


所有评论(0)