这是一个非常专业的问题。简单来说:CoT(思维链)最核心、最直接的作用点就是“提示词(Prompt)”,但在复杂的 Agent 系统中,它也可以作为一种“算法机制”被硬编码在代码逻辑里。
我们可以从以下两个层面来理解 CoT 的作用位置:
这是 CoT 最常见、最直接的用法。你通过在提示词中明确要求模型“展示思考过程”,来激发它内在的推理能力。
Zero-shot CoT(零样本思维链):你只需要在提示词末尾加上一句魔法指令,比如:"Let's think step by step"(让我们一步一步地思考)。这能直接作用于大模型,让它自动输出推理步骤。
Few-shot CoT(少样本思维链):你在提示词中人为提供几个包含“问题 + 详细推理过程 + 最终答案”的示例。模型会模仿这种格式,在回答你的新问题时,也强制自己写出推理过程。
在这个层面上,CoT 完全存在于你写给模型的提示词中。
在构建 Agent 时,如果仅仅依赖提示词让模型自己规划,往往不够稳定。因此,开发者会将 CoT 的思想代码化,作用于 Agent 的执行循环中。
代码层面的强制拆解:在代码里,你不允许模型一次性给出最终答案,而是通过代码逻辑强制它进入一个循环。比如,代码要求模型第一步必须输出 {"thought": "..."},第二步输出 {"action": "..."}。
结构化输出解析:Agent 的框架(如 LangChain)会拦截模型的输出,用正则表达式或 JSON 解析器提取出它的“思考过程(Thought)”,然后把这个思考过程作为下一步的输入,再喂给模型。
在这个层面上,CoT 变成了一种控制流(Control Flow),作用于你编写的 Agent 代码和调度逻辑中。
如果你只是想让一个普通的对话模型变聪明一点,CoT 作用于提示词。
如果你在构建一个需要精准控制、调用工具的 Agent,CoT 既作用于提示词(规范模型的思考格式),也作用于代码逻辑(管理思考的流转与执行)。