builtin

package
v0.3.0 Latest Latest
Warning

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

Go to latest
Published: Jun 23, 2026 License: MIT Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
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。
- 失败原因:账户余额不足。

### 最终结论/当前状态
- 已确认退款失败原因,后续需补足余额后重试。`
)
View Source
const (
	MessageExtraIDKey        = "aggo_message_id"
	MessageExtraSessionIDKey = "aggo_session_id"
	MessageExtraUserIDKey    = "aggo_user_id"
	MessageExtraRoleKey      = "aggo_role"
	MessageExtraCreatedAtKey = "aggo_created_at"
)
View Source
const (
	// UserMemoryEventTypeMilestone 任务里程碑
	UserMemoryEventTypeMilestone = memoryevent.TypeMilestone
	// UserMemoryEventTypeEvent 事件记录
	UserMemoryEventTypeEvent = memoryevent.TypeEvent
)

用户记忆事件类型(兼容别名,新代码请直接用 memoryevent.TypeMilestone/TypeEvent)

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

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

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.AgenticModel, 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.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 (*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

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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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