一款功能强大的开源 AI 搜索工具OpenDeepSearch
项目简介
OpenDeepSearch 是一款轻量级且强大的搜索工具,专为与 AI 代理无缝集成而设计。它支持深度网络搜索和检索,针对 Hugging Face 的 SmolAgents 生态系统进行了优化。
- 性能:ODS 在单跳查询(如 SimpleQA
)上与闭源搜索替代品表现相当。 - 高级功能:ODS 在多跳查询(如 FRAMES 基准测试)方面比封闭源代码的搜索替代品表现更好
。
特性 
- 语义搜索
:利用 Crawl4AI 和语义搜索重排器(如 Qwen2-7B-instruct 和 Jina AI)提供深入的结果 - 两种操作模式
:
- 默认模式:快速高效的搜索,最小化延迟。
- 专业模式(深度搜索):更深入、更准确的结果,但需要额外的处理时间。
- 优化用于 AI 代理
:与 SmolAgents 如 CodeAgent无缝协作。 - 快速轻量
:专为速度和效率设计,设置简单。 - 可扩展
:易于配置,可配合不同模型和 API 使用。
安装 
要安装 OpenDeepSearch,请运行:
pip install -e . #you can also use: uv pip install -e . pip install -r requirements.txt #you can also use: uv pip install -r requirements.txt
注意:您必须安装 torch 。注意:使用 uv 代替常规的 pip 会让生活更加轻松!
设置
- 选择一个搜索提供商:
- 访问 serper.dev 创建账户。
- 获取您的 API 密钥并将其存储为环境变量:
- 选项 1:Serper.dev:获得 2500 个免费积分并添加您的 API 密钥。
export SERPER_API_KEY='your-api-key-here'
选项 2:SearXNG:使用自托管或公共 SearXNG 实例。
- 初始化 OpenDeepSearch 时,请指定 SearXNG 实例 URL。
- 如您的实例需要认证,可选择性提供 API 密钥:
export SEARXNG_INSTANCE_URL='https://your-searxng-instance.com' export SEARXNG_API_KEY='your-api-key-here' # Optional
- 选择重排序解决方案:
- Jina 快速入门:在 Jina AI 注册以获取 API 密钥,立即使用
- 自托管选项:使用开源模型如 Qwen2-7B-instruct 本地设置 Infinity
- 服务器
- 有关重排序选项的更多详细信息,请参阅我们的重排序指南
- 设置 LiteLLM 提供者:
- OpenAI
- Anthropic
- Google (Gemini)
- OpenRouter
- HuggingFace
- 烟花
- 以及更多!
- 从支持列表中选择一个提供商,包括:
- 将您选择的提供者的 API 密钥设置为环境变量:
export <PROVIDER>_API_KEY='your-api-key-here' # e.g., OPENAI_API_KEY, ANTHROPIC_API_KEY
- 对于 OpenAI,您还可以设置自定义的基本 URL(对于自托管端点或代理很有用):
export OPENAI_BASE_URL='https://your-custom-openai-endpoint.com'
- 您可以为不同的任务设置默认的 LiteLLM 模型 ID:
# General default model (fallback for all tasks) export LITELLM_MODEL_ID='openrouter/google/gemini-2.0-flash-001' # Task-specific models export LITELLM_SEARCH_MODEL_ID='openrouter/google/gemini-2.0-flash-001' # For search tasks export LITELLM_ORCHESTRATOR_MODEL_ID='openrouter/google/gemini-2.0-flash-001' # For agent orchestration export LITELLM_EVAL_MODEL_ID='gpt-4o-mini' # For evaluation tasks
- 当初始化 OpenDeepSearch 时,您可以使用提供者的格式指定您选择的模型(这将覆盖环境变量):
search_agent = OpenDeepSearchTool(model_name="provider/model-name") # e.g., "anthropic/claude-3-opus-20240229", 'huggingface/microsoft/codebert-base', 'openrouter/google/gemini-2.0-flash-001'
使用方法
您可以使用 OpenDeepSearch 独立使用,或与 SmolAgents 集成以增强推理和代码生成功能。
使用 OpenDeepSearch 独立 
from opendeepsearch import OpenDeepSearchTool import os # Set environment variables for API keys os.environ["SERPER_API_KEY"] = "your-serper-api-key-here" # If using Serper # Or for SearXNG # os.environ["SEARXNG_INSTANCE_URL"] = "https://your-searxng-instance.com" # os.environ["SEARXNG_API_KEY"] = "your-api-key-here" # Optional os.environ["OPENROUTER_API_KEY"] = "your-openrouter-api-key-here" os.environ["JINA_API_KEY"] = "your-jina-api-key-here" # Using Serper (default) search_agent = OpenDeepSearchTool( model_name="openrouter/google/gemini-2.0-flash-001", reranker="jina" ) # Or using SearXNG # search_agent = OpenDeepSearchTool( # model_name="openrouter/google/gemini-2.0-flash-001", # reranker="jina", # search_provider="searxng", # searxng_instance_url="https://your-searxng-instance.com", # searxng_api_key="your-api-key-here" # Optional # ) query = "Fastest land animal?" result = search_agent.forward(query) print(result)
运行 Gradio 演示 
尝试使用用户友好的界面体验 OpenDeepSearch,只需运行:
python gradio_demo.py
这将启动一个本地 Web 界面,您可以在其中交互式地测试不同的搜索查询和模式。
您可以使用命令行参数自定义演示:
# Using Serper (default) python gradio_demo.py --model-name "openrouter/google/gemini-2.0-flash-001" --reranker "jina" # Using SearXNG python gradio_demo.py --model-name "openrouter/google/gemini-2.0-flash-001" --reranker "jina" \ --search-provider "searxng" --searxng-instance "https://your-searxng-instance.com" \ --searxng-api-key "your-api-key-here" # Optional
可用选项:
- –model-name : 用于搜索的LLM模型
- –orchestrator-model : 用于代理协调器的LLM模型
- –reranker : 使用的重排器(
jina或infinity) - –search-provider : 搜索提供商(
serper或searxng) - –searxng-instance : SearXNG 实例 URL(如果使用
searxng,则为必填) - –searxng-api-key : SearXNG API 密钥(可选)
- –serper-api-key : Serper API 密钥(可选,如果没有提供,将使用环境变量)
- –openai-base-url : OpenAI API 基础 URL(可选,如果没有提供,将使用 OPENAI_BASE_URL 环境变量)
与 SmolAgents 和 LiteLLM 集成 

