ReAct 框架: Combining reasoning and action
一、为什么需要 PAL 与 ReAct

- PAL(Program-Aided Language models)
- 通过结构化提示让 LLM 产出可执行的 Python 代码,再由解释器运行获取精确结果。
- 现实场景的复杂性
- 真正的应用往往要 串联多个外部数据源 / API / 业务逻辑。
- 仅靠 PAL 的“写脚本→执行”已无法覆盖。
- ReAct = Reasoning + Action
- 兼顾 链式思考(Chain-of-Thought) 与 行动规划(Action Planning)。
- 先“想”(推理),再“做”(调用预定义工具),循环直到完成任务。
二、ReAct 核心要素
| 要素 | 作用 |
|---|---|
| Thought(思考) | 模型的推理过程,决定下一步行动 |
| Action(行动) | 只能选定 有限动作 列表中的一个 |
| Observation(观察) | 执行 Action 后得到的新信息,反馈给模型继续推理 |
- 循环:Thought → Action → Observation,直到模型认为得到最终答案并执行 finish 动作。
三、示例:杂志创刊年份比较

- 任务:判断 Arthur’s Magazine 与 First for Women 谁创刊更早。
- 动作集(示例 API,仅 3 个)
- search[实体] 在 Wikipedia 搜索词条
- lookup[关键字] 在当前词条内检索包含关键字的下一句
- finish[答案] 输出最终答案,结束
流程概览
① Thought: “分别搜索两本杂志并比较年份”
② Action:search[Arthur's Magazine]
③ Observation: 返回“创刊于1844年”
④ Thought: “知道了第一本,再找第二本”
⑤ Action:search[First for Women]
⑥ Observation: 返回“创刊于1989年”
⑦ Thought: “1844 < 1989,因此 Arthur’s 更早”
⑧ Action:finish[Arthur's Magazine]
四、设计 ReAct 提示(Prompt)

- Instructions(前导说明)
- 描述任务、解释 Thought/Action/Observation 的含义。
- 明确列出可用动作(search、lookup、finish)。
- Few-shot 示例
- 1 个或多个完整的 Thought-Action-Observation-…-finish 样例。
- 帮助模型学会格式。
- 待回答的用户问题
- 置于末尾,触发模型推理。
完整 Prompt = Instructions + 示例 + 问题
五、为什么要限定 Action

- LLM 创造力过剩,可能产出系统无法执行的指令。
- 固定动作集合使应用侧 可解析、可控、可安全执行。
- 通过方括号等统一格式,后端脚本可正则检索并调用对应 API。
六、LangChain 框架

- 组件(Building Blocks)
- Prompt Template、Memory、Tool 等模块化封装。
- Chain
- 将多个组件 顺序 连接,形成固定流程。
- Agent
- 具 决策能力:接收用户输入→决定调用哪些 Tool / Chain。
- 内置 PAL Agent、ReAct Agent 等,直接复用。
- 价值
- 快速原型 & 部署;
- 持续扩展:评估 LLM 中间步骤、加入新 Tool。
七、模型规模的影响
- 大模型 → 对复杂结构化提示(PAL、ReAct)理解能力强,零样本 / 少样本即可工作。
- 小模型 → 可能需要额外微调才能稳定推理与行动规划,增加开发周期。
- 实践策略:
- 先用大模型上线,收集真实交互数据;
- 再蒸馏 / 微调小模型,用于成本更低的推理。
八、实践要点小结
- 先定义动作列表,再写示例 —— 保证可执行、可监控。
- Thought 与 Action 交替 —— 让模型显式展现推理路径,便于调试。
- LangChain 组合 —— Chain 处理线性流程,Agent 处理分支决策。
- 选择合适模型规模 —— 关注推理质量与服务成本的平衡。
通过 ReAct + LangChain,可以让 LLM 不仅“回答问题”,还能 规划并执行多步工作流,为真实应用场景奠定基础。




