memory

package
v0.0.14 Latest Latest
Warning

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

Go to latest
Published: Jan 6, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultUserMemoryPrompt = `` /* 2181-byte string literal not displayed */

	DefaultSessionSummaryPrompt = `` /* 1306-byte string literal not displayed */

	DefaultIncrementalSessionSummaryPrompt = `` /* 708-byte string literal not displayed */

)
View Source
const (
	//UserMemoryAnalyzerOpCreate 创建
	UserMemoryAnalyzerOpCreate = "create"
	//UserMemoryAnalyzerOpUpdate 更新
	UserMemoryAnalyzerOpUpdate = "update"
	//UserMemoryAnalyzerOpDelete 删除
	UserMemoryAnalyzerOpDelete = "del"
)

用户记忆分类操作

Variables

This section is empty.

Functions

This section is empty.

Types

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 对话消息结构 存储完整的对话历史

type MemoryConfig

type MemoryConfig struct {
	// 是否启用用户记忆
	EnableUserMemories bool `json:"enableUserMemories"`
	// 是否启用会话摘要
	EnableSessionSummary bool `json:"enableSessionSummary"`
	// 用户记忆检索方式 EnableUserMemories开启采生效
	Retrieval MemoryRetrieval `json:"retrieval"`
	// 记忆数量限制
	MemoryLimit int `json:"memoryLimit"`
	// 是否异步处理记忆分析和会话摘要
	AsyncProcessing bool `json:"asyncProcessing"`
	// 异步处理的goroutine池大小
	AsyncWorkerPoolSize int `json:"asyncWorkerPoolSize"`

	// 摘要触发配置
	SummaryTrigger SummaryTriggerConfig `json:"summaryTrigger"`

	TablePre string `json:"tablePre"`

	// 清理配置
	// 会话状态清理间隔(小时),默认24小时
	SessionCleanupInterval int `json:"sessionCleanupInterval"`
	// 会话状态保留时间(小时),默认168小时(7天)
	SessionRetentionTime int `json:"sessionRetentionTime"`
	// 消息历史保留数量限制,默认1000条
	MessageHistoryLimit int `json:"messageHistoryLimit"`
	// 消息历史保留时间(小时),默认720小时(30天)
	MessageRetentionTime int `json:"messageRetentionTime"`
	// 定期清理间隔(小时),默认12小时
	CleanupInterval int `json:"cleanupInterval"`
}

MemoryConfig 记忆配置

type MemoryManager

type MemoryManager struct {
	// contains filtered or unexported fields
}

MemoryManager 记忆管理器 负责管理用户记忆、会话摘要和对话历史

func NewMemoryManager

func NewMemoryManager(cm model.ToolCallingChatModel, memoryStorage MemoryStorage, config *MemoryConfig) (*MemoryManager, error)

NewMemoryManager 创建新的记忆管理器

func (*MemoryManager) AddUserMemory

func (m *MemoryManager) AddUserMemory(ctx context.Context, userID, memoryContent, input string) error

AddUserMemory 手动添加用户记忆

func (*MemoryManager) ClearUserMemories

func (m *MemoryManager) ClearUserMemories(ctx context.Context, userID string) error

ClearUserMemories 清空用户记忆

func (*MemoryManager) Close

func (m *MemoryManager) Close() error

Close 关闭管理器

func (*MemoryManager) DeleteUserMemory

func (m *MemoryManager) DeleteUserMemory(ctx context.Context, memoryID string) error

DeleteUserMemory 删除用户记忆

func (*MemoryManager) ForceCleanupNow added in v0.0.10

func (m *MemoryManager) ForceCleanupNow(ctx context.Context) error

ForceCleanupNow 强制立即执行清理

func (*MemoryManager) GetConfig

func (m *MemoryManager) GetConfig() *MemoryConfig

GetConfig 获取配置

func (*MemoryManager) GetMemoryStats added in v0.0.10

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

func (m *MemoryManager) GetSessionSummary(ctx context.Context, sessionID, userID string) (*SessionSummary, error)

GetSessionSummary 获取会话摘要

func (*MemoryManager) GetTaskQueueStats added in v0.0.10

func (m *MemoryManager) GetTaskQueueStats() TaskQueueStats

GetTaskQueueStats 获取异步任务队列统计

