前言

在前两天的学习中,我们完成了:

  • 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拥有更多能力。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