什么是消息剪裁?
消息剪裁(Message Pruning)是一种自动管理对话历史长度的机制,在保持对话连贯性的同时,减少不必要的 Token 消耗。为什么需要剪裁?
降低成本
减少 Token 使用,降低 API 调用成本
提升性能
减少输入长度,加快模型响应速度
避免超限
防止超过模型的上下文长度限制
保持质量
移除冗余信息,保留关键上下文
启用剪裁
设置prune: true 启用消息剪裁:
剪裁选项
通过pruneOptions 自定义剪裁行为:
自定义剪裁配置
重要:如果不设置
pruneOptions,系统使用默认值(targetTokens: 80000),适用于大多数场景。只有在需要更激进的剪裁时才需要自定义配置。参数说明
剪裁策略
系统会根据消息历史的特征自动选择最合适的优化策略:gentle_optimization - 温和优化(常用)
gentle_optimization - 温和优化(常用)
适用场景:消息总数适中,仅需轻度优化策略:
- 保留最近的 N 条消息(由
preserveRecentMessages控制) - 从较早的消息开始逐步移除
- 确保 user/assistant 消息对的完整性
- 系统提示词始终保留
aggressive_image_removal - 激进的图片移除
aggressive_image_removal - 激进的图片移除
适用场景:消息中包含大量图片或文件附件策略:
- 优先移除历史消息中的图片和文件 part
- 保留文本内容以维持对话连贯性
- 显著降低 Token 消耗(图片占用大量 tokens)
hybrid_optimization - 混合优化
hybrid_optimization - 混合优化
适用场景:消息历史既长又包含附件策略:
- 结合移除旧消息和移除附件
- 平衡对话历史和 Token 消耗
- 根据消息重要性动态调整
aggressive_truncation - 激进截断
aggressive_truncation - 激进截断
适用场景:消息总数远超阈值,需要大幅减少策略:
- 仅保留最近的核心消息
- 移除大部分历史对话
- 优先保证响应速度和成本
minimal_cleanup - 最小清理
minimal_cleanup - 最小清理
适用场景:消息总数略超阈值策略:
- 最小化的调整
- 仅移除少量最早的消息
- 最大程度保留上下文
检查剪裁结果
响应头X-Message-Pruned 指示是否进行了剪裁:
完整示例
- 使用默认配置(推荐)
- 自定义配置(更激进的剪裁)
大多数情况下,使用默认配置即可:
默认配置:
targetTokens: 80000, preserveRecentMessages: 3。这适用于绝大多数场景,无需手动调整。最佳实践
1️⃣ 根据场景调整参数
1️⃣ 根据场景调整参数
不同场景使用不同的剪裁配置:
2️⃣ 监控剪裁效果
2️⃣ 监控剪裁效果
记录剪裁前后的消息数量和 Token 变化:
监控剪裁效果
3️⃣ 结合 Token 统计优化成本
3️⃣ 结合 Token 统计优化成本
使用返回的
usage 信息监控和优化成本:Token 成本监控
成本优化建议:
- 定期监控每次请求的 Token 使用量
- 如果输入 tokens 持续偏高,考虑降低
targetTokens - 平衡成本与对话质量,避免过度剪裁
4️⃣ 动态调整剪裁策略
4️⃣ 动态调整剪裁策略
根据实际使用情况动态调整剪裁参数:
动态调整策略
注意事项
性能对比
以下是使用自定义激进配置(targetTokens: 40000)的性能对比:
说明:
- 上表基于
targetTokens: 40000的自定义配置,非默认值 - 使用默认配置(
targetTokens: 80000)时,100 条消息对话(~25k tokens)不会触发剪裁 - 图片和文件附件占用大量 tokens,使用
aggressive_image_removal策略可显著降低成本 - 实际节省比例取决于消息长度、内容类型和配置参数
成本节省示例
以 Claude 3.7 Sonnet 为例(输入 $3/1M tokens,输出 $15/1M tokens):下一步
消息格式
了解消息的结构和格式
性能优化
学习更多性能优化技巧

