菜单

搜索 API 集成

相关源文件

目的

本文详细介绍了 Local Deep Researcher 如何与各种搜索提供商交互以从网络收集信息。它涵盖了支持的搜索引擎、配置选项、集成模式以及搜索功能的内部实现细节。有关整体研究工作流程的运作方式,请参阅研究工作流程

概述

搜索 API 组件使 Local Deep Researcher 能够使用各种搜索提供商从互联网检索信息。这项能力对于系统能够对用户指定的主题进行独立研究至关重要。

来源: src/ollama_deep_researcher/utils.py154-365 .env.example1-4

支持的搜索提供商

系统支持四种不同的搜索提供商,每种都有其自身的特点和配置要求

提供商功能需要 API 密钥配置特性
DuckDuckGoduckduckgo_search()默认选项文本搜索结果
SearXNGsearxng_search()自托管实例 URL私有搜索元搜索引擎
Tavilytavily_search()TAVILY_API_KEY包含内容的增强搜索
Perplexityperplexity_search()PERPLEXITY_API_KEY带引用的 AI 驱动搜索

提供商选择

活动的搜索提供商由 SEARCH_API 环境变量决定,可设置为以下值之一

  • duckduckgo (默认)
  • searxng
  • tavily
  • perplexity

来源: .env.example1-4 src/ollama_deep_researcher/utils.py154-365

搜索提供商实现

DuckDuckGo 搜索实现使用 DDGS 库进行网页搜索,无需 API 密钥。

该函数以标准化格式返回结果,包括标题、URL、内容片段,并在启用 fetch_full_page 时可选地返回完整页面内容。

来源: src/ollama_deep_researcher/utils.py154-205

SearXNG 是一个注重隐私的元搜索引擎,可以自托管。其实现使用了 LangChain 的 SearxSearchWrapper

配置通过 SEARXNG_URL 环境变量管理,如果未指定,则默认为 http://:8888

来源: src/ollama_deep_researcher/utils.py208-257

Tavily 是一个商业搜索 API,需要 API 密钥。它内置了包含来自源的原始内容的能力。

Tavily 集成相对简单,因为 API 在请求时会处理内容检索。

来源: src/ollama_deep_researcher/utils.py260-286

Perplexity 提供 AI 增强的搜索结果,并需要 API 密钥。它不仅返回搜索结果,还返回引用。

与其他提供商不同,Perplexity 返回一个带有多个引用的单一连贯响应,系统将其格式化为标准化的结果结构。

来源: src/ollama_deep_researcher/utils.py289-365

结果处理

所有搜索提供商都以标准化格式返回结果,以确保在整个系统中进行一致的处理。搜索结果会先由实用函数处理,然后再传递给 LLM 进行分析。

标准化结果格式

每个搜索结果包含以下字段

{
  "results": [
    {
      "title": "Result Title",
      "url": "https://result-url.com",
      "content": "Snippet or summary of content",
      "raw_content": "Full page content (if fetch_full_page=True)"
    },
    // Additional results...
  ]
}

去重和格式化

deduplicate_and_format_sources 函数执行两项关键任务

  1. 根据 URL 删除重复结果
  2. 将结果格式化为结构化字符串,供 LLM 处理

此函数能够自适应处理单个搜索响应和来自多个搜索的批量响应,从而在执行搜索操作时提供了灵活性。

来源: src/ollama_deep_researcher/utils.py49-110

全页内容检索

当启用 FETCH_FULL_PAGE 时,系统会尝试检索搜索结果中引用的网页的完整内容。这为 LLM 提供了更全面的信息进行分析。

The fetch_raw_content 函数

  1. 从指定 URL 获取 HTML,超时时间为 10 秒
  2. 使用 markdownify 库将 HTML 转换为 Markdown 格式
  3. 如果检索失败,则返回 Markdown 内容或 None

此功能是可选的,可以禁用以减少处理时间和带宽使用。

来源: src/ollama_deep_researcher/utils.py130-151 .env.example16-17

与研究工作流程的集成

搜索功能与更广泛的研究工作流程集成如下

在每次研究迭代中,系统会

  1. 根据研究主题和已识别的知识空白生成优化的搜索查询
  2. 使用配置的提供商执行搜索
  3. 处理并格式化搜索结果
  4. 将格式化的结果传递给 LLM 进行分析和总结
  5. 识别下一次迭代的知识空白

来源: src/ollama_deep_researcher/utils.py154-365

配置选项

搜索功能通过环境变量进行配置

可变目的默认选项
SEARCH_API选择搜索提供商duckduckgoduckduckgo, searxng, tavily, perplexity
SEARXNG_URLSearXNG 实例 URLhttp://:8888任何有效的 URL
TAVILY_API_KEYTavily API 凭据来自 tavily.com 的有效 API 密钥
PERPLEXITY_API_KEYPerplexity API 凭据来自 perplexity.ai 的有效 API 密钥
FETCH_FULL_PAGE是否检索完整页面内容TrueTrue, False

这些配置选项允许用户根据隐私要求、API 密钥的可用性以及对全面内容检索的需求等因素选择其首选的搜索提供商。

来源: .env.example1-9 .env.example16-17

结论

搜索 API 集成为 Local Deep Researcher 提供了使用不同搜索提供商从各种网络源收集信息的能力。该系统的模块化设计允许未来轻松扩展以支持更多搜索提供商,同时为应用程序的其余部分保持一致的接口。

标准化结果格式确保 LLM 无论选择哪个搜索提供商,都能以一致的方式处理搜索结果,从而促进了构成 Local Deep Researcher 核心功能的迭代研究过程。