Hindsight 入门:Agent 跨会话记忆到底保存了什么
Hindsight 源码分析:从 Python 客户端追到记忆引擎
用固定提交区分便捷调用、服务端入口与尚未验证的运行行为。
你将学会
- 先读公开客户端
- 定位服务端边界
- 留下可复核的追踪笔记
开始前需要
- Python 客户端基础
- 合成记忆测试样例和明确的部署边界
保存更正、误召回和费用,让下一次测试能重现同样的问题。
先看结论
- 客户端包装层和引擎不是同一层。
- 方法签名不能替代运行测量。
- 源码结论要固定到具体提交。
先读公开客户端
审阅过的 hindsight_client.py 定义 Hindsight 包装类及 retain、recall、reflect 方法。包装层接收 bank_id 和相应输入,再委托给生成的 API 对象。方法名能帮助定位请求形状,却不能证明服务端所有分支都按同一种方式运行。
逐项查看传入的 bank ID、内容、查询和可选限制。若写入与查找意外使用不同 bank,看起来会像检索失败,实际却是请求去了两个空间。
定位服务端边界
固定版本的 memory_engine.py 包含 retain、recall 入口及其异步路径,也有 reflect_async。它们是源码阅读的锚点。文件很大,只应沿着有限调用链和相关测试下结论,避免声称已经审完全部实现。
引擎还会连接模型、存储和后台工作。客户端调用成功的含义必须结合响应字段理解,不能推断所有派生观察都已经刷新完毕。
留下可复核的追踪笔记
记录固定提交、方法签名、输入和响应类型。遇到不清楚的参数,应链接到相同提交的源码,不要从更新后的 README 倒推旧实现。本站的引用均指向捕获时的提交。
这次只审阅了源码,没有对运行服务做插桩。推荐的调用追踪是读者练习;耗时、调用次数和数据库行为需要另行执行后才能填写。
如何选择
| 比较维度 | 方案 A | 方案 B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
实施步骤
- 1
在固定版本里找到 retain、recall 与 reflect。
- 2
沿着同一个 bank_id 查看引擎入口。
- 3
记录响应字段与尚未核对的分支。
可复制示例
Hindsight.retain(bank_id, content)
-> client API request
-> MemoryEngine.retain_async(...)
-> storage and model work (inspect separately)常见问题
reflect 在哪里实现?
已审源码含 reflect_async,还应沿调用者继续检查服务端路径。
本文分析了数据库查询耗时吗?
没有,本篇仅作有边界的源码检查。