Skip to content

前言

  • 模型上下文压缩几乎是Agent基本功能了,上下文超过70%时llm性能和质量都有明显下降,压缩上下文也能避免爆上下文的问题

方法

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

其他

  • 有些Agent实现会把压缩前的上下文原文也保存起来,方便后续llm引用