Files
ai-terminal-assistant/src/context/types.ts
T
kurihada c6f8ba95ec feat: 添加对话压缩功能和上下文使用情况显示
- 新增 context 模块实现 Prune 和 Compaction 压缩策略
- Prune: 将旧工具调用结果替换为占位符
- Compaction: 使用 AI 生成对话摘要
- CLI 提示符显示上下文使用量 [used/available]
- 添加 /compact 命令手动压缩对话
- 添加 /context 命令查看上下文详情
- Agent 集成自动压缩 (85%阈值) 和强制压缩功能
2025-12-11 10:59:43 +08:00

78 lines
1.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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';
}