前言¶
DeepSeek Harness (DSH) 的 ctx.web 裂缝为智能体提供了联网能力。当需要实现 Web 搜索时,现有的通用方案通常涉及模型调用,成本较高或依赖第三方服务。dsh-web-search-searxng 是一个基于 SearXNG 的 WebSearchProvider 实现,它将搜索请求转换为直接的 HTTP GET 调用,对接本地 SearXNG 实例的 JSON API,从而在保持隐私的同时实现零模型调用成本。
功能概览¶
这是一个实现型插件,通过 inject: ['web'] 将提供者注册到 ctx.web。
- 自托管与隐私:查询发送至本地 SearXNG 实例,不经过第三方搜索供应商。
- 零模型成本:单次搜索仅为一次 HTTP 请求,不消耗大模型 Token。
- 多引擎聚合:利用 SearXNG 后端聚合 Bing、Brave、Baidu、Google、DuckDuckGo 等多个搜索引擎的结果。
- 灵活的鉴权:支持通过
ctx.credentials或环境变量解析 API Key。 - 会话日志:仅在 Agent 会话发起的请求中记录请求日志(非 Agent 调用无日志)。
安装与启用¶
安装此插件需要 DeepSeek Harness 已挂载 web 裂缝(标准 Profile 均自带)。
dsh plugin --profile web add /path/to/dsh-web-search-searxng
安装后,DSH 会自动应用 cordis.patch.yml 注册提供者并切换搜索源。若需手动配置,可编辑 cordis.patch.yml。
配置¶
插件优先读取环境变量,环境变量未设置时使用默认值或配置文件值。
环境变量¶
在启动 DSH 进程前设置以下环境变量:
export SEARXNG_BASE_URL=http://localhost:8080 # 默认值
export SEARXNG_MAX_RESULTS=10 # 默认值
export SEARXNG_LANGUAGE=en # 默认值 'all' (不传参)
配置文件¶
在 cordis.patch.yml 或 Settings 中配置:
- id: web-search-searxng
name: '@deepseek-ai/dsh-web-search-searxng'
config:
baseURL: http://localhost:8080
maxResults: 10
language: en
# apiKeyEnv: SEARXNG_API_KEY # 优先读取环境变量
安全说明:apiKey 字段携带 role('secret'),不会出现在 describe 响应中。
Docker Desktop 注意事项¶
如果 SearXNG 运行在 Docker Desktop 中,来自宿主机的请求会被 Docker 网关(如 172.18.0.1)接管。SearXNG 的速率限制器会将此视为外部 IP 并触发 API_MAX = 4/hour 限制。
为避免此问题,需在 SearXNG 的 limiter.toml 中配置代理信任和 IP 透传,并在插件中启用转发头:
- 在 SearXNG 的
limiter.toml中添加:
trusted_proxies = ['127.0.0.0/8']
pass_ip = ['127.0.0.1', '172.18.0.0/16']
- 确保插件配置中启用了
X-Forwarded-For头部转发(代码默认行为)。
请求日志¶
插件会在发起搜索请求前,向当前 Agent 会话追加一个仅日志用途的事件 web/searxng-search-request,包含解析后的端点和查询词。直接通过代码调用插件且无启动 Agent 会话时,不会记录日志。
生态背景¶
DeepSeek Harness 采用「一切皆插件」的理念。此插件由社区开发者 acdcgz 维护,遵循 MIT 许可证。其目录入口位于 SkillHub,源码托管于 GitHub。