Documentation
¶
Index ¶
- Constants
- func DefaultAsyncTaskTraceName(taskType string) string
- type AsyncTaskContextBuilder
- type CleanupConfig
- type ConversationMessage
- type CursorMessageStorage
- type MemoryConfig
- type MemoryManager
- func (m *MemoryManager) ClearUserMemory(ctx context.Context, userID string) error
- func (m *MemoryManager) Close() error
- func (m *MemoryManager) ForceCleanupNow(ctx context.Context) error
- func (m *MemoryManager) GetConfig() *MemoryConfig
- func (m *MemoryManager) GetMemoryStats() map[string]interface{}
- func (m *MemoryManager) GetMessages(ctx context.Context, sessionID, userID string, limit int) ([]*schema.Message, error)
- func (m *MemoryManager) GetMessagesAfterSummary(ctx context.Context, sessionID, userID string, limit int) ([]*schema.Message, error)
- func (m *MemoryManager) GetSessionSummary(ctx context.Context, sessionID, userID string) (*SessionSummary, error)
- func (m *MemoryManager) GetTaskQueueStats() TaskQueueStats
- func (m *MemoryManager) GetUserMemory(ctx context.Context, userID string) (*UserMemory, error)
- func (m *MemoryManager) ProcessAssistantMessage(ctx context.Context, userID, sessionID, assistantMessage string) error
- func (m *MemoryManager) ProcessUserMessage(ctx context.Context, userID, sessionID, content string, ...) error
- func (m *MemoryManager) SaveMessage(ctx context.Context, message *ConversationMessage) error
- func (m *MemoryManager) SetAsyncTaskContextBuilder(builder AsyncTaskContextBuilder)
- func (m *MemoryManager) UpdateConfig(config *MemoryConfig)
- func (m *MemoryManager) UpsertUserMemory(ctx context.Context, memory *UserMemory) error
- type MemoryRetrieval
- type MemoryStorage
- type ProviderConfig
- type SessionState
- type SessionSummary
- type SessionSummaryGenerator
- func (s *SessionSummaryGenerator) GenerateIncrementalSummary(ctx context.Context, recentMessages []*ConversationMessage, ...) (string, error)
- func (s *SessionSummaryGenerator) GenerateSummary(ctx context.Context, messages []*ConversationMessage, existingSummary string) (string, error)
- func (s *SessionSummaryGenerator) SetIncrementalPrompt(prompt string)
- func (s *SessionSummaryGenerator) SetSummaryPrompt(prompt string)
- type SummaryCacheConfig
- type SummaryTriggerConfig
- type SummaryTriggerManager
- func (stm *SummaryTriggerManager) CleanupOldSessions(maxAge time.Duration)
- func (stm *SummaryTriggerManager) EnsureSessionState(sessionKey string, currentMessageCount int, lastSummaryTime time.Time)
- func (stm *SummaryTriggerManager) GetSessionCount() int
- func (stm *SummaryTriggerManager) GetSessionState(sessionKey string) *SessionState
- func (stm *SummaryTriggerManager) MarkSummaryUpdated(sessionKey string)
- func (stm *SummaryTriggerManager) ShouldTriggerSummary(sessionKey string, currentMessageCount int) bool
- type SummaryTriggerStrategy
- type TaskQueueStats
- type UserMemory
- type UserMemoryAnalyzer
- type UserMemoryAnalyzerParam
Constants ¶
const ( DefaultUserMemoryPrompt = `` /* 4710-byte string literal not displayed */ DefaultSessionSummaryPrompt = `` /* 1639-byte string literal not displayed */ DefaultIncrementalSessionSummaryPrompt = `# 会话上下文摘要增量更新任务 ## 目标 你是系统底层的记忆摘要精炼模块。当前对话已经有了一份早期的「现有摘要」,你需要基于系统刚刚附加给你的**最新几轮对话内容**,对「现有摘要」进行**增量合并与更新**。 当前时间:{{current_time}} ## 下游用途 你输出的新摘要将会完全覆盖老摘要,作为未来用户新对话的**「历史背景上下文」(System Message)**。 ## 更新原则 1. **融合去重**: 将新消息中的关键进展无缝融合到旧摘要中。如果问题彻底解决,直接更新最终状态,大胆删减早期的"待解决"过程赘述和重复信息。 2. **消除过期信息**: 如果新对话推翻了旧摘要中的事实,请主动删减过期噪音。 3. **保持极致精简**: 融合后仍保持清晰的四大条目结构(核心诉求/主题、关键实体与事实、最终结论/当前状态、遗留待办)。在"关键实体与事实"中保留用户的核心身份信息和联系物流信息。 ## 输出约束 - 必须基于 ` + "`## 现有摘要`" + ` 作为基底进行修订。不能只写最新几轮发生的事,必须融合。 - **直接输出完整合并后的新版摘要文本**,绝不要致辞或输出 diff。 - 采用客观事实陈述,**禁止使用任何 Emoji 表情符号**,绝不要写成剧情流水账。 - 字数越少越好(最高不应超过 **300字**)。` )
const ( // UserMemoryOpUpdate 更新记忆 UserMemoryOpUpdate = "update" // UserMemoryOpNoop 无需更新 UserMemoryOpNoop = "noop" )
用户记忆操作类型
Variables ¶
This section is empty.
Functions ¶
func DefaultAsyncTaskTraceName ¶ added in v0.2.4
Types ¶
type AsyncTaskContextBuilder ¶ added in v0.2.4
type CleanupConfig ¶
type CleanupConfig struct {
// 会话状态清理间隔(小时),默认24小时
SessionCleanupInterval int `json:"sessionCleanupInterval"`
// 会话状态保留时间(小时),默认168小时(7天)
SessionRetentionTime int `json:"sessionRetentionTime"`
// 消息历史保留数量限制,默认1000条
MessageHistoryLimit int `json:"messageHistoryLimit"`
// 定期清理间隔(小时),默认12小时
CleanupInterval int `json:"cleanupInterval"`
}
CleanupConfig 清理相关配置
type ConversationMessage ¶
type ConversationMessage struct {
// 消息ID
ID string `json:"id"`
// 会话ID
SessionID string `json:"sessionId"`
// 用户ID
UserID string `json:"userId"`
// 角色 (user/assistant/system)
Role string `json:"role"`
// 消息内容(简单文本消息)
Content string `json:"content,omitempty"`
// 多部分内容,支持文本、图片、音频、视频、文件等
Parts []schema.MessageInputPart `json:"parts,omitempty"`
// 创建时间
CreatedAt time.Time `json:"createdAt"`
}
ConversationMessage 对话消息结构 存储完整的对话历史
func (*ConversationMessage) ToSchemaMessage ¶
func (m *ConversationMessage) ToSchemaMessage() *schema.Message
ToSchemaMessage 将 ConversationMessage 转换为 schema.Message 统一转换逻辑,避免在多处重复实现
type CursorMessageStorage ¶ added in v0.2.3
type CursorMessageStorage interface {
// GetMessagesAfter 获取游标之后的会话消息。
// afterMessageID/afterTime 同时存在时,先按时间筛,再按消息ID打破同时间戳顺序。
// 仅 afterTime 存在时,返回 created_at 晚于 afterTime 的消息。
// 仅 afterMessageID 存在时,返回 ID 晚于 afterMessageID 的消息。
// 两者都为空时,等价于 GetMessages(..., limit)。
GetMessagesAfter(ctx context.Context, sessionID string, userID string, afterMessageID string, afterTime time.Time, limit int) ([]*ConversationMessage, error)
// GetMessageCountAfter 获取游标之后的会话消息数量(避免加载完整消息列表)。
// 语义与 GetMessagesAfter 相同,但只返回数量。
GetMessageCountAfter(ctx context.Context, sessionID string, userID string, afterMessageID string, afterTime time.Time) (int, error)
}
CursorMessageStorage is an optional extension for stores that can query messages directly by a persisted summary cursor without loading the full session history.
type MemoryConfig ¶
type MemoryConfig struct {
// 是否启用用户记忆
EnableUserMemories bool `json:"enableUserMemories"`
// 是否启用会话摘要
EnableSessionSummary bool `json:"enableSessionSummary"`
// 用户记忆检索方式 EnableUserMemories开启采生效
Retrieval MemoryRetrieval `json:"retrieval"`
// 记忆数量限制
MemoryLimit int `json:"memoryLimit"`
// 异步处理的goroutine池大小
AsyncWorkerPoolSize int `json:"asyncWorkerPoolSize"`
// 记忆任务聚合窗口(秒),同一用户+会话在该窗口内的多次请求只执行一次记忆分析
// 默认30秒,设为0则每次回复后立即执行(向后兼容)
DebounceWindowSeconds *int `json:"debounceWindowSeconds,omitempty"`
// 摘要触发配置
SummaryTrigger SummaryTriggerConfig `json:"summaryTrigger"`
// 会话摘要缓存配置
SummaryCache SummaryCacheConfig `json:"summaryCache"`
// 清理配置
Cleanup CleanupConfig `json:"cleanup"`
}
MemoryConfig 记忆配置
type MemoryManager ¶
type MemoryManager struct {
// 外部注入的清理函数
CleanupOldMessagesFunc func(ctx context.Context) error // 按时间清理旧消息
CleanupMessagesByLimitFunc func(ctx context.Context) error // 按数量限制清理消息
// contains filtered or unexported fields
}
MemoryManager 记忆管理器 负责管理用户记忆、会话摘要和对话历史
func NewMemoryManager ¶
func NewMemoryManager(cm model.ToolCallingChatModel, memoryStorage MemoryStorage, config *MemoryConfig) (*MemoryManager, error)
NewMemoryManager 创建新的记忆管理器
func (*MemoryManager) ClearUserMemory ¶
func (m *MemoryManager) ClearUserMemory(ctx context.Context, userID string) error
ClearUserMemory 清空用户记忆
func (*MemoryManager) ForceCleanupNow ¶
func (m *MemoryManager) ForceCleanupNow(ctx context.Context) error
ForceCleanupNow 强制立即执行清理
func (*MemoryManager) GetMemoryStats ¶
func (m *MemoryManager) GetMemoryStats() map[string]interface{}
GetMemoryStats 获取内存管理器统计信息
func (*MemoryManager) GetMessages ¶
func (m *MemoryManager) GetMessages(ctx context.Context, sessionID, userID string, limit int) ([]*schema.Message, error)
GetMessages 获取会话消息
func (*MemoryManager) GetMessagesAfterSummary ¶ added in v0.2.3
func (m *MemoryManager) GetMessagesAfterSummary(ctx context.Context, sessionID, userID string, limit int) ([]*schema.Message, error)
GetMessagesAfterSummary returns only the messages that have not yet been folded into the persisted session summary. For legacy summaries without a cursor, it falls back to messages created after the summary update time.
func (*MemoryManager) GetSessionSummary ¶
func (m *MemoryManager) GetSessionSummary(ctx context.Context, sessionID, userID string) (*SessionSummary, error)
GetSessionSummary 获取会话摘要
func (*MemoryManager) GetTaskQueueStats ¶
func (m *MemoryManager) GetTaskQueueStats() TaskQueueStats
GetTaskQueueStats 获取异步任务队列统计
func (*MemoryManager) GetUserMemory ¶
func (m *MemoryManager) GetUserMemory(ctx context.Context, userID string) (*UserMemory, error)
GetUserMemory 获取用户记忆
func (*MemoryManager) ProcessAssistantMessage ¶
func (m *MemoryManager) ProcessAssistantMessage(ctx context.Context, userID, sessionID, assistantMessage string) error
ProcessAssistantMessage 处理助手回复消息
func (*MemoryManager) ProcessUserMessage ¶
func (m *MemoryManager) ProcessUserMessage(ctx context.Context, userID, sessionID, content string, parts []schema.MessageInputPart) error
ProcessUserMessage 处理包含多部分内容的用户消息 根据配置决定是否创建用户记忆、更新会话摘要等
func (*MemoryManager) SaveMessage ¶
func (m *MemoryManager) SaveMessage(ctx context.Context, message *ConversationMessage) error
SaveMessage 保存消息
func (*MemoryManager) SetAsyncTaskContextBuilder ¶ added in v0.2.4
func (m *MemoryManager) SetAsyncTaskContextBuilder(builder AsyncTaskContextBuilder)
func (*MemoryManager) UpdateConfig ¶
func (m *MemoryManager) UpdateConfig(config *MemoryConfig)
UpdateConfig 更新配置
func (*MemoryManager) UpsertUserMemory ¶
func (m *MemoryManager) UpsertUserMemory(ctx context.Context, memory *UserMemory) error
UpsertUserMemory 创建或更新用户记忆
type MemoryRetrieval ¶
type MemoryRetrieval string
MemoryRetrieval 记忆检索方式
const ( // RetrievalLastN 检索最近的N条记忆 RetrievalLastN MemoryRetrieval = "last_n" // RetrievalFirstN 检索最早的N条记忆 RetrievalFirstN MemoryRetrieval = "first_n" // RetrievalSemantic 语义检索(基于相似性) RetrievalSemantic MemoryRetrieval = "semantic" )
type MemoryStorage ¶
type MemoryStorage interface {
AutoMigrate() error
// UpsertUserMemory 创建或更新用户记忆(每个用户一条记录)
UpsertUserMemory(ctx context.Context, memory *UserMemory) error
// GetUserMemory 获取用户的记忆
GetUserMemory(ctx context.Context, userID string) (*UserMemory, error)
// ClearUserMemory 清空用户记忆
ClearUserMemory(ctx context.Context, userID string) error
// SaveSessionSummary 保存会话摘要
SaveSessionSummary(ctx context.Context, summary *SessionSummary) error
// GetSessionSummary 获取会话摘要
GetSessionSummary(ctx context.Context, sessionID string, userID string) (*SessionSummary, error)
// UpdateSessionSummary 更新会话摘要
UpdateSessionSummary(ctx context.Context, summary *SessionSummary) error
// DeleteSessionSummary 删除会话摘要
DeleteSessionSummary(ctx context.Context, sessionID string, userID string) error
// SaveMessage 保存对话消息
SaveMessage(ctx context.Context, message *ConversationMessage) error
// GetMessages 获取会话的消息历史
// sessionID: 会话ID
// userID: 用户ID
// limit: 限制返回数量,0表示不限制
GetMessages(ctx context.Context, sessionID string, userID string, limit int) ([]*ConversationMessage, error)
// DeleteMessages 删除会话的消息历史
DeleteMessages(ctx context.Context, sessionID string, userID string) error
// Close 关闭存储连接
Close() error
// CleanupOldMessages 清理指定时间之前的消息
CleanupOldMessages(ctx context.Context, userID string, before time.Time) error
// CleanupMessagesByLimit 按数量限制清理消息,保留最新的N条
CleanupMessagesByLimit(ctx context.Context, userID, sessionID string, keepLimit int) error
// GetMessageCount 获取消息总数
GetMessageCount(ctx context.Context, userID, sessionID string) (int, error)
}
MemoryStorage 记忆存储接口 定义了记忆存储的基本操作,可以有多种实现(内存、SQL、NoSQL等)
type ProviderConfig ¶
type ProviderConfig struct {
ChatModel model.ToolCallingChatModel
Storage MemoryStorage
MemoryConfig *MemoryConfig
AsyncTaskContextBuilder AsyncTaskContextBuilder
}
ProviderConfig is the config for the builtin memory provider.
type SessionState ¶
type SessionState struct {
// 上次摘要更新时间
LastSummaryTime time.Time
// 上次摘要后新增的消息数量
MessagesSinceLastSummary int
// 会话的总消息数量
TotalMessages int
}
SessionState 会话状态
type SessionSummary ¶
type SessionSummary struct {
// 会话ID
SessionID string `json:"sessionId"`
// 用户ID
UserID string `json:"userId"`
// 摘要内容
Summary string `json:"summary"`
// 上次已纳入摘要的最后一条消息ID
LastSummarizedMessageID string `json:"lastSummarizedMessageId,omitempty"`
// 上次已纳入摘要的最后一条消息时间
LastSummarizedMessageAt time.Time `json:"lastSummarizedMessageAt,omitempty"`
// 创建时间
CreatedAt time.Time `json:"createdAt"`
// 最后更新时间
UpdatedAt time.Time `json:"updatedAt"`
}
SessionSummary 会话摘要结构 存储对话会话的智能摘要
type SessionSummaryGenerator ¶
type SessionSummaryGenerator struct {
// contains filtered or unexported fields
}
SessionSummaryGenerator 基于AI的会话摘要生成器
func NewSessionSummaryGenerator ¶
func NewSessionSummaryGenerator(cm model.ToolCallingChatModel) *SessionSummaryGenerator
NewSessionSummaryGenerator 创建新的会话摘要生成器
func (*SessionSummaryGenerator) GenerateIncrementalSummary ¶
func (s *SessionSummaryGenerator) GenerateIncrementalSummary(ctx context.Context, recentMessages []*ConversationMessage, existingSummary string) (string, error)
GenerateIncrementalSummary 生成增量摘要(基于最新消息更新现有摘要)
func (*SessionSummaryGenerator) GenerateSummary ¶
func (s *SessionSummaryGenerator) GenerateSummary(ctx context.Context, messages []*ConversationMessage, existingSummary string) (string, error)
GenerateSummary 生成会话摘要
func (*SessionSummaryGenerator) SetIncrementalPrompt ¶
func (s *SessionSummaryGenerator) SetIncrementalPrompt(prompt string)
SetIncrementalPrompt 自定义增量摘要系统提示词
func (*SessionSummaryGenerator) SetSummaryPrompt ¶
func (s *SessionSummaryGenerator) SetSummaryPrompt(prompt string)
SetSummaryPrompt 自定义完整摘要系统提示词
type SummaryCacheConfig ¶ added in v0.2.3
type SummaryCacheConfig struct {
// TTLSeconds 表示单条摘要缓存 TTL,单位秒
TTLSeconds int `json:"ttlSeconds"`
// MaxEntries 表示缓存最多保留多少条会话摘要
MaxEntries int `json:"maxEntries"`
}
SummaryCacheConfig 会话摘要缓存配置
type SummaryTriggerConfig ¶
type SummaryTriggerConfig struct {
// 触发策略类型
Strategy SummaryTriggerStrategy `json:"strategy"`
// 基于消息数量触发的阈值
MessageThreshold int `json:"messageThreshold"`
// 最小触发间隔(秒)
MinInterval int `json:"minInterval"`
}
SummaryTriggerConfig 摘要触发配置
type SummaryTriggerManager ¶
type SummaryTriggerManager struct {
// contains filtered or unexported fields
}
SummaryTriggerManager 摘要触发管理器
func NewSummaryTriggerManager ¶
func NewSummaryTriggerManager(config SummaryTriggerConfig) *SummaryTriggerManager
NewSummaryTriggerManager 创建新的摘要触发管理器
func (*SummaryTriggerManager) CleanupOldSessions ¶
func (stm *SummaryTriggerManager) CleanupOldSessions(maxAge time.Duration)
CleanupOldSessions 清理旧会话状态(建议定期调用)
func (*SummaryTriggerManager) EnsureSessionState ¶ added in v0.2.3
func (stm *SummaryTriggerManager) EnsureSessionState(sessionKey string, currentMessageCount int, lastSummaryTime time.Time)
EnsureSessionState initializes in-memory trigger state for a session once. This is used to restore coarse trigger bookkeeping for sessions that already have a persisted summary when the process restarts.
func (*SummaryTriggerManager) GetSessionCount ¶
func (stm *SummaryTriggerManager) GetSessionCount() int
GetSessionCount 获取当前活跃会话数量(并发安全)
func (*SummaryTriggerManager) GetSessionState ¶
func (stm *SummaryTriggerManager) GetSessionState(sessionKey string) *SessionState
GetSessionState 获取会话状态(用于调试)
func (*SummaryTriggerManager) MarkSummaryUpdated ¶
func (stm *SummaryTriggerManager) MarkSummaryUpdated(sessionKey string)
MarkSummaryUpdated 标记摘要已更新
func (*SummaryTriggerManager) ShouldTriggerSummary ¶
func (stm *SummaryTriggerManager) ShouldTriggerSummary(sessionKey string, currentMessageCount int) bool
ShouldTriggerSummary 判断是否应该触发摘要更新
type SummaryTriggerStrategy ¶
type SummaryTriggerStrategy string
SummaryTriggerStrategy 摘要触发策略
const ( // TriggerAlways 每次都触发(原有行为) TriggerAlways SummaryTriggerStrategy = "always" // TriggerByMessages 基于消息数量触发 TriggerByMessages SummaryTriggerStrategy = "by_messages" // TriggerByTime 基于时间间隔触发 TriggerByTime SummaryTriggerStrategy = "by_time" // TriggerSmart 智能触发(综合考虑多种因素) TriggerSmart SummaryTriggerStrategy = "smart" )
type TaskQueueStats ¶
type TaskQueueStats struct {
// 队列大小
QueueSize int `json:"queueSize"`
// 队列容量
QueueCapacity int `json:"queueCapacity"`
// 已处理任务数
ProcessedTasks int64 `json:"processedTasks"`
// 丢弃任务数
DroppedTasks int64 `json:"droppedTasks"`
// 当前工作goroutine数
ActiveWorkers int `json:"activeWorkers"`
// 队列使用率
QueueUtilization float64 `json:"queueUtilization"`
}
TaskQueueStats 异步任务队列统计
type UserMemory ¶
type UserMemory struct {
// 用户ID(主键)
UserID string `json:"userId"`
// 记忆内容(Markdown格式)
Memory string `json:"memory"`
// 创建时间
CreatedAt time.Time `json:"createdAt"`
// 最后更新时间
UpdatedAt time.Time `json:"updatedAt"`
}
UserMemory 用户记忆结构 每个用户一条记录,使用Markdown格式存储所有记忆内容
type UserMemoryAnalyzer ¶
type UserMemoryAnalyzer struct {
// contains filtered or unexported fields
}
UserMemoryAnalyzer 分析对话并更新用户记忆
func NewUserMemoryAnalyzer ¶
func NewUserMemoryAnalyzer(cm model.ToolCallingChatModel) *UserMemoryAnalyzer
NewUserMemoryAnalyzer 创建新的用户记忆分析器
func (*UserMemoryAnalyzer) SetSystemPrompt ¶
func (u *UserMemoryAnalyzer) SetSystemPrompt(systemPrompt string)
func (*UserMemoryAnalyzer) ShouldUpdateMemory ¶
func (u *UserMemoryAnalyzer) ShouldUpdateMemory(ctx context.Context, existingMemory *UserMemory, historyMessages []*ConversationMessage) (bool, string, error)
ShouldUpdateMemory 分析对话并生成更新后的记忆内容 返回值: (是否需要更新, 更新后的记忆内容, 错误)
type UserMemoryAnalyzerParam ¶
type UserMemoryAnalyzerParam struct {
// 操作类型: update(更新记忆)、noop(无需更新)
Op string `json:"op"`
// 记忆内容(完整Markdown文档,op为update时有效)
Memory string `json:"memory"`
}
UserMemoryAnalyzerParam 用户记忆更新参数