独特点是提示词放置策略很重要:系统指令放在开头(最高注意力);当前用户请求放在结尾(近因偏见);关键上下文放在开头或结尾,绝不放中间;低优先级的背景信息放中间(可接受的损失)。
这篇文章来自尼古拉斯·布斯塔曼特(Nicolas Bustamante),这哥们是金融科技公司Fintool的创始人,专门研究怎么用AI处理金融数据,他写这篇内容的时候估计刚算完自家账单的Token消耗量,气得手都在抖,所以整篇文章充满了实战派的血泪教训,没有半点学院派的纸上谈兵,全是真金白银烧出来的经验。
很多搞AI代理的人整天琢磨怎么写提示词,却对上下文管理视而不见,这就像开着漏油的跑车去比赛,油门踩得越猛油漏得越快,最后还没跑到终点油箱就空了,真正的行家都在研究怎么让AI记住该记的、忘掉该忘的,而不是无脑堆砌信息。
缓存命中率:生产环境的生死线
KV缓存命中率是生产环境里最重要的指标,这玩意儿决定了你的AI能不能重复利用之前算过的结果,如果前缀一模一样,AI就能直接调用缓存,省下的钱能让你从吃泡面升级到下馆子。
时间戳是缓存杀手中的战斗机,很多人喜欢在系统提示词开头加上精确到秒的时间,这简直是自杀行为,每一秒都变意味着每一次请求都是全新的前缀,缓存命中率直接归零,钱包在滴血。
正确的做法是把所有动态内容扔到提示词的最后面,系统指令、工具定义、示例这些固定内容放在最前面保持不动,日期可以留,小时也能忍,但秒和毫秒必须滚蛋,这样缓存才能活下来帮你省钱。
只追加不修改:缓存的保命法则
上下文必须是只追加模式,一旦修改了前面的内容,从修改点往后的所有缓存全部作废,这规则听起来简单,但违规操作往往藏在你看不见的地方。
工具定义的动态变化特别阴险,如果你根据上下文临时添加或删除工具,缓存瞬间清零,Manus(一个AI代理平台)的解决方案很巧妙,他们不动工具定义本身,而是在解码时屏蔽某些选项的词元概率,这样既保留了缓存,又能控制AI的选择范围。
Python字典不保证顺序,如果你用JSON序列化工具定义,必须用sort_keys=True确保输出稳定,键值顺序一变,词元序列就变,缓存直接未命中,这种细节不注意,钱就像流水一样消失。
文件系统存储:Cursor的降维打击
Cursor(一款AI代码编辑器)把工具输出存进文件系统而不是塞进对话上下文,这一招直接让他们的代理词元消耗量下降了46.9%,效果堪比从一线城市搬到三线城市生活成本直接腰斩。
代理不需要预先掌握所有信息,只需要在需要时能访问到就行,文件系统是这个需求的完美抽象,Shell命令输出写进文件,搜索结果返回文件路径,API响应存成原始文件,中间计算结果持久化到磁盘。
当上下文窗口爆满时,Cursor会触发摘要步骤,但把聊天历史暴露为文件,代理可以通过搜索找回在压缩过程中丢失的细节,这种设计既解决了上下文爆炸问题,又保留了信息可恢复性,简直是架构设计的典范。
精准工具设计:十倍降本增效
模糊的工具返回所有内容,精准的工具只返回AI需要的内容,这差距能达到十倍以上,想象一下你要找一封邮件,烂工具把整个邮箱塞给你,好工具先返回标题列表,你点哪个才给看哪个。
两阶段模式是黄金标准,第一阶段搜索返回元数据,第二阶段用单独的工具获取完整内容,代理自己决定哪些值得深入查看,Fintool的对话历史工具就是这么干的,传日期范围或关键词,返回100到200条结果只带用户消息和元数据,想看具体内容再传对话ID。
文档搜索返回标题和片段而非全文,数据库查询返回行数和样本行而非完整结果集,文件列表返回路径和元数据而非内容,API集成返回摘要让代理自己钻取,每个新增的参数都是把返回词元砍掉一个数量级的机会。
数据清洗:最大化你的税收抵扣
垃圾词元也是词元,在数据进入上下文之前必须清洗,邮件要去掉签名档、法律免责声明、嵌套引用和HTML标签,这些玩意儿对AI理解内容毫无帮助,却占着茅坑不拉屎消耗你的预算。
HTML内容的收益更大,典型网页可能有100KB的HTML但只有5KB的实质内容,用CSS选择器提取语义区域比如文章主体、主要内容、章节,扔掉导航栏、广告和追踪代码,词元数量能砍掉90%以上。
金融数据领域有更具体的技巧,SEC文件(美国证券交易委员会备案文件)里的法律免责声明每份10-K报告都一样,直接删掉,跨页重复的表格表头要合并,水印和页码去除,多空格和换行符规范化,HTML表格转成Markdown表格,越早移除噪声,省下的钱越多,答案质量也越高。
廉价子代理:把重活外包给AI临时工
不是所有任务都需要最贵的模型,Claude Opus(Anthropic公司的旗舰大模型)处理复杂推理,Claude Haiku(同公司的轻量级模型)处理数据提取和分类,这种分工让Fintool的整体词元处理量下降了67%,因为子代理之间上下文隔离,不会互相污染。
适合外包给廉价子代理的任务包括数据提取、分类、摘要、验证和格式转换,主代理只看到浓缩后的结果,不会碰到原始上下文,这样既避免了上下文限制,又降低了主代理被无关细节搞糊涂的风险。
子代理的任务范围必须严格限定,迭代次数越多上下文积累越多,词元消耗越大,设计时要尽量让子代理单轮完成,像流水线工人一样各司其职,而不是让一个AI打杂工干所有活。
模板复用:停止重复造轮子
每次让AI从零生成代码,你都在为输出词元买单,而输出词元比输入词元贵五倍,Fintool以前让用户创建DCF模型(现金流折现模型)时,AI会从头生成2000行Excel公式,成本五毛钱,现在改成加载模板填充参数,成本五分钱,差距整整十倍。
模板化工作流程是这样的,技能引用模板文件比如dcf_template.xlsx放在public/skills/dcf/目录下,AI先读一遍模板理解结构和占位符,然后填充公司特定值和假设,最后用WriteFile只写入修改过的单元格,而不是重新生成整个文件。
代码生成同样适用,如果代理经常生成类似的Python脚本、数据处理管道或分析框架,就创建可复用函数,让AI导入调用而不是重新发明,词元消耗更少,响应更快,结果更一致,这才是工业化的做法。
迷失在中间:策略性地摆放关键信息
大语言模型处理上下文不是均匀的,注意力呈U型分布,对开头和结尾关注强烈,中间部分容易丢失,这叫迷失在中间问题,关键信息放中间等于白放。
系统指令放在最前面获得最高注意力,当前用户请求放在最后面利用近因效应,关键上下文要么放开头要么放结尾,绝不能放中间,低优先级的背景信息填充中间区域,丢了就丢了。
检索增强生成时要重新排序检索到的文档,最相关的块放开头和结尾,排名低的填中间,Manus用了一个优雅的技巧,他们维护一个待办事项文件todo.md在任务执行过程中持续更新,这个文件放在上下文末尾,不断复述当前目标,对抗长序列中的注意力衰减。
服务端压缩:让API自动折旧
随着代理运行,上下文不断增长直到触及窗口上限,以前你有两个选择,自己搭建摘要流水线,或者实现观察屏蔽,用占位符替换旧工具输出,两者都需要大量工程投入。
现在可以让API自动处理,Anthropic的提示词缓存功能会在对话接近可配置的词元阈值时自动摘要,Claude Code内部就用这个,所以能跑50多个工具调用而代理不会忘记自己在干啥。
关键设计决策包括触发阈值默认15万词元,可以设低一点避开20万定价悬崖,也可以设高一点在摘要前保留更多原始上下文,还能自定义摘要指令,比如金融工作流可以指定保留所有数值数据、公司名称和分析结论,防止关键信息在压缩中丢失。
压缩后API可以暂停,让你注入额外上下文比如保留最近几条消息原文,然后再继续,这给了你控制压缩后幸存内容的权力,压缩和提示词缓存配合使用时,在系统提示词上加缓存断点,系统提示词保持缓存温暖,只有摘要部分需要写新的缓存条目。
输出词元预算:最贵的税是生成税
输出词元token是最贵的词元,Claude Sonnet的输出成本是输入的五倍,Opus的输出成本是已经昂贵的输入的五倍,然而大多数开发者把最大词元数设为无限制然后听天由命,这简直是把钱包敞开让人随便拿。
正确的做法是根据任务设置合适的限制,分类任务50个词元足够,提取任务200个,短回答500个,分析任务2000个,代码生成4000个,结构化输出比自然语言更省词元,JSON响应比解释同样信息的自然语言少得多。
自然语言表述公司营收可能是,该公司营收为945亿美元,相比上一财年的842亿美元同比增长12.3个百分点,这么长一串,结构化JSON只要收入94.5单位B同比增长12.3,简洁明了还便宜。
代理任务可以考虑响应分块,不要一次性生成一万词元的分析,分成阶段,先生成大纲500词元,再按需生成每个章节各1000词元,最后检查精炼500词元,这样可以在用户满足时提前停止,而不是每次都生成最大可能的输出。
20万定价悬崖:AI世界的税收档次
Claude Opus 4.6和Sonnet 4.5在输入词元超过20万时触发溢价定价,每词元成本直接翻倍,Opus从每百万5美元涨到10美元,输出从25美元涨到37.5美元,这不是渐变是悬崖,一夜之间账单翻倍。
这是大语言模型世界的税收档次,正确的策略是在可能的情况下保持在阈值以下,对于可能超过20万的代理工作流,实施上下文预算,跨工具调用追踪累积输入词元,接近悬崖时触发激进压缩,观察屏蔽、旧轮次摘要或修剪低价值上下文,压缩步骤的成本远低于剩余对话的词元费率翻倍。
每个顺序工具调用都是一次往返,每次往返都重新发送完整对话上下文,如果代理顺序调用20次工具,上下文就被传输和计费20次,Anthropic API支持并行工具调用,模型可以在单次响应中请求多个独立工具调用,你同时执行,意味着相同工作量下往返次数更少。
节省是复合的,往返次数越少,积累的中间上下文越少,后续每次往返也更便宜,设计工具时要让独立操作能被模型识别并批量处理,像并联电路而不是串联电路。
应用层响应缓存:免税资格认定
最便宜的词元是从未发送到API的那个,在调用大语言模型之前检查是否已经回答过这个问题,Fintool对财报电话会议摘要和常见查询进行激进缓存,用户问苹果最新财报摘要时,不是每次都从头生成,第一个请求付全款,后续请求基本免费。
这完全在大语言模型层之上运作,不是提示词缓存也不是KV缓存,是你的应用决定这个查询有有效的缓存响应,直接短路API调用,好候选包括事实查询如公司财务、财报摘要、SEC文件,常见问题,确定性转换如数据格式化、单位换算,稳定分析如底层数据不变输出就不变的分析。
缓存失效策略很关键,财报摘要一旦生成就很稳定,实时股价显然不是,让缓存存活时间匹配底层数据的波动率,即使部分缓存也有帮助,如果代理任务涉及五个工具调用,你能缓存其中两个,就砍掉了40%的工具相关词元成本,而且没碰大语言模型。
结语:从烧钱演示到盈利产品
上下文工程不性感,不是搞代理最激动人心的部分,但它是演示让人惊艳和产品能规模化盈利的区别,真正在构建可持续代理产品的团队,对词元效率的痴迷程度就像数据库工程师对查询优化的痴迷一样,因为在规模上,每一个浪费的词元都是钱在燃烧。
上下文税真实存在,但有了正确的架构,它基本可以避免,尼古拉斯·布斯塔曼特这篇文章的价值在于,他不是从理论出发,而是从Fintool的真实业务场景出发,每一条建议都对应着具体的成本数字和性能指标,这种实战派的经验比任何学术论文都值钱,读完后你会发现,原来省钱和提效可以是同一件事。