Status: Production Ready ✅
Version: 2.0 (Hybrid Search + Time Decay)
Platform: Apple Silicon (M-Series) Native
A high-performance semantic memory system for AI agents. Combines Vector Search, BM25 Keyword Search, and Time Decay to provide precise, context-aware memory retrieval.
结合 向量语义 (bge-base-zh) 和 BM25 关键词 的优势。
- 语义理解: 能听懂"上次修了啥" (映射到"修复/审计记录")。
- 关键词精准匹配: 搜端口号 (8080)、版本号或具体报错代码时,精准度 100%。
内置口语-书面语映射,AI Agent 无需理解黑话也能搜到结果。
- "挂了/崩了" ➡️ "崩溃/错误/失败"
- "慢了/卡" ➡️ "延迟/性能"
- "上次" ➡️ "最近" (触发时间衰减机制)
根据查询意图自动调整"新鲜度"权重:
- 故障排查类查询 (如 "报错", "修了啥"):强衰减。优先返回最近 7 天的日志,旧日志降权。
- 事实架构类查询 (如 "架构", "工具"):弱衰减。确保历史文档不被过滤。
针对技术类查询,自动提升 maintenance_log (维护日志) 和 dev_tool (开发工具) 的权重,过滤掉 user_profile (用户画像) 等无关噪音。
核心 BM25 引擎完全手写 (纯 Python),不依赖 jieba 或外部库,确保在网络波动或环境受限时依然稳定运行。
Memory Engine 采用 C/S 架构 (Client/Server) 以消除模型加载延迟:
[Hermes Agent / Client] <--HTTP (Port 54321)--> [Memory Engine Server]
| |
|-- memory(action="search") |-- BAAI/bge-base-zh (Embedding)
| |-- Custom BM25 (Keywords)
| |-- RRF Fuser + Time Decay
Memory Engine 需要作为后台服务常驻运行,以保持模型在内存中(实现毫秒级响应)。
cd ~/Desktop/clawCoder/memory-engine
# 推荐:后台启动 (使用 nohup)
TRANSFORMERS_OFFLINE=1 HF_HUB_OFFLINE=1 nohup /opt/homebrew/bin/python3.11 server.py > /tmp/me.log 2>&1 &
# 检查健康状态
curl http://127.0.0.1:54321/health
# 返回: {"status": "ok"}Agent 端通过 HTTP 请求调用 API。
import urllib.request
import urllib.parse
def search_memory(query: str, top_k: int = 3):
url = f"http://127.0.0.1:54321/search?q={urllib.parse.quote(query)}&k={top_k}"
try:
with urllib.request.urlopen(url, timeout=5) as response:
data = json.loads(response.read())
return data.get('results', [])
except Exception as e:
return Nonememory-engine/
├── server.py # HTTP 服务入口 (常驻进程)
├── config.py # 配置中心 (模型路径, 维度)
├── src/
│ ├── engine.py # MemoryEngine 主控制器
│ ├── embedder.py # 模型封装 (支持离线模式)
│ ├── retriever.py # 检索器 (混合算法, 时间衰减, 类别加权)
│ ├── bm25.py # 零依赖 BM25 实现
│ └── ...
├── scripts/
│ └── clean_memory.py # 数据清洗工具
└── tests/ # 测试用例
在 src/bm25.py 中维护。过滤掉"关于"、"系统"、"用户"等高频无意义词,提高技术词汇的命中率。
在 src/retriever.py 的 _expand_query 方法中维护。可根据实际使用习惯添加新的口语映射。
记忆数据存储在 ~/.hermes/memories/。
memory.db: SQLite 数据库 (元数据 + 文本)faiss.index: 向量索引文件
建议定期备份这两个文件。