AI 大模型核心技术:CoT 思维链与 ReAct 推理行动
AI 大模型在处理复杂任务时常面临幻觉或逻辑错误问题。CoT(思维链)通过引导模型显式输出推理步骤提升准确率,适用于数学计算等纯推理场景。ReAct(推理与行动)结合思考、行动与观察循环,利用外部工具获取实时信息,解决知识过时问题。对比两者差异,并通过 LangChain 框架提供 Python 代码实战,展示如何实现数学推理与天气查询,帮助开发者根据需求选择合适的技术路径。

AI 大模型在处理复杂任务时常面临幻觉或逻辑错误问题。CoT(思维链)通过引导模型显式输出推理步骤提升准确率,适用于数学计算等纯推理场景。ReAct(推理与行动)结合思考、行动与观察循环,利用外部工具获取实时信息,解决知识过时问题。对比两者差异,并通过 LangChain 框架提供 Python 代码实战,展示如何实现数学推理与天气查询,帮助开发者根据需求选择合适的技术路径。

咱们之前学完了 Agent 智能体和 Tool 工具,知道了大模型可以通过调用外部工具拓展能力边界。但实际用的时候会发现:面对数学计算、多步骤决策这种复杂任务,模型要么直接给出错误答案,要么'瞎编'信息(也就是咱们说的'幻觉')。这时候该怎么办呢?
今天就来学两个能解决这个问题的核心技术——CoT(思维链) 和ReAct(推理与行动) 。它们就像给大模型装了'思考的脑子'和'动手的手脚',让模型从'直接给答案'变成'像人一样思考 + 做事',咱们一步步把它们搞懂~
传统大模型处理问题就像'考试直接写答案'——不管题难不难,都跳过思考过程直接给结果。这在简单问题上还行,但遇到复杂场景就拉胯了:
可解释性差:用户不知道答案是怎么来的,没法信任,也没法排查错误。

而 CoT 和 ReAct 就是为了解决这些痛点而生——核心需求很简单:让模型展示思考过程,并且能根据情况动态调整策略。
用个通俗的类比理解下:

CoT 的本质很简单:通过提示词让模型显式生成推理步骤,再根据步骤得出最终答案。就像咱们解数学题一样,先分析条件、再套用公式、最后计算结果,每一步都写清楚。
它的通用格式是这样的:
问题:...[输入问题]...
思考步骤:
1. 第一步分析(如提取关键数据、明确问题目标)
2. 第二步计算(如公式应用、逻辑推导)
3. ...(更多推理步骤)
最终答案:...[根据步骤得出的结论]...
咱们拿之前的例子实战下,感受下 CoT 的威力:
问题:A 超市苹果每斤 5 元,买 3 斤送 1 斤;B 超市同品质苹果每斤 6 元但买二送一。买 8 斤哪家更划算?
无 CoT 回答(可能出错):'A 超市划算'(没说为什么,错了也不知道哪错);
CoT 推理回答(清晰易懂):
看到没?步骤清晰,就算中间算错了,也能快速找到问题所在~
优点:
局限性:
如果说 CoT 是让模型'会思考',那 ReAct 就是让模型'会思考 + 会做事'——不仅能推理,还能调用外部工具获取信息、执行操作,完美解决 CoT'不懂就瞎想'的问题。
ReAct 的核心是循环执行'思考→行动→观察'三步法,直到得出最终答案。简单说就是:先想该做什么,再调用工具做,最后根据工具返回结果调整思路,循环往复。
它的通用格式是这样的:
问题:...[输入问题]...
思考:当前需要解决的问题是...,我需要先做什么...
行动:调用__工具名称__(参数)
观察:工具返回结果...
思考:根据返回结果,下一步需要...
行动:调用__工具名称__(参数)
观察:工具返回结果...
...(循环)
答案:...[最终结论]...

