我扒了 DeepSeek Harness 219 个包,真有价值的是插件内核,附插件推荐

0 评论 83 浏览 0 收藏 20 分钟

昨天我把 DeepSeek Harness 装上跑了一轮:DeepSeek Harness 安装,初体验,没有惊喜。 写的比较仓促,仅仅是从安装到使用走了一遍。上午我把官方仓库整个拉下来,让 AI 分析了一下,从启动配置一路翻到 Agent Loop、会话事件、工具管线、上下文压缩和插件加载,很多看到的地方,确实有很多 DeepSeek 的设计巧思

省流:本文有AI味,不喜请立即马上迅速叉掉

DeepSeek 这次开源的真正主角,藏在网页下面

这套仓库里有 238 个工作区项目,大家使用的 Web 界面只占其中一层,模型、会话、沙箱、审批、Skills、子 Agent、工作流、上下文压缩、存储和 UI,全被拆成了可以重新组装的零件,我更愿意把它理解成一套 Agent 运行时加发行版骨架,大家说它是 Agent 时代的安卓,很形象

219 个包,DeepSeek 到底拆出了什么

官方反复强调一句话:Everything is a Plugin,至少有三层含义

DeepSeek Harness 三层插件运行时

DeepSeek Harness 三层插件运行时

第一层是组装层,决定这次启动要装什么

第二层是 Cordis 运行层,决定插件如何依赖、通信、卸载和清理

第三层才是用户能看到的 Agent 能力,模型、工具、循环、会话、存储、沙箱和 UI 都在这里

第一层:一个 dsh 进程,先由配置拼出来

DeepSeek Harness 启动时不会加载一份巨大的固定配置

它会按顺序叠几层东西:

  • Bundle 列表,先放进 dsh-base
  • webheadless Profile,决定产品入口
  • Profile 自己的 cordis.patch.yml
  • 用户目录里的长期修改
  • 本次命令行传入的 --patch

Profile 决定整个进程有哪些能力,Preset 决定某个会话能拿到哪些工具、提示词和工作流

同一个 Web 进程里,不同会话可以挂不同 Preset

这意味着 DeepSeek Harness 的扩展单位已经从“给 Agent 多加一个工具”,扩大到“给一个会话换掉整套运行方式”

第二层:Cordis 负责让插件活起来

Cordis 是这套系统的底盘

它的 Context 可以理解成一个带作用域的服务容器,插件从里面拿 toolsllmsessions 等服务,也把自己提供的能力注册进去

一条能力通常会拆成三个角色:

  • 服务定义:约定能力叫什么、数据长什么样
  • Provider:真正提供能力,例如 DeepSeek 模型适配器
  • Consumer:使用能力,例如 Agent Loop 请求模型

Cordis 还提供多种事件方式

普通广播适合通知,waterfall 可以让多个插件依次改写同一份数据,parallel 可以并行执行,serial 可以按顺序找到第一个愿意处理的插件

Agent 的请求、工具审批、压缩触发、结果加工,很多接缝都靠这些事件串起来

这里最漂亮的细节叫“可逆副作用”

  • 插件注册一个工具、监听一条事件、挂一条网页路由时,会同时登记清理动作
  • 插件卸载或重载,Cordis 会把这些注册一起撤掉
  • 热插拔才不会变成“旧工具还挂着、监听器越叠越多、重载几次就行为漂移”

这也是它敢把 UI、循环和存储都开放给插件的基础

第三层:连 Agent Loop 都只是一个插件

很多产品把 Agent Loop 写成不可碰的核心,再开放几个工具入口

DeepSeek Harness 把 Loop 本身也放进插件树

模型怎么请求、一步何时开始、工具怎么调度、任务什么时候停,都可以在这条链上被观察和改写

官方仓库里甚至准备了另一套 LLM 适配器 dsh-llm-pi-ai,底层使用 Pi 的 @earendil-works/pi-ai,dsh 借用了它成熟的多模型适配层,自己的会话、工具和运行时仍然走 Cordis 体系

这个安排很能说明 DeepSeek Harness 的思路:需要一项能力时,做一个 Provider 接进来,用户无需跟着重写

一轮任务,源码里同时跑着两条线

DeepSeek Harness 里,一个 Turn 可以包含很多 Step

一次 Step 大致等于一次模型请求,加上这次请求产生的工具调用

DeepSeek Harness Turn 与事件管线

DeepSeek Harness Turn 与事件管线

第一条是持久事件线

一次任务会依次出现:

turn/start
step/start
user/message
request header
assistant/chunk
assistant/message
tool/call
tool/result
step/end
turn/end

模型供应商、模型名、思考强度、系统提示词和工具目录,也会作为请求头快照写进日志

后面恢复会话时,系统能知道当时到底给模型看了什么

第二条是实时控制线

agent/pre-step 可以整理 inbox 和触发自动压缩,agent/request 可以改写请求,tools/pre-execute 可以做审批与权限检查,tools/post-execute 可以裁剪或加工结果

插件可以介入很多节点,同时不能悄悄改掉已经发生的历史

会话日志才是整套系统的脊柱

