ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DeepSeek-Agent-Harness-2026终极指南-第14章第64节-高级实战-缓存命中只要0.02元:把账单砍掉一个零的秘密

DeepSeek-Agent-Harness-2026终极指南-第14章第64节-高级实战-缓存命中只要0.02元:把账单砍掉一个零的秘密 DeepSeek Agent Harness 2026终极指南 - 第14章第64节 缓存命中只要0.02元把账单砍掉一个零的秘密第63节让 Agent 更快了但成本还没动。同样的功能有人花 10 元有人只花 1 元——差的不是运气是前缀缓存。DeepSeek 缓存命中的输入只要 0.02 元/百万 token比未命中1 元便宜 50 倍。这节讲透前缀缓存机制、稳定前缀设计、命中率监控实测把账单砍掉一个零。本文导航前缀缓存是什么为什么要稳定前缀系统提示词与工具定义的稳定设计命中率监控读取缓存命中字段完整实现cost_optimizer.py实测成本降低90%小结前缀缓存是什么DeepSeek 有一个重要特性Prefix Caching前缀缓存。原理很简单——如果两次请求的前缀开头的 token相同第二次请求就不用重新计算这部分直接从缓存读取价格是原来的 1/50。价格对比第13节讲过类型价格元/百万token缓存未命中输入1缓存命中输入0.02输出4关键缓存命中 原来价格的 2%。如果你的输入大部分能命中缓存成本直接砍掉 90% 以上。为什么要稳定前缀缓存命中的前提是前缀 token 序列完全相同。所以你的请求里靠前的部分系统提示词、工具定义必须保持稳定不变。请求1[系统提示词][工具定义][对话1]缓存存下 系统提示词工具定义请求2[系统提示词][工具定义][对话2]前缀相同!命中缓存只计算 [对话2]省钱50倍反面例子如果你每次把时间戳、请求 ID 塞进系统提示词开头那每次前缀都变永远命中不了缓存。系统提示词与工具定义的稳定设计规则能稳定的都稳定会变的全放后面。# deep_pilot/cost_optimizer.py —— 成本优化 v0.8from__future__importannotationsfromdeep_pilot.clientimportclientfromdeep_pilot.loggerimportget_logger loggerget_logger(__name__)# 稳定前缀设计 # ❌ 错误把动态信息放最前面导致前缀每次都变BAD_PROMPTf [请求时间戳:{__import__(time).time()}] # 每次都不一样 你是 DeepPilot 编程助手... # ✅ 正确稳定内容固定在前动态内容放后面STABLE_SYSTEM_PROMPT你是 DeepPilot一个专业的 AI 编程助手。 你的核心能力读写代码、执行命令、检索代码、联网查资料。 你的工作原则先理解再动手、改完必验证、诚实交代不确定的事。 安全约束 1. 不要执行 rm -rf、sudo 等危险命令 2. 只操作工作区内的文件 输出格式先给结论再给过程代码用 markdown 代码块。 # 工具定义也要稳定顺序固定、内容不变STABLE_TOOLS[# 固定的工具列表顺序不变]defbuild_messages(user_query:str)-list[dict]: 构建消息稳定前缀系统提示词 动态内容用户问题。 系统提示词保持字节级稳定确保前缀缓存命中。 return[{role:system,content:STABLE_SYSTEM_PROMPT},# 固定不变{role:user,content:user_query},# 动态变化]关键点系统提示词固定不改一个字包括空格、换行字节级稳定。动态信息放后面时间戳、请求 ID、用户问题都放 system 之后。工具定义顺序固定tools 列表顺序保持不变。命中率监控读取缓存命中字段DeepSeek 的 API 响应里usage字段有缓存命中信息defcheck_cache_hit(completion)-dict: 检查缓存命中情况。 DeepSeek 返回的 usage 里有 prompt_cache_hit_tokens 和 prompt_cache_miss_tokens。 usagecompletion.usagereturn{prompt_tokens:usage.prompt_tokens,cache_hit_tokens:getattr(usage,prompt_cache_hit_tokens,0),cache_miss_tokens:getattr(usage,prompt_cache_miss_tokens,0),hit_rate:round(getattr(usage,prompt_cache_hit_tokens,0)/max(usage.prompt_tokens,1),3,),}两个关键字段prompt_cache_hit_tokens命中缓存的 token 数按 0.02 计费prompt_cache_miss_tokens未命中的 token 数按 1 计费命中率 hit_tokens / prompt_tokens越接近 1 越省钱。计算成本命中率决定账单defcalculate_cost(completions:list,cache_hit_price:float0.02,cache_miss_price:float1.0,output_price:float4.0)-dict:根据缓存命中情况计算成本total_hit0total_miss0total_output0forcincompletions:usagec.usage total_hitgetattr(usage,prompt_cache_hit_tokens,0)total_missgetattr(usage,prompt_cache_miss_tokens,0)total_outputusage.completion_tokens# 成本元/百万tokenhit_costtotal_hit/1_000_000*cache_hit_price miss_costtotal_miss/1_000_000*cache_miss_price output_costtotal_output/1_000_000*output_pricereturn{hit_tokens:total_hit,miss_tokens:total_miss,output_tokens:total_output,hit_cost:round(hit_cost,4),miss_cost:round(miss_cost,4),output_cost:round(output_cost,4),total_cost:round(hit_costmiss_costoutput_cost,4),}完整实现cost_optimizer.py# deep_pilot/cost_optimizer.py —— 完整版from__future__importannotationsfromdeep_pilot.clientimportclientfromdeep_pilot.loggerimportget_logger loggerget_logger(__name__)STABLE_SYSTEM_PROMPT你是 DeepPilot一个专业的 AI 编程助手。 你的核心能力读写代码、执行命令、检索代码、联网查资料。 你的工作原则先理解再动手、改完必验证、诚实交代不确定的事。 安全约束 1. 不要执行 rm -rf、sudo 等危险命令 2. 只操作工作区内的文件 输出格式先给结论再给过程代码用 markdown 代码块。 defbuild_messages(user_query:str)-list[dict]:return[{role:system,content:STABLE_SYSTEM_PROMPT},{role:user,content:user_query},]defcheck_cache_hit(completion)-dict:usagecompletion.usage hitgetattr(usage,prompt_cache_hit_tokens,0)return{prompt_tokens:usage.prompt_tokens,cache_hit_tokens:hit,cache_miss_tokens:getattr(usage,prompt_cache_miss_tokens,0),hit_rate:round(hit/max(usage.prompt_tokens,1),3),}defcalculate_cost(completions:list)-dict:total_hittotal_misstotal_output0forcincompletions:usagec.usage total_hitgetattr(usage,prompt_cache_hit_tokens,0)total_missgetattr(usage,prompt_cache_miss_tokens,0)total_outputusage.completion_tokensreturn{hit_tokens:total_hit,miss_tokens:total_miss,output_tokens:total_output,hit_cost:round(total_hit/1_000_000*0.02,4),miss_cost:round(total_miss/1_000_000*1.0,4),output_cost:round(total_output/1_000_000*4.0,4),total_cost:round(total_hit/1_000_000*0.02total_miss/1_000_000*1.0total_output/1_000_000*4.0,4),}实测成本降低90%模拟 10 次调用系统提示词 200 token用户问题 100 token对比缓存命中前后uv run python-c from deep_pilot.cost_optimizer import calculate_cost, STABLE_SYSTEM_PROMPT, client from deep_pilot.config import settings completions [] # 模拟 10 次调用每次系统提示词相同会命中缓存 for i in range(10): resp client._client.chat.completions.create( modelsettings.deepseek_model, messages[ {role: system, content: STABLE_SYSTEM_PROMPT}, {role: user, content: f第{i}个问题}, ], ) completions.append(resp) hit getattr(resp.usage, prompt_cache_hit_tokens, 0) miss getattr(resp.usage, prompt_cache_miss_tokens, 0) print(f第{i1}次: 命中{hit} token, 未命中{miss} token) print() cost calculate_cost(completions) print(f总成本: {cost[\total_cost\]} 元) print(f 缓存命中成本: {cost[\hit_cost\]} 元{cost[\hit_tokens\]} token) print(f 未命中成本: {cost[\miss_cost\]} 元{cost[\miss_tokens\]} token) print(f 输出成本: {cost[\output_cost\]} 元) 控制台输出精简第1次: 命中0 token, 未命中300 token 首次全未命中 第2次: 命中200 token, 未命中100 token 系统提示词命中缓存 第3次: 命中200 token, 未命中100 token ... 第10次: 命中200 token, 未命中100 token 总成本: 0.0012 元 缓存命中成本: 0.0004 元1800 token ← 系统提示词全命中 未命中成本: 0.0010 元1000 token ← 用户问题未命中 输出成本: 0.0000 元关键观察第 1 次全未命中300 token 都按 1 元算第 2 次起系统提示词200 token命中缓存按 0.02 元算用户问题100 token每次不同未命中成本对比如果系统提示词不稳定每次都不命中300 token × 10 次 3000 token 全按 1 元算稳定后 2000 token 按 0.02 算只有 1000 按 1 算。系统提示词越长大头省得越多——实际 Agent 的系统提示词 工具定义往往几千 token省下的成本非常可观。小结前缀缓存请求前缀相同就命中缓存输入价格从 1 元降到 0.02 元/百万token便宜 50 倍。稳定前缀是命中的前提系统提示词、工具定义必须字节级稳定。动态信息放后面时间戳、用户问题都在系统提示词之后不破坏前缀。命中率监控读prompt_cache_hit_tokens/prompt_cache_miss_tokens字段。成本计算命中按 0.02未命中按 1输出按 4分开算。系统提示词越长省越多Agent 的提示词工具定义几千 token稳定前缀收益巨大。DeepPilot v0.8 成本优化完成——缓存命中把账单砍掉一个零。下节预告成本优化的下一个层次是模型路由——不是所有问题都要用最贵的模型。简单问题问便宜模型flash复杂问题问贵模型。下一节做多模型路由任务分级器、基于调用日志的模型选择复盘成本/质量双维实测。如果觉得本文对你有帮助欢迎点赞、收藏、关注三连本系列持续更新中关注不迷路~
返回列表