按位置查找机器人记忆
机器人经验检索的空间搜索
"只显示位置 [1.3, 0.7, 0.42] 附近的成功抓取。"
这是你可以对机器人记忆执行的真实查询。不是"查找关于抓取的文档" — 而是查找发生在特定物理位置附近的实际抓取经验,且只返回成功的那些。
现有的记忆系统都做不到这一点。文本记忆系统(Mem0、Zep、Letta)通过语义相似度搜索 — "什么文本与我的查询最相似。"当你的机器人需要知道的是:在这里、在这个位置、在工作空间的这个区域,什么有效?这种搜索就毫无用处了。
为什么空间搜索很重要
机器人在物理空间中工作。在 [1.3, 0.7, 0.42] 处抓取物体的最佳策略,很可能与在 [1.3, 0.7, 0.40] 处有效的策略相似 — 而不是在桌子另一边 [0.5, 1.2, 0.8] 处有效的策略。
当你将空间接近性与结构化过滤结合时,就能获得精确的经验检索:
- 当前目标附近的成功抓取
- 特定区域的失败尝试(避免重复犯错)
- 在相似高度使用的力分布
这就是空间经验检索 — 据我们所知,在任何现有的机器人记忆系统中都没有先例实现。
API
三行 Python 代码。就这么简单。
from robotmem import recall
memories = recall(
"grasp object",
context_filter={"task.success": True},
spatial_sort={"field": "spatial.target", "target": [1.3, 0.7, 0.42]}
)
这同时完成三件事:
- 语义搜索 — 使用 BM25 + 向量混合搜索,找到与"grasp object"相关的记忆
- 上下文过滤 — 只保留
task.success为True的记忆(结构化 JSON 路径查询) - 空间排序 — 按与
[1.3, 0.7, 0.42]的欧几里得距离排序结果
结果:你的机器人获得最相关的成功经验,按与当前任务的物理距离排名。
结构化上下文过滤
context_filter 参数支持对每条记忆存储的结构化上下文进行 JSON 路径查询。一些示例:
# 只返回成功的经验
context_filter={"task.success": True}
# 只返回力大于 10N 的经验
context_filter={"params.force_peak": {"$gt": 10}}
# 只返回 FetchPush 的经验
context_filter={"env": "FetchPush-v4"}
上下文在保存感知时以 JSON 格式存储,robotmem 在检索时解析并过滤。这意味着你可以为记忆附加任何结构化元数据,稍后再查询 — 无需构建自定义数据库 schema。
试一试
pip install robotmem
python -c "
from robotmem import learn, recall
# 存储带有空间上下文的抓取经验
learn(
insight='Grasped red cup: force=12.5N, 28 steps',
context='{\"task\": {\"success\": true}, \"spatial\": {\"target\": [1.3, 0.7, 0.42]}}'
)
# 按位置检索
result = recall('grasp', spatial_sort={'field': 'spatial.target', 'target': [1.3, 0.7, 0.40]})
print(result['memories'][0]['content'])
"