DeepSeek Harness 的 Session 是只追加的事件日志

模型可见的消息都从这份日志推导,工具调用、工具结果和模型输出也都写回同一处

连流式输出的 chunk 都会保留,因此网页刷新以后仍能还原当时的生成过程

这个选择一次解决了五件事:

  • 恢复:进程重启后继续同一个任务
  • 分叉:从历史节点另开一条路线
  • 回放:重建模型与工具当时看到的内容
  • 检索:从事件流里找任务和消息
  • 审计:说明某个文件修改从哪里来

默认持久化使用 JSONL,仓库里也准备了 SQLite 实现

模型请求之前,以及顶层工具真正产生副作用之前,系统会做检查点

进程在中间崩掉,恢复逻辑会补上一条“任务被打断”的结束记录,已经落盘的真实工作仍然保留

这里体现的是一条很硬的原则:模型看见的东西必须能回到日志里找到

否则恢复后的 Agent 会生活在另一份历史里

工具并行,结果顺序却不能乱

模型一次可能吐出多个工具调用

DeepSeek Harness 会先判断哪些工具允许并行,哪些工具需要独占

普通工具进入一个有上限的并行池,默认最多同时跑 10 个

遇到独占工具时,前面的任务先收尾,它单独执行,后面的调用再继续

这里还有个很细的处理

工具实际完成顺序可以不同,写回模型的结果仍按模型最初的调用顺序排列

否则网络快一点的搜索结果跑到前面,慢一点的文件修改跑到后面,同一轮上下文会因为时序抖动而变化

任务被取消时,已经启动的动作会尽量收尾,没来得及启动的调用也会写入合成结果

日志中不会凭空少掉半截工具链

Token 到底省在哪里

昨天那篇文章里,我用《背影》阅读理解、SVG 生成和审美测试跑了一轮,一共 14 步

Token 消耗情况:

  • 1 轮,14 步
  • LLM 用时约 3 分 55 秒
  • 工具调用约 18.2 秒
  • 首 Token 平均约 1.2 秒
  • 生成速度约 112 tok/s
  • 累计输入约 680K tok
  • 累计输出约 24.5K tok
  • 缓存命中率 93%

DeepSeek Harness 很重视 Token 复用,源码里还能找到三道控制线

第一道是稳定前缀

系统提示词、工具目录和已记录历史尽量保持稳定,新消息与新结果追加在尾部,让供应商缓存有机会持续命中

第二道是工具结果瘦身

标准 Preset 中,工具结果超过 8192 字符会进入默认裁剪,保留开头 4096 和结尾 1024,中间换成说明

更大的内容可以落盘,默认对话内联上限是 50,000 字节,对话只留路径和摘要

第三道是上下文压缩

上下文压力达到窗口的 80% 时,系统会在下一次 Step 前自动压缩旧历史,最近 16% 的尾部原样保留,默认摘要最多 8192 Token

有意思的是,生成摘要时仍会携带同一段会话前缀

这看起来多传了一遍,实际有利于继续复用供应商的 KV Cache

模型直接报上下文溢出时,还有一条恢复路径再尝试压缩

所以 dsh 的省 Token 路线就是:稳住可缓存前缀,先削工具噪音,接近上限以后再压缩历史

插件到底怎么装进去

社区插件通常在 package.json 里声明自己的 Bundle Patch

安装命令会把包放进某个 Profile,再把它的 Patch 加进组合层

通用格式是:

dsh plugin --profile web add <npm 包、Git 地址或本地路径>

装完重启 dsh web,再运行:

dsh --profile web --dump-config

只要最终配置里出现对应条目,插件才算真正挂上

GitHub 的 dsh-plugin Topic 现在已经很热闹,里面也混入了大量皮肤、小游戏、模板仓库和蹭标签项目

我看了几个候选仓库,推荐几个有意思,有用的吧。后续可能会有海量的插件出现,就像之前炒作 Prompt、Skills 一样,各种 awesome plugin 合集眼花缭乱,我依然坚持之前的判断,换工具不换工作流,以自己的工作流为核心资产,缺什么插件就自己写!

1、dsh-cc-tui:给 dsh 补上一套完整终端入口

官方开源版目前把主要精力放在 Web 和 headless,终端用户可以直接装 dsh-cc-tui

dsh-cc-tui 终端界面

dsh-cc-tui 终端界面

它单独创建 cc-tui Profile,模型、会话、Skills、计划、目标、子 Agent 和工作流都能接到官方底座上

上下文占用、缓存命中、工具状态、生成速度、会话恢复、模型切换也都放进了终端

安装:

npx -y @deepseek-ai/dsh plugin --profile cc-tui add dsh-cc-tui
npx -y @deepseek-ai/dsh --profile cc-tui

适合:长时间待在终端、希望键盘完成全部操作的人

它不会改动原来的 Web Profile,想回网页继续用即可

2、dsh-web-ui-all:把 Web 从毛坯房补成工作台

这个仓库是一组 Web 插件的合集,任务看板、Git 图谱、右侧文件面板、实时 Token 统计、移动端远程、SSH、皮肤中心都在里面

