dsh-search-first:让智能体先搜再动手

前言

在 DeepSeek Harness(DSH)里跑任务时,智能体拿到目标后往往会直接写文件、改代码或执行命令,等做完才发现仓库里已有实现、社区里已有成熟方案,结果是重复造轮子、引入多余 bug,还浪费 token 和时间。常见补救方式是靠人工在对话里反复强调「先查一下」,但这类约束不稳定,也不会在每次 system prompt 组装时自动生效。

下面介绍的 dsh-search-first 把工作流里的「先找已有方案」写进系统提示,并可选地在同一轮对话里拦截尚未搜索就触发的动手类工具调用。插件由维护者 Cindy-ponoiyvhj 发布,在 SkillHub 目录中归类为工作流;仓库采用 MIT 许可证,当前 package 版本为 0.1.0。

这是什么

dsh-search-first 的定位可以用 README 里的一句话概括:Look before you build.(先看清再构建。)

它解决的是:智能体在写入、编辑、运行或安装 anything 之前,没有系统性地检索现有实现、包或文档化做法。插件通过 DSH 的 bundle 机制注入规则,必要时加上「硬 guard」,把搜索从事后补救变成默认第一步。

核心功能

插件由两部分组成,规则部分始终可用;guard 部分默认关闭。

系统提示规则(默认开启)

在组装 system prompt 时增加一节,要求智能体在写、改、跑命令或安装任何东西之前,先搜索是否已有实现、包或文档化方案,并尽量复用检索结果。该节在每次 prompt 组装时都会参与,不依赖用户当轮是否记得提醒。

规则可通过配置 enabled: false 一并关闭;也可用 order(默认示例为 130)调整该节在 system prompt 中的顺序;rule 可替换默认规则正文。

可选硬 guard(strict: false 为默认)

当在 bundle 配置里设置 strict: true 时,同一轮对话中,若尚未运行过「算作搜索」的工具,则第一次调用动手类工具会被拒绝。README 列举的动手类工具包括 write、edit、ops_bash、plugin_manager、present 等;拒绝响应会带上原因与重试说明,智能体可在下一步自行纠正,而不是卡死。

guard 的行为要点(均来自 README):

  • 按轮次、按会话生效:本轮一旦跑过搜索工具,本轮内后续被 guard 的工具均可使用。
  • 不拦截搜索工具本身,也不拦截 allowTools 中列出的工具。
  • 子智能体通过 system prompt 继承规则,但各自维护本轮的 turn 状态。
  • 规则节只注册一次;若 systemPrompt 服务挂载较晚,注册会在最多 20 秒内重试。

searchTools 与 guardedTools 支持精确工具名或前缀匹配,例如 ops_bash 也会匹配 ops_bash_async。

安装与启用

官方安装方式如下,也可从插件市场安装同一 bundle:

dsh plugin add dsh-search-first

安装后,在 bundle 的 insert 行上按需填写 config。下列键均为可选:

- insert:
    - id: search-first
      name: 'dsh-search-first'
      config:
        enabled: true      # false 时同时移除规则与 guard
        order: 130         # system prompt 各节的顺序
        strict: false      # true:本轮未搜索前拒绝动手类工具
        rule: |            # 自定义规则正文,替换默认文案
          ...
        searchTools: [web_search, memory_search]   # 哪些调用算作「已搜索」
        guardedTools: [write, edit, ops_bash]      # guard 拦截的工具
        allowTools: [ops_bash]                     # guard 例外,始终放行

默认 strict: false 是有意为之:README 说明,一行 typo 级别的修改不应被迫先做一次网页搜索。

典型用法

仅依赖规则、不改变工具拦截(适合大多数日常任务):

  1. 执行 dsh plugin add dsh-search-first。
  2. 保持 enabled: true,strict: false(或不写 strict)。
  3. 智能体在每次组装 system prompt 时都会读到「先搜索再动手」的约束,行为上会更倾向先查仓库、文档或记忆,再写代码。

需要强制「本轮必须先搜」时:

  1. 在同一 bundle 配置里设置 strict: true。
  2. 确认 searchTools 覆盖你环境里真实的搜索能力(默认示例为 web_search、memory_search)。
  3. 若某些 bash 操作必须在未搜索时也允许,将其加入 allowTools(示例中包含 ops_bash)。

完全关闭插件效果:

  • 设置 enabled: false,规则与 guard 一并移除。

适用场景与注意

适合谁

  • 在 DSH 里做功能开发、集成第三方库、写脚本或改配置,且希望减少重复实现的团队或个人。
  • 希望把「查 prior art」固化进工作流,而不是依赖单次对话里的口头约束。
  • 对高风险任务(大面积改库、装新依赖)希望开启 strict: true,保证本轮至少执行过一次搜索工具。

使用前请注意

  • 插件与 DSH 进程同权限运行;安装前建议阅读 GitHub 仓库 源码与 MIT 许可证,确认 bundle 行为符合你的安全策略。
  • SkillHub 上的 插件目录页 是社区目录,与 DeepSeek / 幻方无官方从属关系;DSH 生态遵循「一切皆插件」,本插件是其中一条工作流类扩展。
  • guard 只约束配置中的 guardedTools;若你的任务链依赖未列入 guard 的工具,行为会与「strict 全开」的预期不一致,需要自行调整 guardedTools / allowTools。
  • 子智能体继承规则但不共享父级的「本轮是否已搜索」状态,多 agent 场景要单独理解每一轮的 guard 状态。

结尾

重复解决已有问题,在 token、时间和缺陷上都是更贵的路径;先找到成熟方案再动手,是 README 给出的动机。dsh-search-first 用系统提示把这一习惯写进默认行为,并可用 strict: true 把「先搜」从建议升级为同一轮内的工具级约束。

  • 目录页:https://www.skillhub.cn/plugins/Cindy-ponoiyvhj/dsh-search-first
  • GitHub:https://github.com/Cindy-ponoiyvhj/dsh-search-first
羽毛球分组比赛记分
小程序二维码

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

小夜