最佳实践
什么值得记住
判断标准——满足任一条即值得记:
- 未来会复用:下次还会用到这个信息
- 影响决策:能帮未来做选择
- 减少重复沟通:不用每次重新解释
- 降低风险:记住已知坑/约束可避坑
典型值得记:决策及理由、根因、稳定约束、用户稳定偏好、验证结论、已知风险、下一步待办。
Agent 集成下的简化判断:这条信息在下一次会话中还有用吗? 是 → 存;只在当前任务有用 → 不存。
什么不应该记住
绝对不记:
- secret / token / 密码 / 凭证(用 secret vault)
- 完整日志、完整命令输出
- 临时调试片段(console.log、临时变量)
- 未经确认的猜测
不该记:
- 一次性指令(「这次先这样」)
- 流水账(「我刚才装了 X」)
- 可从代码直接推断的信息(无需记忆)
如何写高质量记忆
四要素:简洁、可验证、带上下文、带原因,不堆噪声。
改写前 / 改写后
❌ 改写前(差):
text
我刚刚在登录模块加了个检查,把 token 的过期时间比对了一下,之前好像有问题,现在应该好了,顺便用了 moment 库
问题:没原因、不可验证、像流水账、堆了无关细节(moment)。
✅ 改写后(好):
text
登录偶发 500 的根因是 token 过期校验用本地时区比对 expiry。修复方式是统一用 UTC 比对并移除 moment 依赖,已验证 200 次并发登录无 500。
写法约定
- 独立自足的陈述句:脱离当时的对话也能看懂;不加「决定:」「记忆:」之类前缀(HMG 自动推断记忆的类型与确定性)
- 一条记忆一句话:每次存 1-3 条,每条 1-2 句,别写小作文
- 用对话的语言存:中文对话存中文,英文对话存英文
- 标注来源:用户亲口说的记为
user(更权威),agent 自己总结的记为agent;事后纠正时能追溯这条记忆当初是谁说的 - 不需要先查重:HMG 内部自动精确去重;语义相近的旧记忆如果已在眼前,用
correct更新而不是新增
如何写高质量交接
handoff 五要素:做了什么 / 为什么 / 验证 / 风险 / 下一步。它是给下一次会话看的交接文档,会话启动简报会优先召回它。
交接模板
text
做了什么: <一句话改动>
为什么: <动机/根因>
验证: <跑什么/结果>
风险: <隐患/边界>
下一步: <待办>
好坏对比
❌ 差:改完了,应该没问题
✅ 好:修复登录 500: token 过期校验改 UTC。原因: 旧逻辑用本地时区误判。验证: 200 次并发无 500。风险: 旧客户端缓存 expiry 需评估。下一步: 查刷新 token 流程。
如何减少召回噪声
| 做法 | 说明 |
|---|---|
| 写具体 query | 登录 500 根因 优于 登录 |
| 用名词短语 | PostgreSQL 连接池配置 优于 我们之前决定用什么数据库来着;保留关键实体(人名/项目名/技术名/文件名) |
| 用对作用域 | 项目信息别放 tenant;Agent 集成中 scope 自动推断,无需操心 |
| 及时纠正过期信息 | 别让旧信息和新信息并存 |
| 不写低质量记忆 | 源头减噪最有效 |
用 --profile compact | 给 Agent 用精简结果 |
| 反馈噪声短语 | hmg noise-feedback "某噪声词" 帮 HMG 学会过滤 |
bash
# 遇到反复出现的噪声结果, 反馈给 HMG
hmg noise-feedback "npm install 成功" # 让这类短语被检索时降权
危险操作注意
日常使用没什么可担心的,只有三件事需要留意:
- 凭证不进记忆:API key、密码、连接串用
hmg secret store存保险库。误写进记忆了,立即hmg govern <atom-id> --action tombstone --destroy-payload清除。 tombstone/seal不可逆:执行前确认 atom 没搞错(hmg history <atom-id>可查)。只是暂时不想看到,用quarantine(可恢复)。- store 不要提交到 Git:store 目录含索引和二进制数据,加进
.gitignore;备份直接复制目录即可。
下一章:集成