5815 字
约 19 分钟
5
AI 的“推理效果”到底是怎么实现的?从 CoT、ReAct 到流式思考过程

AI 的“推理效果”到底是怎么实现的?从 CoT、ReAct 到流式思考过程

如果你用过现在比较新的 AI 产品,应该都见过这样的效果。

你问:

小明有 10 个苹果,送给小红 3 个,
又买了 5 个,现在有多少个?

AI 不会马上甩给你一句:

12 个。

而是先出现:

正在思考……

然后可能看到:

分析题目中的数量变化……

初始有 10 个苹果,
送出 3 个后剩余 7 个,
之后又买了 5 个……

最后再显示:

最终答案:12 个苹果。

这种效果我们一般会称为:

Reasoning,也就是大模型推理。

但是这里有一个特别容易搞混的问题:

页面上看到的“思考过程”,和模型内部真正发生的推理,并不一定是同一个东西。

所以这一篇我们不讨论某一个具体模型怎么接入,而是把 AI 的“推理效果”从原理到工程实现完整讲明白。


一、先搞明白:什么叫大模型推理?

最普通的大模型回答问题,可以简单理解成:

问题
 ↓
大模型
 ↓
答案

例如:

用户:
1 + 1 等于多少?

模型:
2

这种任务非常简单,模型几乎可以直接得到答案。

但如果问题变成:

一个商品原价 800 元,
先涨价 20%,
然后在涨价后的基础上打八折,
最终价格是多少?

模型就需要处理多个步骤。

可以把解决过程抽象成:

理解问题
    ↓
拆解问题
    ↓
计算中间结果
    ↓
检查结果
    ↓
得到最终答案

这就是我们常说的:

Reasoning

也就是:

模型不是直接输出结果,而是在得到结果之前进行一定程度的多步骤计算、规划、搜索、验证或反思。

早期大语言模型主要通过 Prompt 引导产生这种能力;后来越来越多模型直接在训练阶段强化推理能力,让模型在回答之前拥有专门的推理计算过程。


二、最经典的推理方式:Chain of Thought

说到大模型推理,第一个绕不开的概念就是:

Chain of Thought

简称:

CoT

中文通常叫:

思维链 / 思维链推理。

它的核心思想非常简单:

不要让模型一步跳到答案,而是把复杂问题拆成多个中间步骤。

经典的 Chain-of-Thought 工作表明,让模型生成中间推理步骤能够显著改善一些算术、常识和符号推理任务的表现。(arXiv )

例如普通回答可能是:

问题:
小明有 10 个苹果,
送出去 3 个,
然后又买了 5 个,
现在有多少个?

答案:
12 个。

加入 CoT 以后:

第一步:
小明原来有 10 个苹果。

第二步:
送出去 3 个。

10 - 3 = 7

第三步:
又买了 5 个。

7 + 5 = 12

最终答案:
12 个。

整个过程变成:

问题
 ↓
步骤 1
 ↓
步骤 2
 ↓
步骤 3
 ↓
最终答案

这就是最基础的推理。


三、为什么“多想几步”可能会更准确?

因为复杂问题经常不是:

问题 → 答案

这么简单。

而是:

问题
 ↓
子问题 A
 ↓
子问题 B
 ↓
子问题 C
 ↓
答案

例如让 AI 编写一个登录系统。

如果直接让模型:

给我写一个登录系统

模型很可能想到哪里写到哪里。

而一个更合理的推理过程可能是:

分析需求
 ↓
设计用户表
 ↓
设计登录接口
 ↓
密码校验
 ↓
Token 生成
 ↓
权限验证
 ↓
异常处理
 ↓
最终代码

当模型能够先规划、再执行时,在复杂任务上的表现通常会更加稳定。

这也是为什么现在很多推理模型会花更多计算量在回答之前


四、市面上常见的大模型推理方法

现在大模型领域里的“推理”,已经远远不只有 CoT。

常见思路可以这样理解:

