memory

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Mar 20, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

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

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

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

)
View Source
const (
	// UserMemoryOpUpdate 更新记忆
	UserMemoryOpUpdate = "update"
	// UserMemoryOpNoop 无需更新
	UserMemoryOpNoop = "noop"
)

用户记忆操作类型

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"`
	// 异步处理的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"`
	// 定期清理间隔(小时),默认12小时
	CleanupInterval int `json:"cleanupInterval"`
}

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

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

ClearUserMemory 清空用户记忆

func (*MemoryManager) Close

func (m *MemoryManager) Close() error

Close 关闭管理器

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

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

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

UpdateConfig 更新配置

func (*MemoryManager) UpsertUserMemory added in v0.1.0

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

UpsertUserMemory 创建或更新用户记忆

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)

	// 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

	// 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(主键)
	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 added in v0.0.13

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 用户记忆更新参数

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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