<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>DeepSeek on Trevor's Blog</title><link>http://mings.in/tags/deepseek/</link><description>Recent content in DeepSeek on Trevor's Blog</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sun, 01 Nov 2026 10:33:00 +0800</lastBuildDate><atom:link href="http://mings.in/tags/deepseek/index.xml" rel="self" type="application/rss+xml"/><item><title>DeepSeek Super-agent：五个模块只剩两个</title><link>http://mings.in/posts/dsh-superagent/</link><pubDate>Sun, 01 Nov 2026 10:33:00 +0800</pubDate><guid>http://mings.in/posts/dsh-superagent/</guid><description>官方文章讲了五个模块，我把仓库翻了一遍：真正落地的只有两个，其余靠已有机制兜。显式和隐式的差别，决定了这套架构能走多远。</description><content:encoded><![CDATA[<p>2026 年 10 月 31 日，DeepSeek Harness 团队发了一篇讲 Super-agent 的长文。我没急着转，先把配套仓库拉下来翻了一遍。</p>
<p>文章讲的事很具体：人和 agent 的关系卡在注意力上。一个人顶多同时跟三到五个活跃会话，再多就顾不过来。所以他们想造一个常驻的、自己接活自己干的 agent，让人的角色从「每一步都盯着」退到「偶尔看一眼」。</p>
<p>四个特征：连续、高效、主动、持久。拆成五个模块：双层架构、事件驱动、面向人的交互、存算分离、Watchdog。</p>
<p>我的规矩是，官方说设计，我回代码里看。仓库 <code>deepseek-ai/dsh-superagent-prototype</code> 是当天下午五点半建的，现在两千九百星、两百五十三个 fork。<code>src</code> 下面九十二个 TypeScript 文件，一万两千三百九十行。</p>
<p>先说结论：五个模块，代码里能搜到两个半。</p>
<h2 id="五个模块代码里能搜到几个">五个模块，代码里能搜到几个</h2>
<p>我把文章里那几个专有名词一次性 grep 到 <code>src</code>、<code>docs</code>、<code>prompts</code> 三个目录。命中为零的就是没落地：投机执行、Inline 与 Spill、链式召回、端侧 daemon、Watchdog，全是零。</p>
<p><img alt="五个模块的落地情况" loading="lazy" src="/images/dsh-superagent/fig1.png"></p>
<p>这个落差不是作者藏了什么。README 自己写着：</p>
<blockquote>
<p>We have adapted it for publication, so it is not identical to our internal version&hellip; Some designs discussed in the article are directions for future development and are not implemented in this prototype.</p>
</blockquote>
<p>意思是公开发布做过裁剪，文章里有些东西属于未来方向。真实范围是：盯一个 GitHub 仓库，可选加一个飞书，有人提需求就判断接不接，接了在独立目录里干，干完回原会话答，通常开个 PR。</p>
<p>一句话，它现在是个只认 GitHub 的接单机器人。</p>
<h2 id="骨架是五个部件从收消息到回话一条直线">骨架是五个部件，从收消息到回话一条直线</h2>
<p>业务逻辑压在一个二百七十行的 <code>engine.ts</code> 里，内部拆成五块，依赖单向流动：Intake 收、Evals 判、Tickets 建单、Assignments 干、Replies 回。</p>
<p>Intake 收消息存一次，扇出给订阅这件事的工单。Evals 管评估，合并同一串讨论、算强度、定截止时间。Tickets 管生命周期，Assignments 收执行器回报，Replies 走 outbox 往信道写。</p>
<p>每个调用方只拿到自己那一片接口，收消息的碰不到工单表，执行器改不了策略。这个切法比功能本身更值得抄：它把「谁能改什么」写成了类型，越权在编译期就过不去。</p>
<p><img alt="Engine 的五个部件和两个 preset 的权限边界" loading="lazy" src="/images/dsh-superagent/fig2.png"></p>
<h2 id="router-不是不给-bash是配置里没有写权限">Router 不是「不给 Bash」，是配置里没有写权限</h2>
<p>文章里有个说法容易被读成比喻：Router 层不直接执行任务，连 Bash 都不配。代码里是两个 preset 实现的，Worker 有 subagent、todo、web 搜索、文件读写；Router 把文件写、编辑、subagent、web 全关了。</p>
<p>那个「不配」是真不配。权限面在服务装配那一刻就定死，不是靠提示词嘱咐它别动手。</p>
<h2 id="有三处比文章写得更细">有三处比文章写得更细</h2>
<p>准入矩阵。谁来提需求算数，文章只说两级过滤加名单，代码里是一张四格表：名单内名单外，乘上有没有 @ 它，每格配成显式、推断、忽略三档。</p>
<p>截止时间是活的。一次评估到点不会直接丢，重排两次才记成不可用；计时从候选送进主会话那刻才开始，处理暂停时跟着顺延。</p>
<p>还有插队。执行器最多同时跑三个工单，人在会话里直接插话时可以多用一格。</p>
<p>这三样文章都没展开。写到这个粒度，说明作者真在拿它跑活儿。</p>
<h2 id="装起来不难难的是两个不许弄错的地方">装起来不难，难的是两个不许弄错的地方</h2>
<p>装的部分很快。tmux 起服务，克隆，<code>pnpm install</code> 十八秒，<code>pnpm build</code> 一秒，产出十一个包共六百九十多 KB。然后从 web 模板复制一个 profile，把仓库挂成本地 link，写两行配置：状态目录和面板端口。我用了 3082，不跟日常那个 3080 抢。</p>
<p>起来之后七个部件全 ready，侧栏多出一个入口。到这一步你会以为成了。</p>
<h2 id="第一个坑它必须是另一个账号">第一个坑：它必须是另一个账号</h2>
<p>这东西要求 agent 用一个独立的 GitHub 账号发评论、开 PR，官方部署文档写得直白：agent 写的每句话都会挂在那个名字下面。我第一次授权失败得很典型，浏览器那边点了通过，我这边换 token 时直连 github.com 超时，二十秒的窗口过去，那次授权就作废了。换成走代理重来一遍才成。</p>
<p>连带一个问题：它干活时 <code>git push</code> 也要出网，但服务不能在全局环境挂代理，否则 DeepSeek 的接口会被带偏。我的做法是代理只注入两处，一个 GitHub CLI 包装脚本，一个工作克隆的仓库级 git 配置。</p>
<h2 id="第二个坑全部-ready它却一个字都不说">第二个坑：全部 ready，它却一个字都不说</h2>
<p>这个坑贵得多，而且它一声不吭。</p>
<p>配置填完，面板没有报错，七个部件全绿。我发了个测试请求，到达数加了，评估数一直卡在一。</p>
<p>翻会话记录才看到真话：<code>llm-deepseek: no API key for provider route &quot;deepseek-official&quot;</code>，错误码 <code>MISSING_CREDENTIAL</code>。</p>
<p><img alt="面板显示全部 ready，而 Router 会话里每一轮都在失败" loading="lazy" src="/images/dsh-superagent/fig3.png"></p>
<p>根因是环境。日常那个 dsh 进程从一个 export 过密钥的 shell 里起来，新 profile 是干净环境，密钥只存在那次 export 里，不写文件。</p>
<p>面板看不到，因为这是 Router 内部会话失败，不算组件健康问题。整条链路每环都 ready，只有最中间那次模型调用在静默地死。</p>
<p>修法是加一层启动包装，从密钥该在的地方取出来再注入。代价是以后启停必须走那个包装，直接调官方脚本会把密钥丢掉，然后你又回到「一切正常但什么都不做」。</p>
<h2 id="装完之后我在-issue-里等它回话">装完之后，我在 Issue 里等它回话</h2>
<p>真验收是让它干件小事。我开了条 Issue，只要求回一句已连通、说出 README 第一行的标题，不许改文件不许开 PR。</p>
<p>不到十分钟，它以 <code>dsh-super-agent</code> 的身份回了：</p>
<blockquote>
<p>已连通。
README 第一行标题：<code># ADK for Kotlin + Ktor：KMP 开发者的 AI agent 起手式</code></p>
</blockquote>
<p>回复上面还自带一行免责声明，说这是自动程序写的，不是人。</p>
<p><img alt="Issue #1 里它的回复实录" loading="lazy" src="/images/dsh-superagent/fig4.png"></p>
<p>我回头看它干了什么：给这条讨论建工单，在状态目录下开了独立 worktree，分支名 <code>agent/冒烟测试...</code>，干完在同一个讨论里答话。紧接着它把第二条重复请求判成重复，没再回一遍。</p>
<p>这一步之后我才信它真在跑，而不是看起来在跑。</p>
<h2 id="现在停在观察模式还没敢让它自己开工">现在停在观察模式，还没敢让它自己开工</h2>
<p>四路观察我都打开了：新 Issue、新 PR、新评论、默认分支的 CI。但评估模式还是默认的 observe，意思是它只记「我本来会接」，不动手。理由很简单，两个 preset 都是满权限，以我本人的系统用户跑，能读我整个 home。任何一句进了 GitHub 评论的提示词注入，都能在我机器上执行命令。</p>
<p>所以顺序是：先跑一两天，翻它的判断记录，看有没有把不该接的活接进来。名单里只有我一个人，别人 @ 它不会有反应。</p>
<p>文章里有个数据我印象很深。去掉订阅直通之后，Router 的决定数涨了 30%，token 涨了 37%。作者拿这个说过滤层的价值。</p>
<p>我倒觉得这是全篇最该记住的一句：这类系统真正的成本不在模型跑多快，在它要不要为每件事都动一次脑子。</p>
<p>那么问题来了，一个自己接活、自己判断、权限跟你一样大的 agent，你愿意让它替你收一晚上的 GitHub 通知吗？</p>
<p>还是说，你更想要的只是一个能替你盯着、但每次动手前都要点头的工具？</p>
<p>如果你也在搭这类东西，说说卡在哪一层：安装、权限，还是那句「它到底该不该自己决定」。</p>
]]></content:encoded></item></channel></rss>