Skip to content

记忆与多智能体 ​

两个问题合在一篇:怎么让它记住(上下文有限、跨会话会忘),和怎么让它分工(一个 Agent 能力有限、串起来又难控)。

一、记忆系统 ​

1. 为什么需要「记忆」 ​

约束后果
上下文窗口有限聊久了必须丢或压
每次请求都是无状态的换个会话它就忘了你是谁
长期偏好要跨会话保留需要持久化

记忆的本质是「在有限上下文里,选最该带上的信息」 —— 和 RAG 是同一个问题(检索),只是检索的是「历史」。

2. 短期记忆:最近几轮 ​

策略做法代价
滑动窗口只带最近 N 轮早期信息丢失(最稳、最常用)
摘要压缩更早的对话压成一段多一次模型调用、有损
混合最近 N 轮原文 + 更早的摘要推荐

配一个 token 预算:

可用 = 窗口上限 − 预留输出 − 系统提示词 − RAG 片段
超了 → 先砍最老的历史 → 再砍 RAG 条数 → 最后重压摘要
可用 = 窗口上限 − 预留输出 − 系统提示词 − RAG 片段
超了 → 先砍最老的历史 → 再砍 RAG 条数 → 最后重压摘要

3. 长期记忆:三种形态 ​

形态存什么实现
向量记忆历史片段,按语义召回存向量库,检索 topK
结构化画像「用户是程序员、在准备考研、讨厌被推销」表/JSON,key-value
事件时间线「3 月 2 日说要退款」「3 月 5 日已处理」按时间排序的事件表

三者配合:画像给「底色」,时间线给「最近发生了什么」,向量给「相关的旧事」。

4. 写入策略:什么该记 ​

不是所有对话都值得记。判断标准:

该记不该记
稳定偏好、身份信息(职业、语言)一次性的寒暄、语气词
明确的长期目标临时情绪
关键事实(订单号、约定时间)模型的推测
已发生的动作与结果重复信息

三个必做:

  1. 去重:同样的偏好不要记 10 遍(写之前先查相似记忆,超阈值就更新而不是新增);
  2. 冲突处理:新记忆和旧的矛盾时(「我住北京」→「我搬去上海了」),要覆盖 + 记变更时间,别两条都留着;
  3. 遗忘/过期:给记忆加 TTL 或重要性分数,定期衰减,避免越攒越乱。

5. 检索记忆:不只是相似度 ​

生成式 Agent 的经典做法是三维加权:

score = α·相关性 + β·时效性(recency) + γ·重要性(importance)
score = α·相关性 + β·时效性(recency) + γ·重要性(importance)
  • 相关性:向量相似度;
  • 时效性:越近越重要(指数衰减);
  • 重要性:写入时让模型打 1~10 分(「用户说他要考研」比「用户说了句谢谢」重要)。

只用相似度会出问题:三个月前一句「随便看看」和昨天一句「下周要下单」,语义可能很像。

6. 隐私与隔离(最容易出事的地方) ​

要求做法
用户隔离记忆按 userId 分库/分区,检索必须带过滤条件
删除权提供「删除我的记忆」,物理删除 + 索引重建
敏感信息手机号、身份证等不入记忆,或加密存储
审计谁在什么时候写入了什么记忆
跨租户永远不要把 A 的记忆检索给 B(这是重大事故)

面试口径:记忆是用户数据,不是模型参数。它的隔离、删除、审计要求和业务数据一样严。

二、多智能体系统 ​

7. 为什么要多个 Agent ​

动机说明
分工专业化检索 Agent、写作 Agent、审核 Agent,各自提示词更短更专
并行多个子任务同时跑,缩短总时长
隔离上下文每个 Agent 只看自己那部分,避免上下文爆炸
可校验一个生成、一个审查,比「自己检查自己」更有效

8. 四种协作模式 ​

① Supervisor(主管)        ② Pipeline(流水线)
    ┌──────────┐              A → B → C
    │supervisor│
    └──┬───┬───┘              ③ Debate(辩论)
   ┌───▼┐ ┌▼───┐                A ⇄ B → 裁决
   │ A  │ │ B  │
   └────┘ └────┘              ④ Group chat(群聊)
                                共享一个消息池,按规则发言
① Supervisor(主管)        ② Pipeline(流水线)
    ┌──────────┐              A → B → C
    │supervisor│
    └──┬───┬───┘              ③ Debate(辩论)
   ┌───▼┐ ┌▼───┐                A ⇄ B → 裁决
   │ A  │ │ B  │
   └────┘ └────┘              ④ Group chat(群聊)
                                共享一个消息池,按规则发言
模式优点缺点适合
Supervisor控制力强、易观测主管是瓶颈任务可分解、需要调度
Pipeline简单、确定不能回退有固定步骤(写作→审校→格式化)
Debate提升准确性成本翻倍需要高置信度的判断
Group chat灵活难收敛、易跑题头脑风暴(慎用于生产)

生产上最常见的是 Supervisor + Pipeline 的组合,Debate 用于关键决策点,Group chat 基本只用于演示。

9. 通信与共享状态 ​

方式说明
共享黑板(blackboard)所有 Agent 读写同一个状态对象,最简单
消息传递点对点/发布订阅,解耦但难追踪
结构化产物每个 Agent 输出 JSON,下游只读字段(最稳)

建议:用结构化产物代替自然语言传话。「检索 Agent 输出 {docs:[...], confidence:0.8}」比「检索 Agent 说了一段话让写作 Agent 自己理解」可靠得多。

10. 冲突与收敛 ​

问题处理
两个 Agent 结论矛盾第三方裁决(规则/仲裁 Agent/人工)
无限互相修改最大轮次(2~3 轮)+ 超时就采用最后一版
责任不清每个 Agent 有明确输入输出契约
成本失控每个 Agent 独立的 token 预算

11. 什么时候不要用多智能体 ​

  • 单个 Agent + 好工具就能解决;
  • 延迟敏感(多一次往返就多几百毫秒到几秒);
  • 团队没有可观测能力(出问题完全没法查);
  • 任务本身是线性的(那叫工作流,不叫多智能体)。

一句实话:多智能体最大的收益是「上下文隔离」,最大的代价是「调试地狱」。没有强观测能力之前,别上。

12. 速查表 ​

问题一句话
记忆的本质在有限上下文里检索最该带上的历史
短期记忆怎么存最近 N 轮原文 + 更早的摘要 + token 预算
长期记忆三种形态向量记忆、结构化画像、事件时间线
什么该记稳定偏好、长期目标、关键事实、已发生动作
冲突记忆怎么办覆盖 + 记变更时间,别两条并存
记忆检索怎么算分相关性 + 时效性 + 重要性加权
记忆最容易出的事故跨用户串数据,必须按 userId 强隔离
多智能体为了什么分工、并行、上下文隔离、互相校验
最常用的协作模式Supervisor + Pipeline
怎么传信息结构化产物(JSON),别用自然语言传话
什么时候别用单 Agent 能解、延迟敏感、没观测能力