第16课:Agent 记忆系统 + 多智能体协作
本节目标:理解三类记忆(工作/短期/长期)及工程实现、掌握摘要记忆模式、了解多 Agent 协作四种模式与主流框架对比。
上篇的 Agent 每次对话都是"失忆"的。这一课给它装上记忆系统,再让它学会和别的 Agent 协作。
1. 三类记忆
code
Working Memory (工作记忆) ← 当前对话上下文(Prompt 里的消息)
Short-term Memory(短期记忆) ← 本次会话历史(滑窗/摘要)
Long-term Memory (长期记忆) ← 跨会话的持久知识(向量化)
2. 短期记忆的三种实现
① 滑窗记忆
java
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(20);
// 永远保留最近 20 条
问题:早期信息丢失。
② Token 限制记忆
java
ChatMemory memory = TokenWindowChatMemory.builder()
.maxTokens(4000, tokenizer)
.build();
优势:精确控制成本,但同样丢早期信息。
③ 摘要记忆(推荐 )
code
触发条件:消息超过 N 条或 token 超过阈值
动作:
1. 取最早的 K 条
2. LLM 生成摘要:"用户问了 X,助手回答了 Y"
3. 用摘要替换原消息
4. 摘要 + 最近消息 = 新的 context
java
public class SummaryChatMemory implements ChatMemory {
private List<ChatMessage> messages = new ArrayList<>();
private String summary = "";
public void add(ChatMessage msg) {
messages.add(msg);
if (countTokens(messages) > THRESHOLD) {
// 前一半消息做摘要
List<ChatMessage> toSummarize = messages.subList(0, messages.size()/2);
summary = llm.summarize(summary, toSummarize);
messages = new ArrayList<>(messages.subList(messages.size()/2, messages.size()));
}
}
public List<ChatMessage> messages() {
List<ChatMessage> result = new ArrayList<>();
if (!summary.isEmpty()) {
result.add(SystemMessage.from("之前对话摘要:" + summary));
}
result.addAll(messages);
return result;
}
}
3. 长期记忆:向量化用户事实
Code
用户对话历史
→ LLM 提取关键事实:"用户偏好疏肝解郁的方剂"
→ 向量化存入数据库
→ 新对话 → 检索相关事实 → 注入 system prompt
这和 ChatGPT 的 Memory 功能是一模一样的原理。
java
public void extractAndStore(Long userId, List<ChatMessage> conversation) {
String facts = llm.generate("""
从以下对话中提取关于用户的关键事实(偏好、症状等),每条一行:
%s
""".formatted(format(conversation)));
for (String fact : facts.split("\n")) {
float[] embedding = embedding.embed(fact);
memoryRepo.save(userId, fact, embedding);
}
}
记忆设计的反模式
Code
把所有历史无脑塞 context → token 爆炸
完全靠摘要 → 细节丢失
长期记忆不更新 → 用户信息过时
正确做法:
- 工作记忆:滑窗 + 摘要混合
- 长期记忆:向量化 + 时间衰减 + 定期归并
4. 多智能体协作
为什么需要多 Agent?
单 Agent 局限:一个 LLM 既思考又决策又执行,能力天花板低。多 Agent 优势:专业分工、并行执行、互相纠错、可扩展。
四种协作模式
Code
模式 1:层级式(Hierarchical)
Manager Agent
/ | \
Worker Worker Worker
→ 适用:复杂任务编排
模式 2:流水线式(Sequential)
Agent A → Agent B → Agent C → Output
→ 适用:步骤明确的流程
模式 3:辩论式(Debate)
Agent A 提出 → Agent B 反驳 → Agent A 修正 → Judge 裁决
→ 适用:需要严谨推理
模式 4:群体讨论式(Group Chat)
[Manager] 问题 → [Expert A] 我认为... → [Critic] 你们有漏洞...
→ 适用:开放式问题
主流框架对比
| 框架 | 出品方 | 抽象 | 难度 | 推荐度 |
|---|---|---|---|---|
| AutoGen | 微软 | 对话驱动 | 中 | 推荐 |
| CrewAI | 社区 | 角色+任务 | 低 | 推荐 |
| LangGraph | LangChain | 图编排 | 高 | 推荐 |
| MetaGPT | 社区 | SOP+角色 | 中 | 推荐 |
| Swarm | OpenAI | 函数移交 | 极低 | 推荐 |
选型建议
Code
原型/业务 → CrewAI(5分钟上手)
复杂研究 → AutoGen(灵活强大)
生产工作流 → LangGraph(最可控)
教学/轻量 → Swarm
5. Agent 设计八大原则
- 单一职责——每个 Agent/Tool 只做一件事
- 最小工具集——工具越多选错率越高
- 明确终止条件——max_iterations + 退出逻辑
- 错误优雅降级——工具失败告诉 LLM 原因
- 可观测性优先——每一步都要有日志
- 成本意识——简单问题别上 Agent,分层路由
- 安全边界——危险操作必须 HITL 人工确认
- 评估驱动——先有评估集再优化
核心要点
- 三类记忆:工作(滑窗)→ 短期(摘要)→ 长期(向量化)
- 摘要记忆是性价比之王:兼顾完整性和成本
- 多 Agent 协作四模式:层级/流水线/辩论/群体讨论
- 框架选型:原型用 CrewAI,生产用 LangGraph
- 八大设计原则——特别是"最小工具集"和"可观测性优先"
下一课:GraphRAG —— 知识图谱增强 RAG。