Documentation
¶
Overview ¶
ollama_embedder.go
Index ¶
- func SplitText(text string, chunkSize, chunkOverlap int) []string
- type CombinedWeights
- type Controller
- func (c *Controller) BuildContext(ctx context.Context, sessionID string, currentQuery string) ([]*schema.Message, error)
- func (c *Controller) Clear(ctx context.Context, sessionID string) error
- func (c *Controller) Close() error
- func (c *Controller) GetHistory(ctx context.Context, sessionID string) ([]*schema.Message, error)
- func (c *Controller) SaveTurn(ctx context.Context, sessionID string, msgs []*schema.Message) error
- type Embedder
- type EmbeddingChunk
- type EmbeddingFunc
- type GormStore
- func (s *GormStore) ClearSession(ctx context.Context, sessionID string) error
- func (s *GormStore) Close() error
- func (s *GormStore) GetSession(ctx context.Context, sessionID string) ([]*schema.Message, error)
- func (s *GormStore) GetSessionStats(ctx context.Context, sessionID string) (map[string]any, error)
- func (s *GormStore) GetSessionWithReasoning(ctx context.Context, sessionID string) ([]*schema.Message, error)
- func (s *GormStore) IndexReady() bool
- func (s *GormStore) Recall(ctx context.Context, sessionID string, query string, topK int) ([]*schema.Message, error)
- func (s *GormStore) Save(ctx context.Context, sessionID string, msgs []*schema.Message) error
- func (s *GormStore) SearchByRole(ctx context.Context, sessionID string, role schema.RoleType, limit int) ([]*schema.Message, error)
- func (s *GormStore) SearchByTimeRange(ctx context.Context, sessionID string, start, end time.Time) ([]*schema.Message, error)
- type GormStoreConfig
- type LongTermStore
- type MemNetAIConfig
- type MemNetAIStore
- func (s *MemNetAIStore) ClearSession(ctx context.Context, sessionID string) error
- func (s *MemNetAIStore) Close() error
- func (s *MemNetAIStore) GetSession(ctx context.Context, sessionID string) ([]*schema.Message, error)
- func (s *MemNetAIStore) Recall(ctx context.Context, sessionID string, query string, topK int) ([]*schema.Message, error)
- func (s *MemNetAIStore) Save(ctx context.Context, sessionID string, msgs []*schema.Message) error
- type MessageModel
- type MessageRecord
- type ModelContextWindow
- type OllamaEmbedder
- type RecallMode
- type ShortMemoryManager
- type SimpleWindowMemory
- type SummaryFunc
- type TokenEstimator
- type WindowConfig
- type WindowManager
- type WindowShortMemory
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type CombinedWeights ¶
type CombinedWeights struct {
VectorWeight float64 // 向量相似度权重
KeywordWeight float64 // 关键词匹配权重
TimeWeight float64 // 时间衰减权重
}
CombinedWeights 组合召回的各因子权重,总和应为 1.0
func DefaultCombinedWeights ¶
func DefaultCombinedWeights() *CombinedWeights
DefaultCombinedWeights 默认组合权重
type Controller ¶
type Controller struct {
// 系统提示词 —— 永久存在于上下文底层
SystemPrompt []*schema.Message
// 短期记忆管理器 —— 滑动窗口 / 摘要
ShortMemory ShortMemoryManager
// 长期记忆存储器 —— 外部持久化 + 向量检索
LongStore LongTermStore
// 召回数量
TopK int
}
Controller 记忆控制器,管理三类记忆
func NewController ¶
func NewController(systemPrompt []*schema.Message, shortMemory ShortMemoryManager, longStore LongTermStore) *Controller
NewController SystemPrompt 系统提示词, ShortMemory 短期记忆管理器, LongStore 长期记忆存储器
func (*Controller) BuildContext ¶
func (c *Controller) BuildContext(ctx context.Context, sessionID string, currentQuery string) ([]*schema.Message, error)
BuildContext 构建带记忆的上文 返回消息顺序:系统提示词 → 长期记忆召回 → 短期记忆(窗口+摘要)
func (*Controller) Clear ¶
func (c *Controller) Clear(ctx context.Context, sessionID string) error
Clear 清空会话
func (*Controller) GetHistory ¶
GetHistory 获取完整历史
type EmbeddingChunk ¶
type EmbeddingChunk struct {
ID string `gorm:"primaryKey;size:64"`
MessageID string `gorm:"index;size:64;not null"` // 关联 MessageModel.ID
SessionID string `gorm:"index;size:128;not null"` // 冗余字段,加速查询
ChunkIndex int `gorm:"not null"` // 块序号
Content string `gorm:"type:text;not null"` // 块文本
Embedding string `gorm:"type:text"` // 嵌入向量 JSON
}
EmbeddingChunk 分块嵌入记录,用于长文本分段存储
func (*EmbeddingChunk) GetEmbedding ¶
func (c *EmbeddingChunk) GetEmbedding() ([]float32, error)
func (*EmbeddingChunk) SetEmbedding ¶
func (c *EmbeddingChunk) SetEmbedding(vec []float32) error
func (EmbeddingChunk) TableName ¶
func (EmbeddingChunk) TableName() string
type EmbeddingFunc ¶
EmbeddingFunc 文本嵌入函数签名 将文本转换为向量,用于语义相似度搜索
func EmbedderFunc ¶
func EmbedderFunc(e Embedder) EmbeddingFunc
type GormStore ¶
type GormStore struct {
// contains filtered or unexported fields
}
GormStore 基于 GORM 的高级记忆存储 完全兼容 Store 接口,可替代 LocalStore/SqliteStore
func NewGormStore ¶
func NewGormStore(config *GormStoreConfig, embedding EmbeddingFunc) (*GormStore, error)
NewGormStore 创建 GORM 记忆存储
func (*GormStore) ClearSession ¶
ClearSession 清空会话(硬删除 + 同步清理向量索引)
func (*GormStore) GetSession ¶
GetSession 获取完整会话历史
func (*GormStore) GetSessionStats ¶
GetSessionStats 获取会话统计
func (*GormStore) GetSessionWithReasoning ¶
func (s *GormStore) GetSessionWithReasoning(ctx context.Context, sessionID string) ([]*schema.Message, error)
GetSessionWithReasoning 获取完整会话历史(含推理内容) 当前实现与 GetSession 相同,因为 MessageModel.ToSchemaMessage 已包含 ReasoningContent 如需扩展(如返回 ToolCalls),可在此添加额外处理
func (*GormStore) Recall ¶
func (s *GormStore) Recall(ctx context.Context, sessionID string, query string, topK int) ([]*schema.Message, error)
Recall 智能召回(多策略混合)
type GormStoreConfig ¶
type GormStoreConfig struct {
// DBPath 数据库路径
DBPath string
// MaxOpenConns 最大连接数,默认 10
MaxOpenConns int
// MaxIdleConns 最大空闲连接数,默认 5
MaxIdleConns int
// ConnMaxLifetime 连接最大生命周期,默认 1 小时
ConnMaxLifetime time.Duration
// LogLevel GORM 日志级别,默认 Warn
LogLevel logger.LogLevel
// DisableVectorSearch 禁用向量搜索(不使用嵌入时设为 true)
DisableVectorSearch bool
// EmbeddingDimension 向量维度,默认 768
EmbeddingDimension int
// RecallMode 召回策略模式,默认 RecallModeAuto
RecallMode RecallMode
// CombinedWeights 组合模式的权重(仅当 RecallModeCombined 时生效)
CombinedWeights *CombinedWeights
// ChunkSize 分块大小(中文字符数),0 或负数表示不分块
ChunkSize int
// ChunkOverlap 分块重叠大小(中文字符数)
ChunkOverlap int
}
GormStoreConfig GORM 存储配置
func DefaultGormStoreConfig ¶
func DefaultGormStoreConfig() *GormStoreConfig
DefaultGormStoreConfig 默认配置
type LongTermStore ¶
type LongTermStore interface {
// Save 保存消息到记忆
Save(ctx context.Context, sessionID string, msgs []*schema.Message) error
// Recall 根据查询召回相关记忆
// query: 查询文本(如用户最新问题)
// topK: 召回数量
Recall(ctx context.Context, sessionID string, query string, topK int) ([]*schema.Message, error)
// GetSession 获取完整会话历史
GetSession(ctx context.Context, sessionID string) ([]*schema.Message, error)
// ClearSession 清空会话
ClearSession(ctx context.Context, sessionID string) error
// Close 关闭存储
Close() error
}
LongTermStore 记忆存储接口
type MemNetAIConfig ¶
type MemNetAIConfig struct {
// APIKey MemNetAI 平台颁发的 API Key(必填)
APIKey string
// BaseURL 服务地址,默认 https://api.memnetai.com
BaseURL string
// Namespace 命名空间,用于在同一项目内对记忆体进行逻辑隔离。
// 记忆体的唯一性由「namespace + memoryAgentName」共同决定。
// 例如可以用用户ID或智能体ID作为命名空间。
Namespace string
// Language 记忆语言,如 "zh"、"en" 等,默认 "zh"
Language string
// IsThirdPerson 是否以第三人称视角提取记忆摘要,默认 false(第一人称效果更佳)
IsThirdPerson bool
// AsyncMode 记忆是否使用异步模式。同步模式立即执行但上下文容量小;异步模式排队但支持大量上下文。
AsyncMode bool
// HTTPClient 自定义 HTTP 客户端,不传则使用默认(超时 200s)
HTTPClient *http.Client
}
MemNetAIConfig MemNetAI 存储配置
type MemNetAIStore ¶
type MemNetAIStore struct {
// contains filtered or unexported fields
}
MemNetAIStore 基于 MemNetAI 长记忆服务的 Store 实现。
MemNetAI 是一个 AI 智能体长记忆服务平台,通过「记忆→回忆→思考→做梦」 的完整认知周期,为智能体提供接近人类记忆机制的长期记忆能力。
func NewMemNetAIStore ¶
func NewMemNetAIStore(cfg *MemNetAIConfig) (*MemNetAIStore, error)
NewMemNetAIStore 创建 MemNetAI 记忆存储实例。
示例:
store, err := memory.NewMemNetAIStore(&memory.MemNetAIConfig{
APIKey: "your-memnetai-api-key",
Namespace: "user_123",
})
func (*MemNetAIStore) ClearSession ¶
func (s *MemNetAIStore) ClearSession(ctx context.Context, sessionID string) error
ClearSession MemNetAI 目前未提供公开的清空记忆接口。 该方法返回 nil,如需清理请在 MemNetAI 后台操作。
func (*MemNetAIStore) Close ¶
func (s *MemNetAIStore) Close() error
Close MemNetAI 基于 HTTP 服务,无需额外关闭资源。
func (*MemNetAIStore) GetSession ¶
func (s *MemNetAIStore) GetSession(ctx context.Context, sessionID string) ([]*schema.Message, error)
GetSession MemNetAI 目前未提供获取完整会话历史的独立接口。 该方法返回空列表,如需历史回溯请通过 Recall 实现。
func (*MemNetAIStore) Recall ¶
func (s *MemNetAIStore) Recall(ctx context.Context, sessionID string, query string, topK int) ([]*schema.Message, error)
Recall 根据查询文本从 MemNetAI 召回相关记忆。
MemNetAI 的回忆是一个立体认知重构过程:知识调用、历史回溯、实体关系联想、 时间线索修正、记忆强度衰减(拟合艾宾浩斯曲线)。
返回的 memoryPrompt 已封装为可直接注入 System 提示词的记忆内容。 如果 topK > 0,会对 memorySummaryList 做切片限制。
type MessageModel ¶
type MessageModel struct {
ID string `gorm:"primaryKey;size:64"`
SessionID string `gorm:"index:idx_session_time,priority:1;size:128"`
Role string `gorm:"size:32;not null"`
Content string `gorm:"type:text;not null"`
ReasoningContent string `gorm:"type:text"`
Embedding string `gorm:"type:text"` // JSON 序列化的向量(空字符串表示无嵌入)
Timestamp int64 `gorm:"index:idx_session_time,priority:2;not null"`
Metadata string `gorm:"type:text"` // JSON 序列化的元数据
CreatedAt time.Time
}
MessageModel GORM 消息模型
func (*MessageModel) GetEmbedding ¶
func (m *MessageModel) GetEmbedding() ([]float32, error)
GetEmbedding 获取嵌入向量
func (*MessageModel) SetEmbedding ¶
func (m *MessageModel) SetEmbedding(vec []float32) error
SetEmbedding 设置嵌入向量
func (*MessageModel) ToSchemaMessage ¶
func (m *MessageModel) ToSchemaMessage() *schema.Message
ToSchemaMessage 转换为 schema.Message
type MessageRecord ¶
type MessageRecord struct {
ID string `json:"id"`
SessionID string `json:"session_id"`
Role string `json:"role"`
Content string `json:"content"`
Embedding []float32 `json:"embedding,omitempty"` // 向量(可选)
Timestamp time.Time `json:"timestamp"`
Metadata map[string]string `json:"metadata,omitempty"`
}
MessageRecord 存储的记录结构
type ModelContextWindow ¶
type ModelContextWindow interface {
ContextWindow() int
}
ModelContextWindow 模型上下文窗口信息接口 各模型实现(如 OpenAI/Gemini/Claude)可实现此接口暴露上下文长度 WindowManager 会通过类型断言自动识别
type OllamaEmbedder ¶
type OllamaEmbedder struct {
// contains filtered or unexported fields
}
func NewOllamaEmbedder ¶
func NewOllamaEmbedder(baseURL, model string) *OllamaEmbedder
type RecallMode ¶
type RecallMode int
RecallMode 召回策略模式
const ( RecallModeAuto RecallMode = iota // 自动:优先向量,失败回退混合(默认行为) RecallModeVector // 仅向量语义搜索 RecallModeHybrid // 仅关键词 + 时间衰减 RecallModeCombined // 向量 + 关键词 + 时间组合权重 )
type ShortMemoryManager ¶
type ShortMemoryManager interface {
// GetRecent 返回当前窗口内的完整消息(不进行压缩)
GetRecent(sessionID string) []*schema.Message
// GetContextMessages 返回构建上下文所需的短期记忆消息
// 内部可能整合:窗口内的完整消息 + 超出部分的摘要
GetContextMessages(sessionID string) []*schema.Message
// AddTurn 添加一轮对话,触发窗口维护、摘要生成等
AddTurn(sessionID string, msgs []*schema.Message)
// Clear 清空会话短期记忆
Clear(sessionID string)
}
ShortMemoryManager 短期记忆管理器
type SimpleWindowMemory ¶
type SimpleWindowMemory struct {
// contains filtered or unexported fields
}
SimpleWindowMemory 纯滑动窗口短期记忆(无摘要)
func NewSimpleWindowMemory ¶
func NewSimpleWindowMemory(wm *WindowManager) *SimpleWindowMemory
NewSimpleWindowMemory 创建纯滑动窗口短期记忆
func (*SimpleWindowMemory) AddTurn ¶
func (sm *SimpleWindowMemory) AddTurn(sessionID string, msgs []*schema.Message)
AddTurn 添加一轮对话
func (*SimpleWindowMemory) GetContextMessages ¶
func (sm *SimpleWindowMemory) GetContextMessages(sessionID string) []*schema.Message
GetContextMessages 返回构建上下文所需的消息
type SummaryFunc ¶
SummaryFunc 摘要生成函数类型
type TokenEstimator ¶
TokenEstimator Token 估算器 如需精确控制,可接入 tiktoken 等第三方库实现此接口
type WindowConfig ¶
type WindowConfig struct {
// MaxHistoryMessages 最大保留的历史消息数(不包括 System 消息)
// 例如设置为 20,则只保留最近的 20 条 user/assistant/tool 消息
// 0 表示不限制(默认,兼容旧行为)
MaxHistoryMessages int
// MaxHistoryTokens 历史消息的最大估算 Token 数(不包括 System 消息)
// 优先级与 MaxHistoryMessages 同级,两者同时设置时取交集(更严格的)
// 0 表示不限制(默认)
MaxHistoryTokens int
// ReserveTokens 自动模式下为模型输出预留的 Token 数
// 如果设置了此值且 model 实现了 ModelContextWindow 接口,
// WindowManager 会自动计算 MaxHistoryTokens = ContextWindow - ReserveTokens
// 例如:模型 128k 上下文,预留 8k 给输出+缓冲,则历史限制为 120k
ReserveTokens int
}
WindowConfig 对话窗口配置 提供手动限制和自动计算两种模式,两者可同时启用,取更严格的限制
type WindowManager ¶
type WindowManager struct {
// contains filtered or unexported fields
}
WindowManager 对话窗口管理器 在每次模型调用前截断消息列表,防止工作记忆无限增长导致 Token 爆炸
func NewWindowManager ¶
func NewWindowManager(config WindowConfig, model chatmodel.BaseModel, estimator TokenEstimator) *WindowManager
NewWindowManager 创建窗口管理器 model 用于自动获取上下文长度(可选,实现 ModelContextWindow 接口即可) estimator 可自定义 Token 计算方式,传 nil 使用默认估算
func (*WindowManager) GetConfig ¶
func (wm *WindowManager) GetConfig() WindowConfig
GetConfig 返回当前生效的配置(便于调试)
type WindowShortMemory ¶
type WindowShortMemory struct {
// contains filtered or unexported fields
}
WindowShortMemory 结合滑动窗口与摘要的短期记忆实现
func NewWindowShortMemory ¶
func NewWindowShortMemory(wm *WindowManager, model chatmodel.BaseModel, summarizer SummaryFunc) *WindowShortMemory
func (*WindowShortMemory) AddTurn ¶
func (ws *WindowShortMemory) AddTurn(sessionID string, msgs []*schema.Message)
func (*WindowShortMemory) Clear ¶
func (ws *WindowShortMemory) Clear(sessionID string)
func (*WindowShortMemory) GetContextMessages ¶
func (ws *WindowShortMemory) GetContextMessages(sessionID string) []*schema.Message
GetContextMessages 返回构建上下文所需的短期记忆 修复:RLock → Lock(因为会修改 sess.messages 和 sess.summary)