前言
- 模型上下文压缩几乎是Agent基本功能了,上下文超过70%时llm性能和质量都有明显下降,压缩上下文也能避免爆上下文的问题
方法
- 估算 tokens,达到阈值时自动启动压缩
- 很多API请求会响应 tokens 使用量,但如果没有的话就需要自己根据 messages 估算
- 从 openai 的文档来看,普遍是 英语单词为1个token,中文字符为1个,但也有词语或短语为1个token,经验值是直接 ~ utf8 长度/4
- 保留近期消息不压缩,比如最近6条消息,或是最近 2000 tokens 消息
- toolcall 压缩
- 一些过时的 toolcall 可以直接判断出来,然后裁剪掉,比如同一文件的读写,那么之前的 toolcall 就可以直接裁剪掉
- 将部分长消息内容存入数据库,只留摘要和引用方法,供 llm 重新读取
- LLM 总结压缩,这个消耗比较大,如果前面能压缩 tokens 到阈值以下就不需要用了。
- 将上下文发到 subagent 进行压缩,返回摘要
其他
- 有些Agent实现会把压缩前的上下文原文也保存起来,方便后续llm引用