一、引子:大模型缺的那条腿
上个月接了个活——让 AI 助手能查实时天气和做数学计算。本来以为调个 API 就行,结果发现大模型自己压根做不到。不是模型不够聪明,是它天生缺了一条腿:没法跟外部世界交互。
大模型的知识截止于训练数据的那一刻,它不知道你的数据库里有什么,也没法直接调用外部 API。2024 年 OpenAI 推出 Function Calling 能力之后,这一切才变了。模型不仅能"说话",还能"动手"——调 API、查数据库、发邮件、搜网页。这就是 Agent 架构最核心的基石。
今天我们从零手写一个能自动调用工具的 Agent,不需要任何框架,只要 Python 和一点耐心。
二、Agent 核心逻辑:三步循环
别管那些花哨的名词,Agent 的本质就是一个简单的循环:
| 步骤 | 做什么 | 谁来干 |
|---|---|---|
| 1 思考 | 理解用户问题,决定是否需要调用工具 | LLM |
| 2 调用 | 输出结构化参数(JSON),程序执行对应函数 | 你的代码 |
| 3 反馈 | 把工具执行结果送回 LLM,让它生成最终回答 | LLM + 代码 |
这个三步循环跑一次叫"单轮工具调用",跑多次叫"多轮 Agent"。
很多人把 Agent 和 RAG 搞混,它们的区别其实很清晰:
| 能力维度 | RAG | Agent(Function Calling) |
|---|---|---|
| 检索知识库 | ✅ 向量搜索 | ✅ 可调用搜索 API |
| 操作数据库 | ❌ | ✅ 执行 SQL 或 CRUD |
| 调用外部 API | ❌ | ✅ GET/POST 任意接口 |
| 获取实时数据 | ❌ | ✅ 天气/股票/新闻 |
| 自主决策 | ❌ | ✅ 判断何时调、调哪个工具 |
| 多步推理 | ❌ |