func (*MemoryManager) GetUserMemories

func (m *MemoryManager) GetUserMemories(ctx context.Context, userID string) ([]*UserMemory, error)

GetUserMemories 获取用户记忆

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

func (m *MemoryManager) SearchUserMemories(ctx context.Context, userID, query string, limit int) ([]*UserMemory, error)

SearchUserMemories 搜索用户记忆

func (*MemoryManager) UpdateConfig

func (m *MemoryManager) UpdateConfig(config *MemoryConfig)

UpdateConfig 更新配置

func (*MemoryManager) UpdateUserMemory

func (m *MemoryManager) UpdateUserMemory(ctx context.Context, memory *UserMemory) error

UpdateUserMemory 更新用户记忆

type MemoryQuery

type MemoryQuery struct {
	// 用户ID
	UserID string
	// 会话ID (可选)
	SessionID string
	// 时间范围 (可选)
	CreatedAfter  *int64 // Unix时间戳
	CreatedBefore *int64 // Unix时间戳
	// 内容关键词 (可选)
	Keywords []string
	// 分页
	Offset int
	Limit  int
}

MemoryQuery 记忆查询条件

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

	//SetTablePrefix 设置表前缀
	SetTablePrefix(prefix string)

	// SaveUserMemory 保存用户记忆
	SaveUserMemory(ctx context.Context, memory *UserMemory) error

	// GetUserMemories 获取用户的记忆列表
	// userID: 用户ID
	// limit: 限制返回数量,0表示不限制
	// retrieval: 检索方式
	GetUserMemories(ctx context.Context, userID string, limit int, retrieval MemoryRetrieval) ([]*UserMemory, error)

	// UpdateUserMemory 更新用户记忆
	UpdateUserMemory(ctx context.Context, memory *UserMemory) error

	// DeleteUserMemory 删除用户记忆
	DeleteUserMemory(ctx context.Context, memoryID string) error

	// DeleteUserMemoriesByIds 批量删除用户记忆
	DeleteUserMemoriesByIds(ctx context.Context, userID string, memoryIDs []string) error

	// ClearUserMemories 清空用户的所有记忆
	ClearUserMemories(ctx context.Context, userID string) error

	// SearchUserMemories 搜索用户记忆(支持语义搜索)
	SearchUserMemories(ctx context.Context, userID string, query string, limit int) ([]*UserMemory, 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

	// Health 检查存储健康状态
	Health(ctx context.Context) 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 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"`
	// 创建时间
	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 生成会话摘要

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) 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 added in v0.0.10

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 string `json:"id"`
	// 用户ID
	UserID string `json:"userId"`
	// 记忆内容
	Memory string `json:"memory"`
	// 触发该记忆的原始用户输入
	Input string `json:"input,omitempty"`
	// 创建时间
	CreatedAt time.Time `json:"createdAt"`
	// 最后更新时间
	UpdatedAt time.Time `json:"updatedAt"`
}

UserMemory 用户记忆结构 存储关于用户的个人化信息,如偏好、兴趣、个人事实等

type UserMemoryAnalyzer

type UserMemoryAnalyzer struct {
	// contains filtered or unexported fields
}

UserMemoryAnalyzer determines if a message should be stored as a memory

func NewUserMemoryAnalyzer

func NewUserMemoryAnalyzer(cm model.ToolCallingChatModel) *UserMemoryAnalyzer

NewUserMemoryAnalyzer creates a new MemoryClassifier instance

func (*UserMemoryAnalyzer) SetSystemPrompt added in v0.0.13

func (u *UserMemoryAnalyzer) SetSystemPrompt(systemPrompt string)

func (*UserMemoryAnalyzer) ShouldUpdateMemoryWithParts added in v0.0.10

func (u *UserMemoryAnalyzer) ShouldUpdateMemoryWithParts(ctx context.Context, content string, parts []schema.MessageInputPart, userMemoryList []*UserMemory) ([]UserMemoryAnalyzerParam, error)

ShouldUpdateMemoryWithParts determines if a message with multi-part content should be added to memory

type UserMemoryAnalyzerParam

type UserMemoryAnalyzerParam struct {
	Op     string `json:"op"`
	Id     string `json:"id"`
	Memory string `json:"memory"`
}

MemoryClassifierParam 用户记忆分类参数

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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