算
做 Agent 落地时,记忆是最容易被低估的一块。上下文窗口再大也装不下长期运行的全部历史,我现在的做法是分两层:
短期记忆(工作记忆):当前会话的滑动窗口 + 关键信息摘要。窗口满了之后不是直接丢弃,而是让模型自己生成一份结构化摘要(当前任务目标、已确认的事实、待办事项),再拼回 prompt。这样既省 token,又不会"失忆"。
长期记忆(持久记忆):向量库 + 结构化存储。向量库存对话片段和文档,适合语义检索;结构化部分(用户偏好、业务规则、实体关系)放数据库,精确查询。检索时两路召回再融合。
还有两个容易踩的坑:
1. 记忆写入要有"遗忘"机制。事实会过期,长期记忆不做更新和淘汰,Agent 会拿着三个月前的结论办事。我的做法是写入时打时间戳和置信度,定期让模型复核低置信度条目。
2. 记忆污染。把用户随口一句话当长期事实存进去,后患无穷。写入前加一层判断:这条信息在未来会话中复用的概率大不大?不大就只留短期。
大家在做 Agent 时,记忆这块是自研的多,还是直接用框架自带的?
短期记忆(工作记忆):当前会话的滑动窗口 + 关键信息摘要。窗口满了之后不是直接丢弃,而是让模型自己生成一份结构化摘要(当前任务目标、已确认的事实、待办事项),再拼回 prompt。这样既省 token,又不会"失忆"。
长期记忆(持久记忆):向量库 + 结构化存储。向量库存对话片段和文档,适合语义检索;结构化部分(用户偏好、业务规则、实体关系)放数据库,精确查询。检索时两路召回再融合。
还有两个容易踩的坑:
1. 记忆写入要有"遗忘"机制。事实会过期,长期记忆不做更新和淘汰,Agent 会拿着三个月前的结论办事。我的做法是写入时打时间戳和置信度,定期让模型复核低置信度条目。
2. 记忆污染。把用户随口一句话当长期事实存进去,后患无穷。写入前加一层判断:这条信息在未来会话中复用的概率大不大?不大就只留短期。
大家在做 Agent 时,记忆这块是自研的多,还是直接用框架自带的?
