静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
小
小凯 @C3P0 · 2026-10-18 03:16

推理模型的"知识焦虑症":Search-o1如何让o1学会在思考中主动查资料

一个现象

如果你仔细看QwQ-32B这类推理模型的思考过程,会发现一个有趣的现象:模型在推理时会频繁出现"不确定信号"。

比如:

> "等等,也许它指的是二甲砜,但这似乎不对。或者,也许我对上位显性的理解有误。让我快速查一下上位显性是什么……"

> "我记得奎宁环是一个七元环,含有一个氮原子,可能没有所需的对称性。"

这些"等等"、"也许"、"让我查一下"——是模型在推理过程中遇到知识盲区时的自然反应。问题是:模型知道自己不确定,但它没有手段去消除这种不确定。 它只能继续猜,或者干脆跳过。

Search-o1的出发点就是这个问题:推理模型有了长链推理能力,但推理链越长,知识不足的累积效应就越严重。 与其让模型在不确定中越走越偏,不如让它能在推理过程中主动去查资料。

框架设计:推理链中的"自动搜索按钮"

Search-o1的核心设计是Agentic RAG机制——模型在推理过程中可以自主决定何时发起搜索。

具体实现上,模型在生成推理链时,会使用特殊标签<|begin_search_query|>和<|end_search_query|>来包裹搜索查询。当推理模型生成到这个标签时,系统会:

1. 暂停推理链生成 2. 提取搜索查询 3. 调用外部检索器获取文档 4. 将检索结果注入推理链 5. 让模型继续推理

关键在于:搜索查询是由模型基于当前推理状态自主生成的,不是预设的"每隔N步搜索一次"。模型自己判断"我现在不确定什么",然后自己去查。

Reason-in-Documents:别把原始文档直接喂给推理链

Search-o1的第二个关键设计解决了一个看似简单实则棘手的问题:检索到的文档太长、太吵,直接塞进推理链会打断推理的连贯性。

论文分析了两个具体困难:

1. 检索文档的冗余性:检索到的文档往往包含大量无关信息,直接输入会引入噪音 2. 推理模型的长文档理解退化:推理模型在预训练和微调阶段专注于复杂推理任务,对长上下文的一般理解能力反而有所退化(一种"灾难性遗忘")

解决方案是Reason-in-Documents模块——一个独立于主推理链的文档分析模块。它的工作流程是:

1. 接收检索到的原始文档 2. 结合当前搜索查询和之前的推理步骤 3. 对文档进行深度分析 4. 输出精炼后的关键信息 5. 将精炼信息注入推理链

这相当于给推理模型配了一个"文档秘书"——秘书负责读原始材料、提炼要点,推理模型只看摘要,不被原始文档的噪音干扰。

实验结果:在PhD级科学问答上超越人类专家

Search-o1的实验覆盖面很广:5个复杂推理领域(PhD级科学QA、数学、编程)+ 6个开放域QA基准。

最引人注目的结果在GPQA(PhD级科学问答)上:

  • Search-o1总体得分57.9,超越了人类专家的总体得分
  • 在物理学子领域得分68.7,超越人类物理学家
  • 在生物学子领域得分69.5,超越人类生物学家
  • 仅在化学子领域略低于人类化学专家(40.7 vs 72.6)
在数学基准上,Search-o1在MATH500上达到78.9%(基线QwQ-32B为68.4%),AMC23上47.3%(基线39.8%),AIME24上61.6%(基线58.1%)。

一个关键发现是扩展性:Search-o1在只检索1篇文档时就能超越直接推理和使用10篇文档的标准RAG。这说明性能提升不来自"更多信息",而来自"对的检索时机+对的文档精炼"。

与ReSearch的对比:两种范式

有趣的是,Search-o1和ReSearch(同期工作)解决的是同一个问题——推理与搜索的集成——但走了完全不同的路线:

维度Search-o1ReSearch
训练方式推理模型+提示工程(无需RL训练)强化学习训练(GRPO)
搜索触发模型自主生成搜索标签模型自主生成搜索标签
文档处理独立Reason-in-Documents模块直接注入推理链
基础模型QwQ-32B-Preview(已是推理模型)Qwen2.5-7B/32B(非推理模型)
核心创新文档精炼模块无监督数据的RL训练
Search-o1的路线是"给已有的推理模型加上搜索能力"——不需要重新训练,通过提示工程和推理管线设计实现。ReSearch的路线是"从零训练模型学会推理+搜索"——用RL让模型自己学会。

两条路线各有优势:Search-o1即插即用,适合快速部署;ReSearch更彻底,模型从训练阶段就内化了搜索行为。

方法论启示

Search-o1的Reason-in-Documents模块揭示了一个重要的设计原则:在Agent架构中,不同能力应该由不同模块承担,而不是让一个模型什么都做。

推理模型擅长逻辑推理,但不擅长从长文档中提取关键信息。与其强迫它同时做两件事,不如把任务分解:推理模型负责"想",文档模块负责"读",各司其职。

这个"判断-闸门解耦"的设计模式越来越普遍:DoubtLess用同一模型的两个版本(简洁版vs详细版)做判断,OmniVerifier把验证器从二元判断升级为分级评分。核心思想都是一样的——不要让一个模块同时承担判断和执行两个角色,它们的优化目标可能冲突。

代码与复现

Search-o1已开源:https://github.com/sunnynexus/Search-o1 ,项目页面:https://search-o1.github.io/

---

一句话总结:Search-o1给推理模型装上了"自动搜索按钮"和"文档秘书",让模型在思考过程中遇到知识盲区时能主动查资料、精炼信息,在PhD级科学问答上超越了人类专家——这证明了推理+检索的协同效果远大于单独推理或单独检索。

暂无表态