
1. Deep Agents 的 Skill 都建好了卡在最后一步模型调用原文讲 Skill 创建和运行时最顺的地方在create_deep_agent(skills[...])的自动发现机制Agent 启动时只读所有 SKILL.md 的 name 和 description等任务匹配到某个 description 再去加载完整指令。这个机制本身没什么坑Skill 建好后真正容易卡住的是最后那一下agent.invoke(...)——多个 Skill 的 description 写得清清楚楚结果模型调用报 401或者 Base URL 填错连不上整个多 Skill 协作直接停在第一步。要让它跑起来除了照常写 SKILL.md还要把create_deep_agent的 model 参数和底层客户端 Base URL 指到 TaoToken 的兼容通道。Key 在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建拿到 YOUR_API_KEY 后模型路由和通道不稳定这两个问题可以一起解决。我先把结论放在前面SKILL.md 的创建、内容结构、skills 路径列表这些步骤都不需要改动你只需要把模型调用那一层切到 TaoToken。下面按原文的目录顺序从 Skill 创建讲到多 Skill 协作再落到配置和验证。1.1 Skill 怎么创建CLI 自动生成还是手动建目录创建 Skill 的方式分三种推荐优先级从高到低。dcode是 Deep Agents 官方 CLI执行dcode skills create my-skill会在用户级目录~/.deepagents/agent_name/skills/下生成标准结构想放进当前项目加--project参数会创建到.deepagents/skills/或skills/。它会同时生成SKILL.md和配套的 scripts、references、assets 目录省去手写目录的麻烦。手动创建也完全可行目录结构长这样skills/ └── my-skill/ ├── SKILL.md ├── scripts/ ├── references/ └── assets/注意目录名必须和 SKILL.md 里的name字段完全一致否则 Agent 按名字找不到。社区里现成的 Skill 可以用npx skills add安装比如npx skills add langchain-ai/langchain-skills --skill langgraph-fundamentals --yes装完同样落在 skills 目录里。这三条路都不涉及模型配置。也就是说Skill 本身的“内容生产”和“模型通道”是两件独立的事前者是给 Agent 看的手册后者是让 Agent 有模型可调。本文用到的 TaoToken 只负责后一半。1.2 SKILL.md 里哪些内容决定 Agent 能不能找到你SKILL.md 的 YAML Frontmatter 里最关键的字段是description。Agent 启动时只加载所有 Skill 的name和description当用户请求命中 description 描述的场景它才会用read_file读完整 SKILL.md。所以 description 写得越精准路由越不容易跑偏最多 1024 字符把“这个 Skill 解决什么问题、什么时候用”说清楚。正文部分建议采用固定节奏--- name: my-skill description: 当用户需要生成业务 SQL 查询时使用本 Skill --- # 我的 Skill ## When to Use - 用户要求写 SQL 查询 - 需要把查询结果整理成报告时 ## Instructions 1. 先生成可执行的 SQL 2. 请用户在本地执行把结果贴回对话 3. 根据结果继续清洗或汇总正文控制在 500 行 / 5000 token 以内细粒度知识放到references/里正文只需要引用文件路径。这样做的好处是多个 Skill 共存时Agent 可以快速扫完所有 description而不必每个 Skill 全文读一遍。allowed-tools是实验性字段用来预批准 Skill 可使用的工具先不用管它。2. 运行方式create_deep_agent 的模型通道切到 TaoToken2.1 报错先分清SKILL.md 是手册模型通道是发动机多 Skill 协作最常见的失败现场是这样的SKILL.md 写好了路径列表也传进了create_deep_agent但真正invoke的时候客户端直接抛异常。常见的有两类一类是 401 Unauthorized说明 Key 不被模型服务端接受或者 Key 根本没有配到环境变量里另一类是连接层错误比如 URL 拼错导致连不上服务端。要排查这两类问题得先意识到一个事实SKILL.md 负责的是“Agent 知不知道怎么做”模型通道负责的是“Agent 有没有模型可用”。两者是串在一起的但问题要分开看。TaoToken 在这条链路里承担的是统一接入的角色同一个 Base URL、同一把 Key把模型调用请求转发到对应的模型服务上。对 Deep Agents 来说它只认两样东西底层客户端怎么连model 参数用哪个模型。把这两样指到 TaoTokenSkill 加载和路由逻辑一行都不用改。2.2 环境变量与 create_deep_agent 配置示例先说最省事的做法用环境变量把模型客户端的地址和密钥指过去。打开你的 shell 配置文件或.env写入export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYYOUR_API_KEY如果你的 Deep Agents 底层走的是 Anthropic 官方 SDK变量名就换成ANTHROPIC_AUTH_TOKENLangChain 客户端则认ANTHROPIC_API_KEY。两个变量指向同一把 Key 也不会冲突。注意 Base URL 一定是https://taotoken.net/api末尾不要加/v1加了反而可能 404。然后在 Python 里照常创建 Agent只是模型字段通过环境变量读取import os from deepagents import create_deep_agent from deepagents.backends import FilesystemBackend agent create_deep_agent( modelos.getenv(ANTHROPIC_MODEL, anthropic:claude-sonnet-4-5-20250929), backendFilesystemBackend(root_dir.), skills[/skills/base/, /skills/user/, /skills/project/], ) result agent.invoke( {messages: [{role: user, content: 帮我写一个复杂的 SQL 查询}]}, config{configurable: {thread_id: user-123}} )model字段里anthropic:前缀表示走 Anthropic 兼容协议后面的模型 ID 以 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 的模型广场当时列表为准上面代码里的默认值只是原文当时的示例写法正式使用前务必去模型广场核对一遍。skills参数保持原文的路径列表不变三个路径分别代表基础技能、用户技能、项目技能后面的路径会覆盖前面同名 Skill。3. 参数配置skills、backend、sources 与模型字段的落地值3.1 原文参数表加上 TaoToken 适配值原文第三节整理过一组运行时参数对照着看切到 TaoToken 之后只有模型相关的两列需要动。参数原文作用接 TaoToken 后的落地值skills技能源路径列表POSIX 风格后者覆盖前者保持原文路径如[/skills/base/, /skills/project/]backend存储后端决定 Skill 元数据存哪里FilesystemBackend(root_dir.)不变sourcesSkillsMiddleware的源列表可传(path, label)保持原样label 只影响显示名不影响模型调用model指定模型modelanthropic: 模型IDID 以模型广场为准base_url底层客户端连接地址环境变量ANTHROPIC_BASE_URLhttps://taotoken.net/apithread_idinvoke的 config用于持久化和多轮对话不变allowed-toolsSKILL.md frontmatter实验性预批准工具不变这张表的核心结论是skills、backend、sources全是 Skill 层的配置跟模型通道无关真正要动的只有model和底层 Base URL 两处。这也解释了为什么原文的 Skill 结构和运行方式可以原封不动地搬过来。3.2 backend 与 sources 在多 Skill 场景怎么选多 Skill 协作时backend的选择会影响 Agent 在多个 Skill 之间切换的表现。FilesystemBackend把 Skill 元数据落在磁盘上适合项目里固定维护一批 Skill每次启动都从同一批目录加载StateBackend走内存适合单次会话里的临时技能组合CompositeBackend可以混合多个来源跨会话持久化。SkillsMiddleware的sources参数比skills更灵活它允许给每个源指定显示名from deepagents.middleware.skills import SkillsMiddleware from deepagents.backends import FilesystemBackend middleware SkillsMiddleware( backendFilesystemBackend(root_dir/path/to/root), sources[ /skills/base/, (/skills/user/, User), /skills/project/, ], ) agent create_deep_agent( middleware[middleware], modelos.getenv(ANTHROPIC_MODEL, anthropic:claude-sonnet-4-5-20250929), )Sources的覆盖规则是“last wins”所以 base、user、project 的排列顺序就决定了同名 Skill 的最终版本。这一层和模型通道解耦TaoToken 只接管model和 Base URL不要把它塞进 backend 或 sources 里。4. 多 Skill 协作SQL 查询 数据清洗 报告跑通验证4.1 多 Skill 协作机制自动发现、分层覆盖、内部引用、Sub-agentSkill 本身是独立模块默认互不依赖能协作靠的是四个机制。第一个是自动发现加按需加载Agent 同时看到所有 Skill 的 description根据当前任务自主选择一个或多个相关 Skill 加载。第二个是分层覆盖base → user → project → team同名 Skill 后面的覆盖前面的适合“公司通用 项目定制 个人偏好”的组合。第三个是内部引用在 SKILL.md 指令里写“如果需要进一步处理结果请先加载data-cleaningSkill”Agent 会再去调用加载工具。第四个是 Sub-agent 委托主 Agent 可以把任务分给带特定 Skills 的子 Agent子 Agent 默认不继承主 Agent 的 Skills必须显式指定。这四个机制都不感知模型通道。不管背后接的是哪个模型服务协作逻辑都由 SKILL.md 和 Agent 路由决定。TaoToken 在这里只是保证每次模型调用都能稳定返回不让 401 打断这条链路。4.2 跑一次真实协作生成 SQL → 本地执行 → 贴回结果用一个具体例子把这条链路串起来。假设项目里有三个 Skillwrite_sql生成业务 SQL 查询输出可执行语句data_cleaning清理查询结果中的空值、统一日期格式report_gen把清洗后的数据输出为 Markdown 报告三个 Skill 的 description 分别写成write_sql: 当用户要求从数据库查询数据时生成可执行的 SQL 语句 data_cleaning: 当用户提供表格结果时清洗空值、统一格式 report_gen: 当需要输出汇总报告时把结果整理为 Markdown 表格启动 Agent 时加载这三个路径agent create_deep_agent( modelos.getenv(ANTHROPIC_MODEL, anthropic:claude-sonnet-4-5-20250929), backendFilesystemBackend(root_dir.), skills[/skills/write_sql/, /skills/data_cleaning/, /skills/report_gen/], )然后给 Agent 发一条任务帮我写一条 SQL统计 orders 表中近 30 天每个客户的订单金额合计取前 10 名 等我把查询结果贴回来之后清理掉金额为空的记录最后输出一张排名报告。Agent 会先命中write_sql的 description加载完整指令后生成下面这样的 SQLSELECT customer_id, SUM(order_amount) AS total_amount FROM orders WHERE order_date SYSDATE - 30 GROUP BY customer_id ORDER BY total_amount DESC FETCH FIRST 10 ROWS ONLY;注意这条 SQL 是生成给你看的不是让 Agent 直接连去你的生产库执行。请把这段 SQL 拿到本地 SQL*Plus 里运行把结果粘贴回对话。Agent 拿到结果后会根据data_cleaning的指令处理空值再依据report_gen的说明生成最终报告。整个过程中 Agent 只和模型通道通信数据库访问始终发生在你本地。4.3 验证到控制台确认这次调用配置保存后先在 TaoToken 模型对话 里用同一把 Key 发一条测试消息确认模型 ID 和 Base URL 没填错。如果对话正常返回再回到 Deep Agents 里跑一次上面的多 Skill 协作这次应该能看到模型连续被调用三到四次对应三个 Skill 依次加载。若想确认调用是否记上账打开 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_end 查看 API Key 的用量记录。只要 401 消失、模型能连续返回说明create_deep_agent的模型通道已经切到 TaoToken后续的 Skill 协作只取决于你的 description 和指令写得好不好。5. 跑通之后去控制台对一下账多 Skill 协作跑通后建议去 TaoToken 控制台 API Keys 页面查看这次会话产生了多少次模型调用确认没有多余的错误重试。第一次跑多 Skill 协作时如果某个 Skill 的 description 写得太宽泛Agent 可能反复加载不相关的 SKILL.md导致调用次数偏高这类问题一眼能从用量记录里看出来。用量确认后再决定下一步怎么走。若打算长期跑 Deep Agents 多 Skill 任务可以打开 Coding Plan 看看套餐是否匹配你的调用频率;如果要让这类 Skill 在 Claude Code 里以代码协作为主工作TaoToken 接入文档 里给出了环境变量的完整对照。至于 Key 的管理和用量查看始终回到 TaoToken 完成不需要再碰其他控制台。一句话总结这次的调整多 Skill 协作的骨架由 SKILL.md 和 skills 路径列表决定模型通道只负责供能。把 Base URL 指向https://taotoken.net/api把 Key 换成 YOUR_API_KEY再把 model 参数对准模型广场的模型 ID剩下的路由逻辑完全交给 Deep Agents 就好。