DSH Native Search:用模型原生托管搜索接入 DSH web.search

前言

在 DeepSeek Harness(DSH)里做联网,常见路径是独立搜索 API 或自带抓取后端:web_search 工具拿到 query,再经 web.search 服务返回摘要与来源。若你已经在模型路由上配置了 OpenAI Responses、Anthropic Messages、Gemini 等提供商原生网页搜索,却希望 DSH 仍走同一套 web_search 契约,就需要一个 Host 插件把「托管搜索」挂到 DSH 的搜索提供方上,而不是在主聊天请求里偷偷注入搜索工具或把普通模型回复当成搜索结果。

下面介绍社区插件 DSH Native Search(dsh-native-search),维护者为 luhcow,在 SkillHub 插件目录 分类为联网工具。项目为 MIT 许可,初始版本 0.1.0,GitHub 星标为 0(以目录页为准)。

这是什么

DSH Native Search 是实验性 Host 插件:把已连接模型提供商的原生托管网页搜索接入 DSH 的 web.search 服务,供原有 web_search 工具使用。包名、插件条目 ID 与搜索提供方 ID 均为 dsh-native-search。

与「多轮 Chat Completions 里拼 $web_search」或「无证据就降级到别的后端」不同,本插件强调:严格单请求、无重试、无降级、无续接。每次插件搜索至多发出一次 HTTP POST;只发送当前搜索词,不发送对话历史,不修改 DSH 核心,也不把搜索工具注入主聊天请求。服务端可在这一次请求内部多次搜索,但插件不会把仅有引用链接或自由文本的回答伪装成已验收的搜索结果。

支持的协议与路由

协议选择优先级为:插件显式 protocol > 模型 api > 路由 api > 未声明 api 时的已知提供商默认值。已声明但不支持的 api 会在发请求前失败,不会因提供商名称自动改打其他协议;显式 protocol 表示你确认该端点实现了对应原生搜索协议,插件不会探测或回退。

协议 / 路由 要点
openai-responses(azure-openai-responses 同映射) POST /responses,tools: [{ type: "web_search", ... }];须有已完成的 web_search_call
anthropic-messages POST /v1/messages,web_search_20250305;须有配对的 server_tool_use 与成功的 web_search_tool_result
google-generative-ai models/{model}:generateContent,google_search;须有有效 webSearchQueries 或 web groundingChunks
xai-responses xAI Responses web_search;须有已完成的 web_search_call
copilot-responses Copilot Responses web_search;凭据须为可用 token,不实现 OAuth 刷新

无 api 时,openai、anthropic、google、xai、github-copilot 使用上表默认协议。xAI / Copilot 适配仍属实验性。不实现 Moonshot $web_search 的 Chat Completions 多轮往返,也不提供 moonshot-chat;不支持普通 Chat Completions、Bedrock、Vertex、ChatGPT 订阅 OAuth 或 openai-codex-responses 等范围外的路由。

安装与依赖

要求 Node.js 20.3.0+。peer 依赖对齐当前 DSH 0.2.0-rc.2(@deepseek-ai/dsh-web、dsh-settings、dsh-credentials、dsh-llm-pi-ai 等)。GitHub 公开源码不等于已发布到 npm;README 说明目前需从源码打包后交给 profile 的插件管理器安装(管理器解析运行时依赖并检查版本兼容性)。

在已有插件源码目录中,可先跑单元测试再打包(测试不安装 DSH 运行时、不读凭据、不发真实搜索):

npm test
npm pack --ignore-scripts

将生成的 .tgz 交给目标 DSH profile 的插件管理器安装。若管理器提示需要重启,请重启 DSH。安装补丁会创建 dsh-native-search 条目,但不会自动切换搜索提供方;修改本地源码也不会自动替换已安装旧版本。

配置与启用

