Async Context Compression(异步上下文压缩)¶
Filter v1.2.2
通过智能摘要减少长对话的 token 消耗,同时保持对话连贯。
概览¶
Async Context Compression 过滤器通过以下方式帮助管理长对话的 token 使用:
- 智能总结较早的消息
- 保留关键信息
- 降低 API 成本
- 保持对话一致性
特别适用于:
- 长时间会话
- 多轮复杂讨论
- 成本优化
- 上下文长度控制
功能特性¶
- 智能压缩:AI 驱动的上下文摘要
- 异步处理:后台非阻塞压缩
- 保留上下文:尽量保留重要信息
- 降低成本:减少 token 使用
- 前端调试:支持浏览器控制台日志
- 增强错误报告:清晰的错误状态通知
- Open WebUI v0.7.x 兼容性:动态数据库会话处理
- 兼容性提升:摘要角色改为
assistant - 稳定性增强:解决状态管理竞态条件
- 预检上下文检查:发送前验证上下文是否超限
- 结构感知裁剪:保留文档结构的智能裁剪
- 原生工具输出裁剪:自动裁剪冗长的工具输出(注意:非原生工具调用输出不会完整注入上下文)
- 详细 Token 日志:提供细粒度的 Token 统计
- 智能模型匹配:自定义模型自动继承基础模型配置
- 多模态支持:图片内容保留但 Token 不参与计算
安装¶
- 下载插件文件:
async_context_compression.py - 上传到 OpenWebUI:Admin Panel → Settings → Functions
- 配置压缩参数
- 启用过滤器
工作原理¶
graph TD
A[Incoming Messages] --> B{Token Count > Threshold?}
B -->|No| C[Pass Through]
B -->|Yes| D[Summarize Older Messages]
D --> E[Preserve Recent Messages]
E --> F[Combine Summary + Recent]
F --> G[Send to LLM] 配置项¶
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
compression_threshold_tokens | integer | 64000 | 超过该 token 数触发压缩 |
max_context_tokens | integer | 128000 | 上下文硬性上限 |
keep_first | integer | 1 | 始终保留的前 N 条消息 |
keep_last | integer | 6 | 始终保留的后 N 条消息 |
summary_model | string | None | 用于摘要的模型 |
summary_model_max_context | integer | 0 | 摘要模型的最大上下文 Token 数 |
max_summary_tokens | integer | 16384 | 摘要的最大 token 数 |
enable_tool_output_trimming | boolean | false | 启用长工具输出裁剪 |
示例¶
压缩前¶
[Message 1] User: Tell me about Python...
[Message 2] AI: Python is a programming language...
[Message 3] User: What about its history?
[Message 4] AI: Python was created by Guido...
[Message 5] User: And its features?
[Message 6] AI: Python has many features...
... (many more messages)
[Message 20] User: Current question
压缩后¶
[Summary] Previous conversation covered Python basics,
history, features, and common use cases...
[Message 18] User: Recent question about decorators
[Message 19] AI: Decorators in Python are...
[Message 20] User: Current question
运行要求¶
前置条件
- OpenWebUI v0.3.0 及以上
- 需要可用的 LLM 用于摘要
最佳实践
- 根据模型上下文窗口设置合适的 token 阈值
- 技术讨论可适当提高
preserve_recent - 先在非关键对话中测试压缩效果
常见问题¶
没有触发压缩?
检查 token 数是否超过配置的阈值,并开启调试日志了解细节。
重要上下文丢失?
提高 preserve_recent 或降低压缩比例。