跳到主要内容

DeepSearcher — 架构与原理

30 秒导读: DeepSearcher 是一个「深度研究」框架——你给它一个问题(比如「写一份关于 X 的报告」),它不会只查一次就回答,而是先把问题拆成几个子问题,对你的私有向量数据库反复检索,每轮检索后让 LLM反思「还缺什么」并生成新的补查问题,最后把所有命中的资料汇总成一篇详尽答案。它是 Milvus 母公司 Zilliz 出的开源项目。

1. 这是什么(零基础也能懂)

一句话定义: DeepSearcher = 「迭代式 RAG」。RAG(Retrieval-Augmented Generation,检索增强生成)是「先从资料库查相关片段、再让 LLM 基于这些片段作答」;DeepSearcher 把这个「查一次再答」升级成多轮「查→反思→再查」,像一个会自己追问的研究助理。

解决什么问题 / 给谁用:

假设你是一家公司的工程师,手上有一堆内部文档(PDF、网页、Markdown),老板说「帮我写一份关于我们产品竞争力的报告」。普通 RAG 把问题向量化、查 top-10 片段、塞给 LLM 就完事——但「竞争力」这种宽问题,一次检索根本覆盖不全。DeepSearcher 的做法更像真人:先想「这要从哪几个角度查」,查完发现「价格我查到了,但售后服务还没」,于是再补一轮。

它适合:

  • 企业内部知识库的智能问答 / 报告生成
  • 需要「综合多个来源、多角度」才能答好的复杂问题
  • 想在私有数据上做深度研究(数据不出库)

它能做什么(功能):

  • 把文档灌进向量库(本地文件 / 网页爬取 → 切块 → 向量化 → 入库)
  • 对一个问题做多轮迭代检索 + 反思
  • 自动在多个 agent 策略之间选一个最合适的(简单报告 vs. 多跳事实)
  • 支持十几种 LLM 和多种向量库(Milvus、Qdrant、Oracle、Azure Search…)

用起来什么样: 最小真实用法(摘自 README.md,对应 deepsearcher/online_query.py:8):

from deepsearcher.configuration import Configuration, init_config
from deepsearcher.online_query import query
from deepsearcher.offline_loading import load_from_local_files

config = Configuration()
init_config(config=config) # 装配好 LLM / 向量库 / agent

load_from_local_files(paths_or_directory="./my_docs") # 灌库(离线)

answer, retrieved, tokens = query("Write a report about xxx.") # 提问(在线)

注意系统天然分成两段:load_*(离线灌库)和 query(在线提问)。

一句话直觉/类比: 把它想成一个会反思的实习研究员:你给课题,他先列提纲(拆子问题)、去档案室翻资料(检索)、读完想想「还差哪块」(反思)、再去翻一轮,直到够了,然后写报告(汇总)。普通 RAG 是「只翻一次档案室就交稿」的实习生。

2. 顶层全景与阅读地图

这个项目分两条主线、五类部件,详见 01-pipeline-overview.md。一句话版本:

[离线] 文档 ──切块+句窗──▶ 向量化 ──▶ 向量库

[在线] 问题 ──▶ RAGRouter 选 agent ──▶ DeepSearch / ChainOfRAG
│ 多轮 检索→反思→补查

汇总成答案

建议阅读顺序:

顺序章节读完你会知道
101-pipeline-overview.md五个部件怎么接、一次提问的完整数据流
202-deep-search-agent.md主力 agent 的「拆子问题 + 反思补查」循环(核心精华)
303-chain-of-rag.md另一种迭代策略(逐跳追事实),和 DeepSearch 怎么分工
404-routing-and-retrieval.md两层路由 + 用 LLM 当 reranker 的检索细节
505-ingestion-and-config.md灌库管线(切块/句窗)+ 配置工厂如何装零件
606-craft-boundaries-map.md巧妙之处 / 边界 / 横向对比 / 代码地图

如果你只想抓精华:读 02(反思补查循环)+ 06(巧妙之处与边界)即可。