源码包:pkg/adaptive_memory/ · 仓库文档索引:docs/README.md
MoonHub 的自适应记忆系统已成功实现,并对中文进行了特别优化。
pkg/adaptive_memory/
├── types.go # 数据结构和接口定义
├── schema.go # SQLite Schema
├── store.go # 数据库操作
├── scoring.go # 评分算法
├── chinese.go # 中文分词接口
├── gse_adapter.go # GSE 分词器适配
├── engine.go # 核心引擎
├── consolidation.go # 记忆整合
├── migration.go # 自动迁移
└── engine_test.go # 单元测试
- 支持多种事件类型:
- 基础类型: correction, preference_learned, fact_stored, task_completed, delegation_result
- 扩展类型: user_feedback, insight, reminder, error_learned, context_update
- 基于事件类型的默认重要性评分
- 时间戳和访问计数跟踪
- SQLite FTS5 全文搜索
- unicode61 分词器
- 双内容存储(原始 + 分词后)
- Ebbinghaus 遗忘曲线实现
- 公式:
e^(-0.05 * days) * (1 + 0.02 * access_count) - 访问频率强化
- go-ego/gse 分词库集成
- 懒加载分词器(节省内存)
- 智能检测中文内容
- 双存储策略(原始 + 分词)
- 集成自适应记忆引擎
- 自动迁移 MEMORY.md
- 新增方法:
GetAdaptiveMemory()RecordMemoryEvent()SearchMemory()ConsolidateMemory()GetMemoryContextWithQuery()
- 查询相关的记忆检索
- 在构建上下文时自动搜索相关记忆
- 新增
AdaptiveMemoryConfig配置结构 - 支持环境变量配置
- 默认配置优化
{
"adaptive_memory": {
"enabled": true,
"enable_chinese": true,
"fts_max_results": 50,
"context_max_results": 10,
"decay_older_than_days": 7,
"decay_factor": 0.95,
"prune_importance_max": 0.1,
"prune_access_count_max": 0,
"prune_older_than_days": 30,
"merge_similarity_threshold": 0.8
}
}github.com/go-ego/gse v0.80.2- 中文分词modernc.org/sqlite- SQLite(已有)
// 通过 MemoryStore
id, err := memoryStore.RecordMemoryEvent(
adaptive_memory.EventTypeFactStored,
"用户喜欢简洁的代码风格",
nil,
nil,
)results, err := memoryStore.SearchMemory("代码风格", 10)
for _, result := range results {
fmt.Printf("%s (相关性: %.2f)\n", result.Content, result.RelevanceScore)
}result, err := memoryStore.ConsolidateMemory()
fmt.Printf("衰减: %d, 修剪: %d, 合并: %d\n",
result.Decayed, result.Pruned, result.Merged)user_feedback: 用户反馈 (importance: 0.85)insight: Agent 生成的洞察 (importance: 0.7)reminder: 计划提醒 (importance: 0.6)error_learned: 错误模式学习 (importance: 0.75)context_update: 上下文更新 (importance: 0.5)
-
创建
pkg/tools/memory_tool.go -
实现以下操作:
record: 记录新的记忆事件search: 搜索相关记忆list: 列出最近记忆consolidate: 执行记忆整合
-
在
pkg/agent/loop.go中注册 memory tool -
在
pkg/agent/memory.go中添加GetAdaptiveMemory()方法 -
在
pkg/agent/context.go中添加GetMemoryStore()方法 -
工具通过
config.tools.memory.enabled配置,默认启用
// 通过 MemoryTool (Agent 调用)
{
"action": "record",
"event_type": "preference_learned",
"content": "用户喜欢简洁的代码风格"
}{
"action": "search",
"query": "代码风格",
"limit": 10
}{
"action": "list",
"limit": 10
}{
"action": "consolidate"
}-
中文分词质量验证 ✅ 通过
-
新增
chinese_segmenter_test.go- 9 个测试用例全部通过 -
测试了基础分词、智能检测、搜索模式
-
分词质量验证: GSE 分词器能正确识别中文词汇边界
-
-
性能测试(内存使用)
- 新增
performance_test.go- 6 个测试函数 - 内存使用报告:
- 无中文模式: ~3MB (符合预期)
- 中文模式: ~190MB (GSE 字典加载)
- 1000 条记录: ~3MB
- 延迟测试:
- 录入延迟: ~0.8ms/条
- 搜索延迟: ~2.7ms
- 整合延迟: ~85ms
- 新增
-
更新文档
pkg/adaptive_memory/types.gopkg/adaptive_memory/schema.gopkg/adaptive_memory/store.gopkg/adaptive_memory/scoring.gopkg/adaptive_memory/chinese.gopkg/adaptive_memory/gse_adapter.gopkg/adaptive_memory/gse_adapter_simple.go(GSE 失败时的简单分词回退)pkg/adaptive_memory/engine.gopkg/adaptive_memory/consolidation.gopkg/adaptive_memory/migration.gopkg/adaptive_memory/engine_test.gopkg/tools/memory_tool.gopkg/tools/memory_tool_test.go
pkg/agent/memory.gopkg/agent/context.gopkg/agent/loop.gopkg/config/config.gogo.mod