论文链接:https://arxiv.org/pdf/2501.05366
论文解读:Search-o1 --- Agentic Search-Enhanced Large Reasoning Models
1. 背景与动机
近年来,大规模推理模型(Large Reasoning Models, LRMs)如 OpenAI-o1 展现出长链式思考(chain-of-thought)能力,能够通过分步推理解决复杂问题。然而,这些模型在长链推理过程中常常因知识不足而产生不确定性和错误,尤其是在遇到专业领域知识空缺时。为此,论文提出了 Search-o1 框架,其核心思想是:
- Agentic Retrieval-Augmented Generation(RAG)机制:当模型在推理过程中遇到知识不足时,能够自主生成搜索查询,从外部检索相关知识。
- Reason-in-Documents 模块:对检索到的文档进行精炼,将冗长、冗余的信息转化为简明、相关的知识片段,并无缝融入到原有的推理链中。
这种设计旨在弥补模型内部知识的不足,保持推理链的连贯性,同时提高回答的准确性和可信度。
2. 方法论

论文将复杂推理任务视为结合任务指令 I I I、问题 q q q 以及外部检索文档 D D D 后生成推理链 R R R 和最终答案 a a a 的过程,其目标为构造映射:
( I , q , D ) → ( R , a ) (I, q, D) \to (R, a) (I,q,D)→(R,a)
2.1 问题建模
推理与回答的生成可以分为两个阶段:
-
推理链生成
生成推理链 R = { R 1 , R 2 , ... , R T R } R = \{R_1, R_2, \dots, R_{T_R}\} R={R1,R2,...,RTR} 的概率模型为:
P ( R ∣ I , q , D ) = ∏ t = 1 T R P ( R t ∣ R < t , I , q , D ≤ t ) P(R|I, q, D) = \prod_{t=1}^{T_R} P(R_t | R_{<t}, I, q, D_{\le t}) P(R∣I,q,D)=t=1∏TRP(Rt∣R<t,I,q,D≤t)其中, R < t R_{<t} R<t 表示第 t t t 步前的所有推理步骤,而 D ≤ t D_{\le t} D≤t 表示在第 t t t 步前检索到的所有文档信息。
-
答案生成
根据生成的推理链 R R R 来生成最终答案 a = { a 1 , a 2 , ... , a T a } a = \{a_1, a_2, \dots, a_{T_a}\} a={a1,a2,...,aTa},其概率为:
P ( a ∣ R , I , q ) = ∏ t = 1 T a P ( a t ∣ a < t , R , I , q ) P(a|R, I, q) = \prod_{t=1}^{T_a} P(a_t | a_{<t}, R, I, q) P(a∣R,I,q)=t=1∏TaP(at∣a<t,R,I,q)
2.2 Agentic RAG 机制
在传统的 RAG 模型中,检索通常是在问题阶段一次性完成。但在 Search-o1 框架中,模型能够在推理过程中自主决定何时生成搜索查询。当模型在生成推理链时遇到不确定性(例如对某个概念或专业知识不清楚),它会生成特殊标记包围的搜索查询:
<|begin_search_query|> ... <|end_search_query|>
生成的搜索查询 q search ( i ) q_{\text{search}}^{(i)} qsearch(i) 的生成过程可表达为:
P ( q search ( i ) ∣ I , q , R ( i − 1 ) ) = ∏ t = 1 T q ( i ) P ( q search , t ( i ) ∣ q search , < t ( i ) , I , q , R ( i − 1 ) ) P(q_{\text{search}}^{(i)}|I, q, R^{(i-1)}) = \prod_{t=1}^{T_q^{(i)}} P(q_{\text{search}, t}^{(i)} | q_{\text{search}, <t}^{(i)}, I, q, R^{(i-1)}) P(qsearch(i)∣I,q,R(i−1))=t=1∏Tq(i)P(qsearch,t(i)∣qsearch,<t(i),I,q,R(i−1))
随后,调用检索函数得到对应的文档集合:
D ( i ) = Search ( q search ( i ) ) D^{(i)} = \text{Search}(q_{\text{search}}^{(i)}) D(i)=Search(qsearch(i))
2.3 Knowledge Refinement via Reason-in-Documents 模块
直接将检索到的长文档插入推理链容易引入冗余信息并破坏逻辑连贯性。为了解决这一问题,Search-o1 设计了 Reason-in-Documents 模块,其主要任务是:
- 分析当前搜索查询 q search ( i ) q_{\text{search}}^{(i)} qsearch(i)、已生成的推理链 R ( < i ) R^{(<i)} R(<i) 以及检索文档 D ( i ) D^{(i)} D(i)。
- 生成中间推理序列 r docs ( i ) r_{\text{docs}}^{(i)} rdocs(i) 以辅助理解文档内容:
P ( r docs ( i ) ∣ R ( < i ) , q search ( i ) , D ( i ) ) = ∏ t = 1 T d ( i ) P ( r docs , t ( i ) ∣ r docs , < t ( i ) , R ( < i ) , q search ( i ) , D ( i ) ) P(r_{\text{docs}}^{(i)}|R^{(<i)}, q_{\text{search}}^{(i)}, D^{(i)}) = \prod_{t=1}^{T_d^{(i)}} P(r_{\text{docs}, t}^{(i)} | r_{\text{docs}, <t}^{(i)}, R^{(<i)}, q_{\text{search}}^{(i)}, D^{(i)}) P(rdocs(i)∣R(<i),qsearch(i),D(i))=t=1∏Td(i)P(rdocs,t(i)∣rdocs,<t(i),R(<i),qsearch(i),D(i)) - 根据中间推理序列生成精炼的知识 r final ( i ) r_{\text{final}}^{(i)} rfinal(i):
P ( r final ( i ) ∣ r docs ( i ) , R ( < i ) , q search ( i ) ) = ∏ t = 1 T r ( i ) P ( r final , t ( i ) ∣ r final , < t ( i ) , r docs ( i ) , R ( < i ) , q search ( i ) ) P(r_{\text{final}}^{(i)}|r_{\text{docs}}^{(i)}, R^{(<i)}, q_{\text{search}}^{(i)}) = \prod_{t=1}^{T_r^{(i)}} P(r_{\text{final}, t}^{(i)} | r_{\text{final}, <t}^{(i)}, r_{\text{docs}}^{(i)}, R^{(<i)}, q_{\text{search}}^{(i)}) P(rfinal(i)∣rdocs(i),R(<i),qsearch(i))=t=1∏Tr(i)P(rfinal,t(i)∣rfinal,<t(i),rdocs(i),R(<i),qsearch(i))
该精炼知识随后通过特殊标记:
<|begin_search_result|> ... <|end_search_result|>
无缝插入原有推理链中,确保模型在后续生成中能够利用到外部补充的关键信息,同时保持逻辑连贯。
2.4 推理与批量推理流程
论文中提出的 Search-o1 推理流程 采用了迭代式处理方式,即:
- 初始将任务指令 I I I 与问题 q q q 拼接构成初始序列。
- 模型在生成过程中不断检测特殊搜索标记,遇到时暂停当前推理,将生成的搜索查询传递给检索模块,再由 Reason-in-Documents 模块处理检索结果,最后将精炼知识重新注入推理链。
- 当推理链生成结束(遇到 EOS 标记)时,得到完整的推理链 R R R 和最终答案 a a a。
整个过程可以表示为:
P ( R , a ∣ I , q ) = ∏ t = 1 T R P ( R t ∣ R < t , I , q , { r final ( j ) } j ≤ i ( t ) ) ⋅ ∏ t = 1 T a P ( a t ∣ a < t , R , I , q ) P(R, a | I, q) = \prod_{t=1}^{T_R} P(R_t | R_{<t}, I, q, \{r^{(j)}{\text{final}}\}{j \le i(t)}) \cdot \prod_{t=1}^{T_a} P(a_t | a_{<t}, R, I, q) P(R,a∣I,q)=t=1∏TRP(Rt∣R<t,I,q,{rfinal(j)}j≤i(t))⋅t=1∏TaP(at∣a<t,R,I,q)
其中, { r final ( j ) } j ≤ i ( t ) \{r^{(j)}{\text{final}}\}{j \le i(t)} {rfinal(j)}j≤i(t) 表示在当前推理步骤之前所有经过精炼的知识。
批量推理机制则允许模型同时处理多个问题,通过并行生成和批量检索提高系统吞吐量。
3. 实验评估