方法 核心思想 适合场景
CoT 一步一步推理 数学、逻辑、代码
Self-Consistency 多想几种答案,再投票 数学、推理题
ReAct 一边思考,一边使用工具 Agent、搜索、查数据库
ToT 同时探索多条推理路线 规划、复杂决策
Self-Refine 回头检查并修改自己的答案 写作、代码、复杂任务
Verifier 单独验证推理步骤或答案 数学、代码、安全场景
Tool-Augmented Reasoning 使用搜索、代码、数据库辅助推理 实际业务 AI
Test-Time Compute 给模型更多推理计算量 高难度问题

下面分别看看。


五、Self-Consistency:一次想不准,那就多想几次

普通 CoT:

问题
 ↓
一条推理路线
 ↓
答案

但有一个问题。

如果:

第二步想错了

那么后面很可能全部错。

所以有人提出一个很直观的办法:

同一个问题,让模型走多条不同的推理路线。

例如:

                → 推理路线 A → 42
问题 →          → 推理路线 B → 42
                → 推理路线 C → 39
                → 推理路线 D → 42

最终:

42 出现 3 次
39 出现 1 次

选择:

42

这种方法叫:

Self-Consistency

它不是简单使用贪心生成的一条推理路径,而是采样多个推理路径,再选择最一致的答案。原始论文在多个数学和常识推理基准上观察到了明显提升。(arXiv )

简单理解:

一个 AI 想一次

升级成:

让 AI 想好几遍
 ↓
比较结果
 ↓
选最靠谱的

当然代价也很明显:

请求次数 ↑
Token ↑
延迟 ↑
成本 ↑

所以一般用于:

复杂数学
高价值决策
代码验证
高难度推理

而不会拿它回答:

你好

这种简单问题。


六、ReAct:一边思考,一边行动

如果你准备学习 AI Agent,那么:

ReAct

是一个非常重要的概念。

它的名字来自:

Reasoning + Acting

也就是:

推理 + 行动

ReAct 的核心不是:

想完以后再干活

而是:

想一下
 ↓
做一个动作
 ↓
看看结果
 ↓
再想一下
 ↓
再行动

ReAct 论文把 reasoning 与 action 交错起来,让模型能够根据工具或环境返回的信息不断更新计划。(arXiv )

例如用户问:

今天北京天气怎么样?
适不适合跑步?

模型自己并不知道今天的实时天气。

于是整个过程可能变成:

用户问题
 ↓
需要知道北京实时天气
 ↓
调用天气 API
 ↓
得到:
22℃,小雨,空气质量良好
 ↓
重新分析
 ↓
有降雨,不太适合户外跑步
 ↓
最终回答

这就是:

Reason
 ↓
Action
 ↓
Observation
 ↓
Reason
 ↓
Action

以后我们做:

Agent

MCP

Function Calling

搜索 Agent

数据库 Agent

自动化 Agent

本质上大量都会用到这种思想。


七、Tree of Thoughts:不要只想一条路

CoT 基本是一条直线:

A
 ↓
B
 ↓
C
 ↓
D

但是现实中的复杂问题,可能有很多解决路线。

例如:

怎么从上海去北京?

我们可以考虑:

               → 高铁
               → 飞机
问题 →         → 开车
               → 夜间卧铺

然后再分别评估:

时间
费用
舒适度
天气
距离

这就形成了一棵树。

所以出现了:

Tree of Thoughts

简称:

ToT

ToT 不再局限于单一路径,而允许模型探索多个候选“thought”,评估它们,并在需要时继续搜索或者回退。(arXiv )

简单理解:

                路线 A
              ↗
问题 → 路线 B
              ↘
                路线 C

模型会:

生成候选方案
 ↓
评估候选方案
 ↓
淘汰差方案
 ↓
继续展开好方案
 ↓
得到答案

这种方式尤其适合:

复杂规划

解谜

策略问题

代码架构

多方案决策

当然代价也非常明显:

很烧 Token。

所以真实项目一般不会所有问题都使用 ToT。


八、Self-Refine:让 AI 自己检查 AI

还有一种非常容易理解的方式:

Self-Refine

也就是:

先回答,再检查,再修改。

流程类似:

问题
 ↓
第一次回答
 ↓
检查答案
 ↓
发现问题
 ↓
修改答案
 ↓
再次检查
 ↓