这个问题需要实时信息,CoT 解决不了,但 ReAct 能轻松搞定:
ReAct 流程:
再比如'2027 年 NBA 总冠军是哪个队伍',ReAct 会调用体育新闻 API 或搜索引擎获取最新信息,而不是瞎编~
很多同学会问:什么时候用 CoT,什么时候用 ReAct?咱们用一张表把核心区别说透:
| 对比维度 | CoT(思维链) | ReAct(推理与行动) |
|---|---|---|
| 核心组件 | 纯提示工程,无需外部依赖 | Agent 智能体 + 外部 Tool 工具 |
| 数据依赖 | 仅依赖模型内部知识 | 可接入外部数据源/API,获取实时信息 |
| 错误修复 | 单次推理完成,无法动态修正 | 可通过多次'思考 - 行动'循环修正错误 |
| 适用场景 | 理论推导、数学计算、逻辑推理 | 实时信息查询、多步骤决策、任务自动化 |
| 计算开销 | 低(仅生成文本) | 中高(涉及工具调用、网络请求) |
| LangChain 实现 | ChatPromptTemplate + LLMChain | Agent + Tools + AgentExecutor |
| 核心优势 | 简单、透明、无外部依赖 | 实时交互、扩展性强、减少幻觉 |
| 核心缺点 | 无法获取最新信息,知识可能过时 | 依赖工具 API 稳定性,开发成本稍高 |
根据上面的对比,给大家总结一套'选型口诀',直接套用就行:
咱们用之前学过的 LangChain 框架,写两段简单代码,实战感受下 CoT 和 ReAct 的实现过程(零基础也能看懂)~
CoT 的实现核心是'设计提示词模板,让模型输出推理步骤':
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain
# 1. 初始化大模型(这里用 OpenAI,也可以换成本地化模型如 Llama3)
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
# 2. 设计 CoT 提示词模板:明确要求输出推理步骤
cot_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个数学老师,解决数学问题时,先分步骤写出推理过程,再给出最终答案。"),
("human", "问题:{question}")
])
# 3. 构建 LLMChain
cot_chain = LLMChain(llm=llm, prompt=cot_prompt, verbose=True)
# verbose=True 查看思考过程
# 4. 运行链,解决问题
question = "小明有 5 个苹果,小红给了他 3 个,他又吃了 2 个,最后还剩几个?"
result = cot_chain.run(question)
# 输出结果
print("CoT 推理结果:")
print(result)
运行结果(会输出推理步骤):
> Entering new LLMChain chain...
Prompt after formatting: [SystemMessage(content='你是一个数学老师,解决数学问题时,先分步骤写出推理过程,再给出最终答案。'), HumanMessage(content='问题:小明有 5 个苹果,小红给了他 3 个,他又吃了 2 个,最后还剩几个?')]
> Finished chain.
CoT 推理结果:
1. 首先,小明原本有 5 个苹果,小红给了他 3 个,此时苹果数量为 5 + 3 = 8 个;
2. 接着,小明吃了 2 个苹果,剩余苹果数量为 8 - 2 = 6 个;
最终答案:6 个
ReAct 需要结合 Agent 和 Tool,这里用'天气查询工具'举例(需要先安装 pyowm 库获取天气 API):
from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.chat_models import ChatOpenAI
# 1. 初始化大模型
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
# 2. 加载工具:这里用"openweathermap"(需要先在环境变量配置 API_KEY)
tools = load_tools(["openweathermap"], llm=llm)
# 3. 初始化 ReAct Agent
react_agent = initialize_agent(
tools,
llm,
agent=AgentType.REACT_DOCSTORE, # ReAct 类型 Agent
verbose=True # 显示思考、行动、观察过程
)
# 4. 运行 Agent,查询实时天气
result = react_agent.run("查询北京现在的天气,包括温度和天气状况。")
# 输出结果
print("ReAct 查询结果:")
print(result)
运行结果(会显示'思考→行动→观察'循环):
> Entering new AgentExecutor chain...
I need to find the current weather in Beijing, including temperature and weather conditions. I should use the openweathermap tool.
Action: openweathermap
Action Input: Beijing
Observation: Current weather in Beijing: clear sky, temperature: 25°C
Thought: I have obtained the current weather in Beijing. The weather is clear sky and the temperature is 25°C. I can now answer the question.
Final Answer: 北京现在的天气为晴,气温 25 摄氏度。
> Finished chain.
ReAct 查询结果:
北京现在的天气为晴,气温 25 摄氏度。
是不是很简单?通过这两段代码,就能直观感受到 CoT 和 ReAct 的区别~
tenacity 库),避免一次失败就停摆;max_iterations 参数(如 5 次),防止模型无限循环调用工具;verbose=True,方便排查'思考错了'还是'工具调用错了'。今天咱们学会了 CoT 和 ReAct 两个核心技术,核心要点可以总结为 3 句话:
这两个技术是 Agent 智能体的核心基础,学好它们,咱们后续做复杂任务自动化(如智能助手、数据分析机器人)就轻松多了~

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online