Skip to content

API - Context & Compression

ContextManager

ts
import { ContextManager } from 'kagent-ts'

new ContextManager(config: ContextConfig)
ts
interface ContextConfig {
  maxTokens: number               // 上下文窗口最大 Token 数
  compressionThreshold?: number   // 压缩触发阈值 (0-1, 默认: 0.8)
  keepTurns?: number              // 保留最近 N 轮 (默认: 20)
  toolResultMaxAgeMs?: number     // 工具结果最大保留时间 (默认: 300000)
}

方法

ts
class ContextManager {
  addMessage(message: MessageData): void
  getMessages(): MessageData[]
  getTokenCount(): number
  needsCompression(): boolean
  compress(): CompressionResult
  clear(): void
}

ContextState

ts
interface ContextState {
  messages: MessageData[]
  tokenCount: number
  compressedRounds: number
  truncatedOutputs: number
  lastCompressionAt: number
}

ProgressiveCompressor

ts
import { ProgressiveCompressor } from 'kagent-ts'

new ProgressiveCompressor(config?: CompressionConfig)
ts
interface CompressionConfig {
  maxOutputSize?: number           // 默认: 200KB
  truncatedOutputDir?: string      // 默认: ".kagent-context"
}

策略

ts
type CompressionStrategy =
  | "truncate_large_outputs"     // 第 1 步: 截断大型输出
  | "drop_old_turns"             // 第 2 步: 删除旧轮次
  | "clear_aged_read_results"    // 第 3 步: 清除可重现结果
  | "llm_summarize"              // 第 4 步: LLM 摘要

interface CompressionResult {
  appliedStrategies: CompressionStrategy[]
  tokensSaved: number
  messagesRemoved: number
  truncatedOutputs: number
}

使用示例

ts
import { ContextManager, ProgressiveCompressor } from 'kagent-ts'

// ContextManager 自动管理上下文窗口
const ctxManager = new ContextManager({
  maxTokens: 128000,
  compressionThreshold: 0.8,
  keepTurns: 20,
  toolResultMaxAgeMs: 300000,
})

// 添加消息
ctxManager.addMessage({ role: 'user', content: '你好' })

// 检查是否需要压缩
if (ctxManager.needsCompression()) {
  const result = ctxManager.compress()
  console.log(`已压缩: 节省 ${result.tokensSaved} tokens`)
}

// ProgressiveCompressor 提供更细粒度的控制
const compressor = new ProgressiveCompressor({
  maxOutputSize: 100 * 1024,     // 100KB
  truncatedOutputDir: './.context-cache',
})

下一步

基于 MIT 协议发布