dsh-web-ui 主界面

dsh-web-ui 主界面

安装全家桶:

dsh plugin --profile web add @linxin666/dsh-web-ui-all

我更建议按需安装

例如只要任务看板:

dsh plugin --profile web add @linxin666/dsh-client-ui-task-board

只看 Token:

dsh plugin --profile web add @linxin666/dsh-live-stats

适合:把 dsh 当日常主界面、需要项目导航和实时状态的人

全家桶包含 SSH 与远程访问一类能力,安装前先确认自己确实需要

3、ModLens:让纯文本 DeepSeek 真正读图

DeepSeek 的文本模型遇到截图、图表和界面 Bug 时会卡住

ModLens 给 dsh 加入原生 read_image,也会增加带 modlens vision 标记的 DeepSeek 模型选项

ModLens 在 DeepSeek Harness 中读取图片

ModLens 在 DeepSeek Harness 中读取图片

安装:

npx -y @deepseek-ai/dsh plugin --profile web add @liustack/modlens@latest

装好以后,在模型列表里选择 DeepSeek-V4-Flash (modlens vision)DeepSeek-V4-Pro (modlens vision),直接粘贴图片或给出本地路径

它需要一个视觉引擎,可以接 Gemini 或 OpenAI 兼容服务,也能在你明确同意后复用本机其他 Agent 已有的视觉能力

适合:前端调试、图表理解、截图报错和文章配图检查

4、ModSearch:补上搜索和单页精读

标准模式已经带 DeepSeek Web Search

ModSearch 会接管同一个搜索接口,再增加 x_searchread_page

ModSearch 返回带来源的搜索结果

ModSearch 返回带来源的搜索结果

安装:

npx -y @deepseek-ai/dsh plugin --profile web add @liustack/modsearch@latest

装好以后正常说“查一下今天的 AI 新闻”或“读完这个页面再总结”,模型会自己选择搜索或读取

它可以使用 Antigravity CLI,也支持 Tavily、Exa、Firecrawl 等引擎,X 搜索需要对应的 Grok Build 能力

适合:写文章、做竞品研究、追踪社区讨论和核查网页资料

5、dsh-agent-teams:给子 Agent 加上团队状态

官方标准模式已经能 spawn 和 fork 子 Agent

Agent Teams 继续加了队长、成员、任务依赖、成员消息和 Web 活动面板

dsh-agent-teams 团队活动面板

dsh-agent-teams 团队活动面板

安装:

npx -p @deepseek-ai/dsh dsh plugin --profile web add github:NanmiCoder/dsh-agent-teams

装好以后可以直接说:

用 AgentTeams 审查最近 50 个提交,分别检查性能、安全和功能回归,最后汇总

成员状态保存在工作区的 .agent-teams,Web 面板能看到任务依赖、成员进度和回报

适合:大范围代码审查、迁移、调研和能清楚拆成并行分支的任务

小任务开团队会增加协调成本

6、dsh-automation:把重复工作交给全新会话

这个插件提供单次、固定间隔、每天和每周任务

每次执行都会创建一个全新的根 Agent 与 Session,工作区、权限、任务说明和运行记录都单独保存

dsh-automation 自动化总览

dsh-automation 自动化总览

安装时建议锁定版本:

dsh plugin --profile web add github:titanwings/dsh-automation#v0.1.5

它适合定时跑测试、整理周报、检查依赖、扫描项目状态

无人值守任务只接受只读和工作区可写两种权限,完全访问不会进入计划任务

需要注意,0.1 版依赖 dsh Host 持续运行,关掉 dsh web 后,定时任务也不会自己在系统后台启动

插件越自由,安全边界越要看清

DeepSeek Harness 默认提供三种权限:只读、工作区可写、完全访问

工作区可写配合逐次询问,是日常使用更稳妥的起点

这里要分清两层权限

模型调用 Shell 和文件工具,会经过沙箱与审批

装进 Profile 的第三方插件属于宿主代码,它拥有的权限接近 dsh 进程本身

因此插件仓库里的安装脚本、依赖和 Host 代码,都要按真实程序来审查

官方没有默认开放任意 MCP Server,也有同样的考虑

MCP 的启动命令运行在 Agent 沙箱之外,不能因为工具调用有审批,就假设 MCP 进程也被关在里面

源码里还有两个很值得注意的默认值:

  • web_fetch 默认关闭,主要防 SSRF 一类内网访问风险
  • Cordis 创造模式允许动态加载与修改插件,信任等级接近给 Agent Shell 权限

我建议除了权限设置,安装插件之前都要找顶级大模型先确认一遍其安全性,目前 AI 野蛮生长,安全问题不容小觑

总结

现阶段(预览版),DeepSeek Harness 开源项目是一份绝佳的学习资料

至于工具本身,可以吹,不建议折腾,它不适合绝大多数人

Codex、Claude Code,以及众多 Work 类产品,比如 WorkBuddy、QoderWork、TraeWrok,这些开箱即用的好东西足够了

本文由作者@Ai学习的老章,授权发布于平台,未经许可禁止转载。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 目前还没评论,等你发挥!