发布日期:2026-09-01 | 话题标签:DeepSeek Harness、DSH Preset、极简模式、PTC 模式、Agent 配置
DSH(DeepSeek Harness)内置四种 Agent Preset——极简(Minimal)、标准(Standard)、PTC、创造(Cordis)——每个 Preset 是一份 agent.cordis.yml 组装文件,决定当前会话拥有哪些工具、提示词段落和 Skill,不同 Preset 的会话在同一进程中完全隔离运行。极简模式只加载持久 bash 和 str_replace_editor 两个工具,无上下文压缩,适合低 token 消耗的基准测试和轻量修改;标准模式是默认选项,集成文件、Shell、网页检索、Skill、规划、目标、子 Agent、Workflow 等完整能力;PTC 模式在标准模式全部能力的基础上增加 run_code 工具,让模型用一段 TypeScript 程序批量组合多个工具调用,把原本需要五次往返的操作压缩为一次;创造(Cordis)模式同样基于标准模式,额外开放 cordis_* 运行时自检工具集,让模型直接读写自身运行的 Harness 组装,等同于 shell 级访问权限。本文基于 DSH 官方 GitHub 源码(packages/preset/agent-presets/presets/)对四种 Preset 逐一拆解,给出工具差异对比、适用场景和切换方法。
什么是 Preset
DSH 的每个会话在启动时选定一个 Preset,Preset 决定这个会话能用什么工具、看到哪些提示词段落、加载哪些 Skill。不同 Preset 的会话彼此隔离——共用同一进程,但各自的工具注册表和提示词互不干扰。
会话在启动后无法更换 Preset(一旦发出了第一条消息,Preset 就锁定了),但可以开一个新会话选不同的 Preset。
四种内置 Preset 按顺序展示在 UI 的选择器中:
| 顺序 | Preset ID | 显示名 | 一句话定位 |
|---|---|---|---|
| 1 | standard | 标准模式 | 功能完整的编码 Agent(默认) |
| 2 | ptc | PTC 模式 | 标准 + 批量工具调用压缩 |
| 3 | minimal | 极简模式 | 仅双工具,最低开销 |
| 4 | cordis | 创造模式 | 标准 + 运行时自改写 |
极简模式(Minimal):最小化工具集
工具清单:bash(持久 PTY Shell)+ str_replace_editor
没有的东西:无网页检索、无 Skill、无子 Agent(subagent / workflow / ralph)、无规划模式(exit_plan_mode)、无目标(goal)、无上下文压缩。
关键细节:这里的 bash 是持久 PTY 版本(dsh-tool-bash-persistent),与标准模式的一次性 bash 不同——状态在多次调用之间保持,不会随每次调用重置工作目录和变量。文件系统直接使用 dsh-fs-local,绕过沙箱 fs,权限模型与其他模式有细微差异。提示词极简——You are a helpful software engineer assistant.——没有任何注入的工具说明或上下文段落。
适合的场景:
- Benchmark / 评测:官方 BENCHMARK.md 明确指定用 minimal 变体跑
jsonrpc-agent,其他 preset 加载的额外工具会让评测结果不可比 - 快速单文件编辑:只需要改一个文件、运行一条命令的轻量任务,标准模式的完整工具目录是浪费
- 调试 DSH 自身:排查 harness 问题时用极简模式跑任务,避免其他插件的干扰
不适合的场景:长任务(无上下文压缩,长会话会超出模型窗口)、需要联网查资料、需要子 Agent 分发工作。
标准模式(Standard):日常的默认选项
工具清单(完整):
| 类别 | 工具 |
|---|---|
| Shell | bash(POSIX)/ pwsh(Windows),沙箱隔离,状态无跨调用保持 |
| 文件系统 | read、write、edit、read_image、glob、grep |
| 后台任务 | job_list、job_output、job_kill |
| Skill | skill(加载文件系统 skill 目录) |
| 目标管理 | create_goal、get_goal、update_goal |
| 规划模式 | exit_plan_mode |
| 上下文压缩 | 超 8192 字符的工具结果自动截断,长会话触发 compaction |
| 子 Agent | subagent、subagent_fork、list_agents、send_message、interrupt_agent |
| 工作流 | workflow、ralph |
| 网页 | web_fetch、web_search |
| 询问用户 | ask_user_question |
| 待办列表 | todo_write |
这是绝大多数用户 90% 时间应该用的模式。
子 Agent 的两种后台行为:subagent 支持模型选择(modelSelectionSettings: true);subagent_fork 继承父会话的模型路由,有利于 KV Cache 复用。两者均为 backgroundMode: continuable,可以在后台运行并被 send_message 继续通信。
PTC 模式:把五次往返压成一次
与标准模式的差别:在标准模式全部工具之外,增加一个呈现层插件 @deepseek-ai/dsh-agent-tool-presentation(mode: ptc),将工具的暴露方式从 JSON Schema 函数定义改为 TypeScript SDK——模型不再每步发出一个 tool-call,而是写一段 TypeScript 程序一次性提交,由沙箱运行时(worker thread)执行。
为什么叫 PTC:来自 Cloudflare 提出的 Program-Tool-Call 概念,核心观察是:LLM 见过数百万行真实代码,编程能力强于发出结构化 tool-call,让它写程序比让它"填表单"更自然。
PTC 模式的工具是 run_code:
// 模型会这样写(TypeScript 异步函数体)
const result1 = await tools.bash({ command: 'ls src/', description: 'List source files' });
const result2 = await tools.bash({ command: 'cat src/index.ts', description: 'Read entry file' });
// 只 return 需要模型看到的内容,中间结果不占 context
return `目录内容: ${result1}\n入口文件: ${result2}`;核心优势:
- 减少往返次数:5 个独立的 bash 调用,在标准模式需要 5 次模型请求;在 PTC 模式写一个程序一次提交
- 中间结果不污染 context:程序内部的中间值不会进入模型上下文,只有
return或console.log的内容才返回 - 支持并发:
Promise.all([tools.read({...}), tools.read({...})])并行执行,标准模式按调用顺序串行
注意事项:
- 程序跑在 Node.js worker thread 中,信任等级与 bash 相同——模型代码有全部 Node API 权限,不是沙箱隔离
- 只支持可擦除 TypeScript 语法(不能用
enum、namespace),运行前会做 type-strip
适合的场景:多步骤的读-分析-写任务(如读 10 个文件再汇总)、需要在程序内部做分支和循环的任务、想节省 API token 往返成本的场景。
创造模式(Cordis):让 Agent 改写自己
与标准模式的差别:在标准模式全部工具之外,增加 @deepseek-ai/dsh-tool-cordis 工具集(7 个工具:cordis_define、cordis_inspect_list、cordis_inspect_query、cordis_inspect_self、cordis_run、cordis_stop、cordis_undefine),并加载一个 editing-cordis-compositions Skill。
能做什么:Agent 可以实时查看 Harness 进程内的插件注册表(inspect)、编写一段新的 Cordis 插件代码(define)、在运行时挂载执行(run)——实际上是让模型直接给自己添加新工具或修改行为。
风险说明:官方文档原文:"Treat a session on this preset as shell access"(视为 shell 级访问权限)。cordis_run 执行模型写的 JavaScript,权限等同于运行任意 shell 命令。
主要用途:
- 开发自定义 Preset:按官方流程,先用创造模式让 Agent 辅助编写
agent.cordis.yml,再保存到~/.dsh/.agent-presets/下 - 实验性插件调试:动态挂载一个临时插件,测试完再
cordis_stop/cordis_undefine - 了解 DSH 架构:通过
cordis_inspect_* 探索当前进程内的所有服务和事件
不适合普通用户日常编码任务——全部能力都在标准模式里有,创造模式的额外工具只对"想改造 Harness 本身"的开发者有价值。
四种模式对比速查
| 维度 | 极简(Minimal) | 标准(Standard) | PTC | 创造(Cordis) |
|---|---|---|---|---|
| 工具调用方式 | 原生逐个 | 原生逐个 | TypeScript 程序批量 | 原生逐个 |
| 上下文压缩 | ✗ | ✓ | ✓ | ✓ |
| 子 Agent | ✗ | ✓ | ✓ | ✓ |
| 网页检索 | ✗ | ✓ | ✓ | ✓ |
| Skill | ✗ | ✓ | ✓ | ✓ |
| 规划模式 | ✗ | ✓ | ✓ | ✓ |
| 运行时自改写 | ✗ | ✗ | ✗ | ✓ |
| bash 类型 | 持久 PTY | 一次性进程 | 一次性进程 | 一次性进程 |
| 推荐场景 | 评测 / 轻量改动 | 日常开发 | 多步批量任务 | Preset 开发 |
| token 效率 | 最高(工具少) | 中 | 高(减少往返) | 中 |
如何切换 Preset
新建会话时选择:打开 DSH Web UI(http://127.0.0.1:3080),新会话启动前在会话选择器中选 Preset,下拉菜单显示四种内置 Preset 的显示名和描述。
修改默认 Preset:编辑 DSH 配置,找到 @deepseek-ai/dsh-agent-presets 的 default 字段,改为对应的 Preset ID(minimal / standard / ptc / cordis)。修改只影响之后新建的会话,已运行的会话不受影响。
创建自定义 Preset:在创造模式下,可以让 Agent 辅助创建一个自定义 Preset,或者直接在 $DSH_HOME/.agent-presets/ 下手写一个目录,放入 agent.cordis.yml 和 preset.yml(包含显示名和描述)。自定义 Preset 与内置 Preset 同级列出。
FAQ
Q:默认就该用标准模式吗?
A:是的,官方默认值就是 standard。除非有明确理由(跑评测用极简、想减少 API 往返用 PTC、想改造 Harness 用创造),标准模式就是日常使用的正确选择。
Q:PTC 模式适合所有人吗?
A:适合理解 TypeScript 并且任务以"多步骤批量操作"为主的用户。如果日常任务以单步骤问答为主,PTC 模式的优势不明显,还需要模型"以函数体而非对话"的方式思考,可能带来新的心智负担。
Q:极简模式是 Benchmark 专用的吗?
A:不完全是,它也适合任何不需要联网、不需要子 Agent、只需要改文件和跑命令的轻量任务。DSH 官方的 Benchmark 用的是 jsonrpc-agent minimal 变体,这是因为极简模式的工具集固定,评测结果可复现。
Q:四种 Preset 对应同一个 API Key 的费用一样吗?
A:工具数量不同,系统提示词长度不同,token 消耗会有差异。极简模式提示词最短,往往最省;PTC 模式虽然减少往返次数,但 SDK 声明本身增加了系统提示词长度。接入七牛云 AI 大模型广场(qiniu.com/ai/models)可以统一监控不同模式的实际 token 消耗,方便对比。
Q:cordis_run 执行的代码安全吗?
A:官方原文说明:信任等级与 bash 相同,等同于 shell 访问权限。模型写的 JavaScript 跑在 Node.js worker thread 中,可以调用全部 Node API。只在信任 DSH 自身模型输出的前提下使用。
总结
DSH 的四种 Preset 是同一套"一切皆插件"架构下的不同组装方案:极简模式两个工具、无压缩,适合轻量任务和 Benchmark;标准模式是功能完整的默认配置,覆盖日常 90% 的场景;PTC 模式在标准之上引入 TypeScript 程序批量执行,减少多步任务的 API 往返次数;创造模式在标准之上开放运行时自检和插件挂载,是开发自定义 Preset 和探索 Harness 架构的专用工具。会话启动后 Preset 不可更换,选好再开工。
延伸阅读
- DeepSeek Harness GitHub 仓库:https://github.com/deepseek-ai/deepseek-harness
- DSH 工具目录文档:https://deepseek-harness.github.io/deepseek-harness/
- 七牛云 AI 大模型广场(dsh可接入):https://www.qiniu.com/ai/models
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。