首页 / DeepSeek Harness 入门教程 / Agent 预设详解

DeepSeek Harness 入门教程

Agent 预设详解

本教程共 32 篇 · 第 8 篇 · 更新于 2026-08-15 · 约 6 分钟阅读

Agent Presets预设standardminimalscope

本节目标:认识官方 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 插件形态使用

codecordis 都是 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 会成为目录名,../escapea/b、绝对路径一律拒绝
  • id 已被占用:复制从不覆写
  • 来源未知:来源可以是任何信任级别(复制 shipped 预设是主要用途),但必须存在

复制出的副本会重写 preset.yml:保留来源描述,丢掉名称与 roster 排序。副本不能和来源长得一模一样,否则 roster 分不清谁是谁。副本收紧为仅属主可用(文件 0600、目录 0700),符号链接被解引用,保证自包含。

写预设最容易翻车的是 id:它要当目录名用,../escapea/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/dsh 0.1.0-rc.6 处于 Developer Preview。预设是每进程挂载一次的活体组合,随附集合与用户根目录的路径、默认值都以 dsh --version 实测与官方文档为准。

小结

  • Agent Preset 决定单会话的能力组合,官方四件套:standard / minimal / code / cordis
  • 预设是目录 + agent.cordis.ymlid 就是目录名;preset.yml 只承载展示文本。
  • 一份预设进程内只挂载一次,会话通过 scope 父链加入。
  • 创作方式是 copy():id 有格式约束、从不覆写、副本仅属主可用。
  • 「四种运行模式」是社区叫法,写命令配配置一律用官方 id。