最终答案

Self-Refine 的研究思路就是让模型生成初始结果,然后产生反馈,再依据反馈反复改进,不一定需要额外训练另一个模型。(arXiv )

例如让 AI 写代码。

第一次:

生成代码

然后再让它检查:

有没有空指针?
有没有并发问题?
有没有 SQL 注入?
有没有资源泄漏?

发现:

可能存在空指针异常

于是:

重新修改代码

最终再输出。

这种方式在实际开发中非常常见。


九、Verifier:一个负责做题,一个负责检查

Self-Refine 是:

自己检查自己

还可以进一步:

一个模型负责生成答案
另一个模型负责检查答案

例如:

问题
 ↓
Generator
 ↓
候选答案
 ↓
Verifier
 ↓
正确?
 ↓
否
 ↓
重新生成

这种思想在数学、代码生成和高可靠任务中非常常见。

研究中也有专门针对“最终结果监督”和“中间步骤监督”的比较;例如 process supervision 会对中间步骤进行反馈,而不仅仅判断最后答案对不对。(arXiv )

简单理解:

一个学生做题
+
一个老师批改

肯定比:

学生写完直接交卷

更加稳。


十、Tool Reasoning:现在真正实用的一种推理

现代 AI 真正强大的地方,越来越不是:

模型知道一切

而是:

模型知道什么时候需要工具

例如用户说:

帮我分析今天苹果公司的股票表现。

模型本身的训练数据不一定包含今天的数据。

于是:

分析问题
 ↓
需要实时行情
 ↓
调用股票 API
 ↓
得到价格
 ↓
需要相关新闻
 ↓
调用搜索
 ↓
获得新闻
 ↓
综合分析
 ↓
最终回答

这种方式其实就是:

LLM
+
工具
+
推理

也是现代 Agent 最核心的一种模式。


十一、现在的“Reasoning Model”又是什么?

前面很多技术,本质上属于:

Prompt Engineering

例如告诉普通模型:

请一步一步分析问题

但现在越来越多模型会在训练阶段专门针对推理任务进行强化。

于是出现了:

Reasoning Model

可以简单理解成:

模型本身就被训练成在回答复杂问题之前投入额外计算进行推理。

此时:

用户问题
 ↓
模型内部进行推理计算
 ↓
得到答案

开发者甚至不一定需要写:

请一步一步思考

模型自己就知道:

这个问题比较难
需要多想一会

一些现代 API 甚至允许控制:

reasoning effort

也就是:

少想一点
普通思考
多想一点

更多推理计算一般意味着:

质量可能提高

同时:

延迟增加
计算量增加
Token / 成本增加

现在主流模型厂商都在往“根据问题复杂度动态决定推理量”的方向发展。例如 Anthropic 当前文档描述了 adaptive thinking,由模型结合任务复杂度与 effort 来决定需要多少思考;OpenAI 的 API 也提供 reasoning effort 一类控制方式。(Claude Platform Docs )


十二、一个特别重要的区别:推理 ≠ 把内部思维全部展示出来

这个地方很容易被误解。

很多人看到:

正在思考……

就认为:

页面上出现的文字,就是模型脑子里真正完整的内部推理。

实际上并不一定。

现代 AI 系统通常可以分成:

模型内部推理
        ↓
可公开的推理摘要
        ↓
最终回答

也就是说:

内部 Chain of Thought

和:

用户看到的 Reasoning

可能不是同一个东西。

例如 OpenAI 明确说明,其原始 chain-of-thought 不直接展示给用户,同时 API 可以提供 reasoning summary,用自然语言概括模型推理中的有用信息。(OpenAI )

所以工程设计中更推荐展示:

正在分析问题……

已确定需要查询订单信息……

正在检查计算结果……

根据查询结果,结论如下……

而不是强行要求:

把你脑子里面每一个 Token 的内部思维全部打印出来

这两件事是完全不同的。


十三、因此,一个成熟的“推理效果”应该有三层

我们在开发 AI 产品时,可以把整个系统分成三层:

第一层:模型推理层
        ↓
第二层:后端事件层
        ↓
第三层:前端展示层

模型层负责:

思考
规划
工具调用
验证
生成答案

后端不要直接把各种厂商不同的格式扔给前端。

而是统一转换成:

reasoning
action
observation
answer
done

最终前端只负责:

reasoning → 显示“思考过程”

action → 显示“正在调用工具”

answer → 显示正式回答

done → 结束动画

这样架构会干净很多。


十四、设计一个统一的推理事件

例如在 Spring Boot 中,可以定义:

public record AiStreamEvent(
        String type,
        String content
) {
}

我们规定几个类型:

reasoning
answer
action
observation
done

例如后端可能流式返回:

{
  "type": "reasoning",
  "content": "正在分析用户的问题"
}

然后:

{
  "type": "action",
  "content": "正在查询天气信息"
}

然后:

{
  "type": "observation",
  "content": "北京今天有小雨"
}

最后:

{
  "type": "answer",
  "content": "今天有小雨,不太建议进行长时间户外跑步。"
}

最终:

{
  "type": "done",
  "content": ""
}

这样前端根本不用知道:

OpenAI
DeepSeek
Claude
Gemini
Qwen

后端用的到底是哪一家模型。

前端只认识:

AiStreamEvent

这才是比较合理的工程设计。


十五、为什么推荐 SSE,而不是直接返回 HTML?

很多简单 Demo 喜欢直接返回:

<br>
<hr>

当然能用。

但正式项目不推荐这样设计。

例如后端返回:

思考内容<br>
思考内容<br>
<hr>
最终答案

实际上把:

数据

和:

页面展示

绑死了。

更加推荐:

后端负责返回数据

前端负责决定怎么展示

例如:

SSE
 ↓
JSON Event
 ↓
Vue / React
 ↓
页面渲染

后端:

{
  "type": "reasoning",
  "content": "正在分析问题"
}

Vue 决定:

灰色字体
折叠区域

而:

{
  "type": "answer",
  "content": "最终答案"
}

Vue 决定:

正常 Markdown

这样以后想改 UI,根本不需要修改 Java 后端。


十六、最终页面可以怎么设计?

一个现在比较常见的 AI 页面,可以设计成:

用户:
帮我分析一下 Redis 为什么这么快?

AI:

▶ 已思考 3 秒

  正在分析 Redis 的数据存储方式……

  正在比较内存访问和磁盘访问……

  正在整理单线程事件循环的影响……

--------------------------------

Redis 快主要有几个原因:

1. 数据主要存储在内存
2. 高效的数据结构
3. IO 多路复用
4. 避免大量线程上下文切换
……

还可以默认把推理区域折叠:

▶ 查看思考过程

用户真正关心的仍然是:

最终答案

需要的时候再展开:

推理摘要

体验会更好。


十七、如果模型本身没有 Reasoning 能力怎么办?

依然可以实现类似体验。

可以让普通模型生成:

公开分析摘要
+
最终答案

例如 System Prompt 规定输出协议:

请对问题进行分析。

你需要返回两部分:

<reasoning>
这里输出简短、可公开的分析摘要,
只包含解决问题所需要的关键步骤。
</reasoning>

<answer>
这里输出最终回答。
</answer>

模型可能返回:

<reasoning>
这个问题主要需要比较 Redis 的存储位置、
数据结构以及网络模型。
</reasoning>

<answer>
Redis 性能高主要有以下几个原因……
</answer>

后端解析:

<reasoning>

转换成:

type = reasoning

解析:

<answer>

转换成:

type = answer

于是一样可以做出:

思考区域
+
最终答案

不过一定要搞清楚:

这属于模型生成的“解释过程”,并不代表你拿到了模型完整的内部 Chain of Thought。

这个区别在真正做产品时非常重要。


十八、推理效果真正难的地方其实不是 UI

前端显示:

正在思考……

其实非常简单。

真正困难的是:

什么时候应该推理?

应该推理多久?

什么时候需要调用工具?

什么时候需要重新规划?

什么时候应该验证答案?

什么时候应该停止?

这才是现代 AI Agent 真正研究的问题。

一个成熟系统可能是:

用户问题
    ↓
判断任务复杂度
    ↓
