contextcompressor

package
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 29, 2026 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const (
	AutoCompactBufferTokens      = 13_000
	WarningThresholdBufferTokens = 20_000
	ErrorThresholdBufferTokens   = 20_000
	ManualCompactBufferTokens    = 3_000
)

Token 阈值常量

View Source
const (
	DefaultCompactBufferTokens    = 13_000
	DefaultWarningBufferTokens    = 20_000
	DefaultMaxOutputTokens        = 20_000
	DefaultPostCompactTokenBudget = 50_000
	DefaultMaxTokensPerFile       = 5_000
	DefaultMaxTokensPerSkill      = 5_000
)

Token 预算常量

Variables

View Source
var ContextWindowSizes = map[string]int{
	"claude-sonnet-4-20250514":   200_000,
	"claude-opus-4-20250514":     200_000,
	"claude-3-5-sonnet-20241022": 200_000,
	"claude-3-5-haiku-20241022":  200_000,
	"claude-3-opus-20240229":     200_000,
	"claude-3-sonnet-20240229":   200_000,
	"claude-3-haiku-20240307":    200_000,
	"gpt-4o":                     128_000,
	"gpt-4-turbo":                128_000,
	"gpt-3.5-turbo":              16_385,
}

ContextWindowSizes 常见模型的上下文窗口大小

Functions

func ConvertFromCCMessages

func ConvertFromCCMessages(messages []Message) []*schema.Message

ConvertFromCCMessages 将 contextcompressor.Message 转换回 adk.Message

func GetAutoCompactThreshold

func GetAutoCompactThreshold(model string) int

GetAutoCompactThreshold 获取自动压缩阈值

func GetCompactThreshold

func GetCompactThreshold(model string, contextWindow int) int

GetCompactThreshold 获取压缩阈值

func GetContextWindowSize

func GetContextWindowSize(model string) int

GetContextWindowSize 获取模型的上下文窗口大小

func GetEffectiveContextWindowSize

func GetEffectiveContextWindowSize(model string) int

GetEffectiveContextWindowSize 获取有效的上下文窗口大小(减去摘要输出预留)

func ShouldAutoCompact

func ShouldAutoCompact(messages []Message, model string, tokenizer Tokenizer) bool

ShouldAutoCompact 判断是否应该触发自动压缩

func ValidateCompactionResult

func ValidateCompactionResult(result *CompactionResult) error

ValidateCompactionResult 验证压缩结果

Types

type ChatModelProxy

type ChatModelProxy struct {
	GenerateFunc func(ctx context.Context, messages []compactors.Message) (string, error)
}

ChatModelProxy ChatModel 代理,用于 contextcompressor

func (*ChatModelProxy) Generate

func (c *ChatModelProxy) Generate(ctx context.Context, messages []compactors.Message) (string, error)

Generate 实现 compactors.ChatModel 接口

type CompactMetadata

type CompactMetadata struct {
	CompactType          string `json:"compact_type,omitempty"`
	PreCompactTokenCount int    `json:"pre_compact_token_count,omitempty"`
	LastMessageID        string `json:"last_message_id,omitempty"`
	UserContext          string `json:"user_context,omitempty"`
	MessagesSummarized   int    `json:"messages_summarized,omitempty"`
}

CompactMetadata 压缩元数据

type CompactionResult

type CompactionResult struct {
	BoundaryMarker    *SystemMessage `json:"boundary_marker,omitempty"`
	SummaryMessages   []Message      `json:"summary_messages,omitempty"`
	MessagesToKeep    []Message      `json:"messages_to_keep,omitempty"`
	PreCompactTokens  int            `json:"pre_compact_tokens,omitempty"`
	PostCompactTokens int            `json:"post_compact_tokens,omitempty"`
}

CompactionResult 压缩结果

type Compactor

type Compactor struct {
	// contains filtered or unexported fields
}

Compactor 压缩器(支持多种压缩策略)

func NewCompactor

func NewCompactor(chatModel compactors.ChatModel, tokenizer Tokenizer, opts ...Option) *Compactor

NewCompactor 创建压缩器

func (*Compactor) Compact

func (c *Compactor) Compact(ctx context.Context, messages []Message, opts ...Option) (*CompactionResult, error)

Compact 自动选择合适的压缩策略 1. PruneToolResults - 裁剪旧工具结果的详细内容 2. ProtectHeadMessages - 保护头部消息(系统 + 前几个对话轮次) 3. ProtectTailMessages - 保护尾部消息(最近的上下文) 4. 对中间部分进行摘要压缩

func (*Compactor) FullCompact

func (c *Compactor) FullCompact(ctx context.Context, messages []Message, opts ...Option) (*CompactionResult, error)

