← 返回 Tony's Lab 网页由小虾生成 🦐

DeepSeek Harness / Modes

两种拆开
agent 的方式

Creator 改运行时,PTC 改调用方式。一个让 agent 动手重写自己的工具与界面,一个把几十轮工具调用压成一段程序。它们都建立在同一个前提上:模型、工具、界面,全是可替换的插件。

MODE / EXPOSURE 切换模式,看模型这一步能碰到什么
RUNTIME
Cordis 插件树
模型、工具、界面、服务都挂在同一棵树上
llmtoolsfsuimcpjobs
native toolsOFF
run_codeOFF
SDK bindingsOFF
cordis inspectOFF
plugin managerOFF
ui / skillsOFF
MODEL
可见面
—
    STANDARD

    FIG. 01 — 四种模式不是能力高低,而是“这次会话向模型暴露多少运行时”。切换只改变可见面,不改变插件树本身。

    [00]

    先说清楚:Harness 是什么

    The Host

    DeepSeek Harness(命令行 dsh)是 DeepSeek 在 2026 年 8 月 14 日开源的 agent 运行宿主,MIT 协议。它不是又一个聊天客户端,而是一套“把模型接进真实工作环境”的骨架:文件、终端、搜索、子 agent、定时任务、MCP,全部以插件形式挂上去。

    底层是 Cordis 的“一切皆插件”架构。模型是插件,工具是插件,界面也是插件;插件可以组合、替换、在运行时装卸。这个设计带来一个直接后果:“agent 能做什么”不是写死的,而是这次会话装载了什么决定的。

    所以它才有四种模式。它们回答的不是“模型多聪明”,而是同一个问题:这一次,把多少运行时能力摆到模型面前?

    RELEASE
    2026-08-14
    v0.1 开发者预览
    LICENSE
    MIT
    完全开源
    CORE
    Cordis
    插件运行时
    RUN
    npx @deepseek-ai/dsh web
    本地起 Web UI

    启动只需要 Node:npx @deepseek-ai/dsh web,默认在 127.0.0.1:3080 开一个本地界面。桌面版、Web 版、SDK 共用同一套运行时。

    [01]

    Creator:把运行时本身交出去

    Reshape the Host

    Creator 不是“更强的 Standard”。它多给的是一组指向运行时自己的工具:agent 能看见自己由什么组成,然后当场改。

    它具体多了什么

    • 只读运行时检查:cordis_inspect_list、cordis_inspect_query。查插件树、服务、事件、工具注册项——“这个工具是谁提供的”“为什么它没出现”,可以直接问。
    • Plugin Manager:Standard 也有,但 Creator 里它是创作闭环的一部分。写一个配置 bundle,plugin_manager install_bundle 装进去。
    • 热加载:开启 HMR 时,装完立刻在当前会话生效,不用重启进程。
    • 预设创作:让 agent 创建或修改 preset,再起一个新的 agent 去测这套配置,构建、试用、迭代全在对话里完成。
    • 插件市场:打开实验性的自定义索引后,多一个只读的 plugin_market,可以搜现成插件。
    • 造工具、技能、界面:官方原话是 “Install plugins, or create them through chat in Creator mode, to extend tools, skills, and the interface.”

    一次完整的工作流

    官方文档给的例子很能说明问题:让 agent 把一个 MCP server 配成当前 profile 的 demo。它会写一个只含配置的 bundle patch,插入 @deepseek-ai/dsh-mcp-client,用 plugin_manager 安装;HMR 生效后,在同一个会话里直接调用 mcp__demo__ping 验证。整个过程不需要你打开编辑器。

    STEP 01 / 描述

    “把这个 MCP server 配成 demo,然后 ping 一下。”

    不需要知道包名和配置格式。

    STEP 02 / 生成

    agent 生成一个 bundle patch,改的是配置,不是运行中的内存。

    持久化,重启后仍在。

    STEP 03 / 生效

    install_bundle 安装,HMR 把新工具接进当前会话。

    立刻调用验证,失败就改配置重来。

    STEP 04 / 复用

    这套东西绑定在当前 profile 上,该 profile 的所有会话都能用。

    也可以打成 preset,做成专用 agent。

    真正的价值

    它把“造工具”的门槛从写一个 Cordis 插件,降到了说清楚你要什么。对愿意读代码的人,这是效率工具;对完全不懂插件机制的人,这是危险品——因为你把修改自身运行环境的权限交给了模型。

    四条边界,用之前先记住:

    • 仍是开发者预览,官方明确说会有破坏性变更。
    • 插件代码跑在宿主进程里,权限等同你的本机。agent 自己写的插件,本质是供应链风险;装之前看一遍 bundle patch。
    • Creator 的检查是只读的;持久修改必须走 “bundle + install_bundle”,不是随手改内存。
    • 配置绑定当前 profile,影响该 profile 的所有会话,重启后仍在。别拿生产 profile 做实验。
    [02]

    七个 demo,七段提示词

    Prompt Set

    Creator 到底能造出什么?官方把宣传片里七个插件的提示词全放了出来,中英各一版。复制进 Harness、选「创造模式」(Creator)就能复现——想验证「一句话生成插件」到底靠不靠谱,这是最直接的办法。

    先看官方自己留的那句话:部分插件经过多轮对话反复打磨,单次生成(one-shot)不一定能完全复刻视频中的效果。所以别把这七段当 benchmark,它们更像七份写得不错的 brief——句式、约束、默认值都给全了。

    01

    3D 著名地标馆Landmark Gallery

    考的是 3D 资产渲染加上侧边栏入口,七条里最直观的一个。

    Prompt · 中文

    创建一个带左侧边栏入口的 DeepSeek Harness 插件,用 3D 模型展示巴黎埃菲尔铁塔、中国长城、紫禁城,以及另一座由你选择的著名建筑。

    02

    Transformer 3D 可视化Interior View

    把抽象计算做成可玩的教学游戏。还专门写了「别挡住 macOS 窗口按钮」——说明它是在真桌面应用里跑的,不是浏览器演示。

    Prompt · 中文

    创建一个带左侧边栏入口的 DeepSeek Harness 插件,做成可交互的 3D 演示游戏,帮助我理解 Transformer 内部的计算逻辑。确保面板标题和工具栏避开 macOS 原生窗口按钮,不发生重叠。

    03

    DSH 像素风界面Restyle the Host

    换肤级改动:不是换某个面板,是改整个应用的视觉风格。这条直接演示了「界面也是插件」。

    Prompt · 中文

    创建一个带左侧边栏入口的 DeepSeek Harness 插件,让我可以切换整个应用的视觉风格。提供 5 种不同风格供我选择,像素风是其中一种。

    04

    海报设计工作台Poster Bench

    复用官网 shader 与英文字体,把审美约束写进了提示词;再用「保持简约」压制模型爱加戏的毛病。

    Prompt · 中文

    创建一个从会话进入的海报设计工作台插件,使用 DeepSeek Harness 官网的 shader 背景图案和英文字体。支持自定义海报标题、文字和 shader 颜色。默认页面保持简约,不要多余的小标题或无用信息。默认海报标题为 Everything is a plugin。

    05

    视频编辑工作台Timeline

    七条里最重的:上传、剪辑、导出,再加上自然语言操作,等于让模型现造一个剪映。

    Prompt · 中文

    创建一个从会话进入的视频编辑工作台,采用常见剪辑软件的深色界面和交互方式。支持上传多个视频、剪辑和导出。预览器放在上方,占据页面主要空间;时间轴放在下方,支持导入和剪辑视频。同时支持在会话中通过自然语言导入和剪辑视频。

    06

    论文阅读器Paper Reader

    关键词是「完整保留排版、字体、图片」——保真渲染比加功能难;划词菜单又把阅读和会话接了起来。

    Prompt · 中文

    创建一个从右侧边栏进入的论文阅读器,支持上传论文,完整保留原始排版、字体、图片及其他内容,不丢失信息。选中文字后显示悬浮菜单,提供高亮、添加笔记和在会话中提问三个选项。默认提问 prompt 的语言应与界面语言一致。

    07

    会话统计Usage Console

    唯一读你自己数据的一条:token、成本、预算、CPU 占用。它成立的前提,就是 [01] 里说的「运行时接口交给模型」。

    Prompt · 中文

    创建一个基于我真实会话数据的统计插件,展示总 token 消耗、会话数量,以及按 token 用量估算的成本和预算。支持查看 token 消耗时间线、各会话的 token 用量与成本,并监测 CPU 运行和占用情况。

    把这七条拆开,是同一个句式

    入口位置+要做什么+硬约束+默认值

    入口(左侧边栏 / 右侧边栏 / 会话)、功能描述、限制条件(别挡按钮、保持简约、不丢排版)、默认值(标题、语言)。四段写全,命中率明显高于一句「帮我做个 XX」——这也解释了为什么同样的模型,官方演示和随手一试的差距会那么大。

    [03]

    PTC:把 N 次调用压成一个程序

    Programmatic Tool Calling

    PTC 全称 Programmatic Tool Calling。它把“模型点一下工具、结果塞回上下文、再点一下”的循环,换成“模型写一段程序,运行时替它跑完,只把结果带回来”。

    机制

    • 模型手里只剩一个可直接调用的工具:run_code。
    • 其他所有工具变成生成式 SDK 的绑定:tools.bash(...)、tools.read_file(...)、tools.grep(...)。
    • 模型提交 code(async TypeScript 函数体,类型标注会被剥离)和一句 description,这就是一次工具调用。
    • 参数与返回值必须是 lossless JSON;单个调用失败会 reject 成 ToolCallError,带 toolName 和可读 message,可以 try/catch 后继续。
    • 只有 console.log 和 return 的内容回到对话;所有中间结果留在程序内部,不进上下文。
    // 一次 run_code:读目录、找 TODO、只返回统计
    const files = await tools.glob({ pattern: "src/**/*.ts" });
    const hits = [];
    for (const f of files.slice(0, 80)) {
      const text = await tools.read({ path: f });
      if (text.includes("TODO")) hits.push(f);
    }
    return { scanned: files.length, todo: hits.length, files: hits.slice(0, 10) };

    它省掉了什么

    上下文

    传统方式里,读 50 个文件就是 50 轮,每个结果都要留在上下文里。PTC 只回来一个统计对象。

    控制流

    循环、条件、重试、聚合、排序,这些原生 tool calling 只能靠多轮“演”出来,代码里是真的。

    并发

    独立只读调用可以 Promise.all,默认最多 10 路;写操作独占执行,按提交顺序来。

    确定性

    筛选和计算在代码里跑,不靠模型手抄数字,错得少。

    失败处理

    一个工具挂了可以 catch 住降级,不会整个任务中断。

    可审计

    程序源码整段进 session log;子调用有 <parent>:ptc:<n> 的 id,能追溯。

    默认参数

    • 超时默认 120 秒,上限 600 秒,包含嵌套工具调用与审批等待。
    • 顶层多个 run_code 之间串行;并发只发生在单个程序内部,默认上限 10。
    • 沙箱提权按“单次执行”授予,需要写 justification 并等批准,不改变会话常驻策略。

    代价也很实在:

    • 小任务不划算。生成 SDK 说明加写代码,比直接调一个工具贵。
    • 中间值不落盘,不能从 session 回放重建;量大了可能吃爆内存。只有最外层输出有硬性上限。
    • 调试更绕:内部出错只能看捕获输出和 Error: code run failed (<kind>)。
    • 它不是绕过权限:所有子调用照样走同一条策略与审批流水线。
    [04]

    怎么选

    Decision

    把四种模式放在一张表里,差别其实很清楚:Standard 是默认,Minimal 是减法,PTC 是换执行方式,Creator 是换运行环境。

    模式模型看见什么适合主要代价
    Minimal最少的一组核心工具纯问答、单步任务、省 token干不了复杂活
    Standard完整常用工具 + 插件管理日常编码、研究、文件处理工具schema 占上下文
    PTC只有 run_code + 生成的 SDK批量操作、循环重试、多工具编排写代码成本、调试更绕
    CreatorStandard + 运行时检查 + 创作能力造插件、调预设、改界面权限大、风险高
    IF 你在批量改代码 / 抓取 / 清洗
    选 PTC。一次程序跑完,上下文只回结论。这类活用它通常更稳也更便宜。
    IF 你需要一个新工具 / 新界面 / 新预设
    选 Creator。描述需求,让它生成插件并热加载;装之前读一遍 bundle patch。
    IF 你只是问问题、改一两个文件
    留在 Standard。切 PTC 反而多花生成代码的成本。
    [05]

    判断

    Take

    这两个模式看起来都在“给 agent 更多权力”,但方向相反。

    Creator 扩展的是边界:agent 能给自己造工具,运行时长什么样由它参与决定。PTC 压缩的是成本:同一批工具,用程序调度,轮次和 token 都降下来。

    真正跑生产任务时,PTC 往往比多轮对话更可靠,前提是模型代码写得对;而 Creator 更像一把改装工具,适合愿意读代码、能承担后果的人。两者都不适合“先开了再说”。

    还有一点值得记住:它们能做到这些,不是因为模型变强了,而是因为宿主把运行时拆成了插件,并且愿意把拆开的接口交出来。能力来自架构,不来自提示词。

    先想清楚你要改的是“怎么干”,还是“能干什么”。前者用 PTC,后者用 Creator。— 选型只需要这一句

    参考:deepseek-ai/deepseek-harness · 官方 Harness 页面 · 官方文档 docs/subsystems/ptc-runtime.md、docs/tool-catalog.md。内容基于 2026-11-02 的开发者预览,后续版本可能变化。