builtin

package
v0.2.5 Latest Latest
Warning

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

Go to latest
Published: Apr 10, 2026 License: MIT Imports: 14 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

func DefaultAsyncTaskTraceName added in v0.2.4

func DefaultAsyncTaskTraceName(taskType string) string

Types

type AsyncTaskContextBuilder added in v0.2.4

type AsyncTaskContextBuilder func(taskType, userID, sessionID string) context.Context

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 记忆配置

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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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