一、问题场景我刚上线AI工具时有个非常真实的事故 一周烧掉了 $300 API费用原因很简单用户多轮对话每次都把“全部历史”丢给模型完全没有Token控制当时的代码大概是这样的responsemodel.generate(full_context) 看似合理其实是“成本杀手”二、问题分析1. Token计费机制大模型收费本质输入Token 输出Token举个例子一次对话2000 tokens用户一天20次1000用户 成本指数级爆炸2. 上下文无限增长错误逻辑messages.append(new_message) 永远在增长三、解决方案 三层控制策略1️⃣ 上下文截断必须做 2️⃣ 关键信息保留优化 3️⃣ 缓存机制进阶四、实操步骤步骤1基础截断最重要deftrim_context(messages,max_tokens2000):total0result[]formsginreversed(messages):totallen(msg[content])iftotalmax_tokens:breakresult.insert(0,msg)returnresult步骤2只保留“有效上下文” 不是所有历史都重要优化deffilter_messages(messages):return[mforminmessagesiflen(m[content])5]步骤3缓存重复请求关键优化importhashlib cache{}defget_cache_key(prompt):returnhashlib.md5(prompt.encode()).hexdigest()defcached_generate(prompt):keyget_cache_key(prompt)ifkeyincache:returncache[key]resultmodel.generate(prompt)cache[key]resultreturnresult步骤4系统Prompt分离 避免重复传输SYSTEM_PROMPT你是一个专业AI助手defbuild_messages(user_input):return[{role:system,content:SYSTEM_PROMPT},{role:user,content:user_input}]五、验证结果优化策略成本变化无优化基准截断↓30%缓存↓20%综合↓50%六、踩坑记录1️⃣ 用字符数代替Token → 不准确 建议用 tokenizer2️⃣ 缓存不做过期 → 内存爆3️⃣ 截断过猛 → AI失忆七、总结 成本优化不是“锦上添花”而是“必须做”八、进阶建议引入分层缓存Redis用户级成本限额自动降级模型策略