dsh-web-think:让 DSH 每一轮对话先联网再回答

前言

在 DeepSeek Harness(DSH)里做智能体时,模型往往只在用户显式调用 web_search 时才去查网。话题涉及版本号、新闻或价格时,回答容易滞后,也不方便在正文里用 Markdown 链接标出来源。

下面介绍社区插件 dsh-web-think(维护者 muodin):在每一轮用户消息的第一次模型请求之前,自动执行一次 Web 检索,把可引用的来源注入上下文,并通过系统提示词要求模型优先采用检索结果并标注链接。插件归类为「联网工具」,当前 GitHub 星标为 0,版本 0.1.0,许可证 MIT。

这是什么

dsh-web-think 是 DSH Host 插件:零第三方依赖、无构建步骤,纯 ESM,约 16 KB。它复用 DSH 的 ctx.web.search(),与内置 web_search 工具共用同一套可插拔搜索 provider(DSH 桌面版默认多为 DeepSeek 官方联网检索)。

前提:本机已安装 DSH Desktop 或 dsh CLI,且当前 profile 里配置了可用的 ctx.web 搜索 provider。

核心功能

每一轮都检索

不是只在话题变化时检索——用户每次发消息,都会在当轮第一个 agent step 之前联网。同一 agent 的同一 turn 只检索一次(同轮去重)。

查询与短追问

检索查询来自本轮真实用户消息(source.kind === "user")。像「继续」「好的」这类短追问会并入上一条用户消息作为检索上下文。

注入格式与安全

检索结果以 source.kind = "web-think" 的 user 消息追加到本步请求;内容包含查询、时间、来源标题 / 链接 / 摘要 / 发布日期,并附带外部内容仅作资料、不得当作指令的安全说明。插件还可通过 ctx.systemPrompt.section() 注册引用规范,减少模型「假装检索过」的情况。

失败与取消

超时、无可用 provider 等失败会注入说明,引导模型改用 web_search 或如实告知用户;默认单次检索超时 20 秒。用户停止或取消本轮时会中止检索。

工作原理(摘要)

在 agent/pre-step 的 waterfall 中拦截每一轮的第一个 step:取出 step 1 的消息批次 → 提取查询 → 调用 ctx.web.search({ query, maxResults }, signal) → 注入消息并注册系统提示词段落。

安装与启用

方式 A:插件管理器(推荐)

在 DSH 插件管理器(Creator 模式插件页,或 plugin_manager 工具)中安装 bundle,目标填:

git+https://github.com/muodin/dsh-web-think.git

安装后管理器会把 dsh-web-think 选入 profile 的 dsh.profile.bundles;HMR 开启时通常立即生效。

方式 B:手动安装(以 desktop profile 为例)

  1. 在 profile 目录安装依赖:
cd ~/.dsh/profiles/desktop
pnpm add "dsh-web-think@git+https://github.com/muodin/dsh-web-think.git"
  1. 编辑 ~/.dsh/profiles/desktop/package.json,将 "dsh-web-think" 加入 dsh.profile.bundles:
{
  "dsh": {
    "profile": {
      "bundles": [ "…", "dsh-web-think" ]
    }
  }
}
  1. HMR 开启时保存后自动重载;否则重启 DSH。

  2. 用 dsh --profile desktop --dump-config 或插件列表确认组合树中出现 id: web-think。

说明:DSH Desktop 的 desktop profile 由应用管理,不能用 dsh plugin CLI 直接管理;CLI profile 可用 dsh plugin --profile <name> add …,但仍需把 bundle 写入 dsh.profile.bundles。

卸载:从 dsh.profile.bundles 和 profile 依赖中移除 dsh-web-think,然后重启 DSH。

配置

在 profile 的 cordis.patch.yml 中可覆盖插件行配置,例如:

# ~/.dsh/profiles/<profile>/cordis.patch.yml
- id: web-think
  config:
    maxResults: 8
    timeoutMs: 30000
字段 默认 含义
enabled true 总开关
promptSection true 是否注册系统提示词说明
maxResults 5 每次检索来源条数上限
timeoutMs 20000 单次检索超时(毫秒)
maxQueryChars 400 查询文本上限
maxSnippetChars 200 每条来源摘要上限
maxAnswerChars 1200 检索摘要上限
maxMessageChars 6000 注入消息总长度上限
includeSnippets true 是否附带来源摘要
log false 是否输出 debug 日志

HMR 开启时配置改动可即时生效;修改 Host 代码 index.js 需重启 DSH。

典型用法与验证

安装并启用后,正常在 DSH 里对话即可——无需每轮手动点搜索。适合需要时效性事实、文档版本或外部资料交叉验证的开发与问答场景。

验证方式(来自项目 README):

  • 发出下一条用户消息后,在会话日志 ~/.dsh/sessions/<workspace>/<session>/session.v4.jsonl.zstd 中应能看到 source.kind === "web-think" 的 user/message 事件;
  • 模型回答宜带 Markdown 来源链接;
  • 将 log 设为 true 时,Host 日志可见 web-think: turn N searching "…"。

注入内容形态可参考仓库 README 中的示例块(含「自动联网检索 · web-think」标题与来源列表)。

适用场景与注意

适合谁:希望默认「先查再答」、又希望与 DSH 内置搜索后端一致的 DSH 用户;子 agent 的轮次同样会触发检索。

延迟与 token:每一轮都会检索(含寒暄),通常增加约 1–10 秒延迟;注入消息以 user 角色持久化在会话中,占用上下文 token。检索质量取决于所配置的搜索后端。

兼容性:README 记载在 DSH Desktop Next 2.0.18-next(deepseek-harness 0.2.1-alpha.2)上测试通过;仅使用公开扩展点 agent/pre-step、ctx.web.search()、ctx.systemPrompt.section()。

安全与信任:插件以当前 DSH 进程权限运行,会调用联网搜索并改写当轮请求上下文。安装前请阅读 源码 与 MIT 许可证,确认 bundle 来源可信。社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。

UI:未做 Chat UI 定制,注入消息在对话中以普通 user 消息样式显示。

结尾

dsh-web-think 把「每轮自动联网 + 可引用来源注入」做成 Host 层固定流程,与手动调用 web_search 互补;失败时也不静默跳过,便于继续用工具补检。

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

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

小夜