项目简介
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)
项目链接
https://github.com/sentient-agi/OpenDeepSearch
扫码加入技术交流群,备注「开发语言-城市-昵称」
(文:GitHubStore)