c6f8ba95ec
- 新增 context 模块实现 Prune 和 Compaction 压缩策略 - Prune: 将旧工具调用结果替换为占位符 - Compaction: 使用 AI 生成对话摘要 - CLI 提示符显示上下文使用量 [used/available] - 添加 /compact 命令手动压缩对话 - 添加 /context 命令查看上下文详情 - Agent 集成自动压缩 (85%阈值) 和强制压缩功能
78 lines
1.6 KiB
TypeScript
78 lines
1.6 KiB
TypeScript
import type { LanguageModel } from 'ai';
|
||
|
||
/**
|
||
* Token 使用统计
|
||
*/
|
||
export interface TokenUsage {
|
||
/** 输入 tokens(估算) */
|
||
input: number;
|
||
/** 上下文限制 */
|
||
contextLimit: number;
|
||
/** 可用空间(contextLimit - outputReserve) */
|
||
available: number;
|
||
/** 使用百分比 (0-100) */
|
||
usagePercent: number;
|
||
}
|
||
|
||
/**
|
||
* 压缩配置
|
||
*/
|
||
export interface CompressionConfig {
|
||
/** 模型上下文限制 (默认 200k) */
|
||
contextLimit: number;
|
||
/** 预留输出 tokens (默认 32k) */
|
||
outputReserve: number;
|
||
/** 保护最近 tokens 不被 prune (默认 40k) */
|
||
pruneProtect: number;
|
||
/** 最小清理量才执行 prune (默认 20k) */
|
||
pruneMinimum: number;
|
||
/** 溢出阈值,超过此比例触发自动压缩 (默认 0.85) */
|
||
overflowThreshold: number;
|
||
}
|
||
|
||
/**
|
||
* 默认压缩配置
|
||
*/
|
||
export const DEFAULT_COMPRESSION_CONFIG: CompressionConfig = {
|
||
contextLimit: 200_000,
|
||
outputReserve: 32_000,
|
||
pruneProtect: 40_000,
|
||
pruneMinimum: 20_000,
|
||
overflowThreshold: 0.85,
|
||
};
|
||
|
||
/**
|
||
* 压缩占位符
|
||
*/
|
||
export const COMPACTED_PLACEHOLDER = '[此工具输出已压缩]';
|
||
|
||
/**
|
||
* 摘要消息标记 key
|
||
*/
|
||
export const SUMMARY_MARKER = '__summary__';
|
||
|
||
/**
|
||
* 工具结果压缩标记 key
|
||
*/
|
||
export const COMPACTED_MARKER = '__compacted__';
|
||
|
||
/**
|
||
* 压缩上下文(传递给压缩器的参数)
|
||
*/
|
||
export interface CompressionContext {
|
||
config: CompressionConfig;
|
||
model?: LanguageModel;
|
||
}
|
||
|
||
/**
|
||
* 压缩结果
|
||
*/
|
||
export interface CompressionResult {
|
||
/** 压缩后的消息 */
|
||
messages: import('ai').ModelMessage[];
|
||
/** 释放的 tokens */
|
||
freedTokens: number;
|
||
/** 压缩类型 */
|
||
type: 'prune' | 'compaction' | 'both';
|
||
}
|