DeepSeek Harness 跑 preset 会话:Key 用 TaoToken,插件树照常长
2026/9/14 4:09:48 网站建设 项目流程

你按官方教程把 standard preset 拷到~/.dsh/.agent-presets/my-agent/,编辑好agent.cordis.yml后,会发现还差一个能用的模型 Key。DeepSeek Harness 的 preset 会话要真正跑起来,Key 这关躲不掉。这篇文章用 TaoToken 填这个空:先去 TaoToken 创建 API Key,再把agent.cordis.yml里模型适配器的 Base URL 指到https://taotoken.net/api,重启 dsh 新建会话,验证插件树照常长。你会看到 preset 里的插件组装完全由 dsh 自己完成,TaoToken 只负责提供模型通道的 Key 和 Base URL。

1. 坐标对齐:preset 是 dsh 里组装 agent 的菜单项

1.1 你认识的 Claude Code / Codex 机制,在 dsh 里的对应物

如果你用过 Claude Code 或 Codex,理解 hooks、MCP、subagents、权限白名单这些概念,那么 dsh 的 preset 并不难懂。它就是把下面这些机制打包成一个菜单项的东西。

你在 Claude Code / Codex 里认识的dsh 里的对应物关键差异
subagentssubagent 工具 + 可换 provider后端可以换成进程内 spawn、fork、codex、claude-code
hooks(固定钩子点)事件监听(tools/pre-execute 等)整条请求流水线都开放成事件,不限于几个钩子
permissions / allowlistsandbox + approval 插件三档沙箱模式加审批流,这两样本身也是插件
output styles / personassystem-prompt 段落插件人设只是众多提示词段落里的一个
settings.jsoncordis.patch.yml + settings.yamlsettings 只能调开关;patch 可以覆盖任何插件行的 config
主循环(agent loop)dsh-agent-loop 插件Claude Code 的主循环碰不到,dsh 的主循环可以被替换

有了这张对照表,preset 就不神秘了:你选哪个 preset,等于选了哪组工具、哪段人设、哪套权限、哪个主循环。

1.2 preset 的本质:一组插件行的快照

预设(preset)不是一个独立程序,也不是一段脚本。它是agent.cordis.yml里一组插件行的快照。每个插件行指定一个插件 id、它的 config、是否被 disabled、插到整棵树的哪个位置。

dsh 启动时读取这些行,像种树一样把插件逐个挂载到运行时上下文(ctx)上,插件之间通过注册机制互相发现。所以「一切皆插件」在 preset 这里的表现就是:你拷贝一份 standard,删几行、改几行、加几行,就得到一个新的 agent。工具集、人设、提示词段落都是菜单项,跟写配置文件没什么两样。

1.3 preset 真正跑起来之前,还差一个能用的模型 Key

不过 preset 里有一类插件比较特殊:模型适配器。它负责把 dsh 的请求转成某个模型 API 的调用。这个插件必须填对三样东西——Base URL、API Key、模型 ID,否则整个会话起不来。

这就是为什么你会卡在agent.cordis.yml面前:插件行可以照抄,但模型适配器的 Key 是你自己的,谁也没法替你生成。TaoToken 在这里的角色就是提供这三个值里最关键的两个:Key 和 Base URL。模型 ID 则在模型广场里查。

2. 三个证据:为什么说插件树由配置长出来

2.1 证据一:整台机器的家当就是一份 YAML

打开 dsh 安装目录下的packages/bundle/base/cordis.patch.yml,你会看到模型适配器、全部工具、持久化、沙箱、审批、凭据,全是插件行。你复制出来的my-agent/agent.cordis.yml也是同一套格式,只是范围更小。

运行中的 dsh 不是「程序加配置」,而是「一棵由配置长出来的插件树」。任何一行都可以按 id 被你的 patch 覆盖。这份 YAML 就是整台机器的家当。

2.2 证据二:主循环是插件

dsh 的主循环不是编死在源码里的。packages/core/agent-loop/src/agent.ts里的ReactLoopAgent只是默认实现,挂载它的是一行配置。别的插件可以监听它发出的每个事件,也可以整个替换它。

对应到 preset:如果你把预设里的 agent-loop 插件换成另一份实现,这个 agent 的思考节奏、工具调用方式、上下文压缩策略会完全改变。这是 Claude Code 里 fork 源码才能干的事。

2.3 证据三:官方工具不特殊

dsh 的官方工具,比如 todo 工具,完整实现只有一个注册调用:ctx.tools.register(defineTool({...}))。你写的第一个插件和它是同一个函数、同一张表。

这也解释了为什么「插件树照常长」能成为验证标准——只要注册 API 没变,你的 preset 里加多少插件都能长在同一棵树上。官方工具没有更高权限。

3. 上手:复制 standard preset,把模型通道换成 TaoToken

3.1 先到 TaoToken 控制台创建 API Key

打开 TaoToken 官网落地页,注册并创建一个 API Key。复制下来,后面统一用YOUR_API_KEY占位。

注意区分两个地址:落地页只用于注册、创建 Key、看用量、查模型广场;真正填进agent.cordis.yml的 Base URL 是https://taotoken.net/api,末尾不要加/v1,也不要带任何 UTM 参数。官网地址和接口地址是两回事。

3.2 把 standard preset 拷到~/.dsh/.agent-presets/my-agent/

找到 dsh 源码里的apps/cli/config/agent-presets/standard/目录,把standard复制成自己的预设:

