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 那一层,循环一行不改)。