实验元数据 (Meta Data)
实验编号/标题:例如:LLM-ReAct 搜索 Agent 实验
日期:2026-02-23
所属领域/标签:例如:#LLM #ReAct
🎯 实验前:假设与目标 (Plan)
当前问题 (Problem):理解 Function Calling / Tool Use、ReAct 推理循环、Agent 的核心工作机制
实验目标 (Objective):一个能使用搜索引擎和计算器回答复杂问题的 Agent。比如:“今年诺贝尔物理学奖得主的年龄加起来是多少?
🧪 实验中:执行步骤与变量 (Do)
记录“我到底做了什么”。如果是代码,粘贴关键片段;如果是实物操作,记录参数。
准备工作/工具:
项目结构
| |
控制变量 (Variable):
不变的量:(例:目标网址、抓取频率)
改变的量 (测试点):(例:User-Agent 字符串,IP代理池)
执行步骤 (Log):
工具基类与注册机制
为什么需要工具注册机制? 在真实 Agent 中,工具可能有几十个。手动维护工具列表容易出错。注册机制让"添加新工具"变成"写一个类并注册”。
| |
实现具体工具
搜索工具:
| |
计算器工具
| |
天气工具:
| |
核心 Agent ReAct 循环
| |
组装与命令行入门
| |
👁️ 实验后:现象与数据 (Check)
网络搜索工具
天气查询工具
🧠 深度复盘:分析与结论 (Act)
Q: 解释一下 Tool Use / Function Calling 的工作原理? A: LLM 本身不执行工具。我们在 API 请求中传入工具的 schema(名称、描述、参数定义),模型根据用户问题判断是否需要调用工具。如果需要,模型返回一个包含工具名和参数的 JSON 块(tool_use),我们的代码负责执行对应函数,然后把结果(tool_result)发回给模型。模型看到结果后决定是否需要继续调用工具或给出最终回答。整个过程是一个循环。
Q: ReAct 和 Chain-of-Thought 有什么区别? A: Chain-of-Thought 只让模型"想"(纯推理),ReAct 让模型"边想边做"——在推理过程中穿插工具调用获取真实信息。CoT 适合纯逻辑推理任务,ReAct 适合需要外部信息或执行操作的任务。实际中 Agent 几乎都用 ReAct 模式。
Q: Agent 循环中最容易出问题的地方是什么? A: 四个常见问题:(1) 无限循环——模型反复调用同一工具但得不到满意结果,需要 max_iterations 兜底;(2) 消息格式错误——tool_result 的 tool_use_id 必须与 tool_use 的 id 匹配,否则 API 报错;(3) 上下文膨胀——多轮工具调用后消息过长,超过上下文窗口或成本过高;(4) 工具描述不清——模型选错工具或传错参数。
Q: 如何设计好的 Tool Schema? A: 三个要点:(1) description 要明确说明工具的使用场景和限制,而不是只说功能(“当需要查询实时信息时使用” vs “搜索工具”);(2) 参数描述要包含示例(“搜索关键词,如 ‘2025 Nobel Prize’");(3) 工具数量多时要避免功能重叠,否则模型容易混淆选择。
Q: ReAct 模式有什么局限?适合什么场景? A: 局限:(1) 每一步都是贪心决策,缺乏全局规划能力;(2) 复杂任务可能需要很多轮迭代,成本高且可能迷失方向。适合场景:问题可以分解为"搜索-处理-回答"的信息检索任务、需要实时数据的问答。不适合的场景:需要先制定详细计划再执行的复杂任务(这时用 Plan-and-Execute 模式)。
下一步行动 (Next Actions):
✅ 验证通过,纳入标准流程。
🔄 验证失败,修改假设,开启下一次实验(EXP-002)。
❓ 产生新问题:[记录新问题]