论文在多个复杂推理任务和开放域问答任务上对 Search-o1 进行了评估,主要包括:
- 复杂推理任务:如 PhD 级科学问答(GPQA)、数学题(MATH500、AMC2023、AIME2024)和编程题(LiveCodeBench)。结果表明,Search-o1 在长链推理中能显著提升准确率和连贯性,比传统的直接推理以及标准 RAG 模型有更好的表现。
- 开放域问答任务 :如 Natural Questions、TriviaQA、HotpotQA 等。实验发现,在多跳问答任务中,利用 agentic 搜索和 Reason-in-Documents 模块能够更好地整合外部知识,提升 EM(Exact Match)和 F1 分数。
此外,论文还展示了通过增加检索文档数(top-k 分析)对系统性能的影响,证明即使检索少量文档也能带来显著改进,而 Search-o1 的精炼策略能避免冗余信息对推理链的干扰。
4. 主要结论
- 自主检索与知识精炼:Search-o1 框架通过 agentic RAG 机制使模型能在推理过程中自主检索外部知识,并通过 Reason-in-Documents 模块对检索结果进行精炼,从而弥补模型内部知识的不足。
- 推理连贯性与准确性提升:该方法不仅提高了复杂推理任务的准确率,还保证了长链推理的逻辑连贯性,使得最终答案更为准确可靠。
- 广泛适用性:在科学、数学、编程以及开放域问答等多个领域的实验结果表明,Search-o1 在不同任务上的表现均超越了传统的直接推理和标准 RAG 模型,部分任务甚至超过了人类专家。
5. 讨论与未来方向
论文的贡献为大规模推理模型在面对知识不足时提供了一种有效的解决方案。未来的工作可以从以下几个方向进一步探索:
- 检索策略与精炼算法优化:深入研究不同检索算法及文档精炼方法,以进一步提升外部知识的质量和与推理链的融合度。
- 跨领域适应性:探索 Search-o1 在更多专业领域和复杂任务中的适用性,并结合领域知识进行定制化改进。
- 实时推理与系统优化:针对大规模应用场景,研究如何在保证推理连贯性的同时进一步降低延迟,提高系统效率。