Documentation
¶
Index ¶
- Variables
- func SortMessagesByPriority(messages []MessageWithPriority, descending bool)
- type CompressionEvent
- type CompressionStrategy
- type ContextInjector
- type ContextWindowManager
- func (m *ContextWindowManager) AddMessage(ctx context.Context, msg Message) error
- func (m *ContextWindowManager) AddMessages(ctx context.Context, msgs []Message) error
- func (m *ContextWindowManager) Clear()
- func (m *ContextWindowManager) Compress(ctx context.Context) error
- func (m *ContextWindowManager) GetCompressionHistory() []CompressionEvent
- func (m *ContextWindowManager) GetCurrentTokens() int
- func (m *ContextWindowManager) GetMessages() []Message
- func (m *ContextWindowManager) GetRemainingTokens() int
- func (m *ContextWindowManager) GetStats() WindowStats
- func (m *ContextWindowManager) GetUsagePercentage() float64
- func (m *ContextWindowManager) IsWithinBudget() bool
- func (m *ContextWindowManager) Reset()
- func (m *ContextWindowManager) ShouldWarn() bool
- type DefaultPriorityCalculator
- type DetailedTokenCounter
- type HybridStrategy
- type InjectorConfig
- type LocationInfo
- type LocationProvider
- type Message
- type MessagePriority
- type MessageWithPriority
- type ModelConfig
- type MultiModelTokenCounter
- func (m *MultiModelTokenCounter) CountForModel(ctx context.Context, modelName string, text string) (int, error)
- func (m *MultiModelTokenCounter) EstimateMessagesForModel(ctx context.Context, modelName string, messages []Message) (int, error)
- func (m *MultiModelTokenCounter) GetCounter(modelName string) TokenCounter
- func (m *MultiModelTokenCounter) RegisterCounter(modelName string, counter TokenCounter)
- type PriorityBasedStrategy
- type PriorityCalculator
- type SessionState
- type SessionStateProvider
- type SimpleLocationProvider
- type SimpleSessionStateProvider
- type SimpleTokenCounter
- func (c *SimpleTokenCounter) Count(ctx context.Context, text string) (int, error)
- func (c *SimpleTokenCounter) CountBatch(ctx context.Context, texts []string) ([]int, error)
- func (c *SimpleTokenCounter) EstimateMessages(ctx context.Context, messages []Message) (int, error)
- func (c *SimpleTokenCounter) ModelName() string
- type SimpleUserInfoProvider
- type SlidingWindowStrategy
- type TikTokenCounter
- type TokenBasedStrategy
- type TokenBudget
- type TokenCounter
- type TokenEstimate
- type UserInfo
- type UserInfoProvider
- type WindowManagerConfig
- type WindowStats
Constants ¶
This section is empty.
Variables ¶
var ( // === OpenAI 系列 === GPT4oConfig = ModelConfig{ Name: "gpt-4o", CharsPerToken: 4.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } GPT4oMiniConfig = ModelConfig{ Name: "gpt-4o-mini", CharsPerToken: 4.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } GPT4TurboConfig = ModelConfig{ Name: "gpt-4-turbo", CharsPerToken: 4.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } GPT4Config = ModelConfig{ Name: "gpt-4", CharsPerToken: 4.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } GPT35TurboConfig = ModelConfig{ Name: "gpt-3.5-turbo", CharsPerToken: 4.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } // OpenAI 推理模型(o1/o3 系列) O1Config = ModelConfig{ Name: "o1", CharsPerToken: 4.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } O3Config = ModelConfig{ Name: "o3", CharsPerToken: 4.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } // === Anthropic/Claude 系列 === ClaudeSonnet45Config = ModelConfig{ Name: "claude-sonnet-4-5", CharsPerToken: 3.5, BaseTokenOverhead: 4, RoleTokenCost: 1, } Claude3OpusConfig = ModelConfig{ Name: "claude-3-opus", CharsPerToken: 3.5, BaseTokenOverhead: 4, RoleTokenCost: 1, } Claude3SonnetConfig = ModelConfig{ Name: "claude-3-sonnet", CharsPerToken: 3.5, BaseTokenOverhead: 4, RoleTokenCost: 1, } Claude3HaikuConfig = ModelConfig{ Name: "claude-3-haiku", CharsPerToken: 3.5, BaseTokenOverhead: 4, RoleTokenCost: 1, } // === Google Gemini 系列 === Gemini2FlashConfig = ModelConfig{ Name: "gemini-2.0-flash-exp", CharsPerToken: 3.8, BaseTokenOverhead: 3, RoleTokenCost: 1, } Gemini2ThinkingConfig = ModelConfig{ Name: "gemini-2.0-flash-thinking-exp", CharsPerToken: 3.8, BaseTokenOverhead: 3, RoleTokenCost: 1, } // === 中国市场模型 === // DeepSeek DeepSeekChatConfig = ModelConfig{ Name: "deepseek-chat", CharsPerToken: 3.2, BaseTokenOverhead: 3, RoleTokenCost: 1, } // GLM/智谱 GLM4Config = ModelConfig{ Name: "glm-4", CharsPerToken: 3.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } GLM3TurboConfig = ModelConfig{ Name: "glm-3-turbo", CharsPerToken: 3.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } // Moonshot/Kimi Moonshot128KConfig = ModelConfig{ Name: "moonshot-v1-128k", CharsPerToken: 3.2, BaseTokenOverhead: 3, RoleTokenCost: 1, } Moonshot32KConfig = ModelConfig{ Name: "moonshot-v1-32k", CharsPerToken: 3.2, BaseTokenOverhead: 3, RoleTokenCost: 1, } // === 开源模型 === // Llama 系列 Llama3Config = ModelConfig{ Name: "llama-3", CharsPerToken: 4.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } Llama370BConfig = ModelConfig{ Name: "llama-3.3-70b", CharsPerToken: 4.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } // Qwen 系列 Qwen2Config = ModelConfig{ Name: "qwen-2", CharsPerToken: 3.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } // === 通用配置(保守估算)=== DefaultConfig = ModelConfig{ Name: "default", CharsPerToken: 4.0, BaseTokenOverhead: 3, RoleTokenCost: 1, } )
预定义的模型配置
Functions ¶
func SortMessagesByPriority ¶
func SortMessagesByPriority(messages []MessageWithPriority, descending bool)
SortMessagesByPriority 按优先级排序消息
Types ¶
type CompressionEvent ¶
type CompressionEvent struct {
Timestamp time.Time
BeforeMessages int
AfterMessages int
BeforeTokens int
AfterTokens int
CompressionRatio float64
Strategy string
}
CompressionEvent 记录一次压缩事件
type CompressionStrategy ¶
type CompressionStrategy interface {
// Name 返回策略名称
Name() string
// Compress 压缩消息列表
// 返回压缩后的消息列表
Compress(ctx context.Context, messages []Message, config WindowManagerConfig) ([]Message, error)
}
CompressionStrategy 定义上下文压缩策略接口
type ContextInjector ¶ added in v0.13.0
type ContextInjector struct {
// contains filtered or unexported fields
}
ContextInjector Context 自动注入器
func NewContextInjector ¶ added in v0.13.0
func NewContextInjector(config InjectorConfig) *ContextInjector
NewContextInjector 创建 Context 注入器
func (*ContextInjector) InjectContext ¶ added in v0.13.0
func (ci *ContextInjector) InjectContext(ctx context.Context, systemPrompt string) string
InjectContext 注入上下文到系统提示词
type ContextWindowManager ¶
type ContextWindowManager struct {
// contains filtered or unexported fields
}
ContextWindowManager 管理对话上下文窗口 实现自动 Token 计数、滑动窗口和智能压缩
func NewContextWindowManager ¶
func NewContextWindowManager( config WindowManagerConfig, tokenCounter TokenCounter, compressionStrategy CompressionStrategy, ) *ContextWindowManager
NewContextWindowManager 创建新的上下文窗口管理器
func (*ContextWindowManager) AddMessage ¶
func (m *ContextWindowManager) AddMessage(ctx context.Context, msg Message) error
AddMessage 添加新消息
func (*ContextWindowManager) AddMessages ¶
func (m *ContextWindowManager) AddMessages(ctx context.Context, msgs []Message) error
AddMessages 批量添加消息
func (*ContextWindowManager) Compress ¶
func (m *ContextWindowManager) Compress(ctx context.Context) error
Compress 手动触发压缩
func (*ContextWindowManager) GetCompressionHistory ¶
func (m *ContextWindowManager) GetCompressionHistory() []CompressionEvent
GetCompressionHistory 获取压缩历史
func (*ContextWindowManager) GetCurrentTokens ¶
func (m *ContextWindowManager) GetCurrentTokens() int
GetCurrentTokens 获取当前 Token 使用量
func (*ContextWindowManager) GetMessages ¶
func (m *ContextWindowManager) GetMessages() []Message
GetMessages 获取当前所有消息
func (*ContextWindowManager) GetRemainingTokens ¶
func (m *ContextWindowManager) GetRemainingTokens() int
GetRemainingTokens 获取剩余可用 Token 数
func (*ContextWindowManager) GetStats ¶
func (m *ContextWindowManager) GetStats() WindowStats
GetStats 获取统计信息
func (*ContextWindowManager) GetUsagePercentage ¶
func (m *ContextWindowManager) GetUsagePercentage() float64
GetUsagePercentage 获取当前使用百分比
func (*ContextWindowManager) IsWithinBudget ¶
func (m *ContextWindowManager) IsWithinBudget() bool
IsWithinBudget 检查是否在预算内
func (*ContextWindowManager) ShouldWarn ¶
func (m *ContextWindowManager) ShouldWarn() bool
ShouldWarn 检查是否应该发出警告
type DefaultPriorityCalculator ¶
type DefaultPriorityCalculator struct {
// contains filtered or unexported fields
}
DefaultPriorityCalculator 默认优先级计算器
func NewDefaultPriorityCalculator ¶
func NewDefaultPriorityCalculator() *DefaultPriorityCalculator
NewDefaultPriorityCalculator 创建默认优先级计算器
func (*DefaultPriorityCalculator) CalculatePriority ¶
func (c *DefaultPriorityCalculator) CalculatePriority( ctx context.Context, msg Message, position int, totalMessages int, ) (MessagePriority, float64)
CalculatePriority 实现 PriorityCalculator 接口
type DetailedTokenCounter ¶
type DetailedTokenCounter struct {
// contains filtered or unexported fields
}
DetailedTokenCounter 提供详细 Token 估算的计数器
func NewDetailedTokenCounter ¶
func NewDetailedTokenCounter(baseCounter TokenCounter) *DetailedTokenCounter
NewDetailedTokenCounter 创建详细计数器
func (*DetailedTokenCounter) EstimateMessagesDetailed ¶
func (c *DetailedTokenCounter) EstimateMessagesDetailed(ctx context.Context, messages []Message) (*TokenEstimate, error)
EstimateMessagesDetailed 返回详细的 Token 估算
type HybridStrategy ¶
type HybridStrategy struct {
// contains filtered or unexported fields
}
HybridStrategy 混合策略 结合多种策略的优点
func NewHybridStrategy ¶
func NewHybridStrategy(strategies []CompressionStrategy, weights []float64) *HybridStrategy
NewHybridStrategy 创建混合策略
func (*HybridStrategy) Compress ¶
func (s *HybridStrategy) Compress( ctx context.Context, messages []Message, config WindowManagerConfig, ) ([]Message, error)
Compress 实现 CompressionStrategy 接口
type InjectorConfig ¶ added in v0.13.0
type InjectorConfig struct {
EnableDateTime bool // 注入日期时间
EnableLocation bool // 注入位置信息
EnableSessionState bool // 注入 Session 状态
EnableUserInfo bool // 注入用户信息
EnableSystemInfo bool // 注入系统信息
CustomContext string // 自定义上下文
// 可选的数据提供者
LocationProvider LocationProvider
SessionStateProvider SessionStateProvider
UserInfoProvider UserInfoProvider
}
InjectorConfig Context 注入器配置
type LocationInfo ¶ added in v0.13.0
type LocationInfo struct {
City string
Country string
Timezone string
Language string
Latitude float64
Longitude float64
}
LocationInfo 位置信息
type LocationProvider ¶ added in v0.13.0
type LocationProvider interface {
GetLocation(ctx context.Context) (*LocationInfo, error)
}
LocationProvider 位置信息提供者接口
type MessagePriority ¶
type MessagePriority int
MessagePriority 消息优先级
const ( PriorityLow MessagePriority = 1 PriorityMedium MessagePriority = 2 PriorityHigh MessagePriority = 3 PriorityCritical MessagePriority = 4 )
type MessageWithPriority ¶
type MessageWithPriority struct {
Message Message
Priority MessagePriority
Score float64 // 优先级分数(用于排序)
}
MessageWithPriority 带优先级的消息
func CalculateMessagePriorities ¶
func CalculateMessagePriorities( ctx context.Context, messages []Message, calculator PriorityCalculator, ) []MessageWithPriority
CalculateMessagePriorities 计算所有消息的优先级
func FilterMessagesByPriority ¶
func FilterMessagesByPriority( messages []MessageWithPriority, minPriority MessagePriority, ) []MessageWithPriority
FilterMessagesByPriority 过滤低优先级消息
type ModelConfig ¶
type ModelConfig struct {
Name string // 模型名称
CharsPerToken float64 // 平均每个 Token 的字符数
BaseTokenOverhead int // 每条消息的基础 Token 开销
RoleTokenCost int // Role 标签的 Token 开销
}
ModelConfig 定义模型的 Token 计算配置
type MultiModelTokenCounter ¶
type MultiModelTokenCounter struct {
// contains filtered or unexported fields
}
MultiModelTokenCounter 支持多模型的 Token 计数器
func NewMultiModelTokenCounter ¶
func NewMultiModelTokenCounter() *MultiModelTokenCounter
NewMultiModelTokenCounter 创建多模型计数器
func (*MultiModelTokenCounter) CountForModel ¶
func (m *MultiModelTokenCounter) CountForModel(ctx context.Context, modelName string, text string) (int, error)
CountForModel 为指定模型计算 Token 数
func (*MultiModelTokenCounter) EstimateMessagesForModel ¶
func (m *MultiModelTokenCounter) EstimateMessagesForModel(ctx context.Context, modelName string, messages []Message) (int, error)
EstimateMessagesForModel 为指定模型估算消息 Token 数
func (*MultiModelTokenCounter) GetCounter ¶
func (m *MultiModelTokenCounter) GetCounter(modelName string) TokenCounter
GetCounter 获取指定模型的计数器
func (*MultiModelTokenCounter) RegisterCounter ¶
func (m *MultiModelTokenCounter) RegisterCounter(modelName string, counter TokenCounter)
RegisterCounter 注册一个模型的计数器
type PriorityBasedStrategy ¶
type PriorityBasedStrategy struct {
// contains filtered or unexported fields
}
PriorityBasedStrategy 基于优先级的压缩策略 优先保留高优先级消息
func NewPriorityBasedStrategy ¶
func NewPriorityBasedStrategy(targetSize int, calculator PriorityCalculator) *PriorityBasedStrategy
NewPriorityBasedStrategy 创建基于优先级的策略
func (*PriorityBasedStrategy) Compress ¶
func (s *PriorityBasedStrategy) Compress( ctx context.Context, messages []Message, config WindowManagerConfig, ) ([]Message, error)
Compress 实现 CompressionStrategy 接口
func (*PriorityBasedStrategy) Name ¶
func (s *PriorityBasedStrategy) Name() string
Name 实现 CompressionStrategy 接口
type PriorityCalculator ¶
type PriorityCalculator interface {
// CalculatePriority 计算消息的优先级和分数
CalculatePriority(ctx context.Context, msg Message, position int, totalMessages int) (MessagePriority, float64)
}
PriorityCalculator 优先级计算器接口
type SessionState ¶ added in v0.13.0
type SessionState struct {
SessionID string
MessageCount int
Duration time.Duration
CustomState map[string]any
}
SessionState Session 状态
type SessionStateProvider ¶ added in v0.13.0
type SessionStateProvider interface {
GetSessionState(ctx context.Context) (*SessionState, error)
}
SessionStateProvider Session 状态提供者接口
type SimpleLocationProvider ¶ added in v0.13.0
type SimpleLocationProvider struct {
// contains filtered or unexported fields
}
SimpleLocationProvider 简单的位置提供者(基于配置)
func NewSimpleLocationProvider ¶ added in v0.13.0
func NewSimpleLocationProvider(location *LocationInfo) *SimpleLocationProvider
NewSimpleLocationProvider 创建简单位置提供者
func (*SimpleLocationProvider) GetLocation ¶ added in v0.13.0
func (slp *SimpleLocationProvider) GetLocation(ctx context.Context) (*LocationInfo, error)
GetLocation 获取位置信息
type SimpleSessionStateProvider ¶ added in v0.13.0
type SimpleSessionStateProvider struct {
// contains filtered or unexported fields
}
SimpleSessionStateProvider 简单的 Session 状态提供者
func NewSimpleSessionStateProvider ¶ added in v0.13.0
func NewSimpleSessionStateProvider(state *SessionState) *SimpleSessionStateProvider
NewSimpleSessionStateProvider 创建简单 Session 状态提供者
func (*SimpleSessionStateProvider) GetSessionState ¶ added in v0.13.0
func (sssp *SimpleSessionStateProvider) GetSessionState(ctx context.Context) (*SessionState, error)
GetSessionState 获取 Session 状态
type SimpleTokenCounter ¶
type SimpleTokenCounter struct {
// contains filtered or unexported fields
}
SimpleTokenCounter 简单的基于字符的 Token 计数器 使用启发式规则估算 Token 数量,无需调用外部 API
func NewClaudeCounter ¶
func NewClaudeCounter() *SimpleTokenCounter
NewClaudeCounter 创建 Claude Token 计数器
func NewSimpleTokenCounter ¶
func NewSimpleTokenCounter(config ModelConfig) *SimpleTokenCounter
NewSimpleTokenCounter 创建一个简单的 Token 计数器
func (*SimpleTokenCounter) CountBatch ¶
CountBatch 实现 TokenCounter 接口
func (*SimpleTokenCounter) EstimateMessages ¶
EstimateMessages 实现 TokenCounter 接口
func (*SimpleTokenCounter) ModelName ¶
func (c *SimpleTokenCounter) ModelName() string
ModelName 实现 TokenCounter 接口
type SimpleUserInfoProvider ¶ added in v0.13.0
type SimpleUserInfoProvider struct {
// contains filtered or unexported fields
}
SimpleUserInfoProvider 简单的用户信息提供者
func NewSimpleUserInfoProvider ¶ added in v0.13.0
func NewSimpleUserInfoProvider(userInfo *UserInfo) *SimpleUserInfoProvider
NewSimpleUserInfoProvider 创建简单用户信息提供者
func (*SimpleUserInfoProvider) GetUserInfo ¶ added in v0.13.0
func (suip *SimpleUserInfoProvider) GetUserInfo(ctx context.Context) (*UserInfo, error)
GetUserInfo 获取用户信息
type SlidingWindowStrategy ¶
type SlidingWindowStrategy struct {
// contains filtered or unexported fields
}
SlidingWindowStrategy 滑动窗口策略 保留最近的 N 条消息,删除旧消息
func NewSlidingWindowStrategy ¶
func NewSlidingWindowStrategy(windowSize int) *SlidingWindowStrategy
NewSlidingWindowStrategy 创建滑动窗口策略
func (*SlidingWindowStrategy) Compress ¶
func (s *SlidingWindowStrategy) Compress( ctx context.Context, messages []Message, config WindowManagerConfig, ) ([]Message, error)
Compress 实现 CompressionStrategy 接口
func (*SlidingWindowStrategy) Name ¶
func (s *SlidingWindowStrategy) Name() string
Name 实现 CompressionStrategy 接口
type TikTokenCounter ¶
type TikTokenCounter struct {
}
TikTokenCounter 使用 tiktoken 库的精确计数器(可选) 注意: 这需要外部依赖,暂时作为接口定义
type TokenBasedStrategy ¶
type TokenBasedStrategy struct {
// contains filtered or unexported fields
}
TokenBasedStrategy 基于 Token 预算的压缩策略 从最旧的消息开始删除,直到满足 Token 预算
func NewTokenBasedStrategy ¶
func NewTokenBasedStrategy(tokenCounter TokenCounter, targetUsage float64) *TokenBasedStrategy
NewTokenBasedStrategy 创建基于 Token 的策略
func (*TokenBasedStrategy) Compress ¶
func (s *TokenBasedStrategy) Compress( ctx context.Context, messages []Message, config WindowManagerConfig, ) ([]Message, error)
Compress 实现 CompressionStrategy 接口
func (*TokenBasedStrategy) Name ¶
func (s *TokenBasedStrategy) Name() string
Name 实现 CompressionStrategy 接口
type TokenBudget ¶
type TokenBudget struct {
MaxTokens int // 最大 Token 数
ReservedTokens int // 预留 Token 数(用于输出)
WarningThreshold float64 // 警告阈值(0.0-1.0)
}
TokenBudget 表示 Token 预算配置
func (TokenBudget) AvailableTokens ¶
func (b TokenBudget) AvailableTokens() int
AvailableTokens 返回可用的 Token 数
func (TokenBudget) IsWithinBudget ¶
func (b TokenBudget) IsWithinBudget(usedTokens int) bool
IsWithinBudget 检查是否在预算内
func (TokenBudget) RemainingTokens ¶
func (b TokenBudget) RemainingTokens(usedTokens int) int
RemainingTokens 返回剩余可用 Token 数
func (TokenBudget) ShouldWarn ¶
func (b TokenBudget) ShouldWarn(usedTokens int) bool
ShouldWarn 检查是否应该发出警告
func (TokenBudget) UsagePercentage ¶
func (b TokenBudget) UsagePercentage(usedTokens int) float64
UsagePercentage 返回使用百分比
type TokenCounter ¶
type TokenCounter interface {
// Count 计算单个文本的 Token 数量
Count(ctx context.Context, text string) (int, error)
// CountBatch 批量计算多个文本的 Token 数量
CountBatch(ctx context.Context, texts []string) ([]int, error)
// EstimateMessages 估算消息列表的总 Token 数
EstimateMessages(ctx context.Context, messages []Message) (int, error)
// ModelName 返回此计数器对应的模型名称
ModelName() string
}
TokenCounter 提供 Token 计数功能 用于估算不同 LLM 模型的 Token 使用量
type TokenEstimate ¶
type TokenEstimate struct {
TotalTokens int // 总 Token 数
MessageTokens []int // 每条消息的 Token 数
Breakdown map[string]int // 详细分解(content, overhead, role 等)
}
TokenEstimate 包含详细的 Token 估算信息
type UserInfo ¶ added in v0.13.0
type UserInfo struct {
UserID string
Name string
PreferredLanguage string
Timezone string
Preferences map[string]any
}
UserInfo 用户信息
type UserInfoProvider ¶ added in v0.13.0
UserInfoProvider 用户信息提供者接口
type WindowManagerConfig ¶
type WindowManagerConfig struct {
// Token 预算
Budget TokenBudget
// 自动压缩配置
AutoCompress bool // 是否启用自动压缩
CompressionThreshold float64 // 触发压缩的使用率阈值 (0.0-1.0)
// 消息保留策略
MinMessagesToKeep int // 最少保留的消息数
AlwaysKeepSystem bool // 始终保留 system 消息
AlwaysKeepRecent int // 始终保留最近的 N 条消息
// 优先级配置
EnablePrioritization bool // 是否启用消息优先级
}
WindowManagerConfig 窗口管理器配置
func DefaultWindowManagerConfig ¶
func DefaultWindowManagerConfig() WindowManagerConfig
DefaultWindowManagerConfig 返回默认配置
type WindowStats ¶
type WindowStats struct {
CurrentMessages int // 当前消息数
TotalMessages int // 总共添加的消息数
CurrentTokens int // 当前 Token 使用量
RemainingTokens int // 剩余可用 Token
UsagePercentage float64 // 使用百分比
CompressionCount int // 压缩次数
IsWithinBudget bool // 是否在预算内
ShouldWarn bool // 是否应该警告
}
WindowStats 窗口统计信息