Agent 预设详解
本教程共 32 篇 · 第 8 篇 · 更新于 2026-08-15 · 约 6 分钟阅读
本节目标:认识官方 Agent Presets(standard / minimal / code / cordis)与用户预设 copy() 机制,分清官方术语和第三方「四种模式」叫法。
一个会话里的 Agent 用什么工具、什么提示词段落、什么能力组合,由 Agent Preset(Agent 预设) 决定。这是官方文档的权威术语。你打开 Web UI 新建会话时选的那个「模式」,背后就是一个 preset。
预设是什么
一个 preset 是一个目录,目录里放一份 agent.cordis.yml——一份描述插件子组装的配置文件。预设目录还可以带可选的 preset.yml 展示元数据:
# preset.yml 只承载展示文本,不影响能力
name: 极简模式
description: 仅提供持久 bash 与 str_replace_editor 的双工具编码 Agent。
注意:id 是目录名,trust(system/user)来自预设所在的根目录,两者都不可写在 preset.yml 里。展示不是能力——名字坏掉的预设照样能挂载。
官方 shipped 预设
官方随发行版提供四个预设 id:
| 预设 id | 定位 | 说明 |
|---|---|---|
standard | 默认 | 功能完整的编码 Agent:文件编辑、Shell、文件与网页检索、Skills、计划、目标、子 Agent 与工作流 |
minimal | 极简 | 仅持久 bash + str_replace_editor 两个工具,用于最小化环境下的模型基准测试 |
code | 程序化 | standard 的完整副本,以 Code Mode SDK 方式呈现工具 |
cordis | 程序化 | standard 的完整副本,供 Cordis 插件形态使用 |
code 和 cordis 都是 standard 的完整副本。官方这么做是故意的:整份组装在一个文件里可读,不引入「standard 加一处改动」的补丁语义。
Warning第三方教程常说的「四种运行模式(标准 / PTC / 极简 / 创造)」是社区归纳命名,不是官方术语。其中「标准」对应
standard、「极简」对应minimal、「PTC」是对code的通俗解读、「创造」指 Web UI 里「让 Agent 帮你创建预设」的入口——它们不是 shipped 预设 id。写作命令、配置时一律用官方 id:standard/minimal/code/cordis。
roster 与常驻挂载
谁在管理预设。 一个叫 roster(名单)的服务,ctx 键为 ctx.agentPresets。它扫描预设根目录,提供 list()、resolve()、mount()、copy()、remove() 等操作。
一份预设只挂载一次。 这是关键设计:一份预设在整个进程内只挂载一次,而不是每个会话复制一份。挂载的工具、提示词段落、投影单元只存在一份,覆盖所有加入的 Agent。会话怎么加入?通过 scope 父链:命名了某预设的会话,把自己的 agent scope key 认父到该预设的常驻挂载上。视图解析顺序是:
agent → preset → global(近者遮蔽远者)
人话版:一百个会话共用同一个 standard,工具和提示词只准备一份。谁加入,谁共享;不为谁单独复制。
子 Agent 怎么加入。 兄弟预设的监听器对不属于自己的 Agent 保持失聪,会话之间互不串扰。子 Agent 则通过 composeFrom() 直接加入父 Agent 正在运行的预设组合,保证父子用同一代插件实例。
用户预设:copy() 创作
预设的创作方式是复制,没有别的写入路径。像手机主题:官方给成品,你想改就复制一份再改,原件不动。ctx.agentPresets.copy(from, id, name?) 把某个既有预设的整个目录(组装、元数据、skill 目录、资产)复制到第一个 user 信任的根目录,即 <dshHome>/.agent-presets($DSH_HOME 默认为 ~/.dsh)。
copy() 拒绝三种输入:
- id 不符合
[a-z0-9][a-z0-9-]*:id 会成为目录名,../escape、a/b、绝对路径一律拒绝 - id 已被占用:复制从不覆写
- 来源未知:来源可以是任何信任级别(复制 shipped 预设是主要用途),但必须存在
复制出的副本会重写 preset.yml:保留来源描述,丢掉名称与 roster 排序。副本不能和来源长得一模一样,否则 roster 分不清谁是谁。副本收紧为仅属主可用(文件 0600、目录 0700),符号链接被解引用,保证自包含。
写预设最容易翻车的是 id:它要当目录名用,../escape、a/b、绝对路径都会被拒绝。
Note用户预设与随附预设的信任级别不同。
user预设由人或 Agent 创作,其信任级别等同于 shell 访问权限;trust字段让消费方能够呈现这种差异,但官方文档明确:展示不是能力,同名遮蔽由根目录优先级决定——随附的standard永远遮蔽 home 目录里冒名standard的目录。
默认预设与切换
默认预设是一项用户设置,层叠在部署方的工程默认值之上:
# 用户设置文档(settings)中
agent-presets:
default: minimal
该值在每次解析时读取,热重载后对此后创建的会话生效;运行中的会话保持它当初加入的预设。
预设可以在空白会话上切换(recompose()):先确保新常驻挂载可用,再把 Agent 的 scope 链接移过去;失败则旧组合原样保留。已产生任何产出的会话不能切换——中途换工具会留下新组装无法执行的已记录调用。切换成功后,agent-preset/selected 事件追加进会话日志,恢复会话时从日志重建选择。
Tip判断会话实际跑哪个预设,不能只看创建时的记录。创建头部是冻结的创建期事实;
resolveSessionPreset(session)才给出实际运行值——空白会话切换过后两者就不同了。
Warning版本基线
@deepseek-ai/dsh0.1.0-rc.6 处于 Developer Preview。预设是每进程挂载一次的活体组合,随附集合与用户根目录的路径、默认值都以dsh --version实测与官方文档为准。
小结
- Agent Preset 决定单会话的能力组合,官方四件套:
standard/minimal/code/cordis。 - 预设是目录 +
agent.cordis.yml,id就是目录名;preset.yml只承载展示文本。 - 一份预设进程内只挂载一次,会话通过 scope 父链加入。
- 创作方式是 copy():id 有格式约束、从不覆写、副本仅属主可用。
- 「四种运行模式」是社区叫法,写命令配配置一律用官方 id。