from opendeepsearch import OpenDeepSearchTool from smolagents import CodeAgent, LiteLLMModel import os # Set environment variables for API keys os.environ["SERPER_API_KEY"] = "your-serper-api-key-here" # If using Serper # Or for SearXNG # os.environ["SEARXNG_INSTANCE_URL"] = "https://your-searxng-instance.com" # os.environ["SEARXNG_API_KEY"] = "your-api-key-here" # Optional os.environ["OPENROUTER_API_KEY"] = "your-openrouter-api-key-here" os.environ["JINA_API_KEY"] = "your-jina-api-key-here" # Using Serper (default) search_agent = OpenDeepSearchTool( model_name="openrouter/google/gemini-2.0-flash-001", reranker="jina" ) # Or using SearXNG # search_agent = OpenDeepSearchTool( # model_name="openrouter/google/gemini-2.0-flash-001", # reranker="jina", # search_provider="searxng", # searxng_instance_url="https://your-searxng-instance.com", # searxng_api_key="your-api-key-here" # Optional # ) model = LiteLLMModel( "openrouter/google/gemini-2.0-flash-001", temperature=0.2 ) code_agent = CodeAgent(tools=[search_agent], model=model) query = "How long would a cheetah at full speed take to run the length of Pont Alexandre III?" result = code_agent.run(query) print(result)
带有数学和搜索工具的 ReAct 智能体 

from opendeepsearch import OpenDeepSearchTool from opendeepsearch.wolfram_tool import WolframAlphaTool from opendeepsearch.prompts import REACT_PROMPT from smolagents import LiteLLMModel, ToolCallingAgent, Tool import os # Set environment variables for API keys os.environ["SERPER_API_KEY"] = "your-serper-api-key-here" os.environ["JINA_API_KEY"] = "your-jina-api-key-here" os.environ["WOLFRAM_ALPHA_APP_ID"] = "your-wolfram-alpha-app-id-here" os.environ["FIREWORKS_API_KEY"] = "your-fireworks-api-key-here" model = LiteLLMModel( "fireworks_ai/llama-v3p1-70b-instruct", # Your Fireworks Deepseek model temperature=0.7 ) search_agent = OpenDeepSearchTool(model_name="fireworks_ai/llama-v3p1-70b-instruct", reranker="jina") # Set reranker to "jina" or "infinity" # Initialize the Wolfram Alpha tool wolfram_tool = WolframAlphaTool(app_id=os.environ["WOLFRAM_ALPHA_APP_ID"]) # Initialize the React Agent with search and wolfram tools react_agent = ToolCallingAgent( tools=[search_agent, wolfram_tool], model=model, prompt_templates=REACT_PROMPT # Using REACT_PROMPT as system prompt ) # Example query for the React Agent query = "What is the distance, in metres, between the Colosseum in Rome and the Rialto bridge in Venice" result = react_agent.run(query) print(result)
项目链接
扫码加入技术交流群,备注「开发语言-城市-昵称」
(文:GitHubStore)