ReAct 提示式 协议

别名: ReAct · 文本协议

不声明任何工具 schema,把工具用法写进 system prompt,要求模型按固定文本格式输出 `Thought` / `Action`,harness 再用正则/JSON 解析抠出行动并注入真实的 `Observation`。是原生 tool calling 出现之前的通用后备,也是理解「agent 内核不依赖具体协议」的教学透镜。

它是什么

ReAct 提示式(文本协议)是原生 tool calling 出现之前的通用后备:不声明任何工具 schema,把工具用法写进 system prompt,要求模型按固定文本格式输出 Thought: / Action:(Action 后面跟一个 JSON blob),harness 再用正则/JSON 解析抠出行动、执行后手工拼一条 Observation: 回填,让模型继续推理。

两个经典坑

  • 模型会幻觉 Observation:它在 Action: 之后自己编一个假结果接下去。经典解法是生成时传 stop=["Observation:"] 截断,由 harness 注入真实的工具输出——本质是在跟模型的输出纪律搏斗;
  • 解析脆弱:JSON blob 可能混在 markdown 代码块里、可能带多余字符;解析失败怎么办、参数校验谁来做,全得自己兜。

与原生 tool calling 的取舍

原生 tool calling(第 06 章)把这两件事结构化了:模型返回结构化 tool_calls(名字、参数分开),tool 消息是协议里的一等角色。取舍一句话:结构化协议是生产默认,文本协议是后备与教学透镜——本地小模型、无原生支持的模型上它仍有用武之地;而手写一遍它,最能理解「agent 内核不依赖具体协议」(第 07 章换协议只动 callLlm 那一层,循环一行不改)。

相关词条

出现在这些章节