Skip to main content

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}