前途科技前途科技
  • 洞察
  • 服务
  • 关于
  • AI 资讯
    • 快讯
    • 产品
    • 技术
    • 商业
    • 政策
    • 初创
  • 洞察
  • 资源中心
    • 深度研究
      • AI 前沿
      • 案例研究
      • AI 知识库
    • 行业报告
      • 白皮书
      • 行业报告
      • 研究报告
      • 技术分享
      • 专题报告
    • 精选案例
      • 金融行业
      • 医疗行业
      • 教育行业
      • 零售行业
      • 制造行业
  • 服务
  • 关于
联系我们

DeepSeek Harness 两天冲上 10 万 Stars:AI Agent 的真正前沿,已经从模型转向基础设施

AI 前沿2026年8月22日· 5 分钟阅读0 阅读

导读DeepSeek Harness(dsh)在文章记录的时间窗口内,以极快速度冲过 10 万 GitHub Stars。真正值得关注的并不是又一个代码助手,而是它把模型适配、工具注册、会话日

                    <div class="detail-content-box has-mask large">
                        <section style="color: rgb(0, 0, 0);caret-color: rgb(0, 0, 0);"><section style="text-align: center;"></section><section style="background-color: #e6f0ff;border-left: 2px solid #999999;padding: 0 0.9em;margin: 0.6em 0;line-height: 1.85;font-size: 14px;text-align: left;"><span style="color: #0066cc;font-weight: bold;font-style: italic;font-size: 14px;"><span>导读</span></span><span><br/></span><span style="font-style: italic;font-size: 14px;"><span>DeepSeek Harness(dsh)在文章记录的时间窗口内,以极快速度冲过 10 万 GitHub Stars。真正值得关注的并不是又一个代码助手,而是它把模型适配、工具注册、会话日志、Agent Loop、沙箱、权限和持久化都做成了可替换插件。</span></span></section><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🚀 两天 10 万 Stars,真正值得问的不是“为什么这么火”</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>DeepSeek Harness 在极短时间内突破了 10 万 GitHub Stars。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>原文记录的数字是:项目越过&nbsp;</span><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>112,000 Stars</span></strong><span>&nbsp;和&nbsp;</span><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>10,000 Forks</span></strong><span>,在最初约 53 小时里,平均每小时增加超过 2,100 个 Stars。作为对比,OpenClaw 用了大约一周达到 10 万 Stars,之后增长到约 38.6 万。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这些数字是原作者在文章发布时记录的时间截面,不应被直接理解为今天的实时数据,也不等于生产环境中的活跃用户数量。GitHub Star 更像关注、收藏和试用意愿的综合信号,而不是营收、留存或企业部署数据。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>但这个速度仍然提出了一个更有价值的问题:</span></p><blockquote style="margin: 0.6em 0px;padding: 0.6em 0.9em;background: rgb(230, 240, 255);color: rgb(0, 51, 102);line-height: 1.9;font-size: 14px;border-left: 2px solid rgb(153, 153, 153);border-radius: 0;font-style: italic;"><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>为什么一个 Agent harness,突然值得十万名开发者在第一时间关注?</span></p></blockquote><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>答案可能不是“DeepSeek 又发布了一个更强模型”,而是它押注了 Agent 真正难做的那一层:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>如何选择上下文;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>如何暴露工具;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>如何持久化状态;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>如何从失败中恢复;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>如何执行权限控制;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>如何验证 Agent 是否真的完成了任务。</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>DeepSeek Harness 给出的架构回答非常明确:</span><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>一切都是插件。</span></strong></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>模型适配器、工具注册表、会话日志和 Agent Loop 是插件;文件系统、子进程执行、沙箱、审批、遥测、提示词、UI 行为和持久化,也都作为可替换能力暴露出来。</span></p><section style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><img src="https://pic.imgdb.cn/i/034BIM80cqMmj3MWv1XsNJ.png" alt="DeepSeek Harness 早期采用速度图" class="rich_pages wxw-img" style="max-width: 100%;height: auto;display: block;margin: 0.6em auto;" title="DeepSeek Harness 早期采用速度图"/></section><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><em><span>图:原文展示的项目早期采用速度。数据为原作者文章发布时的记录。</span></em></p><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🧩 DeepSeek Harness 到底是什么?</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>DeepSeek Harness,简称&nbsp;</span><code style="&#39;font-family:"><span>dsh</span></code><span>,是一个用于构建和运行 AI Agent 的开源 runtime。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>它主要使用 TypeScript 编写,构建在 Cordis 之上。原文将 Cordis 描述为一个面向“时空可组合性”的元框架。换成工程语言,可以把它理解为:一个运行中的 Harness 实例,不是由一大块不可拆分的核心代码组成,而是由多个插件向共享上下文中贡献能力。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这些能力包括:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>服务;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>类型化事件;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>可逆效果;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>模型适配器;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>工具;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>会话行为;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>Agent Loop;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>文件系统和子进程提供者;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>沙箱和审批策略;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>UI 集成。</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这背后的问题意识是:一个 LLM 本身只是“生成下一步动作”的模型。真正让它成为可以工作的 Agent,还需要一个运行时负责提供上下文、工具、状态、权限和反馈。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>换句话说,模型回答“下一步应该做什么”,Harness 负责回答:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>它能看到什么?</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>它能调用什么?</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>它可以改动什么?</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>改动是否需要审批?</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>失败之后从哪里恢复?</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>这次执行能否重放和审计?</span></section></li></ul><section style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><img src="https://pic.imgdb.cn/i/034BIM9Tm4ruBjkaXDXVck.png" alt="模型不再是唯一依赖:Harness 的能力分层" class="rich_pages wxw-img" style="max-width: 100%;height: auto;display: block;margin: 0.6em auto;" title="模型不再是唯一依赖:Harness 的能力分层"/></section><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><em><span>图:原文关于模型依赖与运行时组成的架构示意。</span></em></p><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🧱 为什么“把所有东西写进 agent.ts”迟早会失控</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>很多团队的第一个 Agent 都长这样:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>构造提示词</span><span><br/></span><span>&nbsp; → 调用模型</span><span><br/></span><span>&nbsp; → 解析工具调用</span><span><br/></span><span>&nbsp; → 执行命令</span><span><br/></span><span>&nbsp; → 把结果追加回上下文</span><span><br/></span><span>&nbsp; → 重复循环</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>对原型而言,这完全够用。问题在于,生产需求很快就会增加:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>远程沙箱;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>不同租户使用不同工具集;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>同时兼容 OpenAI 和 Anthropic 风格接口;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>会话重放;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>后台任务抽象;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>结构化遥测;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>可恢复的 Shell;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>文件系统权限策略;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>审批节点;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>长时间任务的断点续跑。</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>最终,Agent Loop 可能膨胀成五千行框架代码,每增加一个功能就要修改它。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这会造成三个问题:</span></p><ol style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: decimal;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>能力和循环耦合</span></strong><span>:换一个工具,需要动 Agent Loop;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>安全和功能耦合</span></strong><span>:加审批逻辑,需要侵入执行逻辑;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>部署和业务耦合</span></strong><span>:本地 Agent、企业 Agent、CI Agent 各自分叉。</span></section></li></ol><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>DeepSeek Harness 的做法是从一开始就把 runtime 当成一个</span><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>组合问题</span></strong><span>,而不是一个等待不断打补丁的“超级核心”。</span></p><section style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><img src="https://pic.imgdb.cn/i/034BIMAzqDRWubMm86Y6y8.png" alt="“一切都是插件”的架构图" class="rich_pages wxw-img" style="max-width: 100%;height: auto;display: block;margin: 0.6em auto;" title="“一切都是插件”的架构图"/></section><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><em><span>图:原文展示的插件化组成方式。</span></em></p><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🧰 Profile、Bundle:同一套 runtime,组合出不同部署形态</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>DeepSeek Harness 引入了两个重要的配置概念:</span><code style="&#39;font-family:"><span>Profile</span></code><span>&nbsp;和&nbsp;</span><code style="&#39;font-family:"><span>Bundle</span></code><span>。</span></p><table style="margin: 0.5em 0px;width: 100%;border-collapse: collapse;background: rgb(230, 243, 255);"><thead><tr class="firstRow"><th style="background: linear-gradient(180deg, rgb(230, 240, 255) 0%, rgb(204, 228, 255) 100%);color: rgb(0, 68, 153);font-weight: 700;padding: 10px 16px;text-align: left;font-size: 15px;line-height: 1.6;"><section><span>概念</span></section></th><th style="background: linear-gradient(180deg, rgb(230, 240, 255) 0%, rgb(204, 228, 255) 100%);color: rgb(0, 68, 153);font-weight: 700;padding: 10px 16px;text-align: left;font-size: 15px;line-height: 1.6;"><section><span>作用</span></section></th></tr></thead><tbody><tr><td style="padding: 8px 16px;color: rgb(51, 51, 51);font-size: 15px;line-height: 1.6;"><code style="&#39;font-family:"><span>Profile</span></code></td><td style="padding: 8px 16px;color: rgb(51, 51, 51);font-size: 15px;line-height: 1.6;"><section><span>一种命名的 Agent / runtime 组合</span></section></td></tr><tr><td style="padding: 8px 16px;color: rgb(51, 51, 51);font-size: 15px;line-height: 1.6;"><code style="&#39;font-family:"><span>Bundle</span></code></td><td style="padding: 8px 16px;color: rgb(51, 51, 51);font-size: 15px;line-height: 1.6;"><section><span>一组可分发的 Cordis 配置行和插件</span></section></td></tr></tbody></table><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>内置的&nbsp;</span><code style="&#39;font-family:"><span>web</span></code><span>&nbsp;profile 提供浏览器应用;</span><code style="&#39;font-family:"><span>headless</span></code><span>&nbsp;profile 则提供不启动 Web 服务器的一次性 Agent runner。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>启动时,配置按层叠方式组合:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>bundle 1</span><span><br/></span><span>bundle 2</span><span><br/></span><span>...</span><span><br/></span><span>profile cordis.patch.yml</span><span><br/></span><span>$DSH_HOME/cordis.patch.yml</span><span><br/></span><span>--patch overlay</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这意味着,与其维护多个独立分支:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>agent-local</span><span><br/></span><span>agent-enterprise</span><span><br/></span><span>agent-ci</span><span><br/></span><span>agent-customer-a</span><span><br/></span><span>agent-customer-b</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>不如维护一组组合:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>基础 runtime</span><span><br/></span><span>+ 模型提供商</span><span><br/></span><span>+ 沙箱提供商</span><span><br/></span><span>+ 工具集</span><span><br/></span><span>+ 权限策略</span><span><br/></span><span>+ 客户专属 patch</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这更像我们构建可配置基础设施的方式,而不是为每个场景复制一份 Agent。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>更关键的是,开发者可以检查最终真正会启动的配置树:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>dsh --profile web --dump-config</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>动态组合系统最怕“源配置看起来没问题,但最终组合出来的 runtime 不知道是什么”。</span><code style="&#39;font-family:"><span>dump-config</span></code><span>&nbsp;解决的正是可观测性问题:开发者需要看到解析后的真实系统,而不只是零散的输入文件。</span></p><section style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><img src="https://pic.imgdb.cn/i/034BIMCaOIkyH9YqBPfrWL.png" alt="Profile 与 Bundle 的启动组合顺序" class="rich_pages wxw-img" style="max-width: 100%;height: auto;display: block;margin: 0.6em auto;" title="Profile 与 Bundle 的启动组合顺序"/></section><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>⚡ 一条命令启动,但真正的价值在启动之后</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>原文给出的快速路径很简单:安装 Node.js,然后运行:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>npx @deepseek-ai/dsh web</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>Web UI 默认运行在:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>http://127.0.0.1:3080</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>接下来可以在界面中:</span></p><ol style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: decimal;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>打开 Settings → Models;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>添加 DeepSeek API Key;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>选择一个 workspace;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>开始会话。</span></section></li></ol><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>一个适合作为第一次测试的提示词是:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>总结这个仓库,并找出它的主要 package。</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>Agent 可以读取和编辑文件、执行命令、委托工作并维护计划。需要审批的操作,会通过当前生效的权限策略呈现出来。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这里有一个重要的安全转折点:一旦模型能够修改文件或执行命令,授权就不再是某个工具的附属选项,而会成为 Agent 架构的一部分。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>DeepSeek Harness 将策略和执行拆成不同能力,而不是把所有权限判断硬编码进一个巨大的工具函数。这种拆分让本地运行、远程运行和受限运行之间有机会共享同一套工具接口。</span></p><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🖥️ Web UI 适合探索,Headless 才更接近生产入口</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>Web UI 适合第一次体验,但对平台工程师而言,</span><code style="&#39;font-family:"><span>headless</span></code><span>&nbsp;profile 可能更重要。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>如果你要构建以下系统:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>CI Agent;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>后台代码 worker;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>自动解决 issue 的机器人;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>内部运维自动化;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>定时运行的仓库分析任务;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>多租户代码处理服务;</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>你通常不希望每次都启动一个浏览器界面。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>原文给出的调用形式是:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>pnpm dsh --profile headless&nbsp;</span><span style="color: #859900;"><span>&quot;summarize this workspace&quot;</span></span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>或:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>dsh --profile headless&nbsp;</span><span style="color: #859900;"><span>&quot;job&quot;</span></span><span><br/></span><span>dsh web</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>此时 CLI 更像一个</span><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>组合启动器</span></strong><span>,而不是一个掌握所有未来选项的巨型命令行程序。它加载选定的 profile,然后把参数交给对应的组合处理。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这也是“runtime”与“单一代码助手”的差异:启动器不需要理解所有工具和 UI 细节,能力属于被加载的运行时组合。</span></p><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🧾 Agent Loop 不是一个 while 循环,而是一组可持久化事件</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>原文最值得技术人员注意的设计之一,是它区分了&nbsp;</span><code style="&#39;font-family:"><span>turn</span></code><span>&nbsp;和&nbsp;</span><code style="&#39;font-family:"><span>step</span></code><span>。</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>一个&nbsp;</span><code style="&#39;font-family:"><span>step</span></code><span>:一次模型请求,以及这次请求触发的工具调用;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>一个&nbsp;</span><code style="&#39;font-family:"><span>turn</span></code><span>:可以包含多个 step。</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>概念上的运行流程大致是:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>turn/start</span><span><br/></span><span>&nbsp; → claim input</span><span><br/></span><span>&nbsp; → assemble prompt + tool schemas</span><span><br/></span><span>&nbsp; → agent/pre-step</span><span><br/></span><span>&nbsp; → step/start</span><span><br/></span><span>&nbsp; &nbsp; &nbsp; &nbsp;→ model request</span><span><br/></span><span>&nbsp; &nbsp; &nbsp; &nbsp;→ assistant chunks</span><span><br/></span><span>&nbsp; &nbsp; &nbsp; &nbsp;→ assistant message</span><span><br/></span><span>&nbsp; &nbsp; &nbsp; &nbsp;→ tool calls</span><span><br/></span><span>&nbsp; &nbsp; &nbsp; &nbsp;→ guarded tool execution</span><span><br/></span><span>&nbsp; &nbsp; &nbsp; &nbsp;→ tool results</span><span><br/></span><span>&nbsp; → step/end</span><span><br/></span><span>&nbsp; → maybe another step</span><span><br/></span><span>turn/end</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这些关键事件会写入 session log。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这里有一个非常重要的原则:</span></p><blockquote style="margin: 0.6em 0px;padding: 0.6em 0.9em;background: rgb(230, 240, 255);color: rgb(0, 51, 102);line-height: 1.9;font-size: 14px;border-left: 2px solid rgb(153, 153, 153);border-radius: 0;font-style: italic;"><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>凡是会影响模型所见内容的东西,都应该可以从持久化状态中重建。</span></p></blockquote><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>一次真实的 Agent 请求,不只是一个最终字符串。它可能由以下内容共同组成:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>之前的对话;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>注入的上下文;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>工具 schema;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>插件贡献的提示词片段;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>模型配置;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>工具结果;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>继续执行所需的状态。</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>如果只记录最后发送给模型的文本,你可以重放“发了什么”,但不一定能解释“为什么会发这个”。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>事件化 session 模型的价值在于,它为以下能力提供基础:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>replay:重放;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>debugging:调试;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>forking:分叉会话;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>resuming:断点续跑;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>transcripts:生成完整记录;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>telemetry:遥测;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>audits:审计;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>deterministic tests:确定性测试。</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这些能力平时很无聊,但当 Agent 开始执行真实修改时,它们会迅速从“锦上添花”变成“能不能上线”的基础条件。</span></p><section style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><img src="https://pic.imgdb.cn/i/034BIMDsidk067eWAYK367.png" alt="Turn、Step 与 Durable Event Flow" class="rich_pages wxw-img" style="max-width: 100%;height: auto;display: block;margin: 0.6em auto;" title="Turn、Step 与 Durable Event Flow"/></section><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🔌 工具是插件,插件也必须有生命周期</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>原文用一个非常小的 TypeScript 插件说明了扩展方式:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span style="color: #6C71C4;"><span>import</span></span><span>&nbsp;</span><span style="color: #6C71C4;"><span>type</span></span><span>&nbsp;{&nbsp;</span><span style="color: #B58900;"><span>Context</span></span><span>&nbsp;}&nbsp;</span><span style="color: #6C71C4;"><span>from</span></span><span>&nbsp;</span><span style="color: #859900;"><span>&#39;@deepseek-ai/cordis&#39;</span></span><span><br/></span><span><br/></span><span style="color: #6C71C4;"><span>export</span></span><span>&nbsp;</span><span style="color: #6C71C4;"><span>const</span></span><span>&nbsp;name =&nbsp;</span><span style="color: #859900;"><span>&#39;hello-plugin&#39;</span></span><span><br/></span><span><br/></span><span style="color: #6C71C4;"><span>export</span></span><span>&nbsp;</span><span style="color: #6C71C4;"><span>function</span></span><span>&nbsp;</span><span style="color: #268BD2;"><span>apply</span></span><span>(</span><span style="color: #CB4B16;"><span>ctx</span></span><span>:&nbsp;</span><span style="color: #B58900;"><span>Context</span></span><span>) {</span><span><br/></span><span>&nbsp;&nbsp;</span><span style="color: #DC322F;"><span>console</span></span><span>.</span><span style="color: #268BD2;"><span>log</span></span><span>(</span><span style="color: #859900;"><span>&#39;[hello-plugin] plugin loaded!&#39;</span></span><span>)</span><span><br/></span><span>}</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>挂载时,可以通过 overlay 插入:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span style="color: #DC322F;"><span>-</span></span><span>&nbsp;</span><span style="color: #CB4B16;"><span>insert:</span></span><span><br/></span><span>&nbsp;&nbsp;</span><span style="color: #DC322F;"><span>-</span></span><span>&nbsp;</span><span style="color: #CB4B16;"><span>id:</span></span><span>&nbsp;</span><span style="color: #859900;"><span>hello</span></span><span><br/></span><span>&nbsp; &nbsp;&nbsp;</span><span style="color: #CB4B16;"><span>name:</span></span><span>&nbsp;</span><span style="color: #859900;"><span>&#39;/absolute/path/to/deepseek-harness/scratch-plugin/src/my-plugin.ts&#39;</span></span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>然后运行:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>pnpm dsh web --patch ./scratch-plugin/cordis.yml</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>工具插件的例子则是注册一个&nbsp;</span><code style="&#39;font-family:"><span>greet</span></code><span>&nbsp;工具,让模型可以调用它并看到&nbsp;</span><code style="&#39;font-family:"><span>Hello, Ada!</span></code><span>。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>看起来只是几行代码,但其中隐藏了几个重要工程决策:</span></p><h3 style="margin: 0.8em 0px 0.4em;font-size: 15px;line-height: 1.4;color: rgb(0, 102, 204);font-weight: 700;"><span>1. 依赖显式声明</span></h3><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>插件声明:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span style="color: #6C71C4;"><span>export</span></span><span>&nbsp;</span><span style="color: #6C71C4;"><span>const</span></span><span>&nbsp;inject = [</span><span style="color: #859900;"><span>&#39;tools&#39;</span></span><span>]</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>Cordis 会等待依赖的服务存在之后再加载插件,避免插件在运行时“猜”自己需要什么。</span></p><h3 style="margin: 0.8em 0px 0.4em;font-size: 15px;line-height: 1.4;color: rgb(0, 102, 204);font-weight: 700;"><span>2. 数据值和模型展示分离</span></h3><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>工具有标准化的输出值,同时有一个专门面向模型的 renderer。工具内部真正返回什么,与模型在上下文中看到什么,不必强行绑定为同一种格式。</span></p><h3 style="margin: 0.8em 0px 0.4em;font-size: 15px;line-height: 1.4;color: rgb(0, 102, 204);font-weight: 700;"><span>3. 注册具有生命周期意识</span></h3><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>插件卸载时,通过上下文注册的内容会自动移除。对于需要显式清理的资源,插件还可以注册可逆效果:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>ctx.</span><span style="color: #268BD2;"><span>effect</span></span><span>(</span><span>() =&gt;</span><span>&nbsp;{</span><span><br/></span><span>&nbsp;&nbsp;</span><span style="color: #6C71C4;"><span>const</span></span><span>&nbsp;timer =&nbsp;</span><span style="color: #2AA198;"><span>setInterval</span></span><span>(</span><span>() =&gt;</span><span>&nbsp;{</span><span><br/></span><span>&nbsp; &nbsp;&nbsp;</span><span style="color: #DC322F;"><span>console</span></span><span>.</span><span style="color: #268BD2;"><span>log</span></span><span>(</span><span style="color: #859900;"><span>&#39;heartbeat&#39;</span></span><span>)</span><span><br/></span><span>&nbsp; },&nbsp;</span><span style="color: #CB4B16;"><span>5000</span></span><span>)</span><span><br/></span><span><br/></span><span>&nbsp;&nbsp;</span><span style="color: #6C71C4;"><span>return</span></span><span>&nbsp;</span><span>() =&gt;</span><span>&nbsp;</span><span style="color: #2AA198;"><span>clearInterval</span></span><span>(timer)</span><span><br/></span><span>})</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这在热重载、租户专属工具、动态模型路由和临时 Agent 能力中很重要。插件系统如果没有生命周期管理,最终很容易变成内存泄漏和状态污染生成器。</span></p><section style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><img src="https://pic.imgdb.cn/i/034BIMGbFzZtNxS66dyGKU.png" alt="Tool Plugin Lifecycle" class="rich_pages wxw-img" style="max-width: 100%;height: auto;display: block;margin: 0.6em auto;" title="Tool Plugin Lifecycle"/></section><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>⚙️ 配置错误应该在组合时失败,而不是运行 40 分钟后失败</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>任何可能被不同部署设置成不同值的东西,都应该是配置项。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>插件可以导出类型化配置 schema,例如:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span style="color: #6C71C4;"><span>export</span></span><span>&nbsp;</span><span style="color: #6C71C4;"><span>interface</span></span><span>&nbsp;</span><span style="color: #B58900;"><span>Config</span></span><span>&nbsp;{</span><span><br/></span><span>&nbsp;&nbsp;</span><span style="color: #CB4B16;"><span>greeting</span></span><span>:&nbsp;</span><span style="color: #2AA198;"><span>string</span></span><span><br/></span><span>&nbsp;&nbsp;</span><span style="color: #CB4B16;"><span>maxRetries</span></span><span>:&nbsp;</span><span style="color: #2AA198;"><span>number</span></span><span><br/></span><span>&nbsp; verbose?:&nbsp;</span><span style="color: #2AA198;"><span>boolean</span></span><span><br/></span><span>}</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>部署时可以覆盖:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span style="color: #CB4B16;"><span>config:</span></span><span><br/></span><span>&nbsp;&nbsp;</span><span style="color: #CB4B16;"><span>greeting:</span></span><span>&nbsp;</span><span style="color: #859900;"><span>&#39;Hi there&#39;</span></span><span><br/></span><span>&nbsp;&nbsp;</span><span style="color: #CB4B16;"><span>maxRetries:</span></span><span>&nbsp;</span><span style="color: #CB4B16;"><span>5</span></span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>如果配置非法,应该在插件加载时失败,而不是让一个 Agent 先运行 40 分钟,最后才发现超时参数错误、凭证缺失或工具策略格式不对。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这是一条很朴素但很重要的生产原则:</span></p><blockquote style="margin: 0.6em 0px;padding: 0.6em 0.9em;background: rgb(230, 240, 255);color: rgb(0, 51, 102);line-height: 1.9;font-size: 14px;border-left: 2px solid rgb(153, 153, 153);border-radius: 0;font-style: italic;"><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>能在系统组合阶段验证的错误,不要拖到任务执行阶段才暴露。</span></p></blockquote><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🧱 Capability Seam:让工具不必知道底层执行环境</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>DeepSeek Harness 把可替换能力分成三个角色:</span></p><ol style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: decimal;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>Service Definition</span></strong><span>:服务接口;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>Service Provider</span></strong><span>:具体实现;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>Consumer</span></strong><span>:使用该服务的组件。</span></section></li></ol><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>例如,文件系统访问不一定意味着“Node.js 直接读取本地磁盘”。</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>本地 provider 可以暴露宿主机文件;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>远程 provider 可以暴露隔离环境内的文件;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>工具只消费 filesystem capability,而不需要知道底层实现在哪里。</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>同样的模式可以应用到子进程和沙箱。文件系统和子进程 provider 可以共享一个执行世界。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>于是,当你把执行 provider 从本地替换成远程沙箱时,Bash、持久终端、编辑器操作和语言服务器交互,都有机会跟着迁移,而不必分别维护:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>local-bash</span><span><br/></span><span>&nbsp;docker-bash</span><span><br/></span><span>&nbsp;remote-bash</span><span><br/></span><span><br/></span><span>local-editor</span><span><br/></span><span>&nbsp;docker-editor</span><span><br/></span><span>&nbsp;remote-editor</span><span><br/></span></code></pre><section style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><img src="https://pic.imgdb.cn/i/034BIMI1fwg4KgVtMfxYMP.png" alt="三个入口,共享一个 runtime" class="rich_pages wxw-img" style="max-width: 100%;height: auto;display: block;margin: 0.6em auto;" title="三个入口,共享一个 runtime"/></section><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>更理想的结构是:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>bash &nbsp; &nbsp; → subprocess capability</span><span><br/></span><span>editor &nbsp; → filesystem capability</span><span><br/></span><span>terminal → execution capability</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>然后为这些能力选择:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>local provider</span><span><br/></span><span>或</span><span><br/></span><span>sandbox provider</span><span><br/></span><span>或</span><span><br/></span><span>remote provider</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这实际上是 Agent 工程重新发现了接口隔离和依赖反转。听起来像老的软件工程原则,但在 Agent 时代,它们直接决定了系统能不能在本地、容器、远程沙箱和多租户环境之间迁移。</span></p><section style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><img src="https://pic.imgdb.cn/i/034BIMJS5TG27xtf52Rc7M.png" alt="Capability Seams:同一套消费者连接不同 Provider" class="rich_pages wxw-img" style="max-width: 100%;height: auto;display: block;margin: 0.6em auto;" title="Capability Seams:同一套消费者连接不同 Provider"/></section><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🐍 Python SDK:不只服务于 TypeScript 开发者</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>DeepSeek Harness 也提供 Python SDK。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>原文给出的安装方式是:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>git&nbsp;</span><span style="color: #2AA198;"><span>clone</span></span><span>&nbsp;https://github.com/deepseek-ai/deepseek-harness.git</span><span><br/></span><span style="color: #2AA198;"><span>cd</span></span><span>&nbsp;deepseek-harness</span><span><br/></span><span><br/></span><span>python -m venv .venv</span><span><br/></span><span>. .venv/bin/activate</span><span><br/></span><span><br/></span><span>python -m pip install deepseek-harness-sdk</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>一个最小程序可以通过上下文管理器启动 Harness:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span style="color: #6C71C4;"><span>from</span></span><span>&nbsp;pathlib&nbsp;</span><span style="color: #6C71C4;"><span>import</span></span><span>&nbsp;Path</span><span><br/></span><span style="color: #6C71C4;"><span>from</span></span><span>&nbsp;deepseek_harness&nbsp;</span><span style="color: #6C71C4;"><span>import</span></span><span>&nbsp;DeepSeekHarness</span><span><br/></span><span><br/></span><span>config = Path(</span><span style="color: #859900;"><span>&quot;examples/jsonrpc-agent/minimal.cordis.yml&quot;</span></span><span>).resolve()</span><span><br/></span><span>workspace = Path(</span><span style="color: #859900;"><span>&quot;/absolute/path/to/workspace&quot;</span></span><span>).resolve()</span><span><br/></span><span>sessions = Path(</span><span style="color: #859900;"><span>&quot;/absolute/path/to/sessions&quot;</span></span><span>).resolve()</span><span><br/></span><span><br/></span><span style="color: #6C71C4;"><span>with</span></span><span>&nbsp;DeepSeekHarness(</span><span><br/></span><span>&nbsp; &nbsp; provider=</span><span style="color: #859900;"><span>&quot;deepseek-official&quot;</span></span><span>,</span><span><br/></span><span>&nbsp; &nbsp; model=</span><span style="color: #859900;"><span>&quot;deepseek-v4-flash&quot;</span></span><span>,</span><span><br/></span><span>&nbsp; &nbsp; max_tokens=</span><span style="color: #CB4B16;"><span>49_152</span></span><span>,</span><span><br/></span><span>&nbsp; &nbsp; cwd=</span><span style="color: #2AA198;"><span>str</span></span><span>(workspace),</span><span><br/></span><span>&nbsp; &nbsp; session_root=</span><span style="color: #2AA198;"><span>str</span></span><span>(sessions),</span><span><br/></span><span>&nbsp; &nbsp; cordis=</span><span style="color: #2AA198;"><span>str</span></span><span>(config),</span><span><br/></span><span>)&nbsp;</span><span style="color: #6C71C4;"><span>as</span></span><span>&nbsp;harness:</span><span><br/></span><span>&nbsp; &nbsp; result = harness.run(</span><span><br/></span><span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span style="color: #859900;"><span>&quot;Inspect the repository and fix the failing tests.&quot;</span></span><span>,</span><span><br/></span><span>&nbsp; &nbsp; &nbsp; &nbsp; session_id=</span><span style="color: #859900;"><span>&quot;example-001&quot;</span></span><span>,</span><span><br/></span><span>&nbsp; &nbsp; )</span><span><br/></span><span>&nbsp; &nbsp;&nbsp;</span><span style="color: #2AA198;"><span>print</span></span><span>(result.final_response)</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这对已经用 Python 编排 ML 工作负载的平台团队尤其重要:他们不一定想改成 TypeScript,但可以把同一套 runtime 放进已有的 Python 服务中。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>如果复用同一个&nbsp;</span><code style="&#39;font-family:"><span>session_id</span></code><span>,就可以继续同一段持久化会话,包括:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>工作目录;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>环境变量;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>持久化 Bash 进程;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>Shell 函数;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>之前的对话和执行状态。</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>如果需要隔离执行状态,就使用新的 session ID。</span></p><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🔒 最不能跳过的安全警告:Workspace 不是安全边界</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>原文特别强调,Python 示例使用了非常宽松的&nbsp;</span><code style="&#39;font-family:"><span>danger-full-access</span></code><span>&nbsp;组合。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>在这种模式下,Bash 和编辑器可能修改 runtime 进程能够看到的任意路径。DeepSeek 明确建议只在一次性 checkout 或容器中运行。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这应该成为所有 Coding Agent 的默认安全认知:</span></p><blockquote style="margin: 0.6em 0px;padding: 0.6em 0.9em;background: rgb(230, 240, 255);color: rgb(0, 51, 102);line-height: 1.9;font-size: 14px;border-left: 2px solid rgb(153, 153, 153);border-radius: 0;font-style: italic;"><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>如果模型可以执行 Shell 命令并编辑文件,那么“工作目录”本身就不是安全边界,除非操作系统或沙箱真的把它隔离开了。</span></p></blockquote><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>面向严肃部署,至少需要纵深防御:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>Agent policy</span><span><br/></span><span>+ tool policy</span><span><br/></span><span>+ filesystem boundary</span><span><br/></span><span>+ subprocess isolation</span><span><br/></span><span>+ OS/container sandbox</span><span><br/></span><span>+ credential scoping</span><span><br/></span><span>+ network policy</span><span><br/></span><span>+ audit log</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>DeepSeek Harness 将这些安全关注点表达成可替换能力,而不是塞进一个巨大的&nbsp;</span><code style="&#39;font-family:"><span>executeTool()</span></code><span>&nbsp;函数。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>同时,第三方 Harness 插件也必须被当成高风险依赖:如果一个 npm 包可以在你的机器上执行命令,那么它和“能执行命令的 Agent 插件”本质上都需要同等级别的审查。</span></p><section style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><img src="https://pic.imgdb.cn/i/034BIMKrEqGfMAGSN31Esj.png" alt="Coding Agent 的纵深防御模型" class="rich_pages wxw-img" style="max-width: 100%;height: auto;display: block;margin: 0.6em auto;" title="Coding Agent 的纵深防御模型"/></section><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>📈 Harness Engineering:模型之外的第二条性能曲线</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这篇文章最核心的判断,是 2026 年的 Agent 研究正在把“模型能力”和“Harness 能力”逐渐分开。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>原文引用了一项 Claw-SWE-Bench 比较:在受控条件下,更换模型让 Pass@1 改变了 29.4 个百分点,而更换 Harness 让 Pass@1 改变了 27.4 个百分点。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这个差距非常接近。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>文章还引用了&nbsp;</span><code style="&#39;font-family:"><span>Agentic Harness Engineering</span></code><span>&nbsp;的研究:通过自动改进工具、中间件、记忆等 runtime 组件,Terminal-Bench 2 的结果从 69.7% 提升到 77.0%。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这些数字必须带着 benchmark 条件来读:它们不是所有任务、所有模型和所有部署环境中的普遍保证,也不意味着 Harness 一定比模型更重要。更准确的结论是:</span><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>在 Agent 任务中,模型只是完整系统的一部分。</span></strong></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>运行时决定了:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>模型拿到什么上下文;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>系统提供哪些工具;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>工具 schema 如何表达;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>什么时候需要审批;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>哪些内容被持久化;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>失败如何恢复;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>长任务如何继续;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>执行环境如何隔离;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>哪些事件被记录;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>会话能否重放;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>模型能否被替换。</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>到了这个阶段,Harness 就不再是模型外面的薄壳,而是整个 Agent 系统的一部分。</span></p><section style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><img src="https://pic.imgdb.cn/i/034BIMMzK1hDiSntv5xjOC.png" alt="Harness 改变结果的幅度可能接近更换模型" class="rich_pages wxw-img" style="max-width: 100%;height: auto;display: block;margin: 0.6em auto;" title="Harness 改变结果的幅度可能接近更换模型"/></section><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><em><span>图:原文引用的 Harness 与模型影响对比。该图展示的是特定 benchmark 条件下的结果。</span></em></p><section style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><img src="https://pic.imgdb.cn/i/034BIMOk0j1dVxs7FFWkOo.png" alt="原文总结的 Agent 运行时架构" class="rich_pages wxw-img" style="max-width: 100%;height: auto;display: block;margin: 0.6em auto;" title="原文总结的 Agent 运行时架构"/></section><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><em><span>图:原文末尾对 Agent runtime 组成的总结示意。</span></em></p><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🧠 “模型 + Harness + 环境”才是 Agent 的真实能力</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>传统的模型评测倾向于问:这个模型在某个 benchmark 上得分多少?</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>但一个可以真正工作的 Coding Agent 还必须处理:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>仓库上下文是否完整;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>文件是否能正确读取;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>工具调用是否可靠;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>终端是否可持续;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>错误是否会被反馈给模型;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>权限是否会在危险操作前阻断;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>会话是否能在进程重启后恢复;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>最终修改是否经过测试和验证。</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>因此更完整的能力表达应该是:</span></p><pre style="margin: 0.5em 0px;padding: 0.8em 1em;background: rgb(253, 246, 227);overflow-x: auto;font-size: 12px;line-height: 1.6;"><section style="display: block;background-repeat: no-repeat;width: 100%;height: 16px;"></section><code style="&#39;font-family:"><span>Agent capability</span><span><br/></span><span>= model</span><span><br/></span><span>+ harness</span><span><br/></span><span>+ tools</span><span><br/></span><span>+ memory</span><span><br/></span><span>+ execution environment</span><span><br/></span><span>+ verification loop</span><span><br/></span></code></pre><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>同一个模型放进不同 Harness,可能表现出完全不同的任务完成率。一个有更好上下文选择、工具设计、持久化和验证闭环的旧模型,未必会输给一个被放在简陋脚本里的新模型。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这也改变了软件团队的竞争方式。未来的核心资产不一定只是“我接入了哪个最强模型”,还可能是:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>我如何组织工具;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>我如何设计运行时事件;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>我如何把失败轨迹变成可学习数据;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>我如何管理权限和风险;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>我如何让任务可以暂停、恢复、审计;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>我如何在模型变化时保留自己的系统能力。</span></section></li></ul><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>⚠️ 这篇文章哪些地方需要保持谨慎?</span></h2><h3 style="margin: 0.8em 0px 0.4em;font-size: 15px;line-height: 1.4;color: rgb(0, 102, 204);font-weight: 700;"><span>第一,Stars 不是采用量</span></h3><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>112,000 Stars 和 10,000 Forks 说明项目引发了强烈兴趣,但无法直接证明有多少企业在生产使用,有多少用户每天运行 Agent,也不能证明项目已经成熟。</span></p><h3 style="margin: 0.8em 0px 0.4em;font-size: 15px;line-height: 1.4;color: rgb(0, 102, 204);font-weight: 700;"><span>第二,模型名和版本需要以官方仓库为准</span></h3><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>PDF 是一篇 Medium 分析文章,不是 DeepSeek 官方文档。文章中的版本、命令、SDK 名称和模型名,在实际安装前应以官方仓库和发行说明为准。</span></p><h3 style="margin: 0.8em 0px 0.4em;font-size: 15px;line-height: 1.4;color: rgb(0, 102, 204);font-weight: 700;"><span>第三,benchmark 不是普遍规律</span></h3><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>29.4、27.4、69.7% 和 77.0% 都对应特定任务、模型、Harness、参数和实验设置。它们能支持“运行时影响很大”这个方向性判断,但不能直接变成“换 Harness 一定等于换模型”的宣传语。</span></p><h3 style="margin: 0.8em 0px 0.4em;font-size: 15px;line-height: 1.4;color: rgb(0, 102, 204);font-weight: 700;"><span>第四,插件化也会增加复杂度</span></h3><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>一切都是插件,意味着一切都可以替换,但也意味着:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>依赖关系更多;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>配置解析更复杂;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>插件版本兼容更难;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>运行时行为不容易从单个仓库文件看懂;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>恶意或脆弱插件可能扩大攻击面;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>调试需要更好的事件、配置和依赖可视化。</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>插件化不是自动获得的架构优势,只有配套的类型系统、生命周期、配置校验、审计和测试体系跟上时,它才会成为基础设施。</span></p><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🛠️ 对开发团队的实际启示</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>如果你现在正在搭建 Agent 平台,可以从 DeepSeek Harness 的思路中提炼出几条可执行原则:</span></p><h3 style="margin: 0.8em 0px 0.4em;font-size: 15px;line-height: 1.4;color: rgb(0, 102, 204);font-weight: 700;"><span>1. 先定义能力接口,再决定本地还是远程实现</span></h3><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>不要让工具直接绑定本地磁盘、Docker 或某个云沙箱。先定义 filesystem、execution、subprocess、approval 等能力接口,再提供不同 provider。</span></p><h3 style="margin: 0.8em 0px 0.4em;font-size: 15px;line-height: 1.4;color: rgb(0, 102, 204);font-weight: 700;"><span>2. 把 Agent 事件当成产品数据</span></h3><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>记录的不只是最终回答,还包括上下文组装、工具 schema、工具调用、审批、结果和失败恢复路径。</span></p><h3 style="margin: 0.8em 0px 0.4em;font-size: 15px;line-height: 1.4;color: rgb(0, 102, 204);font-weight: 700;"><span>3. 把危险权限从工具实现中分离</span></h3><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>工具负责“能做什么”,策略负责“什么时候允许做”。这样才能针对不同用户、租户、环境和任务切换权限。</span></p><h3 style="margin: 0.8em 0px 0.4em;font-size: 15px;line-height: 1.4;color: rgb(0, 102, 204);font-weight: 700;"><span>4. 默认把长期任务当成可恢复任务</span></h3><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>如果任务可能运行十几分钟甚至数小时,就不要只依赖进程内存。需要 session log、状态持久化、断点恢复和审计记录。</span></p><h3 style="margin: 0.8em 0px 0.4em;font-size: 15px;line-height: 1.4;color: rgb(0, 102, 204);font-weight: 700;"><span>5. 把验证闭环放在 Agent Loop 里</span></h3><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>“模型说完成了”不等于任务完成。代码 Agent 至少需要测试、静态检查、文件差异、结果校验或人工审批中的一部分。</span></p><h2 style="margin: 1em 0px 0.5em;padding: 0.4em 0.7em;font-size: 16px;line-height: 1.45;color: rgb(0, 102, 204);font-weight: 800;background: rgb(240, 247, 255);border-left: 4px solid rgb(0, 102, 204);border-radius: 0;"><span>🧭 最后的判断:模型是发动机,Harness 是整辆车</span></h2><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>DeepSeek Harness 的爆发式关注,未必只是一次开源项目营销成功。它更像是一个信号:开发者开始意识到,Agent 的下一个瓶颈可能不只是模型参数量和 benchmark 得分,而是模型周围那套经常被忽略的运行时基础设施。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>一个真正可靠的 Agent,需要知道:</span></p><ul style="margin: 0.4em 0px;padding: 0.5em 1em 0.5em 1.5em;line-height: 1.86;color: rgb(51, 51, 51);background: rgb(230, 243, 255);list-style-position: outside;list-style-type: disc;" class="list-paddingleft-1"><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>它看到了什么;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>它可以调用什么;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>它被允许修改什么;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>它如何记录自己的行动;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>它失败后如何回来;</span></section></li><li style="margin: 0.28em 0px;font-size: 14px;line-height: 1.82;text-indent: 0;"><section><span>它如何证明自己真的完成了任务。</span></section></li></ul><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>这就是 Harness Engineering 的核心。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>模型决定“能不能想出一个方向”,Harness 决定“这个方向能不能在真实环境中被安全、持续、可验证地执行”。</span></p><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>所以,DeepSeek Harness 最值得关注的地方,可能不是它今天能不能替代某个代码助手,而是它把一个更大的问题摆到了台面上:</span></p><blockquote style="margin: 0.6em 0px;padding: 0.6em 0.9em;background: rgb(230, 240, 255);color: rgb(0, 51, 102);line-height: 1.9;font-size: 14px;border-left: 2px solid rgb(153, 153, 153);border-radius: 0;font-style: italic;"><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><strong style="font-weight: 700;color: rgb(0, 68, 153);"><span>未来的 Agent 竞争,究竟是在争夺更强的模型,还是在争夺更好的模型运行方式?</span></strong></p></blockquote><p style="margin: 0.3em 0px;line-height: 1.85;font-size: 15px;color: rgb(51, 51, 51);text-align: justify;letter-spacing: 0.01em;text-indent: 0;"><span>答案很可能是:两者都会重要,但真正能进入生产环境的系统,必须把模型、Harness、工具、记忆、执行环境和验证机制作为一个整体来设计。</span></p></section>                            <div class="content-mask">
                            <a href="javascript:void (0);" class="mask-text login-trigger">
                                <i class="iconfont icon-suo"></i>
                                登录查看剩余 70% 内容
                                <i class="iconfont icon-arrow-right-o"></i>
                            </a>
                        </div>
                    </div>
                                        </div>