先在 DSH 模型设置中配置对应路由的凭据;插件每次搜索重新解析引用,不缓存密钥。内置 openai、anthropic、google、xai 可沿用默认端点与凭据环境变量名(OPENAI_API_KEY、ANTHROPIC_API_KEY、GEMINI_API_KEY、XAI_API_KEY)。github-copilot 无默认凭据名,须配置 apiKeyEnv。自定义路由在 llm-pi-ai 中提供 baseURL、apiKeyEnv 及可识别的 api(或在插件中显式 protocol)。例如 xAI 聊天路由若声明 api: openai-completions,须在插件中显式 protocol: xai-responses 才会走独立 Responses 搜索接口。

插件配置示例(也可在 profile 补丁中按 ID 覆写已安装条目):

- id: dsh-native-search
  config:
    provider: anthropic
    model: claude-sonnet-4-5
    searchContextSize: medium
    timeoutMs: 30000
- id: web
  config:
    searchProvider: dsh-native-search

provider 为 DSH 模型路由 ID,model 为该路由上支持托管搜索的模型 ID。searchContextSize 仅用于 OpenAI Responses。默认超时 30 秒,可配置,最多 5 分钟。

最后一步:在 DSH Web 搜索配置里手动将 searchProvider 选为 dsh-native-search。未指定提供方且 DSH 自带搜索与本插件同时可用时会报 WEB_PROVIDER_AMBIGUOUS。保留原有 fetchProvider:本插件只负责搜索,正文仍由现有抓取后端处理。未填写模型与路由时插件会注册但报告不可用。

请求与返回契约

  • 纯 query:OpenAI / xAI / Copilot 用 input: query,Anthropic 用单条 user message,Gemini 用 user text part;合法 query 逐字保留,不加 system 或「Search the web for…」前缀,也不带历史。
  • 验收看完成状态与搜索证据:HTTP 200 不等于成功;Responses 须 status: completed 且搜索调用完成;Anthropic 须 stop_reason: end_turn 且调用/结果配对;Gemini 须 finishReason: STOP。未完成状态(如 Anthropic pause_turn)直接失败,不追加请求。
  • 有搜索证据但来源为空仍可能成功:例如 Anthropic 成功结果 content: [],或 Gemini 有查询但无 grounding chunks,可返回 sources: [];不会补造 URL 或把无来源文字称为有来源证实。
  • 返回的是 DSH 的 content / sources / truncated 服务契约;来源 URL 为公开 http(s) 形态,摘要为模型综合回答。默认至多 8 条 URL,maxResults 可调,上限 20;输出最多 2048 tokens,query 上限 4096 字符,响应上限 2 MiB。

失败时带稳定 error.code(如 HOSTED_SEARCH_UNSUPPORTED、HOSTED_SEARCH_NOT_EXECUTED、HOSTED_SEARCH_INCOMPLETE 等),不重试、不回退到其他协议。

适用场景与注意

适合:已在 DSH 中配置 OpenAI Responses、Anthropic、Gemini、xAI Responses 或 Copilot Responses 等原生搜索能力,希望 Agent 的 web_search 与现有 fetchProvider 抓取链路分工明确,且能接受「一次搜索 = 一次独立模型 POST、固定搜索模型不随会话切换」的开发者。

注意:

  • 插件在当前 DSH 进程权限下运行;安装前应阅读 GitHub 源码 与 MIT 许可证,并在接受对应费用与数据边界后做端到端验收。
  • 可用性取决于端点、模型、区域、账号权限与工具支持;证据校验按协议字段进行,并非对网关诚实性的独立审计。
  • Gemini 适配固定为 generateContent,不是 Interactions API;面向最终用户展示完整 grounding / Search Suggestions 时,需自行补齐官方展示要求,本插件契约不携带 Gemini searchEntryPoint 的完整展示数据。

撤销 searchProvider 选择或卸载插件即可恢复原搜索方案。

结尾

DSH Native Search 把「提供商原生托管搜索」以严格单请求、可验证证据的方式接到 DSH web.search,与主聊天解耦,适合已有模型路由凭据、希望统一 web_search 入口的团队。目录页:https://www.skillhub.cn/plugins/luhcow/dsh-native-search;源码与说明:https://github.com/luhcow/dsh-native-search。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