context

package
v0.35.0 Latest Latest
Warning

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

Go to latest
Published: Dec 29, 2025 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
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) Clear

func (m *ContextWindowManager) Clear()

Clear 清空所有消息

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) Reset

func (m *ContextWindowManager) Reset()

Reset 重置管理器(包括历史记录)

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 接口

func (*HybridStrategy) Name

func (s *HybridStrategy) Name() string

Name 实现 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 Message

type Message struct {
	Role    string // "system", "user", "assistant"
	Content string
}

Message 表示一条消息

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 NewGPT4Counter

func NewGPT4Counter() *SimpleTokenCounter

NewGPT4Counter 创建 GPT-4 Token 计数器

func NewSimpleTokenCounter

func NewSimpleTokenCounter(config ModelConfig) *SimpleTokenCounter

NewSimpleTokenCounter 创建一个简单的 Token 计数器

func (*SimpleTokenCounter) Count

func (c *SimpleTokenCounter) Count(ctx context.Context, text string) (int, error)

Count 实现 TokenCounter 接口

func (*SimpleTokenCounter) CountBatch

func (c *SimpleTokenCounter) CountBatch(ctx context.Context, texts []string) ([]int, error)

CountBatch 实现 TokenCounter 接口

func (*SimpleTokenCounter) EstimateMessages

func (c *SimpleTokenCounter) EstimateMessages(ctx context.Context, messages []Message) (int, error)

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 DefaultTokenBudget

func DefaultTokenBudget() TokenBudget

DefaultTokenBudget 返回默认的 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

type UserInfoProvider interface {
	GetUserInfo(ctx context.Context) (*UserInfo, error)
}

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 窗口统计信息

Jump to

Keyboard shortcuts

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