dsh-stigmergy:用共享痕迹场协调子智能体,而不是互发消息

前言

在 DeepSeek Harness(DSH)里做委派树(主智能体加任意深度的子智能体)时,常见做法是按「组织图」来:汇报、对齐、审批,智能体之间来回发消息。智能体数量一多,消息量往往按平方级增长,父节点还要充当中继。

另一种思路是参考生物界的 stigmergy:蚂蚁并不告诉另一只蚂蚁食物在哪,而是在环境里留下信息素痕迹,后来的蚂蚁路过时再根据环境反应。信息住在共享环境里,而不是聊天日志里。dsh-stigmergy 是维护者 qsheeeeen 提供的 DSH 工作流类插件(社区目录当前星标为 0),给同一会话(或同一工作区,取决于配置)内的智能体提供一块共享的、会蒸发痕迹场,用改环境、留痕迹来协调,而不是 send_message 或父节点转发。

这是什么

一句话:主智能体及其子智能体在每一步之前都会在运行时上下文里看到同一块痕迹场;某个智能体写入的痕迹,会在另一个智能体下一步里出现,无需显式私信。

灵感来自生物学 stigmergy。插件通过 Cordis 补丁注册工具与上下文注入,版本在 package.json 中为 0.6.0,许可证 MIT。

核心能力

痕迹场与协调方式

  • 每一步之前,每个智能体都会在运行时上下文里看到痕迹场,内容有界且会蒸发。
  • 一个智能体留下的痕迹,已经出现在另一个智能体下一步里:没有 send_message,没有父节点中继,没有 N² 的消息图。
  • 痕迹用 key 标识,再次写入同 key 会替换旧值,场次是「当前状态」而不是聊天记录。
  • 每条痕迹分两层:短 title(每一步都会进入上下文)、detail(只有主动读取时才加载),减轻每步重复阅读的成本。
  • 痕迹默认 90 分钟后蒸发(可配置),过时信息自行消失。

三个工具

工具 作用
stigmergy_leave 写入或替换一条痕迹:key、title(单行,≤160 字符)、detail(可选,≤4000 字符)、kind、author、ttl_minutes
stigmergy_read 按一个或多个 key 读取 detail,或读取整个场次
stigmergy_clear 在蒸发前移除一条痕迹

kind 取值为:note、decision、finding、task、question、done。

title 的设计要点:不是用来概括 detail,而是「若为真,会改变下一个智能体行动」的那一条事实;路径、命令、数字等证据放在 detail,按需再读。

作用域、注入与持久化

  1. 一场次一个场。 默认 scope: session 时,场次根是会话子树根部,父智能体与所有后代共享一场。scope: workspace 时以工作目录为界,同一项目里不同会话可共享一场。
  2. 注入。 组装请求时,systemPrompt.context 把场次渲染进运行时上下文,且只展示 title。DSH 每一步都会重算运行时上下文,场次是活的,不是启动时拍的一张快照。
  3. 镜像文件。 场次镜像到 <cwd>/.dsh-stigmergy/<scope>.jsonl,重启后仍在;可用普通 read / grep 查看;外部合法编辑会在下次读取时被采纳。
  4. 蒸发与压缩。 expiresAt 到期后痕迹移出场次;镜像每累计 200 次 append 会压缩。
  5. 身份。 每条痕迹带稳定 from(会话 id)与展示用 author;author 可按角色覆盖自动解析的名字。

无需模型调工具也会发生的两件事:快照(场次文本变化时,以 user 消息形式注入上一步运行时上下文)和 presence(列出当前同场运行中的智能体,不写进镜像)。

安装与启用

插件以当前 DSH 进程的权限运行。安装前建议在 GitHub 上阅读源码与 LICENSE,确认可信后再装入本机环境。

官方 README 给出的步骤如下。先克隆仓库(PowerShell 示例):

git clone https://github.com/qsheeeeen/dsh-stigmergy

然后在 DSH 中打开 plugin_manager,使用 install_bundle,目标路径选克隆下来的目录(也可在 Creator 模式下安装),安装完成后重启 DSH。

配置项

在 cordis.patch.yml 的 config 中设置,也可由你自己的 profile 补丁层覆盖:

字段 默认值 含义
directory .dsh-stigmergy 镜像目录,相对场次工作目录;"" 表示仅内存
scope session session(会话及子树)或 workspace(工作目录)
maxEntries 12 注入快照时最多展示的痕迹条数
maxTextChars 280 快照中每条 title 的防御性上限(title 本身 ≤160)
defaultTtlMinutes 90 默认蒸发时间;0 表示直到被替换才消失
promptSection true 是否在 system prompt 中加入固定协调说明段落

典型用法与验证思路

协调流程可以概括为:某智能体对当前结论调用 stigmergy_leave 写入 key 与简短 title,需要证据时再让同伴或自己 stigmergy_read;任务完成或决策作废时用 stigmergy_clear 或等新痕迹覆盖同 key。

README 中的 live 记录描述了可复现现象(无需子智能体调用 stigmergy_read、也无需父节点转发消息):

  1. 父智能体写入 demo/handoff;处于 Start-Sleep 的子智能体在下一步运行时快照里即可看到。
  2. 子智能体写入 demo/decision;父智能体下一步运行时上下文里出现该痕迹。
  3. 两个并行兄弟子智能体在等待约 45 秒后,互相能在对方下一步里看到痕迹。
  4. 移除一条痕迹后,另一智能体下一步中该条不再出现。

本地回归检查(PowerShell):

node test/check.mjs

覆盖同会话共享、跨会话隔离、title/detail 拆分、替换、边界、删除、镜像回放、残缺行拒绝、外部完整行采纳、两种协调模式下的身份解析与配置规范化等场景。

镜像为 append-only JSONL,一行一个操作,例如 put 与 del;缺字段的半行会被丢弃而不修补,避免污染每场每步都会读到的场次。

适用场景与边界

适合: 同一 DSH 会话(或同一 workspace 配置下)里,多子智能体并行探索、分工,需要共享「当前决策 / 发现 / 任务状态」,又不想堆消息或让父智能体当中继时。

边界(README 原文):

  • 工具全局注册,preset 仍可做作用域:屏蔽全局工具的 preset 会让该智能体看不到场次;继承全局的子智能体仍可见。插件不绑定特定 preset。
  • 场次面向同一会话内运行的智能体;不替代子智能体最终向父节点返回的报告,场次是共享层。
  • 镜像由 Host 进程直接写入,在模型工具沙箱之外;写入失败时场次降级为仅内存,工具调用本身不因镜像失败而报错。

DSH 生态强调「一切皆插件」;社区目录 SkillHub 插件页 是独立站点,与 DeepSeek / 幻方无官方从属关系,本文介绍的是社区维护插件,而非官方应用商店条目。

结尾

dsh-stigmergy 把多智能体协调从「互发消息」换成「共享、可蒸发、按 key 更新的痕迹场」,并通过 title/detail 拆分控制每步上下文成本。若要查看分类与简介,可打开目录页;安装、工具参数与配置以仓库 README 为准。

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

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

Xiaoye