安爸-超级家庭

一款功能强大的开源 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 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 : 使用的重排器( jinainfinity
  • –search-provider : 搜索提供商( serpersearxng
  • –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)

项目链接

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

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

(文:GitHubStore)

一款功能强大的开源 AI 搜索工具OpenDeepSearch最先出现在每时AI


扫描二维码,在手机上阅读