news 2026/9/26 15:50:48

DeepSearcher 实战指南:用 LLM + 向量数据库构建私有数据深度研究系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSearcher 实战指南:用 LLM + 向量数据库构建私有数据深度研究系统
  • 人工智能
  • 大模型
  • RAG
  • AI Agent
  • 深度研究
  • 知识库

【免费下载链接】deep-searcher

Open Source Deep Research Alternative to Reason and Search on Private Data. Written in Python.

项目地址:https://gitcode.com/gh_mirrors/de/deep-searcher
点击查看免费下载

导读

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),它的完整工作流是:

  1. 子问题分解:根据原始问题拆分成至多 4 个子问题(SUB_QUERY_PROMPT),简单问题则保留原问题;
  2. 向量检索:将各子问题向量化后在向量库中检索相关 chunk(可选先经CollectionRouter路由到合适的 Collection);
  3. 相关性重排:用RERANK_PROMPT让 LLM 逐条判定 chunk 是否对回答问题有帮助,只回答 YES/NO;
  4. 反思迭代:用REFLECT_PROMPT判断"是否还需要继续搜索",若需要则生成至多 3 条新搜索 query,进入下一轮(总轮数受max_iter限制);若不需要则停止;
  5. 总结报告:用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中均有对应实现):

  1. 本地文件模式(最省事):将uri设为本地文件路径,例如./milvus.db,DeepSearcher 会自动借助 Milvus Lite 把所有数据存储在该文件中;
  2. Milvus Server(适合大规模数据):用 Docker 或 Kubernetes 部署更高效的 Milvus 服务,然后把服务器地址(如http://localhost:19530)作为uri;还可传入 Milvus 支持的其他连接参数,如host、user、password、secure;
  3. 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_size256加载知识时向量化的批量大小
--collection_name无数据写入的目标 Collection 名称
--collection_desc无Collection 的描述
--force_new_collectionFalse设为 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 的访问异常,可能是网络或权限问题,可尝试以下两种方法:

  1. 网络问题——设置代理,添加镜像环境变量:
export HF_ENDPOINT=https://hf-mirror.com
  1. 权限问题——设置个人 token:
export HUGGING_FACE_HUB_TOKEN=xxxx

Q3:DeepSearcher 无法在 Jupyter notebook 中运行?

A3:安装nest_asyncio,并在 notebook 开头加入如下代码块:

pip install nest_asyncio
import 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.

项目地址:https://gitcode.com/gh_mirrors/de/deep-searcher
点击查看免费下载

相关推荐

上一篇:旧机顶盒刷Armbian:7×24小时家庭服务器改造实战
下一篇:DeepChat i18n 正确性契约:单一语言清单、翻译资源约束与自动化回归防护

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 15:47:16

SpringBoot+Vue在线点餐系统:毕业设计源码解析与部署指南

简介&#xff1a;基于Springboot和Vue的在线点餐系统源码与数据库&#xff0c;是一份面向计算机相关专业毕业设计的高质量项目&#xff0c;也适合期末课程设计、课程大作业等场景。资源包含完整的后端逻辑、前端页面以及数据库脚本&#xff0c;涉及用户点餐、订单管理、菜品分类…

作者头像 李华
网站建设 2026/9/26 15:45:43

接近开关选型接线与故障排除实战指南

1. 接近开关到底是个什么东西干自动化这行十几年&#xff0c;接近开关是我见过最“不起眼但离了它真不行”的元件之一。它不像PLC那样引人注目&#xff0c;也不像伺服电机那样动辄上热搜&#xff0c;但产线上十台设备里有八台都藏着它——限位、计数、测速、定位、安全门检测&a…

作者头像 李华
网站建设 2026/9/26 15:44:10

【转】AdoQuery 报 E_FAIL?从 CursorLocation 到 TaoToken 配置的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 15:41:54

TensorFlow2.0汉字手写识别:3755类的完整实现与避坑指南

简介&#xff1a;面向深度学习实践的中文手写汉字识别项目&#xff0c;基于TensorFlow2.0实现&#xff0c;提供一套完整的毕业设计源码。项目覆盖数据集获取与转换、CNN模型构建、训练评估、单字识别预测等环节&#xff0c;适合计算机专业学生用于课程设计、毕业设计或TensorFl…

作者头像 李华