Documentation
¶
Index ¶
- Constants
- func DefaultAsyncTaskTraceName(taskType string) string
- func PrefixHistoryTimestamp(msg *schema.AgenticMessage) *schema.AgenticMessage
- type AnalyzeRequest
- type AsyncTaskContextBuilder
- type CleanupConfig
- type ConversationMessage
- type CursorMessageStorage
- type GormConversationStorage
- type HybridConfig
- type MemoryAnalysisResult
- 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.AgenticMessage, error)
- func (m *MemoryManager) GetMessagesAfterSummary(ctx context.Context, sessionID, userID string, limit int) ([]*schema.AgenticMessage, 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) ListRecentUserMemoryEvents(ctx context.Context, userID string, limit int) ([]*UserMemoryEvent, 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) ReindexConversation(ctx context.Context, sessionID, userID string) error
- func (m *MemoryManager) SaveMessage(ctx context.Context, message *ConversationMessage) error
- func (m *MemoryManager) SaveUserMemoryEvent(ctx context.Context, event *UserMemoryEvent) error
- func (m *MemoryManager) SearchMessages(ctx context.Context, q *builtinsearch.SearchQuery) ([]*builtinsearch.SearchHit, error)
- func (m *MemoryManager) SearchUserMemoryEvents(ctx context.Context, query *UserMemoryEventQuery) ([]*UserMemoryEvent, 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 SearchConfig
- type SearchMessageStorage
- 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
- func (u *UserMemoryAnalyzer) AnalyzeOnce(ctx context.Context, req AnalyzeRequest) (*MemoryAnalysisResult, error)
- func (u *UserMemoryAnalyzer) SetEventSearchPrompt(prompt string)
- func (u *UserMemoryAnalyzer) SetSystemPrompt(systemPrompt string)
- func (u *UserMemoryAnalyzer) SetUseEventSearchPrompt(enabled bool)
- type UserMemoryAnalyzerParam
- type UserMemoryEvent
- type UserMemoryEventQuery
- type UserMemoryEventStorage
Constants ¶
const ( DefaultUserMemoryPrompt = `` /* 7044-byte string literal not displayed */ // DefaultEventSearchMemoryPrompt 事件检索模式下使用的 analyzer prompt: // 1. 短文档(核心约定 + 基础信息)整体 update/noop; // 2. 任务里程碑 / 事件记录只输出本轮“新增”,不再每轮重写所有历史,避免上下文膨胀。 DefaultEventSearchMemoryPrompt = `` /* 8387-byte string literal not displayed */ DefaultSessionSummaryPrompt = `` /* 5293-byte string literal not displayed */ DefaultIncrementalSessionSummaryPrompt = `# 会话上下文摘要增量更新任务 ## 目标 你是系统底层的记忆摘要精炼模块。当前对话已经有了一份早期的「现有摘要」,你需要基于系统刚刚附加给你的**最新几轮对话内容**,对「现有摘要」进行**增量合并与更新**。 ## 下游用途 你输出的新摘要将会完全覆盖老摘要,作为未来用户新对话的**「历史背景上下文」动态注入。 ## 更新原则 1. **融合去重**: 将新消息中的关键进展无缝融合到旧摘要中。如果问题彻底解决,直接更新最终状态,大胆删减早期的"待解决"过程赘述和重复信息。 2. **消除过期信息**: 如果新对话推翻了旧摘要中的事实,请主动删减过期噪音。 3. **保持极致精简**: 融合后仍保持清晰的四大条目结构(核心诉求/主题、关键实体与事实、最终结论/当前状态、遗留待办)。在"关键实体与事实"中保留用户的核心身份信息和联系物流信息。 ## 输出约束 - 必须基于 ` + "`## 现有摘要`" + ` 作为基底进行修订。不能只写最新几轮发生的事,必须融合。 - **直接输出完整合并后的新版摘要文本**,绝不要致辞或输出 diff。 - 采用客观事实陈述,**禁止使用任何 Emoji 表情符号**,绝不要写成剧情流水账。 - 字数越少越好(最高不应超过 **300字**)。 ## 增量合并细则 1. 先理解现有摘要中的稳定事实,再判断最新对话是否改变事实、推进状态或新增待办。 2. 如果最新对话只是寒暄、普通知识问答、时间换算,通常只轻微更新当前状态,甚至保持原摘要核心不变。 3. 如果最新对话补充了关键实体、账号、客户、地址、报错、根因、完成状态,应合并到对应小节。 4. 如果最新对话推翻旧结论,必须删除或改写旧结论,不能同时保留冲突信息。 5. 如果任务从“待处理”变为“完成”,最终结论应直接写完成状态,遗留待办中删除已完成事项。 6. 如果新增待办仍未完成,写入遗留待办,并尽量保留截止时间、对象和动作。 7. 保持摘要像当前状态页,不像聊天记录;不要写“随后用户又问”“助手回答说”等叙事。 8. 不要把最近对话逐条追加到摘要末尾;必须压缩、合并、去重。 9. 不要输出 JSON、代码块、diff、解释文字;只输出新版摘要 Markdown。 ## 推荐输出骨架 保持以下结构,空小节可省略,但不要创造无关栏目: ### 核心诉求/主题 - ... ### 关键实体与事实 - ... ### 最终结论/当前状态 - ... ### 遗留待办 - ... ## 示例 ### 示例1:状态推进 现有摘要: ### 核心诉求/主题 - 排查支付回调超时。 ### 最终结论/当前状态 - 初步怀疑网关配置问题,仍待确认。 最新对话:用户确认根因是网关 idle timeout 太短,并已完成配置调整。 输出: ### 核心诉求/主题 - 排查支付回调超时。 ### 关键实体与事实 - 根因:网关 idle timeout 配置过短。 ### 最终结论/当前状态 - 已完成配置调整,问题处理完成。 ### 示例2:新增待办 现有摘要: ### 核心诉求/主题 - 跟进客户A退款。 ### 最终结论/当前状态 - 退款申请已提交,等待财务打款。 最新对话:用户说明明天下午三点要提醒他确认到账。 输出: ### 核心诉求/主题 - 跟进客户A退款。 ### 最终结论/当前状态 - 退款申请已提交,等待财务打款。 ### 遗留待办 - 明天下午三点提醒用户确认客户A退款是否到账。 ### 示例3:无实质更新 现有摘要: ### 核心诉求/主题 - 用户正在学习 Go 后端开发。 ### 关键实体与事实 - 职业:Golang 程序员。 最新对话:用户说下午好,助手回复问候。 输出: ### 核心诉求/主题 - 用户正在学习 Go 后端开发。 ### 关键实体与事实 - 职业:Golang 程序员。 ### 示例4:事实覆盖 现有摘要: ### 核心诉求/主题 - 跟进客户B合同。 ### 最终结论/当前状态 - 等待客户提供盖章版本。 ### 遗留待办 - 明天提醒用户催客户B。 最新对话:用户确认客户B已提供盖章版本,现在只需要发给法务归档。 输出: ### 核心诉求/主题 - 跟进客户B合同归档。 ### 关键实体与事实 - 客户B已提供合同盖章版本。 ### 最终结论/当前状态 - 盖章版本已收到,待发给法务归档。 ### 遗留待办 - 提醒用户将客户B合同盖章版本发给法务归档。 ### 示例5:排查信息合并 现有摘要: ### 核心诉求/主题 - 排查订单退款失败问题。 ### 最终结论/当前状态 - 尚未确认退款失败原因。 最新对话:用户确认订单 10086 退款失败原因是账户余额不足。 输出: ### 核心诉求/主题 - 排查订单 10086 退款失败问题。 ### 关键实体与事实 - 订单号:10086。 - 失败原因:账户余额不足。 ### 最终结论/当前状态 - 已确认退款失败原因,后续需补足余额后重试。` )
const ( MessageExtraIDKey = "aggo_message_id" MessageExtraSessionIDKey = "aggo_session_id" MessageExtraUserIDKey = "aggo_user_id" MessageExtraRoleKey = "aggo_role" MessageExtraCreatedAtKey = "aggo_created_at" )
const ( // UserMemoryEventTypeMilestone 任务里程碑 UserMemoryEventTypeMilestone = memoryevent.TypeMilestone // UserMemoryEventTypeEvent 事件记录 UserMemoryEventTypeEvent = memoryevent.TypeEvent )
用户记忆事件类型(兼容别名,新代码请直接用 memoryevent.TypeMilestone/TypeEvent)
const ( // UserMemoryOpUpdate 更新记忆 UserMemoryOpUpdate = "update" // UserMemoryOpNoop 无需更新 UserMemoryOpNoop = "noop" )
用户记忆操作类型
Variables ¶
This section is empty.
Functions ¶
func DefaultAsyncTaskTraceName ¶ added in v0.2.4
func PrefixHistoryTimestamp ¶ added in v0.2.6
func PrefixHistoryTimestamp(msg *schema.AgenticMessage) *schema.AgenticMessage
Types ¶
type AnalyzeRequest ¶ added in v0.3.0
type AnalyzeRequest struct {
ExistingMemory *UserMemory
HistoryMessages []*ConversationMessage
// RecentEvents 已落库的近期事件,作为 LLM 去重参考。仅在事件检索模式下使用。
RecentEvents []*UserMemoryEvent
// UseEventSearch 启用后使用事件检索模式 prompt 并解析事件增量。
// 留空时回退到 analyzer 的 useEventSearchPrompt 配置。
UseEventSearch *bool
}
AnalyzeRequest 是 AnalyzeOnce 的输入。事件检索模式下还会附带 RecentEvents 作为去重参考。
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) ToAgenticMessage ¶ added in v0.3.0
func (m *ConversationMessage) ToAgenticMessage() *schema.AgenticMessage
ToAgenticMessage 将 ConversationMessage 转换为 schema.AgenticMessage 统一转换逻辑,避免在多处重复实现
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 GormConversationStorage ¶ added in v0.2.6
type GormConversationStorage interface {
ConversationDB() *gorm.DB
ConversationMessageTableName() string
}
GormConversationStorage exposes the underlying gorm DB and message table so builtin search can construct the default vector store without depending on concrete storage implementations.
type HybridConfig ¶ added in v0.2.6
type HybridConfig = builtinsearch.HybridConfig
type MemoryAnalysisResult ¶ added in v0.3.0
type MemoryAnalysisResult struct {
NeedUpdate bool
Memory string
Events []*UserMemoryEvent
}
MemoryAnalysisResult 是 analyzer 单次分析输出。 在事件检索模式下,Memory 是常驻短文档;Events 是本轮新增事件。 在兼容模式下,仅 Memory 有值,Events 为空。
type MemoryConfig ¶
type MemoryConfig struct {
// 是否启用用户记忆
EnableUserMemories bool `json:"enableUserMemories"`
// 是否启用会话摘要
EnableSessionSummary bool `json:"enableSessionSummary"`
// 是否启用“事件检索”模式:
// true - 用户记忆拆为“常驻短文档(核心约定+基础信息)”和“事件检索表”,
// Retrieve 仅注入短文档 + 最近 RecentEventLimit 条事件;
// 更早的事件需通过 search_user_memory 工具按关键词/时间检索。
// false - 兼容旧行为,整篇 UserMemory.Memory 全量注入模型上下文。
// 仅当 EnableUserMemories=true 时生效。
EnableEventSearch bool `json:"enableEventSearch"`
// 常驻注入的最近事件条数,默认 20,仅在 EnableEventSearch=true 时生效。
// 设为 0 表示不注入任何事件,全部交给检索工具。
RecentEventLimit int `json:"recentEventLimit,omitempty"`
// 用户记忆检索方式 EnableUserMemories开启采生效
Retrieval MemoryRetrieval `json:"retrieval"`
// 记忆数量限制
MemoryLimit int `json:"memoryLimit"`
// 启用会话摘要时,除摘要游标之后的消息外,额外保留最近N条原始消息作为短期上下文。
// 默认为0,表示保持仅注入摘要游标之后消息的旧行为。
SummaryRecentMessageLimit int `json:"summaryRecentMessageLimit,omitempty"`
// 异步处理的goroutine池大小
AsyncWorkerPoolSize int `json:"asyncWorkerPoolSize"`
// 记忆任务聚合窗口(秒),同一用户+会话在该窗口内的多次请求只执行一次记忆分析
// 默认30秒,设为0则每次回复后立即执行(向后兼容)
DebounceWindowSeconds *int `json:"debounceWindowSeconds,omitempty"`
// 异步任务执行超时时间(秒),用于用户记忆分析、会话摘要和索引任务。
// 默认120秒;设为0或负数时使用默认值。
AsyncTaskTimeoutSeconds int `json:"asyncTaskTimeoutSeconds,omitempty"`
// 摘要触发配置
SummaryTrigger SummaryTriggerConfig `json:"summaryTrigger"`
// 会话摘要缓存配置
SummaryCache SummaryCacheConfig `json:"summaryCache"`
// 清理配置
Cleanup CleanupConfig `json:"cleanup"`
// 搜索配置。nil 时按 keyword 默认行为初始化。
Search *SearchConfig `json:"search,omitempty"`
}
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.AgenticModel, 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.AgenticMessage, error)
GetMessages 获取会话消息
func (*MemoryManager) GetMessagesAfterSummary ¶ added in v0.2.3
func (m *MemoryManager) GetMessagesAfterSummary(ctx context.Context, sessionID, userID string, limit int) ([]*schema.AgenticMessage, 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) ListRecentUserMemoryEvents ¶ added in v0.3.0
func (m *MemoryManager) ListRecentUserMemoryEvents(ctx context.Context, userID string, limit int) ([]*UserMemoryEvent, error)
ListRecentUserMemoryEvents 返回用户最近的事件
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) ReindexConversation ¶ added in v0.2.6
func (m *MemoryManager) ReindexConversation(ctx context.Context, sessionID, userID string) error
func (*MemoryManager) SaveMessage ¶
func (m *MemoryManager) SaveMessage(ctx context.Context, message *ConversationMessage) error
SaveMessage 保存消息
func (*MemoryManager) SaveUserMemoryEvent ¶ added in v0.3.0
func (m *MemoryManager) SaveUserMemoryEvent(ctx context.Context, event *UserMemoryEvent) error
SaveUserMemoryEvent 保存一条用户记忆事件。底层 storage 未实现事件接口时返回错误。
func (*MemoryManager) SearchMessages ¶ added in v0.2.6
func (m *MemoryManager) SearchMessages(ctx context.Context, q *builtinsearch.SearchQuery) ([]*builtinsearch.SearchHit, error)
func (*MemoryManager) SearchUserMemoryEvents ¶ added in v0.3.0
func (m *MemoryManager) SearchUserMemoryEvents(ctx context.Context, query *UserMemoryEventQuery) ([]*UserMemoryEvent, error)
SearchUserMemoryEvents 按条件检索用户事件
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.AgenticModel
Storage MemoryStorage
MemoryConfig *MemoryConfig
AsyncTaskContextBuilder AsyncTaskContextBuilder
}
ProviderConfig is the config for the builtin memory provider.
type SearchConfig ¶ added in v0.2.6
type SearchConfig struct {
Mode builtinsearch.SearchMode
Embedder embedding.Embedder
VectorStore builtinsearch.VectorStore
Hybrid HybridConfig
AsyncIndex bool
}
type SearchMessageStorage ¶ added in v0.2.6
type SearchMessageStorage interface {
SearchMessagesByKeywords(ctx context.Context, q *builtinsearch.SearchQuery) ([]*ConversationMessage, error)
}
SearchMessageStorage is an optional extension for stores that can perform keyword search efficiently in the storage layer.
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.AgenticModel) *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格式存储“常驻短文档”(核心约定 + 基础信息)。 累积型条目(任务里程碑、事件记录)请改用 UserMemoryEvent,避免短文档无限膨胀。
type UserMemoryAnalyzer ¶
type UserMemoryAnalyzer struct {
// contains filtered or unexported fields
}
UserMemoryAnalyzer 分析对话并更新用户记忆
func NewUserMemoryAnalyzer ¶
func NewUserMemoryAnalyzer(cm model.AgenticModel) *UserMemoryAnalyzer
NewUserMemoryAnalyzer 创建新的用户记忆分析器(兼容模式:整篇 markdown)
func (*UserMemoryAnalyzer) AnalyzeOnce ¶ added in v0.3.0
func (u *UserMemoryAnalyzer) AnalyzeOnce(ctx context.Context, req AnalyzeRequest) (*MemoryAnalysisResult, error)
AnalyzeOnce 是新的统一入口,根据模式选择 prompt 并解析结构化输出。
func (*UserMemoryAnalyzer) SetEventSearchPrompt ¶ added in v0.3.0
func (u *UserMemoryAnalyzer) SetEventSearchPrompt(prompt string)
SetEventSearchPrompt 自定义事件检索模式下使用的 prompt
func (*UserMemoryAnalyzer) SetSystemPrompt ¶
func (u *UserMemoryAnalyzer) SetSystemPrompt(systemPrompt string)
func (*UserMemoryAnalyzer) SetUseEventSearchPrompt ¶ added in v0.3.0
func (u *UserMemoryAnalyzer) SetUseEventSearchPrompt(enabled bool)
SetUseEventSearchPrompt 切换是否使用事件检索模式 prompt
type UserMemoryAnalyzerParam ¶
type UserMemoryAnalyzerParam struct {
// 操作类型: update(更新记忆)、noop(无需更新)
Op string `json:"op"`
// 记忆内容(完整Markdown文档,op为update时有效)
Memory string `json:"memory"`
}
UserMemoryAnalyzerParam 用户记忆更新参数
type UserMemoryEvent ¶ added in v0.3.0
type UserMemoryEvent = memoryevent.Event
UserMemoryEvent 是 memoryevent.Event 的别名,便于其他 provider 复用同一份 中性类型实现 memory.UserMemoryEventSearcher 接口。
type UserMemoryEventQuery ¶ added in v0.3.0
type UserMemoryEventQuery = memoryevent.Query
UserMemoryEventQuery 是 memoryevent.Query 的别名。
type UserMemoryEventStorage ¶ added in v0.3.0
type UserMemoryEventStorage interface {
// SaveUserMemoryEvent 新增一条用户记忆事件。事件 ID 未填写时由实现侧生成(建议 ULID 单调递增)。
SaveUserMemoryEvent(ctx context.Context, event *UserMemoryEvent) error
// ListRecentUserMemoryEvents 返回该用户最近的 N 条事件,按 EventDate 倒序、同日按 CreatedAt 倒序。
// limit <= 0 时由实现侧选取一个安全的默认值(建议返回空切片以避免误注入大量数据)。
ListRecentUserMemoryEvents(ctx context.Context, userID string, limit int) ([]*UserMemoryEvent, error)
// SearchUserMemoryEvents 按 UserMemoryEventQuery 过滤事件,返回按 EventDate 倒序的命中列表。
SearchUserMemoryEvents(ctx context.Context, query *UserMemoryEventQuery) ([]*UserMemoryEvent, error)
// DeleteUserMemoryEvent 删除指定事件。eventID 为空时返回错误。
DeleteUserMemoryEvent(ctx context.Context, userID, eventID string) error
// ClearUserMemoryEvents 清空用户的所有事件。迁移脚本和单元测试需要。
ClearUserMemoryEvents(ctx context.Context, userID string) error
}
UserMemoryEventStorage 是可选扩展接口,提供按用户拆分的事件级记忆存储与检索。 启用 MemoryConfig.EnableEventSearch 时,底层 MemoryStorage 必须实现该接口; 不实现时 Provider 会退化为兼容模式(全量注入 UserMemory.Memory)。