Agent开发中容易被忽视的Token窗口管理
和大家分享一个Agent开发中很容易被忽视的点:Token窗口管理。
现在很多模型支持百万级上下文了,很多人觉得Token窗口够大,可以随便塞。但实际做项目才发现,这是一个误区。
第一个坑是成本。一次Agent调用,system prompt、工具描述、历史对话、检索文档全往里塞,看着没超窗口,但每次调用消耗的Token量翻了好几倍。一个需求跑下来,API费用比合理设计高出不少。
第二个坑是幻觉。上下文越长,模型注意力越分散。塞进去的无关信息越多,模型越容易把不同来源的内容混在一起,产生事实性错误。做过RAG的应该都遇到过,召回文档太多,模型反而把两篇文档的内容串了,输出一个看起来合理但完全不存在的信息。
我实践下来总结了一点经验:
第一,工具返回结果先做一层过滤,只保留和当前任务相关的片段。
第二,对话历史不能无限堆砌,超过一定轮次做摘要压缩,丢掉无关细节。
第三,system prompt一定要精炼。
这些点看起来是细节,但实际项目里,token管理做不好的话prompt写得再好也没啥用。