Skip to content

证据、记忆与来源撤销 ​

长期记忆不是把模型说过的话存进数据库。每条记忆应带来源、租户、创建时间、有效期、验证状态和版本。用户偏好、任务事实、检索材料和工具观察用途不同,权限也不同。来源被撤销时,检索、缓存、摘要和模型上下文都要过滤,不能只在最终提示词里提醒模型忽略它。

第一个可运行实验:版本化记忆 ​

保存为 memory.py,用 Python 3.12 运行。

python
records = [
    {'key': 'language', 'value': '中文', 'source': 'user:1', 'version': 1, 'revoked': False},
    {'key': 'language', 'value': 'English', 'source': 'user:2', 'version': 2, 'revoked': False},
]

def current(records, key, revoked_sources=set()):
    valid = [r for r in records if r['key'] == key and not r['revoked']
             and r['source'] not in revoked_sources]
    return max(valid, key=lambda r: r['version']) if valid else None

assert current(records, 'language')['value'] == 'English'
assert current(records, 'language', {'user:2'})['value'] == '中文'
records[0]['revoked'] = True
assert current(records, 'language')['value'] == 'English'
records[1]['revoked'] = True
assert current(records, 'language') is None
print('memory provenance passed')

冲突记忆不能让模型投票决定;应用应按版本、确认事件或业务来源规则选择。删除或撤销要有审计记录,缓存键也要包含记忆版本。多租户隔离应在查询层完成,不能依赖 prompt 中的“不要泄露别的租户”。

变体实验 ​

让版本 2 来自模型而不是用户,要求它不能自动覆盖用户明确偏好。再撤销 user:1,确认旧版本不会因为排序而重新出现。

练习 ​

  1. 为记忆增加 expires_at 和 verified_by 字段。
  2. 设计“用户删除记忆”对向量索引、摘要缓存和审计记录的影响。
  3. 区分事实记忆、偏好记忆和任务状态的读取权限。

用心记录每一步成长