
1. 从 pnpm 构建脚本报错到模型 Top10DSH 规模化的第一道坎如果你在 DSH 里撞到pnpm v9 默认禁止依赖包运行 install 脚本或者发现会话轨迹只能看本机当前会话先把模型供应商切到 TaoTokenTaoToken 官网。在官网拿到 API Key 后把 Base URL 统一写成https://taotoken.net/api。这一步看起来只是换地址实际决定了后面能不能把 DSH 的模型调用、腾讯云 Agent 可观测的 Span、以及不同 Agent 的 Token 账本串到同一条线上。DSH 是 DeepSeek 开源的编码 Agent 框架命令行名dsh。它采用 Cordis 微内核加插件化组织能力模型适配器、工具集、沙箱策略、会话持久化都能按 profile 装配。一次用户任务是一个 turnturn 内每一轮推理、工具调用、观察结果是一个 step。执行结构由模型在运行时决定因此你很难在跑之前知道它会调用几次模型、哪些工具、消耗多少 Token。DSH 自带会话轨迹、Session 事件流落盘和工具调用检索这些能力对单人、单机、单会话调试很友好但当你有一批机器、多个 profile、多个 Agent 同时跑问题就变成模型调用 Top10 是谁哪个 Agent 在消耗Token 是输入长还是输出长失败重试有没有重复计费这些答案不能只靠翻本机 JSONL需要跨会话、跨机器、长期留存的结构化调用链。本文围绕一个具体目标展开在 DSH 里接入 TaoToken 作为模型入口再通过tencentcloud-agentobs-sdk-dsh上报运行时事件最终在腾讯云 Agent 可观测里产出模型 DSH 调用 Top10 视图并用 Agent 维度筛选解释 Token 消耗来源。你会看到可复制的环境变量、cordis.patch.yml配置、pnpm v9 构建脚本报错处理以及 Claude Code、Codex、CC Switch 的同一套 Key 复用方式。2. TaoToken 接入 DSHBase URL、Key 与模型适配器配置TaoToken 的角色是统一模型入口和 Key 管理。先去 TaoToken 官网 完成注册然后创建 API Key。Key 占位符在本文里统一写成YOUR_API_KEY不要提交到代码仓库也不要把真实 Key 写进 profile 文件后推送到 Git。DSH 的模型适配器是插件不同版本、不同 profile 读取的配置键名可能不同。下面给两种方式优先用环境变量注入再用cordis.patch.yml做显式覆盖。如果你的适配器支持 OpenAI 兼容协议先设置# 统一模型入口 export TAOTOKEN_API_KEYYOUR_API_KEY export OPENAI_API_KEY${TAOTOKEN_API_KEY} export OPENAI_BASE_URLhttps://taotoken.net/api # 默认模型按你的 DSH 适配器实际支持的名称填写 export DSH_DEFAULT_MODELdeepseek-chat如果 DSH 的模型适配器插件自己声明了baseURL、apiKey、model等字段则把cordis.patch.yml里的对应段落指向 TaoToken。下面是一个结构示意键名以你当前 profile 已安装的适配器为准# $DSH_HOME/profiles/default/cordis.patch.yml # 可观测插件 模型适配器落点示意 plugins: tencentcloud-agentobs-sdk-dsh: topicId: ${CLS_TOPIC_ID} secretId: ${TENCENTCLOUD_SECRET_ID} secretKey: ${TENCENTCLOUD_SECRET_KEY} region: ap-guangzhou captureContent: false modelProvider: baseURL: https://taotoken.net/api apiKey: ${TAOTOKEN_API_KEY} defaultModel: deepseek-chat显式插件配置通常优先于环境变量。因此建议把敏感信息留在环境变量或密钥管理工具里配置文件只写变量引用。这样同一台机器上的多个 DSH profile 可以共享配置结构只替换 Key 和模型名。2.1 多 Agent 多 Key让“谁在消耗”有归因基础如果你的团队同时跑代码生成、代码审查、测试补全、文档同步、夜间批处理建议不要所有 Agent 共用一个 Key。去 TaoToken API Keys 页面按角色创建多个 Key命名带业务含义Agent 角色DSH profileTaoToken Key 别名主要任务代码生成codegentaotoken-dsh-codegen补丁生成、函数补全代码审查reviewtaotoken-dsh-reviewdiff 审查、风险提示测试补全testtaotoken-dsh-test单测生成、边界用例文档同步doctaotoken-dsh-docREADME、注释、变更说明批处理batchtaotoken-dsh-batch夜间仓库扫描与汇总然后在每个 profile 的启动脚本里注入不同 Key# ~/.dsh/profiles/codegen/env.sh export TAOTOKEN_API_KEYYOUR_API_KEY export OPENAI_API_KEY${TAOTOKEN_API_KEY} export OPENAI_BASE_URLhttps://taotoken.net/api export AGENT_NAMEcodegen export PROJECT_NAMEmy-repo export ENVprod这样在可观测侧可以按应用、资源属性或 Key 别名筛选在 TaoToken 侧也能按 Key 看调用与消耗。模型 Top10 回答“哪些模型被调用最多”Agent 维度回答“谁把 Token 花掉了”。3. 上报链路安装 tencentcloud-agentobs-sdk-dsh 并解决 pnpm v9 构建脚本要让模型 Top10 和 Agent 维度筛选有数据必须先把 DSH 运行时事件变成结构化 Span。tencentcloud-agentobs-sdk-dsh是挂在 DSH 插件层的采集插件它旁路订阅运行时事件在流式输出外做只读观察维护状态树把一次任务还原为带父子关系和时间区间的调用链再批量上报到腾讯云 Agent 可观测。它不要求你改业务代码也不需要额外常驻采集进程。当前版本对 DSH 和 Node.js 有要求先核对node -v # 期望 22.19.0 npm i -g deepseek-harness dsh --version # 期望 0.1.0-rc.6 0.2.0安装插件cd ~/.dsh/profiles/default pnpm add tencentcloud-agentobs-sdk-dshpnpm v9 默认禁止依赖包运行 install 脚本。如果安装时看到构建脚本被忽略进入对应 profile 目录执行一次批准cd ~/.dsh/profiles/default pnpm approve-builds # 交互提示里选中 tencentcloud-agentobs-sdk-dsh如果团队使用 headless 或 harness profile把路径换成~/.dsh/profiles/headless或~/.dsh/profiles/harness。安装或更新插件后需要重启 DSH 服务才会生效。3.1 创建 Agent 可观测应用并拿到 CLS_TOPIC_ID进入日志服务控制台左侧导航选择 Agent 可观测单击应用接入创建应用时接入方式选择 DeepSeek Harness。进入应用详情在日志主题列表里找到名称为{应用名称}-trace-topic的日志主题复制它的 ID。这个 ID 对应配置里的CLS_TOPIC_ID或topicId。准备访问凭证export CLS_TOPIC_ID你的日志主题ID export TENCENTCLOUD_SECRET_ID你的SecretId export TENCENTCLOUD_SECRET_KEY你的SecretKey export TENCENTCLOUD_REGIONap-guangzhou建议使用 CAM 子账号或临时密钥并只授予日志写入所需权限。启动并验证dsh service restart dsh run 读取当前目录 package.json 并总结依赖至少触发一次模型调用后在 Agent 可观测控制台查看 Traces、Spans、Sessions。如果暂时不想采集提示词、响应和工具参数保持plugins: tencentcloud-agentobs-sdk-dsh: captureContent: false需要卸载时cd ~/.dsh/profiles/default pnpm remove tencentcloud-agentobs-sdk-dsh dsh service restart3.2 五层调用树模型 Top10 的数据地基插件把一次任务映射为五层 Spanentry、agent、step、chat、tool。一个 turn 对应一条 trace多轮对话通过gen_ai.session.id横向关联每次真实模型调用生成独立 chat Span用dsh.llm.attempt标记序号因此重试不会被合并流未收尾、step 提前结束、用户中断等场景也会补发带错误码的 Span。各层属性遵循 OpenTelemetry GenAI 语义约定便于和既有可观测体系对齐。模型 Top10 的原始数据就来自 chat Span 上的模型名称、输入 Token、输出 Token、耗时、结束原因和重试次数。4. 模型 DSH 调用 Top10 视图怎么读调用次数、Token、耗时与错误率进入腾讯云 Agent 可观测后总览仪表盘通常能看到请求数、错误数、模型调用次数、Input/Output Tokens、Agent 与模型 Top10、平均 TTFT。性能页有耗时直方图和 P50/P90/P99 分位趋势以及模型平均耗时 Top10。成本 Token 页可以继续按会话、模型、工具聚合。你要关注的不只是排名而是排名背后的口径。指标含义排查用途调用次数记录到的 chat Span 数量谁调用最频繁Input Tokens输入 Token 总和提示词、历史会话、工具返回是否膨胀Output Tokens输出 Token 总和生成代码、长回答是否过多总 Tokens输入 输出成本排行主指标平均 TTFT首 Token 延迟交互体验P95 耗时长尾耗时慢模型、慢工具定位错误率失败 Span 比例模型侧失败、工具侧失败重试次数dsh.llm.attempt序号重复消耗与稳定性模型 Top10 有两种排序方式按调用次数排序适合看哪个模型被 Agent 高频使用按总 Tokens 排序适合看成本集中在哪里。很多团队第一次接完可观测会发现调用次数最多的不是成本最高的某个 Agent 用强模型做长上下文总结Input Tokens 会远远压过其他任务。为了避免 Top10 被拆散模型命名要统一。在 DSH 模型适配器里固定defaultModel不要一个 profile 写deepseek-chat另一个写deepseek或带日期的别名。否则控制台会把它当成多个模型排行失真。需要区分版本时用单独的属性字段不要混在模型名里。下钻路径可以按这个顺序总览页看模型 Top10先按总 Tokens 排序。选中 Top1 模型跳到成本 Token。按 Agent 属性过滤确认是哪个 Agent 贡献。按 Session 排序找 Token 最高的会话。打开 Trace展开到 chat Span。对比同一 step 内 tool Span 的返回大小。检查dsh.llm.attempt是否大于 1。记录优化前后的 P95 与总 Tokens。5. Agent 维度筛选TaoToken 下哪些 Agent 在消耗模型 Top10 只能说明哪个模型被调用得多不能直接回答“哪个 Agent 在消耗”。Agent 维度筛选需要额外的标识。最稳的做法是把 Agent 身份放进 DSH profile、应用名和资源属性里同时在 TaoToken 侧用不同 Key 做账单隔离。推荐标记字段维度配置方式控制台筛选Agent 角色每个角色独立 DSH profile按应用名或资源属性项目环境变量PROJECT_NAME自定义属性环境环境变量ENVprod/staging自定义属性Key 别名TaoToken API Keys 页面账单、审计、按 Key 归因会话gen_ai.session.id会话视图调用轮次step Span下钻推理轮次如果插件当前支持自定义资源属性把AGENT_NAME、PROJECT_NAME、ENV注入到上报属性中。筛选时先看 Agent Top10再切到某个 Agent 看模型分布。如果插件版本暂不支持自定义属性用物理隔离一个 Agent 一个 Agent 可观测应用或者一个 Agent 一个日志主题。应用列表里会显示已接入应用、上报中应用、昨日写入量与昨日 Token 总数横向对比也能定位消耗大户。假设你有五个 Agent筛选后的观察可以这样记录Agent主要模型调用特征可能问题codegendeepseek-chat输出 Token 高生成补丁过长reviewdeepseek-chat输入 Token 高diff 和上下文太大testdeepseek-chat调用次数高单测用例拆得太碎doc轻量模型总 Tokens 中等可接受batch强模型夜间集中重试导致重复消耗在 TaoToken API Keys 页面按别名创建 Key 后每个 Agent 的调用会落在不同 Key 上。结合可观测里的应用名和属性你可以同时回答两个问题可观测链路里哪个 Agent 调用最多TaoToken 账单里哪个 Key 消耗最多。两边对齐后成本归属就不再靠猜。6. Token 消耗来源拆解输入、输出、工具返回与重试五层调用树里chat Span 承载模型调用信息tool Span 承载工具执行信息。Token 统计主要在 chat Span。要解释消耗来源需要把输入和输出分开看。输入 Token 常见来源系统提示与角色说明历史会话上下文文件片段与代码搜索结果工具返回的命令输出、日志、diff失败重试时重复发送的上下文。输出 Token 常见来源模型推理内容工具调用参数代码补丁总结与说明文字。最容易导致成本突然上升的是工具返回膨胀。一个读取大文件的工具把完整内容塞回上下文下一轮模型调用就要重新处理这些输入。修复方式不是简单换模型而是在 DSH 工具层限制输出长度、只保留 diff、分页读取、对命令输出做截断和摘要。重试也会造成重复消耗。插件把每次真实模型调用画成独立 chat Span并用dsh.llm.attempt标记序号。如果某个模型错误率高重试次数多Top10 里的总 Tokens 会包含这些重复调用。排查时按错误类型筛选工具调用失败、LLM 调用失败、Root span 状态码异常、Agent 执行失败。模型侧失败和工具侧失败要分开处理。一个可执行的排查清单总览页按总 Tokens 排序模型 Top10。选中 Top1 模型进入成本 Token。按 Agent 筛选找出贡献最大的 Agent。按 Session 排序定位 Token 最高的会话。打开 Trace找到 Input Tokens 最大的 chat Span。看它前一个 tool Span 的返回体积。检查是否出现多次dsh.llm.attempt。优化工具返回、历史会话摘要或模型选择。对比优化前后的总 Tokens、P95 和错误率。优化动作可以分四类为不同 Agent 分配不同模型代码生成用强模型文档总结用轻量模型工具返回统一截断避免把大段日志直接回灌长会话定期摘要减少历史上下文失败重试加退避和上限避免无效重试放大成本。7. 同一套 TaoToken Key 复用到 Claude Code、Codex 与 CC Switch很多团队不是只用 DSH还会同时用 Claude Code、Codex 等 Coding Agent。TaoToken 的 Base URL 和 Key 可以复用但变量名和配置文件不要混用。Claude Code 走settings.json和ANTHROPIC_*Codex 走config.toml不要把ANTHROPIC_*套到 Codex。Claude Code 配置文件~/.claude/settings.json{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: claude-sonnet-4-5 } }Codex 配置文件~/.codex/config.tomlmodel deepseek-chat model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEYCC Switch 场景下先确认三件套供应商TaoToken Base URLhttps://taotoken.net/api API KeyYOUR_API_KEY 默认模型按团队规范选择如果你在 DSH 里已经用环境变量注入TAOTOKEN_API_KEYClaude Code 和 Codex 可以复用同一个 Key但建议按工具或项目分 Key避免账单混在一起。需要 Claude Code 的完整变量格式时可以查看 Claude Code 文档。8. 总结从 Top10 到可执行的降本动作DSH 原生的会话轨迹、事件流落盘和工具检索解决了本机、单会话、实时调试问题。tencentcloud-agentobs-sdk-dsh把同一批运行时事件还原成五层调用链补上跨会话聚合、跨机汇聚、长期留存和告警。再配合 TaoToken 作为统一模型入口按 Agent 分配 Key模型 DSH 调用 Top10 就不再只是一个排名而是可以下钻到 Agent、Session、Trace、chat Span 和 tool Span 的成本账本。落地顺序建议是先拿 Key把 Base URL 设为https://taotoken.net/api再装可观测插件确认 Trace 能上报然后按 Agent 拆 Key、拆 profile最后用模型 Top10 和 Agent 维度筛选定位消耗来源。如果你还没注册从 TaoToken 官网 开始。想先验证模型响应走 模型对话准备长期跑 Agent看 Coding Plan要给多个 Agent 分 Key进 API KeysClaude Code 的配置格式直接对照 Claude Code 文档。