lellm_agent/runtime/context/compactor.rs
1//! 上下文压缩器 — 可插拔策略 SPI。
2//!
3//! 未来可替换为:
4//! - `LLMCompactor` — 使用轻量模型生成摘要
5//! - `VectorMemoryCompactor` — 基于向量相似度保留关键消息
6
7use lellm_core::Message;
8
9use super::budget::ContextBudget;
10
11/// 压缩操作的结果。
12#[derive(Debug, Clone)]
13pub struct CompactionResult {
14 /// 压缩后的消息列表
15 pub messages: Vec<Message>,
16 /// 压缩前的 Token 数
17 pub before_tokens: usize,
18 /// 压缩后的 Token 数
19 pub after_tokens: usize,
20 /// 被移除的消息数量
21 pub removed_messages: usize,
22}
23
24/// 上下文压缩器 — 可插拔策略。
25pub trait ContextCompactor: Send + Sync {
26 /// 对消息列表执行压缩。
27 ///
28 /// **关键约束:**
29 /// Assistant(tool_call) + 对应的 ToolResult 是原子块,不可拆分。
30 /// 压缩后的历史必须保持 Tool Calling 协议的完整性。
31 fn compact(&self, messages: &[Message], budget: &ContextBudget) -> CompactionResult;
32}