一款功能强大的开源 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 会让生活更加轻松!

设置

  1. 选择一个搜索提供商:

    • 访问 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
  1. 选择重排序解决方案:

    • Jina 快速入门:在 Jina AI 注册以获取 API 密钥,立即使用
    • 自托管选项:使用开源模型如 Qwen2-7B-instruct 本地设置 Infinity 
    • 服务器
    • 有关重排序选项的更多详细信息,请参阅我们的重排序指南
  2. 设置 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 modelsexport LITELLM_SEARCH_MODEL_ID='openrouter/google/gemini-2.0-flash-001'  # For search tasksexport LITELLM_ORCHESTRATOR_MODEL_ID='openrouter/google/gemini-2.0-flash-001'  # For agent orchestrationexport 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 OpenDeepSearchToolimport os
# Set environment variables for API keysos.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 SearXNGpython 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 OpenDeepSearchToolfrom smolagents import CodeAgent, LiteLLMModelimport os
# Set environment variables for API keysos.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 OpenDeepSearchToolfrom opendeepsearch.wolfram_tool import WolframAlphaToolfrom opendeepsearch.prompts import REACT_PROMPTfrom smolagents import LiteLLMModel, ToolCallingAgent, Toolimport os
# Set environment variables for API keysos.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 toolwolfram_tool = WolframAlphaTool(app_id=os.environ["WOLFRAM_ALPHA_APP_ID"])
# Initialize the React Agent with search and wolfram toolsreact_agent = ToolCallingAgent(    tools=[search_agent, wolfram_tool],    model=model,    prompt_templates=REACT_PROMPT # Using REACT_PROMPT as system prompt)
# Example query for the React Agentquery = "What is the distance, in metres, between the Colosseum in Rome and the Rialto bridge in Venice"result = react_agent.run(query)
print(result)



项目链接

https://github.com/sentient-agi/OpenDeepSearch

扫码加入技术交流群,备注开发语言-城市-昵称

(文:GitHubStore)

欢迎分享

发表评论