| 大家好,我是工藤学编程 🦉 | 一个正在努力学习的小博主,期待你的关注 |
|---|---|
| 实战代码系列最新文章😉 | C++实现图书管理系统(Qt C++ GUI界面版) |
| SpringBoot实战系列🐷 | 【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案 |
| 分库分表 | 分库分表之实战-sharding-JDBC分库分表执行流程原理剖析 |
| 消息队列 | 深入浅出 RabbitMQ-RabbitMQ消息确认机制(ACK) |
| AI大模型 | 零基础学AI大模型之LangChain Tool异常处理 |
前情摘要
1、零基础学AI大模型之读懂AI大模型
2、零基础学AI大模型之从0到1调用大模型API
3、零基础学AI大模型之SpringAI
4、零基础学AI大模型之AI大模型常见概念
5、零基础学AI大模型之大模型私有化部署全指南
6、零基础学AI大模型之AI大模型可视化界面
7、零基础学AI大模型之LangChain
8、零基础学AI大模型之LangChain六大核心模块与大模型IO交互链路
9、零基础学AI大模型之Prompt提示词工程
10、零基础学AI大模型之LangChain-PromptTemplate
11、零基础学AI大模型之ChatModel聊天模型与ChatPromptTemplate实战
12、零基础学AI大模型之LangChain链
13、零基础学AI大模型之Stream流式输出实战
14、零基础学AI大模型之LangChain Output Parser
15、零基础学AI大模型之解析器PydanticOutputParser
16、零基础学AI大模型之大模型的"幻觉"
17、零基础学AI大模型之RAG技术
18、零基础学AI大模型之RAG系统链路解析与Document Loaders多案例实战
19、零基础学AI大模型之LangChain PyPDFLoader实战与PDF图片提取全解析
20、零基础学AI大模型之LangChain WebBaseLoader与Docx2txtLoader实战
21、零基础学AI大模型之RAG系统链路构建:文档切割转换全解析
22、零基础学AI大模型之LangChain 文本分割器实战:CharacterTextSplitter 与 RecursiveCharacterTextSplitter 全解析
23、零基础学AI大模型之Embedding与LLM大模型对比全解析
24、零基础学AI大模型之LangChain Embedding框架全解析
25、零基础学AI大模型之嵌入模型性能优化
26、零基础学AI大模型之向量数据库介绍与技术选型思考
27、零基础学AI大模型之Milvus向量数据库全解析
28、零基础学AI大模型之Milvus核心:分区-分片-段结构全解+最佳实践
29、零基础学AI大模型之Milvus部署架构选型+Linux实战:Docker一键部署+WebUI使用
30、零基础学AI大模型之Milvus实战:Attu可视化安装+Python整合全案例
31、零基础学AI大模型之Milvus索引实战
32、零基础学AI大模型之Milvus DML实战
33、零基础学AI大模型之Milvus向量Search查询综合案例实战
33、零基础学AI大模型之新版LangChain向量数据库VectorStore设计全解析
34、零基础学AI大模型之相似度Search与MMR最大边界相关搜索实战
35、零基础学AI大模型之LangChain整合Milvus:新增与删除数据实战
36、零基础学AI大模型之LangChain+Milvus实战:相似性搜索与MMR多样化检索全解析
37、零基础学AI大模型之LangChain Retriever
38、零基础学AI大模型之MultiQueryRetriever多查询检索全解析
39、零基础学AI大模型之LangChain核心:Runnable接口底层实现
40、零基础学AI大模型之RunnablePassthrough
41、零基础学AI大模型之RunnableParallel
42、零基础学AI大模型之RunnableLambda
43、零基础学AI大模型之RunnableBranch
44、零基础学AI大模型之Agent智能体
45、零基础学AI大模型之LangChain Tool工具
46、零基础学AI大模型之LLM绑定Tool工具实战
47、零基础学AI大模型之LangChain Tool异常处理
本文章目录
- 零基础学AI大模型之CoT思维链和ReAct推理行动
-
- 一、为什么需要CoT/ReAct?痛点太明显了!
- [二、什么是CoT(思维链,Chain of Thought)?让模型"一步步想"](#二、什么是CoT(思维链,Chain of Thought)?让模型“一步步想”)
-
- [2.1 CoT核心机制](#2.1 CoT核心机制)
- [2.2 实战案例:买苹果哪家更划算?](#2.2 实战案例:买苹果哪家更划算?)
- [2.3 CoT的优缺点](#2.3 CoT的优缺点)
- [2.4 CoT典型应用场景](#2.4 CoT典型应用场景)
- [三、什么是ReAct(推理与行动,Reasoning and Acting)?让模型"边想边做"](#三、什么是ReAct(推理与行动,Reasoning and Acting)?让模型“边想边做”)
-
- [3.1 ReAct核心逻辑](#3.1 ReAct核心逻辑)
- [3.2 实战案例:2027年诺贝尔文学奖得主的代表作是什么?](#3.2 实战案例:2027年诺贝尔文学奖得主的代表作是什么?)
- [3.3 ReAct的核心优势](#3.3 ReAct的核心优势)
- [3.4 ReAct典型应用场景](#3.4 ReAct典型应用场景)
- [四、CoT vs ReAct 全方位对比(一张表看懂)](#四、CoT vs ReAct 全方位对比(一张表看懂))
- 五、应用场景指南:该选CoT还是ReAct?
- 六、LangChain实战:分别实现CoT和ReAct
-
- [6.1 实战1:LangChain实现CoT(解决数学推理问题)](#6.1 实战1:LangChain实现CoT(解决数学推理问题))
- [6.2 实战2:LangChain实现ReAct(查询实时天气)](#6.2 实战2:LangChain实现ReAct(查询实时天气))
- 七、常见陷阱与避坑技巧
-
- [7.1 CoT避坑技巧](#7.1 CoT避坑技巧)
- [7.2 ReAct避坑技巧](#7.2 ReAct避坑技巧)
- 八、总结
零基础学AI大模型之CoT思维链和ReAct推理行动
咱们之前学完了Agent智能体和Tool工具,知道了大模型可以通过调用外部工具拓展能力边界。但实际用的时候会发现:面对数学计算、多步骤决策这种复杂任务,模型要么直接给出错误答案,要么"瞎编"信息(也就是咱们说的"幻觉")。这时候该怎么办呢?
今天就来学两个能解决这个问题的核心技术------CoT(思维链) 和ReAct(推理与行动) 。它们就像给大模型装了"思考的脑子"和"动手的手脚",让模型从"直接给答案"变成"像人一样思考+做事",咱们一步步把它们搞懂~
一、为什么需要CoT/ReAct?痛点太明显了!
传统大模型处理问题就像"考试直接写答案"------不管题难不难,都跳过思考过程直接给结果。这在简单问题上还行,但遇到复杂场景就拉胯了:
- 数学推理:比如"买3送1的苹果,买8斤哪家划算",直接算容易漏步骤算错;
- 多步骤决策:比如"订机票+查天气+预约接送机",没法一步步规划执行;
- 实时信息查询:比如"2027年诺贝尔文学奖得主是谁",模型训练数据里没有,只能瞎编;
- 可解释性差:用户不知道答案是怎么来的,没法信任,也没法排查错误。

而CoT和ReAct就是为了解决这些痛点而生------核心需求很简单:让模型展示思考过程,并且能根据情况动态调整策略。
用个通俗的类比理解下:
- 普通模型 → 考试直接写答案(对错全靠蒙,不知道怎么想的);
- CoT → 在试卷上写解题步骤(知其然,也知其所以然);
- ReAct → 边查公式手册边解题(不会就查,确保答案准确)。
二、什么是CoT(思维链,Chain of Thought)?让模型"一步步想"
2.1 CoT核心机制

CoT的本质很简单:通过提示词让模型显式生成推理步骤,再根据步骤得出最终答案。就像咱们解数学题一样,先分析条件、再套用公式、最后计算结果,每一步都写清楚。
它的通用格式是这样的:
问题:...[输入问题]...
思考步骤:
1. 第一步分析(如提取关键数据、明确问题目标)
2. 第二步计算(如公式应用、逻辑推导)
3. ...(更多推理步骤)
最终答案:...[根据步骤得出的结论]...
2.2 实战案例:买苹果哪家更划算?
咱们拿之前的例子实战下,感受下CoT的威力:
问题:A超市苹果每斤5元,买3斤送1斤;B超市同品质苹果每斤6元但买二送一。买8斤哪家更划算?
无CoT回答(可能出错):"A超市划算"(没说为什么,错了也不知道哪错);
CoT推理回答(清晰易懂):
- 先算A超市:买3送1,实际花3斤的钱得4斤,花费3×5=15元 → 折合单价15/4=3.75元/斤;
- 买8斤需要2次活动(4×2=8斤),总花费15×2=30元;
- 再算B超市:买2送1,实际花2斤的钱得3斤,花费2×6=12元 → 折合单价12/3=4元/斤;
- 买8斤需要3次活动(3×3=9斤,多买1斤才能凑够8斤),总花费12×3=36元;
- 对比:30元<36元,所以A超市更划算。
看到没?步骤清晰,就算中间算错了,也能快速找到问题所在~
2.3 CoT的优缺点
优点:
- 简单易实现:不用改模型,只用写提示词定义步骤格式就行;
- 可解释性强:推理过程看得见,用户容易信任;
- 提升复杂推理准确率:尤其是数学、常识推理任务。
局限性:
- 依赖模型内部知识:如果模型本身知识错了(比如认为"太阳绕地球转"),推理链条也会错;
- 处理不了动态信息:没法获取实时数据(比如"今天的气温");
- 步骤冗余:简单问题(比如"1+1等于几")分步反而降低效率。
2.4 CoT典型应用场景
- 教育领域:辅导学生解数学、科学题,展示解题思路;
- 智能客服:回答复杂问题(如"退款流程")时,说明决策依据,增强信任;
- 逻辑推理任务:比如合同条款分析、案件逻辑梳理等。
三、什么是ReAct(推理与行动,Reasoning and Acting)?让模型"边想边做"
如果说CoT是让模型"会思考",那ReAct就是让模型"会思考+会做事"------不仅能推理,还能调用外部工具获取信息、执行操作,完美解决CoT"不懂就瞎想"的问题。
3.1 ReAct核心逻辑
ReAct的核心是循环执行"思考→行动→观察"三步法,直到得出最终答案。简单说就是:先想该做什么,再调用工具做,最后根据工具返回结果调整思路,循环往复。
它的通用格式是这样的:
问题:...[输入问题]...
思考:当前需要解决的问题是...,我需要先做什么...
行动:调用__工具名称__(参数)
观察:工具返回结果...
思考:根据返回结果,下一步需要...
行动:调用__工具名称__(参数)
观察:工具返回结果...
...(循环)
答案:...[最终结论]...
3.2 实战案例:2027年诺贝尔文学奖得主的代表作是什么?

这个问题需要实时信息,CoT解决不了,但ReAct能轻松搞定:
ReAct流程:
- 思考:我需要知道2027年诺贝尔文学奖得主是谁,但我的知识截止到训练数据,得调用搜索工具查;
- 行动:使用DuckDuckGo搜索"2027诺贝尔文学奖获得者";
- 观察:工具返回结果------法国作家安妮·艾诺;
- 思考:现在知道了得主是安妮·艾诺,接下来需要查她的代表作,调用维基百科工具;
- 行动:查询维基百科"安妮·艾诺";
- 观察:工具返回结果------主要作品有《悠悠岁月》《位置》等;
- 答案:2027年诺贝尔文学奖得主是法国作家安妮·艾诺,其代表作是《悠悠岁月》。
再比如"2027年NBA总冠军是哪个队伍",ReAct会调用体育新闻API或搜索引擎获取最新信息,而不是瞎编~
3.3 ReAct的核心优势
- 减少幻觉:通过调用外部工具获取真实数据,不用依赖模型"过时又可能错"的内部知识;
- 处理复杂任务:多步骤、需要交互的任务(如订机票、查物流)都能搞定;
- 透明可解释:思考过程和行动步骤都看得见,能跟踪决策逻辑;
- 拓展能力边界:模型能通过工具做任何事------查天气、算数据、控设备等。
3.4 ReAct典型应用场景
- 知识问答系统:需要实时信息(如财经数据、体育赛事、科技动态)的问答;
- 任务自动化:如预订机票、查询物流、控制智能家居、生成数据分析报告;
- 事实核查:验证信息真伪(如"某明星是否结婚"),避免传播错误信息。
四、CoT vs ReAct 全方位对比(一张表看懂)
很多同学会问:什么时候用CoT,什么时候用ReAct?咱们用一张表把核心区别说透:
| 对比维度 | CoT(思维链) | ReAct(推理与行动) |
|---|---|---|
| 核心组件 | 纯提示工程,无需外部依赖 | Agent智能体 + 外部Tool工具 |
| 数据依赖 | 仅依赖模型内部知识 | 可接入外部数据源/API,获取实时信息 |
| 错误修复 | 单次推理完成,无法动态修正 | 可通过多次"思考-行动"循环修正错误 |
| 适用场景 | 理论推导、数学计算、逻辑推理 | 实时信息查询、多步骤决策、任务自动化 |
| 计算开销 | 低(仅生成文本) | 中高(涉及工具调用、网络请求) |
| LangChain实现 | ChatPromptTemplate + LLMChain | Agent + Tools + AgentExecutor |
| 核心优势 | 简单、透明、无外部依赖 | 实时交互、扩展性强、减少幻觉 |
| 核心缺点 | 无法获取最新信息,知识可能过时 | 依赖工具API稳定性,开发成本稍高 |
五、应用场景指南:该选CoT还是ReAct?
根据上面的对比,给大家总结一套"选型口诀",直接套用就行:
- 纯推理、无实时数据需求(如数学题、逻辑题)→ 用CoT,高效又简单;
- 需实时信息、要调用工具(如查天气、查赛事)→ 用ReAct,准确不瞎编;
- 多步骤决策、需要动态调整(如订行程、做报告)→ 用ReAct,能规划会执行;
- 知识密集型问答(如"孔子是哪年出生的")→ 用CoT,依赖模型知识库足够;
- 复杂问题(如"分析今年GDP数据并生成图表")→ 混合架构(CoT做推理+ReAct调用工具生成图表)。
六、LangChain实战:分别实现CoT和ReAct
咱们用之前学过的LangChain框架,写两段简单代码,实战感受下CoT和ReAct的实现过程(零基础也能看懂)~
6.1 实战1:LangChain实现CoT(解决数学推理问题)
CoT的实现核心是"设计提示词模板,让模型输出推理步骤":
python
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个
6.2 实战2:LangChain实现ReAct(查询实时天气)
ReAct需要结合Agent和Tool,这里用"天气查询工具"举例(需要先安装pyowm库获取天气API):
python
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的区别~
七、常见陷阱与避坑技巧
7.1 CoT避坑技巧
- 避免错误中间步骤:在提示词中加入"检查每一步推理是否正确,再进行下一步";
- 减少步骤冗余:简单问题用"直接给答案",复杂问题才用CoT,可通过Prompt分支控制;
- 规范步骤格式:用数字编号、分号等明确步骤,让模型更容易遵循。
7.2 ReAct避坑技巧
- 处理API调用失败:给工具加重试机制(如
tenacity库),避免一次失败就停摆; - 规范工具命名:工具名称要简洁唯一(如"查天气"而不是"获取气象信息"),避免模型调用错误;
- 控制循环次数:设置
max_iterations参数(如5次),防止模型无限循环调用工具; - 观察执行过程:开启
verbose=True,方便排查"思考错了"还是"工具调用错了"。
八、总结
今天咱们学会了CoT和ReAct两个核心技术,核心要点可以总结为3句话:
- CoT让模型"会思考":显式输出推理步骤,解决复杂推理问题,简单无依赖;
- ReAct让模型"会做事":循环"思考-行动-观察",调用工具获取实时信息,减少幻觉;
- 选型看需求:纯推理用CoT,需工具/实时数据用ReAct,复杂场景混合用。
这两个技术是Agent智能体的核心基础,学好它们,咱们后续做复杂任务自动化(如智能助手、数据分析机器人)就轻松多了~
如果本文对你有帮助,欢迎点赞+关注+收藏🌟 ,有任何问题或实战需求,欢迎在评论区留言交流~ 我是工藤学编程,陪你从零到一玩转AI大模型!🚀