简介
robotmem 是一个面向机器人 AI 智能体的持久记忆系统。它让机器人能够记住技能、从失败中学习,并基于过往经验不断进化 — 跨会话、跨重启、跨生命周期。
为什么选择 robotmem?
机器人运行数千次实验,但每个回合都从零开始。robotmem 存储每一次经验 — 参数、轨迹、成功与失败 — 并检索最相关的经验来指导未来的决策。
核心能力
6 个 API 工具
| 工具 | 用途 |
|---|---|
learn |
记录物理经验(参数、策略、教训) |
recall |
检索经验 — BM25 + 向量混合搜索,支持 context_filter 和 spatial_sort |
save_perception |
存储感知/轨迹/力数据(视觉 / 触觉 / 本体感觉 / 听觉 / 程序性) |
forget / update |
删除或修正错误的记忆 |
start_session / end_session |
回合生命周期(自动合并 + 主动回忆) |
5 种感知类型
robotmem 理解 5 种机器人感知类型:
- 视觉 (Visual) — 相机图像、场景描述、目标检测
- 触觉 (Tactile) — 力/扭矩传感器、接触事件、抓取反馈
- 听觉 (Auditory) — 声音事件、语音指令、声学特征
- 本体感觉 (Proprioceptive) — 关节角度、末端执行器位置、速度
- 程序性 (Procedural) — 动作序列、轨迹、多步骤规划
结构化经验检索
不只是向量搜索 — robotmem 理解机器人经验的结构:
# 仅检索成功的经验
recall(query="push to target", context_filter='{"task.success": true}')
# 查找最近的空间场景
recall(query="grasp object", spatial_sort='{"field": "spatial.object_position", "target": [1.3, 0.7, 0.42]}')
# 组合条件:成功 + 距离 < 0.05m
recall(
query="push",
context_filter='{"task.success": true, "params.final_distance.value": {"$lt": 0.05}}',
)
Context JSON — 4 个分区
每条记忆的 context 被结构化为 4 个语义分区:
{
"params": {"grip_force": {"value": 12.5, "unit": "N", "type": "scalar"}},
"spatial": {"object_position": [1.3, 0.7, 0.42], "target_position": [1.25, 0.6, 0.42]},
"robot": {"id": "fetch-001", "type": "Fetch", "dof": 7},
"task": {"name": "push_to_target", "success": true, "steps": 38}
}
recall 自动将 params / spatial / robot / task 提取为每条返回记忆的顶层字段。
架构概览
SQLite + FTS5 + vec0
├── BM25 全文搜索(jieba 中文分词)
├── 向量搜索(FastEmbed ONNX,纯 CPU)
├── RRF 融合排序
├── 结构化过滤(context_filter)
└── 空间最近邻排序(spatial_sort)
- 纯 CPU — 无需 GPU
- 单文件数据库:
~/.robotmem/memory.db - MCP 服务器(6 个工具)或直接 Python 导入
- Web 管理界面:
robotmem web
对比
| 维度 | MemoryVLA(学术) | Mem0(产品) | robotmem |
|---|---|---|---|
| 目标用户 | 特定 VLA 模型 | 文本 AI | 机器人 AI |
| 记忆格式 | 向量(不可读) | 文本 | 自然语言 + 感知 + 参数 |
| 结构化过滤 | 不支持 | 不支持 | 支持(context_filter) |
| 空间检索 | 不支持 | 不支持 | 支持(spatial_sort) |
| 物理参数 | 不支持 | 不支持 | 支持(params 分区) |
| 安装方式 | 论文代码编译 | pip install | pip install |
| 数据库 | 嵌入式 | 云服务 | 本地 SQLite |