☰
新手小白 Agent 开发第4课:让 AI 学会用工具,Tool Calling 第一步
2026/9/28 20:12:18 网站建设 项目流程

前面三课,我们的程序会聊天、有记忆,但它始终只会「动嘴」——不能查、不能算、不能替你做任何实际操作。

这一课,我们给它装上第一件工具:计算器。做完之后,你的程序就不再只是聊天机器人,而是迈出了 Agent 的第一步。

一、先建立项目结构

现在的项目应该长这样:

my-agent/ │ ├── .venv/ │ ├── main.py │ └── tools.py

其中:

  • main.py负责Agent 的「大脑」(调用模型、协调流程)
  • tools.py负责Agent 的「工具」(真正干活的函数)

这种「大脑」和「手」分离的结构,是 Agent 后面能不断扩展工具的基础。

二、先写一个计算器

打开tools.py:

def calculator(a, b, operation): if operation == "add": return a + b elif operation == "subtract": return a - b elif operation == "multiply": return a * b elif operation == "divide": return a / b else: return "不支持的运算"

先单独测一下。在tools.py末尾加两行:

print(calculator(10, 20, "add")) print(calculator(10, 20, "multiply"))

运行:

python tools.py

看到:

30 200

说明工具本身没问题。然后把这两行测试代码删掉。

三、让 DeepSeek「认识」这个工具

现在是关键:我们不是写if 用户输入里带乘号就调用计算器,而是把工具描述给模型,让它自己决定用不用。

在main.py里这样告诉模型:

tools = [ { "type": "function", "function": { "name": "calculator", "description": "进行数学计算", "parameters": { "type": "object", "properties": { "a": {"type": "number", "description": "第一个数字"}, "b": {"type": "number", "description": "第二个数字"}, "operation": { "type": "string", "enum": ["add", "subtract", "multiply", "divide"], "description": "要执行的运算" } }, "required": ["a", "b", "operation"] } } } ]

这段看着复杂,但不用背。你只要理解,我们是在给模型写一份「说明书」:

我有一个工具,名字叫 calculator, 作用是数学计算, 需要三个参数:a、b、operation, 其中 operation 只能是 add / subtract / multiply / divide。

于是当用户问「100 × 200 等于多少」时,模型就可能输出:

{ "name": "calculator", "arguments": {"a": 100, "b": 200, "operation": "multiply"} }

这就叫Tool Calling(工具调用)。

四、让模型做决定,然后真正执行

接着把请求发出去,并检查模型是否要求调用工具:

messages = [ {"role": "user", "content": "12345 × 6789 等于多少?"} ] response = client.chat.completions.create( model="deepseek-chat", messages=messages, tools=tools ) message = response.choices[0].message if message.tool_calls: tool_call = message.tool_calls[0] function_name = tool_call.function.name arguments = json.loads(tool_call.function.arguments) if function_name == "calculator": result = calculator( arguments["a"], arguments["b"], arguments["operation"] ) print("计算结果:", result) else: print(message.content)

运行后你会看到:

计算结果: 83810205

五、一个必须理解的分工:模型思考,Python 执行

这里有一个特别容易误解的点:DeepSeek 并没有真正执行 Python 计算。

它只是告诉我们:「我想使用这个工具,参数是这些。」真正去调用calculator的,是我们写的 Python 代码。

┌─────────────┐ │ DeepSeek │ 负责思考、选择工具 └──────┬──────┘ │ Tool Call(我要用 calculator) ↓ ┌─────────────┐ │ Python │ 真正执行工具 └─────────────┘

一句话概括:模型负责「想」,代码负责「做」,两者各司其职。

六、对比一下,你就懂差在哪了

维度聊天机器人会 Tool Calling 的程序
能做的事只会生成文字能计算、查询、调用 API
谁决定用不用工具无(没工具)模型自己决定
判断逻辑无由模型生成,非硬编码
本质文本生成向 Agent 靠近

一句话概括:给模型一件工具,它就从「回答者」变成了「行动者」。

总结

这一课的核心:模型负责决策,Python 负责执行。我们用一个计算器,跑通了 Agent 最关键的机制——Tool Calling。

但现在还有个问题:我们的代码只会执行一次工具就结束。如果任务需要「先搜索、再计算」,一次根本不够。下一课,我们就来手搓整个系列最重要的东西——Agent Loop。


下一课预告

第5课:手搓 Agent Loop,让 AI 自己循环执行工具。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询