/** * Session Compaction — 会话压缩 * 核心理念: * 1. Token 估算:用 chars/4 粗略估算 token 数 * 2. 分块(Chunk):按 token 预算将消息分成多块 * 3. 渐进式摘要:对每块分别生成摘要,再合并 * 4. 安全裕度:估算偏低时留 20% buffer * 5. 降级策略:摘要失败时使用更粗糙的摘要 */ import type { AIProvider, ChatMessage } from '../types.js'; import type { MicroCompactOptions } from './micro-compact.js'; /** 默认上下文窗口大小(tokens) */ export declare const DEFAULT_CONTEXT_TOKENS = 128000; /** 上下文窗口最低阈值 */ export declare const CONTEXT_WINDOW_HARD_MIN_TOKENS = 16000; /** 上下文窗口警告阈值 */ export declare const CONTEXT_WINDOW_WARN_BELOW_TOKENS = 32000; /** 基础分块比例 — 每块最多占上下文的 40% */ export declare const BASE_CHUNK_RATIO = 0.4; /** 最小分块比例 */ export declare const MIN_CHUNK_RATIO = 0.15; /** 安全裕度系数 — 20% buffer 补偿 estimateTokens 的低估 */ export declare const SAFETY_MARGIN = 1.2; /** * 按 token 份额拆分消息 */ export declare function splitMessagesByTokenShare(messages: ChatMessage[], parts?: number): ChatMessage[][]; /** * 按最大 token 数拆分消息 */ export declare function chunkMessagesByMaxTokens(messages: ChatMessage[], maxTokens: number): ChatMessage[][]; /** * 计算自适应分块比例 * 消息越大,分块比例越小,避免超出模型限制 */ export declare function computeAdaptiveChunkRatio(messages: ChatMessage[], contextWindow: number): number; export type ContextWindowSource = 'config' | 'model' | 'default'; export interface ContextWindowInfo { tokens: number; source: ContextWindowSource; } export interface ContextWindowGuardResult extends ContextWindowInfo { shouldWarn: boolean; shouldBlock: boolean; } /** * 解析上下文窗口大小 */ export declare function resolveContextWindowTokens(configTokens?: number, modelContextWindow?: number): ContextWindowInfo; /** * 评估上下文窗口安全性 */ export declare function evaluateContextWindowGuard(info: ContextWindowInfo): ContextWindowGuardResult; /** * 带降级的摘要生成 * * 完整摘要失败时,尝试排除超大消息再摘要 */ export declare function summarizeWithFallback(params: { provider: AIProvider; messages: ChatMessage[]; maxChunkTokens: number; contextWindow: number; previousSummary?: string; customInstructions?: string; }): Promise; /** * 分阶段摘要 — 先将消息拆为多段分别摘要,再合并 */ export declare function summarizeInStages(params: { provider: AIProvider; messages: ChatMessage[]; maxChunkTokens: number; contextWindow: number; previousSummary?: string; customInstructions?: string; parts?: number; }): Promise; export interface PruneResult { /** 保留的消息 */ messages: ChatMessage[]; /** 被丢弃的消息 */ droppedMessages: ChatMessage[]; /** 丢弃的块数 */ droppedChunks: number; /** 丢弃的消息数 */ droppedCount: number; /** 丢弃的 token 数 */ droppedTokens: number; /** 保留的 token 数 */ keptTokens: number; /** 预算 token 数 */ budgetTokens: number; } /** * 剪裁历史消息,使其不超过上下文预算 * * 策略:从最旧的消息开始丢弃,直到 token 总量在预算内 */ export declare function pruneHistoryForContext(params: { messages: ChatMessage[]; maxContextTokens: number; maxHistoryShare?: number; parts?: number; }): PruneResult; /** * 对给定消息列表执行一次就地压缩,返回压缩后的摘要和保留消息 */ export declare function compactSession(params: { provider: AIProvider; messages: ChatMessage[]; contextWindow?: number; keepRecentCount?: number; }): Promise<{ summary: string; keptMessages: ChatMessage[]; compactedCount: number; savedTokens: number; }>; /** 自动压缩缓冲 token 数 */ export declare const AUTOCOMPACT_BUFFER_TOKENS = 13000; /** 压缩后恢复注入的最大 token 预算 */ export declare const POST_COMPACT_TOKEN_BUDGET = 50000; /** 连续压缩失败断路器上限 */ export declare const MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3; /** * 自动压缩追踪状态 */ export interface AutoCompactTrackingState { /** 本轮是否已完成压缩 */ compacted: boolean; /** 当前轮次计数 */ turnCounter: number; /** 连续压缩失败次数 */ consecutiveFailures: number; } /** * 自动压缩结果 */ export interface AutoCompactResult { /** 是否执行了压缩 */ wasCompacted: boolean; /** 压缩后的消息列表 */ messages: ChatMessage[]; /** 总共节省的 token 数 */ savedTokens: number; /** micro-compact 节省的 token 数 */ microSavedTokens: number; /** auto-compact 节省的 token 数 */ autoSavedTokens: number; /** 摘要文本(如果执行了 auto-compact) */ summary?: string; } /** * 创建自动压缩追踪状态 */ export declare function createAutoCompactTracking(): AutoCompactTrackingState; /** * 判断是否应该执行自动压缩 */ export declare function shouldAutoCompact(messages: ChatMessage[], contextWindow: number, tracking?: AutoCompactTrackingState): boolean; /** * 三级渐进压缩管线 * * Level 1: Micro-Compact — 清理旧工具结果(无 LLM 调用) * Level 2: Auto-Compact — LLM 摘要 + 保留近期消息 * Level 3: 持久化关键发现 * */ export declare function autoCompactIfNeeded(params: { provider: AIProvider; messages: ChatMessage[]; contextWindow?: number; tracking?: AutoCompactTrackingState; microCompactOptions?: MicroCompactOptions; keepRecentCount?: number; }): Promise; //# sourceMappingURL=compaction.d.ts.map