fix: 修复记忆力差和跨群聊上下文泄漏

记忆嵌入修复:
- 新增 memory.APIEmbedder 使用 text-embedding-3-small 替代 SimpleEmbedder
- Extractor 保存记忆时自动生成向量嵌入
- Embedder 接口增加 IsAvailable() 方法

跨群聊上下文隔离:
- Thinker 新增 thinkSessionID 字段,performThink 启动时绑定会话
- storeThought 优先使用绑定的 session 推送思考结果
- 防止思考过程中其他群消息改变 activeSessionID 导致串台

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-03 12:25:05 +08:00
parent 197c86fa72
commit 13a2c69d5e
5 changed files with 155 additions and 9 deletions
+10 -1
View File
@@ -119,12 +119,21 @@ func main() {
memStore = memory.NewStore(cfg.DatabaseURL)
defer memStore.Close()
memRetriever = memory.NewRetriever(memStore, nil)
// 使用真实嵌入模型 (text-embedding-3-small),通过 OpenAI 兼容 API
memEmbedder := memory.NewAPIEmbedder(cfg.LLMBaseURL, cfg.LLMAPIKey, "text-embedding-3-small")
if memEmbedder.IsAvailable() {
log.Println("记忆嵌入服务已就绪 (text-embedding-3-small)")
} else {
log.Println("⚠ 记忆嵌入服务未配置 API Key,降级为字符频率嵌入(检索质量较差)")
}
memRetriever = memory.NewRetriever(memStore, memEmbedder)
// 记忆提取器使用 memory purpose 适配器
memExtractor = memory.NewExtractor(memStore, func(ctx context.Context, messages []model.LLMMessage) (*model.LLMResponse, error) {
return memoryAdapter.Chat(ctx, messages)
})
memExtractor.SetEmbedder(memEmbedder)
log.Println("记忆提取器已就绪")
}