Search-o1:人大清华联合推出动态检索推理框架,使模型能够在推理过程中动态检索外部知识

340 阅读4分钟

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


🚀 快速阅读

  1. 功能特点:支持动态知识检索,填补推理过程中的知识空白,提升推理准确性。
  2. 技术原理:基于代理检索增强生成(RAG)机制和Reason-in-Documents模块,实现知识检索与推理的无缝集成。
  3. 应用场景:适用于科学研究、数学教育、编程开发、开放域问答等多个复杂推理任务。

正文(附运行示例)

Search-o1 是什么

Search-o1

Search-o1 是中国人民大学和清华大学联合推出的创新框架,旨在提升大型推理模型(LRMs)在复杂问题中的推理能力。该框架通过整合代理检索增强生成(RAG)机制和Reason-in-Documents模块,使模型能够在推理过程中动态检索外部知识,填补知识空白。

RAG 机制支持模型自主决定何时发起搜索查询,而Reason-in-Documents模块则负责精炼检索到的文档,提取对当前推理步骤有用的信息。这种设计确保了信息能够无缝集成到推理链中,保持推理的连贯性和逻辑性。Search-o1 在多个复杂推理任务和开放域问答基准测试中展现了卓越的性能,为构建更可靠、更通用的智能系统提供了新的途径。

Search-o1 的主要功能

  • 动态知识检索:在推理过程中,当模型遇到知识空白时,动态地检索外部知识,支持逐步推理。
  • 知识精炼:将检索到的文档精炼成简洁、相关的信息,确保信息无缝集成到推理链中,保持推理的连贯性。
  • 提高推理准确性:基于补充外部知识,减少因知识不足导致的推理错误,提高推理的准确性和可信度。
  • 多任务适用性:在科学、数学、编程等多个复杂推理任务及开放域问答任务中表现出色,展示了广泛的适用性。

Search-o1 的技术原理

  • 代理检索增强生成(RAG)机制
  • 自主检索:模型在推理过程中自主决定何时生成搜索查询,触发检索机制获取相关外部知识。
  • 动态迭代:检索机制在单个推理会话中多次触发,满足不同推理步骤的知识需求。
  • 特殊符号:搜索查询和检索结果被特殊符号包围,确保检索过程与推理链的无缝对接。
  • Reason-in-Documents模块
  • 文档分析:基于当前搜索查询、检索到的文档和之前的推理步骤,对文档进行深入分析。
  • 信息提取:从文档中提取与当前推理步骤直接相关的信息,确保信息的准确性和相关性。
  • 精炼输出:生成简洁、相关的信息,并将其无缝集成到推理链中,保持推理的连贯性和逻辑一致性。

如何运行 Search-o1

1. 环境配置

首先,确保你已经安装了 Python 3.9+ 和 Conda 环境。然后,按照以下步骤配置环境:

# 创建 Conda 环境
conda create -n search_o1 python=3.9
conda activate search_o1

# 安装依赖
cd Search-o1
pip install -r requirements.txt
2. 数据准备

使用 data/data_pre_process.ipynb 中的代码将数据集预处理为标准化的 JSON 格式。数据集分为两类:

  • 复杂推理任务:如 GPQA、MATH500、AMC2023、AIME2024 等。
  • 开放域问答任务:如 NQ、TriviaQA、HotpotQA 等。
3. 模型推理

Search-o1 提供了多种推理模式,以下是运行示例:

  1. 直接推理模式
python scripts/run_direct_gen.py \
    --dataset_name gpqa \
    --split diamond \
    --model_path "YOUR_MODEL_PATH"
  1. 朴素检索增强生成(RAG)模式
python scripts/run_naive_rag.py \
    --dataset_name gpqa \
    --split diamond \
    --use_jina True \
    --model_path "YOUR_MODEL_PATH" \
    --jina_api_key "YOUR_JINA_API_KEY" \
    --bing_subscription_key "YOUR_BING_SUBSCRIPTION_KEY"
  1. Search-o1 模式
python scripts/run_search_o1.py \
    --dataset_name aime \
    --split test \
    --max_search_limit 5 \
    --max_turn 10 \
    --top_k 10 \
    --max_doc_len 3000 \
    --use_jina True \
    --model_path "YOUR_MODEL_PATH" \
    --jina_api_key "YOUR_JINA_API_KEY" \
    --bing_subscription_key "YOUR_BING_SUBSCRIPTION_KEY"
4. 评估

推理脚本会自动保存模型的输入和输出文本以供评估。对于检索增强方法,如果模型未能提供最终答案,可以使用回退策略:

python scripts/evaluate.py \
    --output_path outputs/... \
    --apply_backoff

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