builtin

package
v0.2.2 Latest Latest
Warning

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

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

Documentation

Index

Constants

View Source
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字**)。`
)
View Source
const (
	// UserMemoryOpUpdate 更新记忆
	UserMemoryOpUpdate = "update"
	// UserMemoryOpNoop 无需更新
	UserMemoryOpNoop = "noop"
)

用户记忆操作类型

Variables

This section is empty.

Functions

This section is empty.

Types

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 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"`

	// 清理配置
	Cleanup CleanupConfig `json:"cleanup"`
}

MemoryConfig 记忆配置

func DefaultMemoryConfig

func DefaultMemoryConfig() *MemoryConfig

DefaultMemoryConfig 返回完整的默认配置

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

func (m *MemoryManager) Close() error

Close 关闭管理器

func (*MemoryManager) ForceCleanupNow

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

ForceCleanupNow 强制立即执行清理

func (*MemoryManager) GetConfig

func (m *MemoryManager) GetConfig() *MemoryConfig

GetConfig 获取配置

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

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

type ProviderConfig struct {
	ChatModel    model.ToolCallingChatModel
	Storage      MemoryStorage
	MemoryConfig *MemoryConfig
}

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"`
	// 创建时间
	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 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) 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 用户记忆更新参数

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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