简单任务?
    ├── 是 → 直接回答
    │
    └── 否
         ↓
       生成计划
         ↓
       是否需要工具?
         ├── 是 → 调用工具
         │          ↓
         │        获取结果
         │          ↓
         │        重新推理
         │
         └── 否
              ↓
            继续推理
              ↓
            验证答案
              ↓
            最终回答

这时候 AI 已经从:

ChatBot

逐渐变成:

Agent

十九、从 ChatBot 到 Agent,本质上发生了什么?

最简单的聊天机器人:

Prompt
 ↓
LLM
 ↓
Answer

加入推理:

Prompt
 ↓
Reasoning
 ↓
Answer

加入工具:

Prompt
 ↓
Reasoning
 ↓
Tool
 ↓
Reasoning
 ↓
Answer

加入记忆:

Memory
   ↓
Prompt
   ↓
Reasoning
   ↓
Tool
   ↓
Reasoning
   ↓
Answer
   ↓
Memory

再加入规划和循环:

用户目标
    ↓
Planner
    ↓
Reasoning
    ↓
Action
    ↓
Observation
    ↓
Reasoning
    ↓
是否完成?
  ↙       ↘
否          是
↓           ↓
继续       Final Answer

到这里,实际上就已经进入:

AI Agent

的世界了。


二十、把整个“推理效果”串起来

最终,一个比较完整的 AI 推理系统可以理解成:

用户提出问题
        ↓
判断问题复杂度
        ↓
选择推理策略
        ↓
┌───────────────────┐
│ CoT               │
│ Self-Consistency  │
│ ReAct             │
│ ToT               │
│ Self-Refine       │
│ Tool Reasoning    │
└───────────────────┘
        ↓
模型进行推理
        ↓
必要时调用工具
        ↓
获得外部信息
        ↓
重新推理
        ↓
验证结果
        ↓
生成可公开推理摘要
        ↓
SSE 流式返回
        ↓
前端显示“正在思考”
        ↓
显示推理摘要
        ↓
显示最终答案

这样再来看所谓的:

AI 推理效果

就会发现,它绝对不只是:

getReasoningContent()

这么简单。

真正完整的推理包含三个部分:

模型怎么思考
        ↓
后端怎么组织推理事件
        ↓
前端怎么展示推理状态

这三个部分组合起来,才形成我们现在看到的:

“AI 思考了一会,然后给出了答案”的完整产品体验。


二十一、最后总结

学习 AI 推理时,可以先记住这样一条演化路线:

普通生成
    ↓
Chain of Thought
    ↓
Self-Consistency
    ↓
Tree of Thoughts
    ↓
Self-Refine
    ↓
ReAct
    ↓
Tool Calling
    ↓
Reasoning Model
    ↓
Agent

其中:

CoT

解决的是:

让模型分步骤思考

Self-Consistency 解决:

多想几次,减少单一路径错误

ToT 解决:

同时探索多种方案

Self-Refine 解决:

自己检查和修改

ReAct 解决:

一边推理,一边使用工具

而现代 Reasoning Model 更进一步:

推理能力直接进入模型训练和推理阶段

最终再配合:

SSE
+
结构化事件
+
Vue / React

我们就可以实现用户真正看到的:

正在思考……
        ↓
正在分析问题……
        ↓
正在调用工具……
        ↓
正在验证结果……
        ↓
思考完成
        ↓
最终答案

所以,“推理效果”真正值得学习的,并不是某一家模型返回了哪个字段。

而是理解:

大模型如何把复杂任务拆开、探索、行动、验证,再由工程系统把这些过程组织成用户能够理解的交互体验。

理解这一层以后,后面继续学习:

ChatMemory
RAG
Function Calling
MCP
ReAct Agent
Multi-Agent
Agent Workflow

就会发现,它们其实都在围绕同一件事情展开:

让 AI 不再只是“回答一句话”,而是能够真正地分析问题、执行任务,并最终解决问题。

AI 的“推理效果”到底是怎么实现的?从 CoT、ReAct 到流式思考过程
http://www.clxhxhhr.top/posts/612/
作者
clxstart
发布于
2026-09-14
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。