在之前的学习中,AI 始终是在“说话”。哪怕它说得再对,如果你不手动复制它的代码去运行,或者不手动把它的建议录入系统,它依然只是个“清谈客”。
Function Calling(函数调用) 的出现,标志着 LLM 正式向 Agent(智能体) 进化。
1. 什么是函数调用?(指令的反转)
通常是我们给模型指令,但 Function Calling 是模型向系统发回指令。
-
传统对话: * 用户:“查一下今天北京天气。”
- AI:“对不起,我没法实时查天气。”(或通过 RAG 查到旧数据)。
-
带 Tool 的对话:
- 用户:“查一下今天北京天气。”
- AI: (内心 OS) 我不需要直接回答,我应该调用
get_weather这个函数。 - AI 发出请求:
{ "name": "get_weather", "arguments": "{'location': 'Beijing'}" }
2. 工具使用的“四部曲”
这是一个闭环,模型在其中扮演的是“决策者”而非“执行者”。
代码段
graph TD
User((用户: 帮我查股价)) --> LLM[1. LLM 决策: 发现需要 Tool]
subgraph Tool_Definition [工具箱 / Tool Definition]
T1[查询股价函数: 需要参数 symbol]
T2[发送邮件函数]
end
LLM -. 参照工具定义 .-> T1
LLM -- 2. 发出调用请求: query_stock, symbol=AAPL --> Runtime[ 运行环境]
Runtime -- 3. 执行真实代码 --> API[外部 API / 数据库]
API -- 返回结果: 220.50 USD --> Runtime
Runtime -- 4. 结果喂回 --> LLM
LLM -- 最终回答: 苹果目前股价是 220.50 美元 --> Final((用户))
style LLM fill:#69f,stroke:#333
style Runtime fill:#f96,stroke:#333
style T1 fill:#dfd,stroke:#333
3. 工具的定位:Tools vs. Skills
在开发中,我们必须区分这两个概念:
-
Tools (原子工具): 它是“螺丝刀”。比如一个具体的 API 接口,只管干一件事(读文件、调接口)。
-
Skills (复合技能): 它是“组装家具”。一个 Skill 内部可能包含多个 Tools 的调用逻辑。
- 例子: “会议摘要 Skill” 会先调用
Recording_Tool获取音频,再调用Translate_Tool翻译,最后输出摘要。
- 例子: “会议摘要 Skill” 会先调用
4. MCP 协议的介入
在没有 MCP (Model Context Protocol) 之前,开发者要为 OpenAI 写一套工具定义,为 Anthropic 写一套。 MCP 的作用就是: 它统一了 Tool 的描述格式。 你只需要写一个符合 MCP 标准的 Tool Server,不管是哪个模型,都能通过这根“标准数据线”瞬间理解并学会使用你的工具。
加载原理: 当你问 AI “帮我管理 GitHub”时,系统通过 MCP 动态挂载 (Mount) 了相关的 GitHub Tools。模型在这一瞬间,突然“学会”了操作 GitHub。
5. 总结:第五课的心得记录
- AI 是决策者,不是执行者: 模型本身不运行代码,它只是生成调用指令,由外部环境(Harness)执行。
- 描述(Schema)重于一切: 模型怎么知道该用哪个工具?全靠你给工具写的那个
description。如果描述写得烂,模型就会“拿错工具”。 - 闭环才是智能: 只有当执行结果能回传给模型(Observation),模型才能根据结果调整下一步行动。