前言¶
在 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 级别的修改不应被迫先做一次网页搜索。
典型用法¶
仅依赖规则、不改变工具拦截(适合大多数日常任务):
- 执行
dsh plugin add dsh-search-first。 - 保持
enabled: true,strict: false(或不写strict)。 - 智能体在每次组装 system prompt 时都会读到「先搜索再动手」的约束,行为上会更倾向先查仓库、文档或记忆,再写代码。
需要强制「本轮必须先搜」时:
- 在同一 bundle 配置里设置
strict: true。 - 确认
searchTools覆盖你环境里真实的搜索能力(默认示例为web_search、memory_search)。 - 若某些 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