FullCompact 完整压缩

func (*Compactor) GetConfig

func (c *Compactor) GetConfig() *Config

GetConfig 获取配置

func (*Compactor) GetTokenCount

func (c *Compactor) GetTokenCount(messages []Message) int

GetTokenCount 估算消息 token 数

func (*Compactor) MicroCompact

func (c *Compactor) MicroCompact(ctx context.Context, messages []Message, opts ...Option) (*CompactionResult, error)

MicroCompact 微压缩

func (*Compactor) PartialCompact

func (c *Compactor) PartialCompact(ctx context.Context, messages []Message, opts ...Option) (*CompactionResult, error)

PartialCompact 部分压缩

func (*Compactor) ShouldCompact

func (c *Compactor) ShouldCompact(messages []Message, threshold int) bool

ShouldCompact 判断是否需要压缩

type Compressor

type Compressor interface {
	Compact(ctx context.Context, messages []Message, opts ...Option) (*CompactionResult, error)
}

Compressor 压缩器接口

type Config

type Config struct {
	Model               string
	MaxOutputTokens     int
	CompactBufferTokens int
	CustomThreshold     int // 用户自定义压缩阈值,会覆盖自动计算的阈值
	CustomInstructions  string
	SuppressFollowUp    bool
}

Config 压缩配置

func DefaultConfig

func DefaultConfig() *Config

DefaultConfig 返回默认配置

type ContentBlock

type ContentBlock struct {
	Type       string           `json:"type"`
	Text       string           `json:"text,omitempty"`
	Image      *ImageContent    `json:"image,omitempty"`
	ToolUse    *ToolUseBlock    `json:"tool_use,omitempty"`
	ToolResult *ToolResultBlock `json:"tool_result,omitempty"`
	Document   *DocumentContent `json:"document,omitempty"`
}

ContentBlock 内容块

type DefaultTokenizerImpl

type DefaultTokenizerImpl struct {
	// contains filtered or unexported fields
}

DefaultTokenizerImpl 默认的 Token 估算器实现

func NewDefaultTokenizerImpl

func NewDefaultTokenizerImpl(charsPerToken float64) *DefaultTokenizerImpl

NewDefaultTokenizerImpl 创建默认估算器

func (*DefaultTokenizerImpl) Estimate

func (t *DefaultTokenizerImpl) Estimate(text string) int

Estimate 估算单条文本的 token 数

func (*DefaultTokenizerImpl) EstimateMessages

func (t *DefaultTokenizerImpl) EstimateMessages(messages []Message) int

EstimateMessages 估算消息列表的总 token 数

type DocumentContent

type DocumentContent struct {
	Type     string `json:"type,omitempty"`
	Source   string `json:"source,omitempty"`
	MimeType string `json:"mime_type,omitempty"`
}

DocumentContent 文档内容

type ImageContent

type ImageContent struct {
	Type     string `json:"type"`
	Source   string `json:"source,omitempty"`
	MimeType string `json:"mime_type,omitempty"`
}

ImageContent 图片内容

type IntegrationService

type IntegrationService struct {
	// contains filtered or unexported fields
}

IntegrationService 集成服务,用于将 context compressor 集成到 runner

func NewIntegrationService

func NewIntegrationService(compactor *Compactor) *IntegrationService

NewIntegrationService 创建集成服务

func (*IntegrationService) AutoCompactThreshold

func (s *IntegrationService) AutoCompactThreshold() int

AutoCompactThreshold 获取自动压缩阈值

func (*IntegrationService) Compact

func (s *IntegrationService) Compact(ctx context.Context, messages []Message) (*CompactionResult, error)

Compact 执行压缩

func (*IntegrationService) GetCompactor

func (s *IntegrationService) GetCompactor() *Compactor

GetCompactor 获取压缩器

func (*IntegrationService) GetTokenCount

func (s *IntegrationService) GetTokenCount(messages []Message) int

GetTokenCount 获取消息 token 数

func (*IntegrationService) GetWarningState

func (s *IntegrationService) GetWarningState(tokenCount int) TokenWarningState

GetWarningState 获取警告状态

func (*IntegrationService) IsEnabled

func (s *IntegrationService) IsEnabled() bool

IsEnabled 检查是否启用

func (*IntegrationService) ShouldCompact

func (s *IntegrationService) ShouldCompact(messages []Message) bool

ShouldCompact 检查是否应该压缩

type Message

type Message struct {
	ID       string         `json:"id"`
	Type     MessageType    `json:"type"`
	Role     string         `json:"role,omitempty"`
	Content  []ContentBlock `json:"content"`
	Metadata map[string]any `json:"metadata,omitempty"`
}

