- 人工智能
- 大模型
- RAG
- AI Agent
- 深度研究
- 知识库
【免费下载链接】deep-searcher
Open Source Deep Research Alternative to Reason and Search on Private Data. Written in Python.
导读
DeepSearcher 是一个开源的"深度研究(Deep Research)"替代方案,它将前沿大语言模型(如 OpenAI o 系列、DeepSeek、Claude 4 Sonnet、Llama 4、QwQ 等)与向量数据库(Milvus、Zilliz Cloud 等)组合起来,在企业私有数据上完成"搜索—评估—推理"的闭环,输出高准确率的答案与综合性报告。本文以仓库首页文档 docs/index.md 为主线,结合 deepsearcher/configuration.py、deepsearcher/config.yaml、deepsearcher/cli.py 等源码,系统讲解它的架构设计、安装方式、Python API 与 CLI 两种使用形态、五大模块(LLM / Embedding / 向量库 / 文件加载器 / 网页爬虫)的完整配置,以及 REST 服务部署方案。读完本文,你将能够在自己的私有数据上从零搭建一套可运行、可配置、可扩展的深度研究问答系统。
DeepSearcher 的整体架构:文档加载与网页抓取 → 文本切分与向量化 → 写入向量数据库 → 查询阶段由 LLM 驱动的 Agent 完成检索、评估与推理,最终生成报告。
一、项目定位:面向私有数据的深度研究引擎
DeepSearcher 的核心定位可以用一句话概括:在保证数据安全的前提下,最大化利用企业内部数据,必要时再融合在线内容,最终给出准确答案与综合报告。它非常适合企业知识管理、智能问答系统和信息检索类场景。
从官方首页文档 docs/index.md 提炼出的五大关键能力如下:
| 能力 | 说明 |
|---|---|
| 私有数据搜索 | 最大化利用企业内部数据并确保数据安全;必要时融合在线内容以获得更准确的答案 |
| 向量数据库管理 | 支持 Milvus 及其他向量数据库,支持数据分片(Collection),实现高效检索 |
| 灵活的词嵌入(Embedding) | 兼容多种 embedding 模型,可按需选择最优方案 |
| 多 LLM 支持 | 支持 DeepSeek、OpenAI 及多家大模型服务,用于智能问答与内容生成 |
| 文档加载器 | 支持本地文件加载,网页爬取能力持续增强中 |
需要强调的是,仓库源码中实际实现的模块远不止首页文档列出的这些。从 deepsearcher/llm、deepsearcher/embedding、deepsearcher/vector_db、deepsearcher/loader 四个目录可以看出,LLM 侧已覆盖 OpenAI、DeepSeek、Anthropic、Gemini、GLM、Ollama、Azure、Bedrock、watsonx、Volcengine、SiliconFlow、PPIO、Novita、JiekouAI、TogetherAI、XAI、Aliyun 等十余家厂商;向量库侧已实现 Milvus、Qdrant、AzureSearch、Oracle;文件加载器包含 PDF、Text、JSON、Unstructured、Docling;网页爬虫包含 FireCrawl、Crawl4AI、Jina、Docling。这些是撰写本文时仓库的真实状态,后文配置部分会逐一给出用法。
二、系统架构与查询工作流:从源码看 Agent 路由
在深入配置之前,先理解 DeepSearcher 的查询引擎是如何组织起来的。入口函数位于 deepsearcher/online_query.py,它的query(original_query, max_iter=3)会调用全局默认搜索器configuration.default_searcher完成一次完整问答,返回(答案字符串, 检索结果列表, 消耗的 token 数)三元组。
全局默认搜索器在 deepsearcher/configuration.py 的init_config()中构建,它并不是单个 RAG 模型,而是一个RAGRouter 路由容器,内部挂载了两个 Agent:
- DeepSearch:适合处理一般性、综合性的查询(例如"给定一个主题写一份报告/综述/文章"),其类描述直接写在源码
@describe_class装饰器中; - ChainOfRAG:以链式推理的方式逐步检索与评估。
RAGRouter(见 deepsearcher/agent/rag_router.py)每次查询时先让 LLM 根据各 Agent 的描述为当前问题选一个最合适的 Agent,再交给该 Agent 执行。同时init_config()还会构建一个轻量的NaiveRAG(见 deepsearcher/agent/naive_rag.py),用于naive_retrieve()/naive_rag_query()这类不追求深度迭代的简单检索。
以 DeepSearch 为例(见 deepsearcher/agent/deep_search.py),它的完整工作流是:
- 子问题分解:根据原始问题拆分成至多 4 个子问题(
SUB_QUERY_PROMPT),简单问题则保留原问题; - 向量检索:将各子问题向量化后在向量库中检索相关 chunk(可选先经
CollectionRouter路由到合适的 Collection); - 相关性重排:用
RERANK_PROMPT让 LLM 逐条判定 chunk 是否对回答问题有帮助,只回答 YES/NO; - 反思迭代:用
REFLECT_PROMPT判断"是否还需要继续搜索",若需要则生成至多 3 条新搜索 query,进入下一轮(总轮数受max_iter限制);若不需要则停止; - 总结报告:用
SUMMARY_PROMPT基于原始问题、所有子问题与检索到的 chunk,输出一份具体、详尽的答案或报告。
这个"迭代式深度研究"正是 DeepSearcher 区别于普通单轮 RAG 的关键——max_iter控制反思迭代次数,默认 3,这也是查询质量与 token 开销之间的核心调节旋钮。
三、安装:pip 与开发模式(uv)两种方式
官方首页文档提供了两种安装路径。
方式一:pip 安装
建议使用 Python 3.10 创建并激活虚拟环境:
python -m venv .venv source .venv/bin/activate然后安装主包:
pip install deepsearcher如果用到可选依赖,可以按需安装,例如使用 Ollama 本地模型时:
pip install "deepsearcher[ollama]"方式二:源码开发模式(推荐 uv)
官方推荐使用uv进行更快、更可靠的安装。克隆仓库并进入目录后执行:
git clone https://github.com/zilliztech/deep-searcher.git && cd deep-searcher uv sync source .venv/bin/activate开发环境的详细搭建与可选依赖安装说明,可参考 CONTRIBUTING.md。安装完成后,本仓库的 pyproject.toml 与 uv.lock 中列出的依赖会被一并解析锁定。
四、Python 快速开始:五分钟跑通"加载 → 查询"
运行下面的示例前,请先在环境变量中准备OPENAI_API_KEY;如果更换了配置中的 LLM,请同步准备对应厂商的 API Key。
from deepsearcher.configuration import Configuration, init_config from deepsearcher.online_query import query config = Configuration() # 在这里定制你的配置,更多配置项见下文"配置详解" config.set_provider_config("llm", "OpenAI", {"model": "o1-mini"}) config.set_provider_config("embedding", "OpenAIEmbedding", {"model": "text-embedding-ada-002"}) init_config(config=config) # 加载你的本地数据 from deepsearcher.offline_loading import load_from_local_files load_from_local_files(paths_or_directory=your_local_path) # (可选)从网页加载(需要环境变量 FIRECRAWL_API_KEY) from deepsearcher.offline_loading import load_from_website load_from_website(urls=website_url) # 查询 result = query("Write a report about xxx.") # 你的问题在这里这段代码背后对应两条流水线:
- 离线加载:
load_from_local_files()(见 deepsearcher/offline_loading.py)依次完成"加载文件 → 切分 chunk → 批量向量化 → 写入向量库"。函数还支持collection_name、collection_description、force_new_collection、chunk_size(默认 1500)、chunk_overlap(默认 100)、batch_size(默认 256)等参数;路径可以是单个文件、多个文件或目录。 - 在线查询:
query()走的是上文描述的 RAGRouter → DeepSearch / ChainOfRAG 迭代式深度研究流程。
加载环节还有一个值得注意的实现细节:文本切分使用了Sentence Window(句子窗口)策略。在 deepsearcher/loader/splitter.py 中,先用RecursiveCharacterTextSplitter按chunk_size / chunk_overlap切分,再对每个小片段的原文上下文各扩展 300 字符形成wider_text存入 chunk 元数据。查询生成答案时(见 naive_rag.py 的query()),优先使用wider_text而非孤立的 chunk 文本,从而显著提升答案的上下文完整性。
五、配置详解:五类 Provider 全覆盖
DeepSearcher 的一切模块配置都围绕统一 API 展开:
config.set_provider_config("<feature>", "<ProviderName>", {"参数": "值"})其中<feature>属于五类:llm、embedding、file_loader、web_crawler、vector_db。该 API 在 deepsearcher/configuration.py 的set_provider_config()中实现——它把 provider 名称与参数字典写入内存配置,随后由init_config()通过ModuleFactory(同文件 configuration.py)按名称动态导入对应模块类并实例化。因此只要仓库中存在对应的实现类,即可通过这个 API 直接切换,无需改动任何业务代码。默认值可在 deepsearcher/config.yaml 中查看。
5.1 LLM 配置
"LLMName"可选值包括:DeepSeek、OpenAI、XAI、SiliconFlow、Aliyun、PPIO、TogetherAI、Gemini、Ollama、Novita、JiekouAI,以及仓库中已实现源码的Anthropic、AzureOpenAI、Bedrock、Volcengine、GLM、watsonx。Arguments dict是传给 LLM 类的参数字典(模型名、api_key、base_url 等)。
以下示例均来自官方首页文档,统一整理如下(各厂商 API Key 均通过对应环境变量注入,也可在 config 字典中显式覆盖):
OpenAI
config.set_provider_config("llm", "OpenAI", {"model": "o1-mini"})通义千问 Qwen3(阿里云百炼),需要环境变量DASHSCOPE_API_KEY:
config.set_provider_config("llm", "Aliyun", {"model": "qwen-plus-latest"})Qwen3(OpenRouter 中转):
config.set_provider_config("llm", "OpenAI", {"model": "qwen/qwen3-235b-a22b:free", "base_url": "https://openrouter.ai/api/v1", "api_key": "OPENROUTER_API_KEY"})DeepSeek 官方,需要环境变量DEEPSEEK_API_KEY:
config.set_provider_config("llm", "DeepSeek", {"model": "deepseek-reasoner"})DeepSeek(SiliconFlow 推理服务),需要环境变量SILICONFLOW_API_KEY:
config.set_provider_config("llm", "SiliconFlow", {"model": "deepseek-ai/DeepSeek-R1"})DeepSeek R1 / Llama 4(TogetherAI),需要环境变量TOGETHER_API_KEY,并先执行pip install together:
config.set_provider_config("llm", "TogetherAI", {"model": "deepseek-ai/DeepSeek-R1"}) config.set_provider_config("llm", "TogetherAI", {"model": "meta-llama/Llama-4-Scout-17B-16E-Instruct"})XAI Grok,需要环境变量XAI_API_KEY:
config.set_provider_config("llm", "XAI", {"model": "grok-4-0709"})Anthropic Claude,需要环境变量ANTHROPIC_API_KEY:
config.set_provider_config("llm", "Anthropic", {"model": "claude-sonnet-4-0"})Google Gemini,需要环境变量GEMINI_API_KEY,并先执行pip install google-genai:
config.set_provider_config('llm', 'Gemini', { 'model': 'gemini-2.0-flash' })DeepSeek(PPIO),需要环境变量PPIO_API_KEY:
config.set_provider_config("llm", "PPIO", {"model": "deepseek/deepseek-r1-turbo"})Claude Sonnet 4.5(Jiekou.AI),需要环境变量JIEKOU_API_KEY:
config.set_provider_config("llm", "JiekouAI", {"model": "claude-sonnet-4-5-20250929"})Ollama(本地):先安装并启动本地 Ollama,用ollama pull qwen3拉取模型,可用ollama run qwen3直接对话测试;Ollama 默认在http://localhost:11434提供 REST API:
config.set_provider_config("llm", "Ollama", {"model": "qwen3"})火山引擎(Volcengine),需要环境变量VOLCENGINE_API_KEY:
config.set_provider_config("llm", "Volcengine", {"model": "deepseek-r1-250120"})GLM,需要环境变量GLM_API_KEY,并先执行pip install zhipuai:
config.set_provider_config("llm", "GLM", {"model": "glm-4-plus"})Amazon Bedrock,需要环境变量AWS_ACCESS_KEY_ID与AWS_SECRET_ACCESS_KEY,并先执行pip install boto3:
config.set_provider_config("llm", "Bedrock", {"model": "us.deepseek.r1-v1:0"})IBM watsonx.ai,需要环境变量WATSONX_APIKEY、WATSONX_URL、WATSONX_PROJECT_ID,并先执行pip install ibm-watsonx-ai:
config.set_provider_config("llm", "watsonx", {"model": "us.deepseek.r1-v1:0"})提示:小模型往往难以严格遵循 prompt 输出规定格式,容易引发"LLM 输出解析失败"问题。官方建议优先使用大参数推理模型(如 deepseek-r1 671b、OpenAI o 系列、Claude 4 sonnet)作为你的 LLM。
5.2 Embedding 配置
"EmbeddingModelName"可选值包括:MilvusEmbedding、OpenAIEmbedding、VoyageEmbedding、SiliconflowEmbedding、PPIOEmbedding、NovitaEmbedding、JiekouAIEmbedding,仓库源码中还实现了BedrockEmbedding、GeminiEmbedding、OllamaEmbedding、VolcengineEmbedding、GLMEmbedding、FastEmbedEmbedding、WatsonXEmbedding、SentenceTransformerEmbedding等(对应文件见 deepsearcher/embedding)。
OpenAI embedding,需要环境变量OPENAI_API_KEY:
config.set_provider_config("embedding", "OpenAIEmbedding", {"model": "text-embedding-3-small"})OpenAI embedding(Azure 形态):
config.set_provider_config("embedding", "OpenAIEmbedding", { "model": "text-embedding-ada-002", "azure_endpoint": "https://<youraifoundry>.openai.azure.com/", "api_version": "2023-05-15" })PyMilvus 内置 embedding 模型:模型名可填"default"、"BAAI/bge-base-en-v1.5"、"BAAI/bge-large-en-v1.5"、"jina-embeddings-v3"等,实现细节见 deepsearcher/embedding/milvus_embedding.py;使用 Jina 模型需要JINAAI_API_KEY,并先执行pip install pymilvus.model:
config.set_provider_config("embedding", "MilvusEmbedding", {"model": "BAAI/bge-base-en-v1.5"}) config.set_provider_config("embedding", "MilvusEmbedding", {"model": "jina-embeddings-v3"})VoyageAI,需要环境变量VOYAGE_API_KEY,并先执行pip install voyageai:
config.set_provider_config("embedding", "VoyageEmbedding", {"model": "voyage-3"})Amazon Bedrock embedding,需先执行pip install boto3:
config.set_provider_config("embedding", "BedrockEmbedding", {"model": "amazon.titan-embed-text-v2:0"})Novita AI embedding,需要环境变量NOVITA_API_KEY:
config.set_provider_config("embedding", "NovitaEmbedding", {"model": "baai/bge-m3"})SiliconFlow embedding,需要环境变量SILICONFLOW_API_KEY:
config.set_provider_config("embedding", "SiliconflowEmbedding", {"model": "BAAI/bge-m3"})火山引擎 embedding,需要环境变量VOLCENGINE_API_KEY:
config.set_provider_config("embedding", "VolcengineEmbedding", {"model": "doubao-embedding-text-240515"})GLM embedding,需要环境变量GLM_API_KEY,并先执行pip install zhipuai:
config.set_provider_config("embedding", "GLMEmbedding", {"model": "embedding-3"})Google Gemini embedding,需要环境变量GEMINI_API_KEY,并先执行pip install google-genai:
config.set_provider_config("embedding", "GeminiEmbedding", {"model": "text-embedding-004"})Ollama embedding,需先执行pip install ollama:
config.set_provider_config("embedding", "OllamaEmbedding", {"model": "bge-m3"})PPIO embedding,需要环境变量PPIO_API_KEY:
config.set_provider_config("embedding", "PPIOEmbedding", {"model": "baai/bge-m3"})Jiekou.AI embedding,需要环境变量JIEKOU_API_KEY:
config.set_provider_config("embedding", "JiekouAIEmbedding", {"model": "qwen/qwen3-embedding-8b"})FastEmbed(本地开源 embedding),需先执行pip install fastembed:
config.set_provider_config("embedding", "FastEmbedEmbedding", {"model": "intfloat/multilingual-e5-large"})IBM watsonx.ai embedding,需要环境变量WATSONX_APIKEY、WATSONX_URL、WATSONX_PROJECT_ID,并先执行pip install ibm-watsonx-ai:
config.set_provider_config("embedding", "WatsonXEmbedding", {"model": "ibm/slate-125m-english-rtrvr-v2"}) config.set_provider_config("embedding", "WatsonXEmbedding", {"model": "sentence-transformers/all-minilm-l6-v2"})补充说明:embedding 的向量维度(
dimension)直接决定向量库 Collection 的建表维度。在默认配置 deepsearcher/config.yaml 中,OpenAIEmbedding 的 dimension 为 1536;切换 embedding 模型后,init_config()会用新维度重新初始化 Collection。
5.3 向量数据库配置
"VectorDBName"官方首页文档给出的可选值以Milvus为主(文档标注"Under development"),但仓库源码中已实际实现Qdrant(deepsearcher/vector_db/qdrant.py)、AzureSearch(deepsearcher/vector_db/azure_search.py)与Oracle(deepsearcher/vector_db/oracle.py)。
Milvus:
config.set_provider_config("vector_db", "Milvus", {"uri": "./milvus.db", "token": ""})Milvus 的三种部署形态(来自官方文档,并在 deepsearcher/vector_db/milvus.py 的Milvus类构造参数uri、token、user、password、db、hybrid中均有对应实现):
- 本地文件模式(最省事):将
uri设为本地文件路径,例如./milvus.db,DeepSearcher 会自动借助 Milvus Lite 把所有数据存储在该文件中; - Milvus Server(适合大规模数据):用 Docker 或 Kubernetes 部署更高效的 Milvus 服务,然后把服务器地址(如
http://localhost:19530)作为uri;还可传入 Milvus 支持的其他连接参数,如host、user、password、secure; - Zilliz Cloud(全托管 Milvus):根据 Zilliz Cloud 控制台提供的 Public Endpoint 与 API Key 调整
uri和token。
默认配置(deepsearcher/config.yaml)中还包含default_collection: "deepsearcher"与db: "default",即数据默认落在名为deepsearcher的 Collection 中。
Azure AI Search:
config.set_provider_config("vector_db", "AzureSearch", { "endpoint": "https://<yourazureaisearch>.search.windows.net", "index_name": "<yourindex>", "api_key": "<yourkey>", "vector_field": "" })5.4 文件加载器配置
"FileLoaderName"可选值:PDFLoader、TextLoader、UnstructuredLoader(官方文档标注 Under development),仓库中还实现了JsonFileLoader与DoclingLoader(见 deepsearcher/loader/file_loader)。
Unstructured支持 API 与本地两种模式:
- API 模式:设置环境变量
UNSTRUCTURED_API_KEY与UNSTRUCTURED_API_URL; - 本地模式:不设置上述环境变量即可走本地处理。
config.set_provider_config("file_loader", "UnstructuredLoader", {})安装要求:
pip install unstructured-ingest # 安装 ingest 管道 pip install "unstructured[all-docs]" # 支持所有文档格式 pip install "unstructured[pdf]" # 仅 PDF 等特定格式当前支持的本地文件类型以pdf为主(仍在持续开发中)。
Docling(需要pip install docling,支持格式以 Docling 官方文档为准):
config.set_provider_config("file_loader", "DoclingLoader", {})仓库中的 examples/load_and_crawl_using_docling.py 提供了 Docling 加载与爬取的完整可运行示例。
5.5 网页爬虫配置
"WebCrawlerName"可选值:FireCrawlCrawler、Crawl4AICrawler、JinaCrawler(仓库中另有DoclingCrawler)。
FireCrawl,需要环境变量FIRECRAWL_API_KEY:
config.set_provider_config("web_crawler", "FireCrawlCrawler", {})可运行示例见 examples/load_website_using_firecrawl.py。
Crawl4AI:首次使用需先执行crawl4ai-setup,并pip install crawl4ai;可通过browser_config定制浏览器行为(无头模式、代理、视口等):
config.set_provider_config("web_crawler", "Crawl4AICrawler", {"browser_config": {"headless": True, "verbose": True}})Jina Reader,需要环境变量JINA_API_TOKEN或JINAAI_API_KEY:
config.set_provider_config("web_crawler", "JinaCrawler", {})Docling 爬虫(需要pip install docling):
config.set_provider_config("web_crawler", "DoclingCrawler", {})六、Python CLI 模式:不写代码也能加载与查询
CLI 入口实现在 deepsearcher/cli.py,包含load与query两个子命令。
6.1 加载数据
deepsearcher load "your_local_path_or_url" # 加载到指定 Collection deepsearcher load "your_local_path_or_url" --collection_name "your_collection_name" --collection_desc "your_collection_description"从本地文件加载:
deepsearcher load "/path/to/your/local/file.pdf" # 一次加载多个文件 deepsearcher load "/path/to/your/local/file1.pdf" "/path/to/your/local/file2.md"从 URL 加载(需要先在环境变量中设置FIRECRAWL_API_KEY):
deepsearcher load "https://www.wikiwand.com/en/articles/DeepSeek"load子命令的完整参数(对应 cli.py):
| 参数 | 默认值 | 说明 |
|---|---|---|
load_path | 必填 | 一个或多个本地文件路径或 URL |
--batch_size | 256 | 加载知识时向量化的批量大小 |
--collection_name | 无 | 数据写入的目标 Collection 名称 |
--collection_desc | 无 | Collection 的描述 |
--force_new_collection | False | 设为 True 时每次加载都先删除原 Collection 再新建 |
CLI 内部会按http前缀自动区分 URL 与本地文件:URL 交给load_from_website(),本地文件交给load_from_local_files()。
6.2 查询
deepsearcher query "Write a report about xxx."query子命令支持--max_iter(默认 3),用于控制反思迭代的最大轮数。查询结束后 CLI 会彩色打印最终答案,并逐条列出检索引用(chunk 文本前 60 字符与来源 reference)。
6.3 帮助信息
deepsearcher --help deepsearcher load --help deepsearcher query --help注意:早期的
--query/--load写法已弃用(cli.py 会打印弃用提示并退出),请使用上面的子命令语法。
七、部署:YAML 配置 + FastAPI 服务
7.1 通过 config.yaml 配置模块
除了 Python API,还可以直接修改 deepsearcher/config.yaml 完成全部模块的默认配置。例如在llm一节中写入你的OPENAI_API_KEY,或在embedding一节切换 embedding 模型。该文件的三段结构分别是:
provide_settings:llm / embedding / file_loader / web_crawler / vector_db 五类 provider 及其参数字典(文件内已内置 OpenAI、DeepSeek、SiliconFlow、PPIO、JiekouAI、TogetherAI、AzureOpenAI、Ollama、Novita 等多份 LLM 注释示例,以及 MilvusEmbedding、VoyageEmbedding、BedrockEmbedding、GeminiEmbedding、FastEmbedEmbedding 等 embedding 注释示例);query_settings.max_iter:查询反思迭代上限,默认 3;load_settings:chunk_size: 1500与chunk_overlap: 100,即加载时的切分粒度。
7.2 启动 FastAPI 服务
主脚本 main.py 会启动一个 FastAPI 服务,默认监听localhost:8000:
python main.py启动后即可在浏览器打开http://localhost:8000/docs访问 Swagger 交互式 API 文档,点击 "Try it out" 填入参数即可直接调用接口。
从 main.py 的源码可以看到内置的四个端点:
| 端点 | 方法 | 功能 |
|---|---|---|
/set-provider-config/ | POST | 动态设置某个 feature 的 provider 与参数(Body 为{feature, provider, config}),并立即重新init_config |
/load-files/ | POST | 加载本地文件/目录(支持paths、collection_name、collection_description、batch_size) |
/load-website/ | POST | 加载网页(支持urls及上述同名参数) |
/query/ | GET | 查询,参数original_query与max_iter(ge=1) |
服务端还支持通过--enable-cors开启全来源 CORS(默认关闭):
python main.py --enable-cors八、常见问题(FAQ)
Q1:为什么解析 LLM 输出格式会失败 / 如何选择 LLM?
A1:小模型难以严格遵循 prompt 生成期望的响应,通常会导致格式解析问题。更稳妥的做法是使用大参数推理模型(如 deepseek-r1 671b、OpenAI o 系列、Claude 4 sonnet)作为你的 LLM。
Q2:报错OSError: We couldn't connect to 'https://huggingface.co' to load this file ... GPTCache/paraphrase-albert-small-v2 ...怎么办?
A2:这主要源于对 Hugging Face 的访问异常,可能是网络或权限问题,可尝试以下两种方法:
- 网络问题——设置代理,添加镜像环境变量:
export HF_ENDPOINT=https://hf-mirror.com- 权限问题——设置个人 token:
export HUGGING_FACE_HUB_TOKEN=xxxxQ3:DeepSearcher 无法在 Jupyter notebook 中运行?
A3:安装nest_asyncio,并在 notebook 开头加入如下代码块:
pip install nest_asyncioimport nest_asyncio nest_asyncio.apply()九、模块支持清单与评估
官方首页文档还整理了一份完整的模块支持清单,结合仓库源码目录可归纳如下:
- Embedding 模型:开源 embedding(Milvus 内置)、OpenAI(
OPENAI_API_KEY)、VoyageAI(VOYAGE_API_KEY)、Amazon Bedrock(AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY)、FastEmbed、PPIO(PPIO_API_KEY)、Novita AI(NOVITA_API_KEY)、IBM watsonx.ai(WATSONX_APIKEY/WATSONX_URL/WATSONX_PROJECT_ID)、Jiekou.AI(JIEKOU_API_KEY)等,源码见 deepsearcher/embedding; - LLM:OpenAI、DeepSeek、XAI Grok、Anthropic Claude、SiliconFlow、PPIO、TogetherAI、Google Gemini、Ollama、Novita AI、IBM watsonx.ai、Jiekou.AI、阿里云、火山引擎、GLM、Azure OpenAI 等,源码见 deepsearcher/llm;
- 文档加载器:本地文件(PDF/txt/md loader、Unstructured、Docling),网页爬虫(FireCrawl、Jina Reader、Crawl4AI、Docling),源码见 deepsearcher/loader;
- 向量数据库:Milvus 与 Zilliz Cloud(全托管 Milvus)、Qdrant,源码见 deepsearcher/vector_db。
评估方面,仓库提供了 evaluation 目录:其中 evaluation/evaluate.py 与 evaluation/eval_config.yaml 是评测入口与配置;evaluation/jev_stopping子目录包含针对不同停止策略的完整评测实验(含 100 条样本的run_full100.py运行脚本、replay_results.py结果回放、plot_comparison.py绘图等);evaluation/plot_results中提供了max_iter与平均 token 用量、错误数、召回率之间的关系图。由此可见,查询轮数(max_iter)与答案质量、token 成本之间的权衡是 DeepSearcher 官方重点评测的维度,这也是我们在实际部署时需要针对自己的数据集调优的关键参数。
十、未来规划
根据官方首页文档,项目后续计划包括:增强网页爬取能力、支持更多向量数据库(如 FAISS 等)、增加更多大模型接入,以及提供 RESTful API 接口(该项已完成,即上文第七节的 FastAPI 服务)。本项目以 Apache-2.0 协议开源(见 LICENSE),欢迎贡献。
小结:DeepSearcher 的价值在于把"深度研究"所需的子问题分解、迭代检索、相关性重排、反思与总结全部交给 LLM 驱动,同时通过统一配置层将 LLM、Embedding、向量库、加载器、爬虫五类模块解耦,使企业可以围绕私有数据快速搭建定制化的深度研究问答系统。无论是用 Python API、CLI 还是 FastAPI 服务,核心都是"先加载与向量化数据,再迭代式深度查询"这两步;调优时优先关注max_iter与 embedding / LLM 的选型即可。
- 人工智能
- 大模型
- RAG
- AI Agent
- 深度研究
- 知识库
【免费下载链接】deep-searcher
Open Source Deep Research Alternative to Reason and Search on Private Data. Written in Python.
相关推荐
DeepSearcher 实战指南:基于向量库与深度推理大模型的私有数据 Deep Search 系统
DeepSearcher 实战指南:基于向量库与深度推理大模型的私有数据 Deep Search 系统 本文以 DeepSearcher 官方 README 为
人工智能大模型RAGAI Agent深度研究知识库generative-ai-for-beginners 实战:用 RAG 与向量数据库把私有数据锚定到 LLM 应用
generative ai for beginners 实战:用 RAG 与向量数据库把私有数据锚定到 LLM 应用 本文基于 generative ai fo
教程人工智能大模型generative-ai-for-beginners 第 15 课实战:用 RAG 与向量数据库把私有数据「接地」到 LLM
generative ai for beginners 第 15 课实战:用 RAG 与向量数据库把私有数据「接地」到 LLM 本文基于 generative
教程人工智能大模型
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考