首页/新闻资讯/正文详情

Claude Code 工程笔记:用 TaoToken 统一 Key 打通 Prompt Caching 优先的 Agent Harness(defer_loading、Plan Mode 与 Com

发布时间:2026/9/26 20:04:08 来源:云帆数科 栏目:资讯中心
Claude Code 工程笔记:用 TaoToken 统一 Key 打通 Prompt Caching 优先的 Agent Harness(defer_loading、Plan Mode 与 Com
1. 为什么 Claude Code 的 Agent Harness 必须围绕 Prompt Caching 来搭如果你正在用 Claude Code 跑长会话 Agent大概率遇到过两个现象一是聊到二三十轮之后首 token 延迟TTFT肉眼可见地变长二是账单里 input token 的数量远超你肉眼估算的对话长度。原因不复杂——每一轮请求都要把 tools 定义、system 指令、历史消息重新送进模型模型侧要重新算一遍这些前缀的注意力状态。Prompt Caching 要解决的就是这件事对匹配的 prompt 前缀复用已经算好的状态断点之后的内容才按未缓存输入计费。前缀按 tools → system → messages 的顺序形成任何更早一层发生变化后面全部失配。Claude Code 团队在工程复盘里把结论写得很直接——整套 harness 围绕 Prompt Caching 来建命中率掉了就按事故处理。这篇笔记聚焦三件事defer_loading、Plan Mode、Compaction 如何与缓存协作以及怎么用 TaoToken 统一 Key 把这条链路在本地跑通并观测。适合已经在写自建 Agent、或者正在用 Claude Code 做长期编码任务的人。读完你应该能独立完成说清 automatic / explicit 两种缓存启用方式从 usage 里读出 cache_creation_input_tokens 与 cache_read_input_tokens解释为什么中途增删工具会打穿缓存在自建 harness 里复现三条约束。2. 用 TaoToken 统一 Key 打通 API 通道在动手改 harness 之前先把 API 通道固定下来。多模型、多工具、多会话混跑时最怕的是 Key 散落在各处、base_url 一会儿一个联调时根本分不清是哪条通道出的问题。TaoToken 在这里的作用是提供一个统一的 Key 和 API 入口让 Claude Code 与自建脚本走同一条通道缓存行为才好对比。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 这个不加 UTM。你需要先去控制台拿 Key再把它写进环境变量避免硬编码进仓库。拿 Key 的路径是控制台里的 API Keys 页面对应 deep link 是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面写了 base_url 与鉴权头的写法。如果你后面要跑长期编码或 Agent 任务可以看 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。环境变量这样设Linux / macOS 用 exportWindows 用 setxexport TAOTOKEN_API_KEYsk-你的key export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEY$TAOTOKEN_API_KEY注意 base_url 不要带末尾斜杠SDK 拼接路径时容易出双斜杠。设完之后用一条最小请求验证通道是否通再往下做缓存实验否则缓存读写为 0 时你分不清是通道问题还是断点问题。3. 可复制的 settings.json 骨架与缓存优先布局Claude Code 的配置入口是 settings.json缓存相关的关键不在某个开关而在「静态段与动态段怎么排」。先把骨架钉死全局稳定的 system 与 tools 最前项目级约定比如 CLAUDE.md其次会话上下文再次真正轮次的 messages 最后。这样跨会话、跨用户也能尽量共享最前面的前缀。{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的key }, cache: { mode: automatic, ttl: 5m }, context: { staticSystemFirst: true, projectRulesFile: CLAUDE.md, dynamicInfoChannel: messages }, tools: { freezeOrder: true, deferLoadingStubs: true } }字段名以你实际使用的版本为准这里表达的是布局约束而不是某个版本的完整 schema。核心是三条staticSystemFirst 保证静态段在前freezeOrder 保证工具集合与顺序在整个会话生命周期内字节级一致dynamicInfoChannel 把日期、当前文件列表这类变化信息赶到 messages 里不要塞进静态 system。官方文档里的常见反例值得记一下系统上下文块 1-5后面跟一个带时间戳的用户块块 6却把 cache_control 放在块 6。每轮哈希都不同lookback 也找不到更早的写入点结果是每轮都在写、几乎不读。修法是把断点钉在最后一块跨请求不变的内容上。lookback 找的是「此前请求在断点处写下的条目」不是替你自动缓存断点前面看起来稳定的内容。4. 三条 harness 约束的落地写法4.1 Plan Mode用工具建模而不是换工具集「进入 Plan Mode 就换成只读工具」看起来干净但会改 tools 前缀整段会话缓存作废。Claude Code 的做法是工具定义始终在场EnterPlanMode / ExitPlanMode 本身就是工具。进入后靠系统侧注入的说明约束「只探索、不改文件」退出时再交计划。TOOLS [ { name: read_file, description: Read a text file from the workspace., input_schema: { type: object, properties: {path: {type: string}}, required: [path], }, }, { name: EnterPlanMode, description: Enter plan mode: explore only, no edits., input_schema: {type: object, properties: {}}, }, { name: ExitPlanMode, description: Exit plan mode after a written plan exists., input_schema: { type: object, properties: {plan: {type: string}}, required: [plan], }, }, ]附带收益是模型可以自己调用 EnterPlanMode 处理难题不必由宿主改请求体。同类模式可以推广到「只读审查」「发布冻结」等状态用进入/退出工具表达状态机执行策略写在消息里工具清单保持恒定。4.2 defer_loading短桩代替删除 MCP 工具MCP 一多每轮携带完整 schema 很贵中途删工具又会打穿前缀。defer_loading 的思路是请求里始终放同一批短桩通常先给名称并标 defer_loading: true需要时再通过 tool search 拉完整定义。短桩集合与顺序保持不变缓存前缀就稳。mcp_stubs [ { name: jira_search, description: Search Jira issues (full schema via tool search)., input_schema: {type: object, properties: {}}, defer_loading: True, }, { name: github_get_pr, description: Fetch a pull request by number., input_schema: {type: object, properties: {}}, defer_loading: True, }, ] tools TOOLS mcp_stubs需要某工具时由 tool search 把完整 schema 注入后续消息而不是改顶层 tools 数组。验收时盯两件事短桩集合在整个会话生命周期内是否字节级一致真正加载完整 schema 时是否只通过消息/工具结果通道进入而没有回头改 tools。4.3 Compaction复用父会话前缀提示放在最后一条 user上下文将满时要先把长历史送给模型做摘要。若另开请求、换一套「请摘要」system、还不带 tools前缀从第一个 token 就与父会话分叉长历史按全额未缓存输入计费。会话越长这次「为了省上下文」的调用越贵。COMPACT_PROMPT ( Summarize the conversation for handoff. Keep goals, decisions, open todos, and file paths. Omit prose fluff. ) def compact(parent_messages): messages list(parent_messages) [ {role: user, content: COMPACT_PROMPT} ] return turn(messages)从 API 视角这次请求几乎等于「父会话上一轮再多一条 user」因此可以吃到已有前缀缓存。关键是与父会话使用完全相同的 system、tools 定义和 cache_control不要另起「摘要专用」system。5. 验证请求与成功结果配置改完必须验证否则你只是在猜。下面这段脚本用 automatic 模式跑两轮观察 usage 字段的变化。import anthropic client anthropic.Anthropic() SYSTEM ( You are a coding agent. Prefer small, reversible edits. Do not invent file contents you have not read. ) def turn(messages, *, ttlNone): cache_control {type: ephemeral} if ttl: cache_control[ttl] ttl resp client.messages.create( modelclaude-opus-5, max_tokens1024, cache_controlcache_control, system[ { type: text, text: SYSTEM, cache_control: {type: ephemeral}, } ], toolsTOOLS, messagesmessages, ) u resp.usage print( { cache_write: u.cache_creation_input_tokens, cache_read: u.cache_read_input_tokens, input: u.input_tokens, output: u.output_tokens, } ) return resp history [{role: user, content: 先只读梳理 src/auth 的登录入口。}] r1 turn(history) history.append({role: assistant, content: r1.content}) history.append({role: user, content: 继续列出相关测试文件路径。}) r2 turn(history)第一轮常见形态是 cache_creation_input_tokens 0同前缀的后续轮次应看到 cache_read_input_tokens 上升。若读写都是 0先查最小可缓存长度与断点是否落在变化块上。总量约等于 cache_read cache_creation input 三者之和别把 input_tokens 当成总输入否则会出现「usage 很小但账单不小」的错觉。定价倍率按官方表核对5 分钟 cache write 1.25×1 小时 write 2×cache read 通常 0.1×。TTL 默认 5 分钟使用时刷新且不另收费从写入/读取请求开始时计时流式生成耗时也算进窗口。6. 本篇常见错排查断点钉在变化块上。时间戳、请求 ID、本轮用户原文若落在断点所在块lookback 找不到稳定写入点。断点应钉在跨请求不变的最后一块。中途增删或重排 tools。工具层在前缀最前任何改动使 tools/system/messages 整链失配。Plan Mode 与 MCP 都应绕开「改 tools 数组」。静态 system 里塞深度时间戳。一次看起来无害的时间注入就能让全局缓存失效。Compaction 另起炉灶。不同 system、空 tools 的摘要调用按未缓存全量计费。必须复用父前缀提示放在末尾 user。为省钱中途换模型。缓存按模型隔离十万 token 级会话切到小模型可能要重建整段前缀账单未必更低。JSON 键序不稳定。某些语言在序列化 tool_use 等结构时会打乱键顺序前缀哈希随之变化。序列化层要固定键序联调时用原始请求体做字节对比。并发首请求全 miss。缓存条目要等第一次响应开始之后才可被后续请求读到。若一上来就并行打多条同前缀请求可能全部 miss、全部写。预热或串行首请求更稳妥官方也提供 max_tokens: 0 的预热写法预热请求的 thinking / effort 配置要与正式流量一致。排障时如果怀疑是通道问题先回 API Keys 页面确认 Key 状态 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 再对照接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 检查 base_url 与鉴权头。想单独验证某个模型的行为可以用模型对话页面快速试一条请求 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。长期跑编码或 Agent 任务走 Coding Plan 更省心 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。落地时用三条验收线就够同一会话第二轮起 cache_read_input_tokens 是否稳定上升切换 Plan Mode / 加载 MCP 时 tools 数组是否仍字节一致Compaction 请求的 system tools 是否与父会话相同。把缓存命中率当成和 uptime 同级的指标harness 才会从文档参数变成账单和 TTFT 上稳定可测的改善。

相关推荐

基于STM32单片机公交车自动报站系统GPS定位地铁温度湿度蓝牙/WiFi/视频监控/云平台无线APP-DIY设计S548
基于STM32单片机公交车自动报站系统GPS定位地铁温度湿度蓝牙/WiFi/视频监控/云平台无线APP-DIY设计S548

S548-GPS定位报站温度湿度经纬度识别语音播报运行方向车门本站下一站手动自动安全提醒屏按键蓝牙/WiFi/视频监控/云平台APP本系统由STM32F103C8T6单片机核心板、TFT屏、无线蓝牙/WIFI/视频监控/云平台模块-可选、舵机控制电路、语音播报模块接口、GPS定位模块、温湿度模块、电源… · 2026/9/26 20:04:08

cpp算法题目整理——线性枚举篇2
cpp算法题目整理——线性枚举篇2

三元组中心问题 题目描述&#xff1a; 在数列 a1,a2,⋯,ana1​,a2​,⋯,an​ 中&#xff0c;如果对于下标 i,j,ki 满足 0<i<j<k<n1 且 ai<aj<ak​&#xff0c;则称 ai,aj,ak 为一组递增三元组&#xff0c;aj为递增三元组的中心。 给定一个数列&#xff0c… · 2026/9/26 20:04:08

基于STM32单片机电磁波检测电磁波传感器电磁辐射蓝牙/WiFi/视频监控/云平台无线APP-DIY设计S445
基于STM32单片机电磁波检测电磁波传感器电磁辐射蓝牙/WiFi/视频监控/云平台无线APP-DIY设计S445

S445-电磁波检测报警频率变化预警阈值超阈值报警OLED屏声光提醒按键蓝牙/WiFi/视频监控/云平台APP本系统由STM32F103C8T6单片机核心板、OLED屏、无线蓝牙/WIFI/视频监控/云平台模块-可选、电磁波检测模块、舵机控制电路、蜂鸣器报警、电源电路、按键电路组成。【1】OLED液晶显示… · 2026/9/26 20:03:31

在 Nest.js 中接入 highlight.io:错误监控、日志采集与分布式追踪完整实战指南
在 Nest.js 中接入 highlight.io:错误监控、日志采集与分布式追踪完整实战指南

可观测性后端 【免费下载链接】highlight highlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging, distributed tracing, and more. 项目地址&#xff1a; https://gitcode.com/gh_mirrors/hi/highlight 点击查看 免费下… · 2026/9/26 20:51:47

从GitHub克隆代码到本地:Git Clone避坑指南与参数详解
从GitHub克隆代码到本地:Git Clone避坑指南与参数详解

很多刚接触Git的朋友&#xff0c;第一次从GitHub上clone代码到本地&#xff0c;往往会在命令行敲下git clone后对着一个闪烁的光标干等&#xff0c;然后收到一堆看不太懂的英文报错&#xff0c;最后要么去搜索引擎翻“github打不开怎么办”&#xff0c;要么干脆把窗口关掉。这篇… · 2026/9/26 20:51:41

Spring Cloud Gateway限流熔断实战:外卖霸王餐突发流量下的网关优化
Spring Cloud Gateway限流熔断实战:外卖霸王餐突发流量下的网关优化

做过外卖霸王餐活动的后台同学应该都经历过那种感觉——活动页面上写着“每天10:00开抢”&#xff0c;作为后端负责人&#xff0c;你从9:58开始心里就打鼓。流量对网关来说从来不像压测报告里那样均匀增长&#xff0c;而是到点的一瞬间像水闸打开一样灌进来&#xff0c;网关Acc… · 2026/9/26 20:51:41

WiNEX平台化落地实战:从HIS迁移到CDR数据中心的踩坑指南
WiNEX平台化落地实战:从HIS迁移到CDR数据中心的踩坑指南

简介&#xff1a;这份PDF资料系统介绍卫宁健康新一代医疗数字化转型平台WiNEX&#xff0c;面向医院信息科人员、医疗IT产品经理及关注智慧医疗的开发者&#xff0c;聚焦解决医疗机构在流程再造、信息共享、系统集成与数据标准化等方面的共性痛点。资源为单文件PDF&#xff0c;共… · 2026/9/26 20:51:41

SQL Server性能监控核心指标与DMV排查实战指南
SQL Server性能监控核心指标与DMV排查实战指南

SQL Server性能监控这件事&#xff0c;我做了十多年。从早期的2000、2005一路摸到2019、2022&#xff0c;身边很多同事和朋友经常问我&#xff1a;为什么生产环境跑着跑着就卡了&#xff1f;为什么同样的查询昨天3秒今天30秒&#xff1f;为什么加了索引还是不解决问题&#xff… · 2026/9/26 20:51:41

SQL Server性能监控核心指标与排查实战:CPU、内存、IO、阻塞一次讲透
SQL Server性能监控核心指标与排查实战:CPU、内存、IO、阻塞一次讲透

做SQL Server运维这些年&#xff0c;接到最多的需求就是“数据库最近好慢&#xff0c;帮我看看”。但说实话&#xff0c;慢是一个结果&#xff0c;不是原因。真正该找的是导致这个结果的上游指标——是CPU被某个会话吃满了&#xff0c;还是锁卡住了关键查询&#xff0c;还是磁盘… · 2026/9/26 20:51:41

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介&#xff1a;万常选版《数据库原理与设计》课后习题答案资源&#xff0c;覆盖第2至6章及第9章&#xff0c;适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件&#xff0c;含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故&#xff0c;是很多团队绕不过去的坎。线上环境里&#xff0c;服务端明明已经上线了新版接口&#xff0c;老的移动端还在照着旧文档传参数。请求一到网关&#xff0c;校验直接拒绝&#xff0c;用户操作失败&#xff0c;客服群炸了锅&#xff0c;开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码