mkdir -p ~/.dsh/.agent-presets/my-agent cp -r apps/cli/config/agent-presets/standard/* ~/.dsh/.agent-presets/my-agent/

目录路径以你的 dsh 安装位置为准。复制完成后,~/.dsh/.agent-presets/my-agent/里应该有一份agent.cordis.yml

3.3agent.cordis.yml里改 Base URL、Key、模型 ID

用文本编辑器打开~/.dsh/.agent-presets/my-agent/agent.cordis.yml,找到模型适配器段落。字段名以你本机这份文件为准,结构类似下面这样:

# 模型适配器段落(字段名以你本机文件为准) model: adapter: baseURL: https://taotoken.net/api apiKey: YOUR_API_KEY model: YOUR_MODEL_ID

YOUR_MODEL_ID不要照抄网上旧教程里的版本号,去 TaoToken 模型广场 查当前真实存在的模型 ID。模型广场显示什么,就填什么。

3.4 删改 persona 与工具行

模型适配器配好后,回到agent.cordis.yml的插件列表,按原文的路子删改:

# 删掉或注释掉 tool-pwsh 行(如果不需要 PowerShell 工具) # - id: tool-pwsh # 改 persona 文本,把自己想要的人设写进去 - id: system-prompt config: persona: "你是一个只关心代码审查的助手,回答要短,问题要狠。" # 加一行 tool-web(如果需要网页搜索能力) - insert: - id: tool-web

这里有一条必须记住的约束:如果某一行要「发布服务」(而不是只注册工具),它必须放进带isolate realm的 group。否则挂载时会被拒绝,因为两个 preset 发布同名服务会撞车。工具行不需要这个处理。

3.5 重启 dsh,新建会话并选择 my-agent

保存agent.cordis.yml后,完全退出 dsh 进程再重新启动。新建会话时,菜单里会出现 my-agent。

选中它,如果模型应答正常,说明模型通道和插件树都通了。在 my-agent 里,工具集、人设、提示词段落都来自你刚改的这份 YAML;和官方 standard preset 唯一的区别是 Key 通道换成了 TaoToken。

4. 验证:模型应答正常,插件树照常长

4.1 一句指令确认模型通道已通

在 my-agent 会话里发一句:

请用一句话说明你当前可以调用哪些工具。

模型正常回答,说明 TaoToken 的 Key 有效,dsh 到模型 API 的链路是通的。如果这一步报 401,先回 TaoToken 检查 Key 是否创建完整、有没有复制漏字符。

4.2 检查工具注册:tool-* 插件还在不在

接着让模型列出工具,或者用 dsh 自带的工具列表命令,重点看tool-fstool-webtool-todo这类tool-*插件是否照常出现。

这就是「插件树照常长」的直接证据。如果某个工具少了,多半是你改agent.cordis.yml时整行误删,而不是 Key 的问题。把删掉的那行恢复再重启一次。

4.3dsh --dump-config与 TaoToken 控制台的双重确认

在 shell 里运行:

dsh --dump-config

打印出来的最终配置树里,my-agent 的插件应该完整挂载。然后打开 TaoToken 控制台,看刚才的会话请求是否记上了用量。两条都通过,就说明 preset 会话用 TaoToken 跑通了。

5. 排障:preset 挂载与 Key 通道的四个典型问题

5.1 挂载时报服务冲突:发布的插件行要 isolate realm

重启 dsh 时如果提示 service conflict,说明agent.cordis.yml里某个插件行要「发布服务」,但它没有被放进带isolate realm的 group。把那个插件行挪进一个 group,并加上 isolate realm 声明即可。工具行不需要这条,只有发布服务的插件行才需要。

5.2 401 Unauthorized:Key 不对或没在官网创建

检查apiKey是不是从 TaoToken 创建的,有没有复制完整。注意官网落地页和接口 Base URL 不是同一个地址,Key 本身是独立的,和 Base URL 混填不会报这个错,但会报填错字段的错误。

5.3 模型 ID 不存在:以 TaoToken 模型广场为准

不要在配置里写网上旧教程传的版本号,那些可能已经下架。去模型广场查当前真实存在的模型 ID,填进model字段。填错通常会报 model not found 或类似的模型不存在错误,而不是 401。

5.4 改了配置但没生效:重启 dsh 并新建会话

dsh 的预设配置只影响新会话和重启后的进程。已有会话会保持创建时的组合,这是刻意设计——会话日志里记录着它用的哪个 preset。所以每次改完agent.cordis.yml,要完全退出 dsh 重启,然后新建会话,不要复用旧会话测试。

6. 继续深入

想继续深挖,可以看这几份文档(路径以你的 dsh 安装目录为准):

  • docs/architecture.md末尾有「新行为往哪挂」的扩展点总表,想做的事对照机制一查便知。
  • docs/cookbook/extension-cookbook.md:工具、UI、协议驱动等插件形态的代码模式。
  • docs/cookbook/adding-a-tool.md:第一个工具插件的完整教程。
  • docs/tool-catalog.md:所有模型可见工具的 schema 目录,用来查「现在模型手上有什么」。

最后把整篇文章压成一句:在 dsh 里,你要么在改一个插件的配置,要么在挂一个新的插件,要么在让 AI 替你挂一个;而让这棵插件树真正长出模型能力的第一步,是去 TaoToken 拿一个能用进agent.cordis.yml的 API Key。注册、建 Key、填进配置,再到控制台看第一次调用记上账,这条链路走通之后,preset 组装就只剩插件行的增删改查了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询