Documentation
¶
Index ¶
- Constants
- Variables
- func ConvertFromCCMessages(messages []Message) []*schema.Message
- func GetAutoCompactThreshold(model string) int
- func GetCompactThreshold(model string, contextWindow int) int
- func GetContextWindowSize(model string) int
- func GetEffectiveContextWindowSize(model string) int
- func ShouldAutoCompact(messages []Message, model string, tokenizer Tokenizer) bool
- func ValidateCompactionResult(result *CompactionResult) error
- type ChatModelProxy
- type CompactMetadata
- type CompactionResult
- type Compactor
- func (c *Compactor) Compact(ctx context.Context, messages []Message, opts ...Option) (*CompactionResult, error)
- func (c *Compactor) FullCompact(ctx context.Context, messages []Message, opts ...Option) (*CompactionResult, error)
- func (c *Compactor) GetConfig() *Config
- func (c *Compactor) GetTokenCount(messages []Message) int
- func (c *Compactor) MicroCompact(ctx context.Context, messages []Message, opts ...Option) (*CompactionResult, error)
- func (c *Compactor) PartialCompact(ctx context.Context, messages []Message, opts ...Option) (*CompactionResult, error)
- func (c *Compactor) ShouldCompact(messages []Message, threshold int) bool
- type Compressor
- type Config
- type ContentBlock
- type DefaultTokenizerImpl
- type DocumentContent
- type ImageContent
- type IntegrationService
- func (s *IntegrationService) AutoCompactThreshold() int
- func (s *IntegrationService) Compact(ctx context.Context, messages []Message) (*CompactionResult, error)
- func (s *IntegrationService) GetCompactor() *Compactor
- func (s *IntegrationService) GetTokenCount(messages []Message) int
- func (s *IntegrationService) GetWarningState(tokenCount int) TokenWarningState
- func (s *IntegrationService) IsEnabled() bool
- func (s *IntegrationService) ShouldCompact(messages []Message) bool
- type Message
- type MessageGroup
- type MessageGrouper
- type MessageType
- type Option
- type PressureLevel
- type SystemMessage
- type TokenWarningState
- type Tokenizer
- type TokenizerAdapter
- type ToolResultBlock
- type ToolUseBlock
Constants ¶
const ( AutoCompactBufferTokens = 13_000 WarningThresholdBufferTokens = 20_000 ErrorThresholdBufferTokens = 20_000 ManualCompactBufferTokens = 3_000 )
Token 阈值常量
const ( DefaultCompactBufferTokens = 13_000 DefaultWarningBufferTokens = 20_000 DefaultMaxOutputTokens = 20_000 DefaultPostCompactTokenBudget = 50_000 DefaultMaxTokensPerFile = 5_000 DefaultMaxTokensPerSkill = 5_000 )
Token 预算常量
Variables ¶
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 ¶
ConvertFromCCMessages 将 contextcompressor.Message 转换回 adk.Message
func GetAutoCompactThreshold ¶
GetAutoCompactThreshold 获取自动压缩阈值
func GetCompactThreshold ¶
GetCompactThreshold 获取压缩阈值
func GetContextWindowSize ¶
GetContextWindowSize 获取模型的上下文窗口大小
func GetEffectiveContextWindowSize ¶
GetEffectiveContextWindowSize 获取有效的上下文窗口大小(减去摘要输出预留)
func ShouldAutoCompact ¶
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) GetTokenCount ¶
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 部分压缩
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 压缩配置
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 ¶
ConvertToCCMessages 将 adk.Message 转换为 contextcompressor.Message
func NewTextMessage ¶
func NewTextMessage(msgType MessageType, text string) *Message
NewTextMessage 创建文本消息
type MessageGroup ¶
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 ¶
WithCompactBufferTokens 设置压缩缓冲 token
func WithCustomInstructions ¶
WithCustomInstructions 设置自定义指令
func WithCustomThreshold ¶
WithCustomThreshold 设置自定义压缩阈值(会覆盖自动计算的阈值)
func WithSuppressFollowUp ¶
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 使用比例评估压力等级
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 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 工具结果块