本篇目标:这是 AI 从“聊天机器人”进化为“贾维斯”的关键一步。学会如何让 AI 操控你的电脑、读写文件、甚至帮你在网上买票。


一、AI 的手脚:从“嘴炮”到“行动派”

在前面的章节里,我们认识的 AI 都是“嘴炮王者”:

  • 问:“今天北京天气怎么样?”
  • AI:“对不起,我不知道。我的训练数据只到 2024 年。”

因为它没有手脚,没法去互联网上查。

但是,现在的 AI(如 GPT-4o, Claude 3.5, DeepSeek-V3)都有了一个超能力:Tool Calling(工具调用),也叫 Function Calling

核心原理

  1. 你(开发者) 告诉 AI:“我手里有一个工具叫 get_weather(city),能查天气。”
  2. 用户 问 AI:“今天北京天气咋样?”
  3. AI 思考:“用户想查天气 -> 我需要用 get_weather 工具 -> 参数是 Beijing。”
  4. AI 输出一个特殊的 JSON:{"tool": "get_weather", "args": {"city": "Beijing"}}
  5. 你(程序) 拿到这个 JSON,真的去运行这个函数,拿到结果“25度,晴”。
  6. 把结果喂回给 AI。
  7. AI 最终回复用户:“今天北京天气不错,25度,是个大晴天。”

注意:AI 不会自己去运行代码(为了安全),它只是告诉你要运行什么。真正的执行权在你手里。


二、如何定义一个工具?(给 AI 发说明书)

要让 AI 用工具,你得先给它写一份“说明书”。这份说明书通常是用 JSON Schema 写的。

示例:定义一个“计算器”工具

{
  "name": "calculator",
  "description": "用于执行数学计算。当用户询问数学问题时使用。",
  "parameters": {
    "type": "object",
    "properties": {
      "expression": {
        "type": "string",
        "description": "要计算的数学表达式,例如 '2 + 2' 或 '100 * 0.5'"
      }
    },
    "required": ["expression"]
  }
}

关键点

  • name:工具的名字(AI 靠这个引用)。
  • description最重要! 告诉 AI 什么时候该用这个工具。如果你写得不清不楚,AI 就不会用。
  • parameters:告诉 AI 需要提取什么参数。

三、实战流程:一次完整的“工具调用”循环

让我们看看在代码里是怎么跑通的(以 OpenAI 格式为例):

第一步:用户提问

User: “帮我算算 12345 乘以 9876 是多少?”

第二步:AI 决定调用工具

AI 收到问题和工具定义后,不直接回答,而是返回:

Assistant (Tool Call):
name: calculator
arguments: {"expression": "12345 * 9876"}

第三步:程序执行工具

你的代码捕获到这个 Tool Call,在本地运行:

result = 12345 * 9876 # 结果是 121919220

第四步:把结果喂回给 AI

你构造一条新消息发给 AI:

Tool Message:
tool_call_id: call_abc123
content: "121919220"

第五步:AI 生成最终回答

AI 看到结果后,终于可以回复用户了:

Assistant: “12345 乘以 9876 的结果是 121,919,220。”


四、进阶:多步调用与 Agent

如果任务很复杂,AI 可能会连续调用多次工具。

场景:用户问“把这个文件夹里最大的图片发给我。”
AI 的思考链(Chain of Thought)

  1. 调用工具 Alist_files(dir=".") -> 拿到文件列表。
  2. 调用工具 Bget_file_size(file="a.jpg")… 循环查大小。
  3. 比较大小:发现 c.png 最大。
  4. 调用工具 Cemail_file(file="c.png")
  5. 回复用户:“发送成功。”

这就是 Agent(智能体) 的雏形——自主规划、连续执行


五、本篇产出:工具定义模板

以后你想给 AI 加新能力(比如查库存、发邮件),套用这个模板:

tool_definition = {
    "type": "function",
    "function": {
        "name": "[工具英文名,如 stock_checker]",
        "description": "[详细描述:这个工具是干嘛的?什么情况下应该用它?]",
        "parameters": {
            "type": "object",
            "properties": {
                "[参数1]": {
                    "type": "string/integer/boolean",
                    "description": "[参数说明:例如 '股票代码,如 AAPL']"
                },
                "[参数2]": {
                    "type": "string",
                    "description": "[可选参数说明]",
                    "enum": ["option1", "option2"] # 如果只能选固定的值
                }
            },
            "required": ["[参数1]"] # 必填参数列表
        }
    }
}

练习题:为什么 AI 不调用我的工具?

场景:你定义了一个工具 search_database,描述是 Search DB。用户问“查一下张三的订单”,AI 却直接回“我查不到”。

原因分析

  1. 描述太烂Search DB 太简略,AI 不知道这个工具能查“订单”。
  2. 修改建议:把描述改成 “用于查询用户的历史订单信息。当用户询问买过什么、订单状态时使用此工具。”

记住:AI 是很聪明的,但也是很直男的。你必须把工具的用途说得明明白白。


下一步:我们已经让 AI 学会了用计算器和查天气。但在真实世界里,我们处理最多的其实是文档和图片。下一章(卷 1 最终章)我们将学习多模态(Multimodal)——让 AI 长出眼睛,看懂你的 PDF 和截图。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