标签:AI

想了解 AI 如何助力您的企业?

免费获取企业 AI 成熟度诊断报告,发现转型机会

置顶文章

会打字,就能"拍"电影:ScriptTask 开放限量内测
置顶

会打字,就能"拍"电影:ScriptTask 开放限量内测

//

24小时热榜

DeepSeek 开源 Harness,我为什么想认真说一声谢谢?
TOP1

DeepSeek 开源 Harness,我为什么想认真说一声谢谢?

DeepSeek Harness 一周拿下 16.6 万 Star,开发者已经把它改成了什么?
前途科技前途科技
服务关于快讯技术商业报告
前途科技微信公众号

微信公众号

扫码关注

Copyright © 2026 AccessPath.com, 前途国际科技咨询(北京)有限公司,版权所有。|京ICP备17045010号-1|京公网安备 11010502033860号|隐私政策|服务条款
TOP2

DeepSeek Harness 一周拿下 16.6 万 Star,开发者已经把它改成了什么?

3

DeepSeek Harness 两天冲上 10 万 Stars:AI Agent 的真正前沿,已经从模型转向基础设施

1小时前
DeepSeek Harness 两天冲上 10 万 Stars:AI Agent 的真正前沿,已经从模型转向基础设施
4

读懂 FDE(一):模型越强,为什么企业越需要 FDE 下场?

1小时前
读懂 FDE(一):模型越强,为什么企业越需要 FDE 下场?
5

把 Codex 当作平台:基于开放的 Agent Harness 构建应用

1小时前
把 Codex 当作平台:基于开放的 Agent Harness 构建应用
6

DeepSeek Harness 工具执行流水线:一次工具调用的守卫、执行与定格

1小时前
7

浅谈 SKILL 研发的最佳实践——以百补详情助手为例

1小时前
浅谈 SKILL 研发的最佳实践——以百补详情助手为例
8

Claude Code、OpenAI Codex 与 DeepSeek Harness 架构对比

1小时前
Claude Code、OpenAI Codex 与 DeepSeek Harness 架构对比
热门标签
大模型AgentRAG微调私有化部署Prompt EngineeringChatGPTClaudeDeepSeek智能客服知识管理内容生成代码辅助数据分析金融零售制造医疗教育AI 战略数字化转型ROI 分析OpenAIAnthropicGoogle

关注公众号

前途科技微信公众号

扫码关注,获取最新 AI 资讯

免费获取 AI 落地指南

3 步完成企业诊断,获取专属转型建议

已有 200+ 企业完成诊断