Message 消息结构

func BuildPostCompactMessages

func BuildPostCompactMessages(result *CompactionResult) []Message

BuildPostCompactMessages 构建压缩后的消息列表

func ConvertToCCMessages

func ConvertToCCMessages(messages []*schema.Message) []Message

ConvertToCCMessages 将 adk.Message 转换为 contextcompressor.Message

func NewSystemMessage

func NewSystemMessage(content string) *Message

NewSystemMessage 创建系统消息

func NewTextMessage

func NewTextMessage(msgType MessageType, text string) *Message

NewTextMessage 创建文本消息

type MessageGroup

type MessageGroup struct {
	AssistantID string
	Messages    []Message
}

MessageGroup 按 API 轮次分组

type MessageGrouper

type MessageGrouper interface {
	Group(messages []Message) []MessageGroup
}

MessageGrouper 消息分组器接口

type MessageType

type MessageType string

MessageType 消息类型

const (
	MessageTypeUser      MessageType = "user"
	MessageTypeAssistant MessageType = "assistant"
	MessageTypeSystem    MessageType = "system"
	MessageTypeTool      MessageType = "tool"
)

type Option

type Option func(*Config)

Option 压缩选项函数

func WithCompactBufferTokens

func WithCompactBufferTokens(n int) Option

WithCompactBufferTokens 设置压缩缓冲 token

func WithCustomInstructions

func WithCustomInstructions(s string) Option

WithCustomInstructions 设置自定义指令

func WithCustomThreshold

func WithCustomThreshold(n int) Option

WithCustomThreshold 设置自定义压缩阈值(会覆盖自动计算的阈值)

func WithMaxOutputTokens

func WithMaxOutputTokens(n int) Option

WithMaxOutputTokens 设置最大输出 token

func WithSuppressFollowUp

func WithSuppressFollowUp(b bool) Option

WithSuppressFollowUp 设置是否抑制后续问题

type PressureLevel

type PressureLevel int

PressureLevel 压力等级

const (
	// PressureLow 低压力 - 不需要压缩
	PressureLow PressureLevel = iota
	// PressureMedium 中压力 - 可以考虑微压缩
	PressureMedium
	// PressureHigh 高压力 - 需要压缩
	PressureHigh
	// PressureCritical 临界压力 - 必须压缩,阻塞
	PressureCritical
)

func EvaluatePressure

func EvaluatePressure(tokenCount, threshold int) PressureLevel

EvaluatePressure 根据 token 使用比例评估压力等级

func (PressureLevel) String

func (p PressureLevel) String() string

String 返回压力等级的字符串表示

type SystemMessage

type SystemMessage struct {
	Message
	CompactMetadata *CompactMetadata `json:"compact_metadata,omitempty"`
}

SystemMessage 系统消息

type TokenWarningState

type TokenWarningState struct {
	PercentLeft                 int  // 剩余百分比
	IsAboveWarningThreshold     bool // 是否超过警告阈值
	IsAboveErrorThreshold       bool // 是否超过错误阈值
	IsAboveAutoCompactThreshold bool // 是否超过自动压缩阈值
	IsAtBlockingLimit           bool // 是否达到阻塞限制
}

TokenWarningState Token 警告状态

func CalculateTokenWarningState

func CalculateTokenWarningState(tokenUsage int, model string, autoCompactEnabled bool) TokenWarningState

CalculateTokenWarningState 计算 Token 警告状态

type Tokenizer

type Tokenizer interface {
	Estimate(text string) int
	EstimateMessages(messages []Message) int
}

Tokenizer Token 估算器接口

type TokenizerAdapter

type TokenizerAdapter struct {
	// contains filtered or unexported fields
}

TokenizerAdapter 适配器,将 contextcompressor.Tokenizer 适配为 compactors.Tokenizer

func (*TokenizerAdapter) Estimate

func (a *TokenizerAdapter) Estimate(text string) int

func (*TokenizerAdapter) EstimateMessages

func (a *TokenizerAdapter) EstimateMessages(messages []compactors.Message) int

type ToolResultBlock

type ToolResultBlock struct {
	ToolUseID string `json:"tool_use_id,omitempty"`
	Content   any    `json:"content,omitempty"`
	IsError   bool   `json:"is_error,omitempty"`
}

ToolResultBlock 工具结果块

type ToolUseBlock

type ToolUseBlock struct {
	ID    string         `json:"id,omitempty"`
	Type  string         `json:"type,omitempty"`
	Name  string         `json:"name,omitempty"`
	Input map[string]any `json:"input,omitempty"`
}

ToolUseBlock 工具调用块

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL