Post

Agent 与记忆系统

Agent与记忆系统是AI应用的核心。短期记忆采用MySQL会话表实现滑动窗口机制,只保留最近5轮对话并生成摘要,避免Token过载。长期记忆基于Weaviate向量数据库,按6种类型分类管理(如偏好、承诺),设定不同重要性阈值与保留天数,冲突处理采用时间衰减系数而非物理覆盖。意图识别通过轻量提示词将用户输入路由至预设模块,兜底策略调用大模型。Agent规划从基础的ReAct到复杂决策的ToT/GoT,工业级采用Plan-and-Execute加Self-Reflection确保稳定性。多Agent动态路由通过LangGraph条件边实现任务分发。框架选型上,线性任务用LangChain,复杂循环与多Agent协同用LangGraph。记忆更新遵循版本化与时间戳加权原则。工程挑战包括分层治理、增量摘要、强制终止条件等。

智能体 Agent 阅读 4 点赞 0 评论 0

Agent 与记忆系统:从基础到进阶的全面教程

导语

在复杂 AI 应用中,Agent 如同“大脑”,而记忆系统则是支撑其决策的“知识库”。无论是处理多轮对话、复杂任务规划,还是自主调用工具,Agent 都需要清晰的记忆管理和逻辑推理能力。本文将系统拆解 Agent 与记忆系统的核心技术:从短期/长期记忆的设计,到意图识别、规划能力,再到不同框架(LangChain/LangGraph)的选型与工程落地,帮助你构建完整的 Agent 系统知识体系。

1. 长期记忆 vs 短期记忆:构建“活的上下文”

1.1 短期记忆:应对即时对话的“窗口缓存”

是什么?
短期记忆用于存储最近的对话片段,避免上下文信息因历史过长而“爆炸”。我们采用 MySQL 会话表+消息表 实现,核心是 滑动窗口机制:只保留最近 5 轮对话,并通过 AI 对这 5 轮内容生成摘要,将原始信息压缩为“关键信息包”。

为什么这样设计?
- 模型的 Token 数量有限(如单次请求约 4k Token),若直接存储全量历史,会因“信息过载”导致关键内容被稀释(即“中间遗忘”)。
- 滑动窗口仅保留最近 5 轮,每 5 轮生成摘要,既能减少 Token 消耗,又能确保核心对话不丢失。

如何实现?
- 对话发生时,实时将消息存入会话表,同时维护“轮次计数器”,当达到 5 轮时,触发摘要生成逻辑(调用 LLM 对这 5 轮内容进行关键信息提取)。
- 后续对话中,用“最近 5 轮原始消息+最新摘要”作为上下文,避免全历史污染。

1.2 长期记忆:向量化存储的“深层知识库”

是什么?
长期记忆采用 Weaviate 向量数据库 存储,将文本转化为向量,便于语义检索。按 6 种类型分类管理,每种类型有独立的 重要性阈值 和 保留天数:

类型 重要性阈值 保留天数 典型场景
person(人物) 0.8 365 存储用户身份、历史互动关系
place(地点) 0.7 180 地理位置、场景信息
preference(偏好) 0.9 730 用户兴趣、习惯(如喜欢的饮品)
commitment(承诺) 0.9 365 用户明确的目标或约定(如“明天交报告”)
learning(学习) 0.8 1095 知识积累、技能学习记录
fact(事实) 0.6 90 时效性强的信息(如新闻、公式)

为什么这样分类?
不同类型的信息对“重要性”和“时效性”需求不同:
- 偏好和承诺(重要性阈值 0.9)需长期保留(730 天/365 天),如用户“喜欢周杰伦”的偏好可能持续数年;
- 事实(重要性阈值 0.6)时效性强(90 天),如“今天气温 25℃”需及时更新。

管理策略与生命周期
长期记忆的生命周期分为 6 个阶段:
- 创建:模型输出内容后,评估是否为“关键信息”(结合重要性阈值);
- 评估:对新信息标记“重要性分数”和“时间戳”,高分数信息优先保留;
- 迁移:短期记忆摘要达到 10 条后,将高价值摘要迁移至长期记忆;
- 压缩:定期对相似记忆(如重复的“学习记录”)进行聚类,生成“记忆摘要”;
- 归档:过期信息(如超过保留天数)移至归档库,仅保留元数据;
- 删除:归档后数据经审计无价值则永久删除。

冲突处理:为什么不物理覆盖?
当新信息与旧信息冲突(如“今天想喝奶茶” vs “昨天想喝可乐”),我们不直接覆盖旧记录,而是通过 时间衰减系数 标记旧信息为“低权重”,新信息为“高权重”。检索时,系统优先返回最近且高权重的记忆,确保历史轨迹完整(便于分析用户偏好变化)。

1.3 为什么向量库+摘要而非 MySQL 直接筛选历史?

你可能会问:“用 MySQL 存储历史,通过 LIKE 或 Text-to-SQL 筛选不也可以吗?”
① 语义理解 vs 文本匹配:
自然语言中存在大量模糊表达(如“前天那道几何题”),MySQL 只能通过精确关键词匹配,容错率低;而向量库通过语义检索(如计算余弦相似度),能理解“几何题”的上下文,返回更相关的历史。

② 信息提纯 vs 原始存储:
若直接存储全量历史,Token 会因“中间遗忘”失效(如用户聊到第 20 轮时,前 10 轮内容已模糊);摘要生成相当于“信息提纯”,保留核心细节(如“几何题+解题思路”),避免 Token 浪费。

2. 意图识别与路由:给 Agent “指路”的总控中心

当用户输入问题时,首页总控 Agent 的核心任务是 意图识别与路由——将用户需求分类为预设场景,并分发至对应模块。

2.1 路由逻辑

  • 预设意图匹配:通过轻量提示词(如 请将输入分类为:拍照搜题/写作辅导/判题/闲聊),快速将用户输入映射到固定意图;
  • 统一返回路由 Schema:匹配成功后,返回结构化路由信息(如 {"action": "jump_to", "page": "math_solver"}),前端根据此 Schema 跳转页面;
  • 兜底策略:若未匹配到预设意图,调用大模型进行自由对话(如“我不太理解你的需求,可以补充说明吗?”);
  • 安全护栏:对越界输入(如违法内容),通过 Guardrails 拦截,强化角色边界(如“我只能回答与学习相关的问题”)。

2.2 路由的本质:明确“谁做什么”

总控 Agent 如同“交通枢纽”,通过分类路由避免“大模型盲目生成”,确保每个任务有专门的子模块处理(如“拍照搜题”调用图像识别+解题模型,“判题”调用代码校验工具)。

3. Agent 规划能力:从“直觉生成”到“逻辑搜索”

Agent 的核心价值在于规划——将大模型的“直觉式回答”转化为“可执行的逻辑路径”。不同任务复杂度对应不同规划策略:

3.1 基础任务:ReAct(边做边想)

  • 流程:Thought → Action → Observation → 下一轮
  • Thought:模型思考“下一步做什么”(如“需要调用计算器”);
  • Action:执行工具调用(如 call_calculator(2+3));
  • Observation:工具返回结果(如“5”);
  • 循环:重复上述步骤直到任务完成。
  • 优点:实时纠错,适合短链任务(如“计算 100×1.2”);
  • 缺点:易死循环(如重复调用同一工具)、Token 消耗大(每轮携带全历史)。

3.2 复杂决策:ToT/GoT(思维树/图)

  • ToT(思维树):每步生成多个候选分支(如“解题方法 A/B/C”),通过回溯剪枝选最优路径(适合多解法问题,如“数学证明题”);
  • GoT(思维图):节点间任意连接,可合并不同路径的结论(比树更灵活,适合跨领域问题,如“旅行规划:订机票+酒店+景点”)。

3.3 工业级稳定:Plan-and-Execute + Self-Reflection

  • Plan-and-Execute:先拆解任务为“清晰步骤”(如“1. 查天气 2. 订酒店 3. 安排行程”),再严格执行;
  • 优势:逻辑清晰,适合长链条任务(如“写一篇产品分析报告”);
  • Self-Reflection:执行后进行自我批判(如“计划是否遗漏预算?”),迭代优化输出。

4. 规划范式进阶:CoT、ToT、反思(Reflexion)

4.1 主流规划方法对比

方法 核心逻辑 典型场景
CoT(思维链) 让模型“显式写出推理过程”(线性单链) 简单数学推理(如“2+3=5”)
ToT(思维树) 多分支搜索,可回溯剪枝 复杂决策(如“选旅游目的地”)
GoT(思维图) 节点间任意连接,合并中间结论 跨领域问题(如“项目管理”)
Plan-and-Solve 预定义步骤,严格执行 确定性任务(如“数据统计”)
Reflexion(反思) 执行→反思→优化,迭代改进输出 需长期优化的目标(如“学习计划”)

CoT vs Planning 的本质区别:
- CoT 是“把思考过程写出来”(不可执行,仅辅助模型理解);
- Planning 是“生成可执行的任务序列”(如“①调工具查天气 ②订酒店”),每步可独立验证。

5. 多 Agent 动态路由:让任务“分而治之”

多 Agent 协作的核心是 动态路由——总控 Agent 根据意图或上下文条件,将任务分发到不同子 Agent。

5.1 实现方式

  • LangGraph 条件边:通过 conditional edge 定义路由规则(如“若问题含‘数学题’则调 math_solver_Agent”);
  • 路由函数输出:让 LLM 直接输出结构化决策(如 {"agent": "math_solver", "params": {"question_id": 123}});
  • 分支执行与汇聚:子 Agent 执行完成后,将结果回传给主流程,实现闭环。

5.2 与意图识别的关系

意图识别是“分类用户输入”,动态路由是“分配任务到子 Agent”,两者本质是同一件事的不同粒度(前者是“大方向”,后者是“具体执行者”)。

6. LangChain vs LangGraph:不同场景的框架选型

6.1 核心差异

特性 LangChain(LCEL) LangGraph
架构 线性流水线(DAG 有向无环) 复杂网络地图(Graph 有向有环)
状态管理 单向数据流,难持久化 内置状态机,支持持久化/回溯
循环控制 极难实现循环 天然支持循环和分支(如重试)
场景 基础 RAG、单向 Agent 多 Agent 协同、人机交互循环

LangGraph 三大优势:
- 持久执行:故障中断后可从断点恢复(如“订酒店失败,从‘选日期’重新开始”);
- 人机协同:执行中可暂停,人工修改状态(如“用户说‘换个酒店’,系统更新酒店列表”);
- 全面记忆:短期工作记忆+跨会话长期记忆(支持历史轨迹分析)。

7. 记忆冲突与更新:让“历史”服务于“现在”

7.1 冲突处理原则

  • 偏好类冲突:如“喜欢咖啡” vs “喜欢茶”,不覆盖旧记录,而是标记旧记录为“低权重”,新记录为“高权重”;
  • 事实类冲突:如“用户说‘住北京’” vs “住上海”,采用“版本化覆盖”,旧记录标记为 superseded(失效),新记录为当前有效版本。

7.2 实现细节

  • 带时间戳存储:每条记忆包含 content(内容)、timestamp(时间)、weight(权重);
  • 检索时加权:权重 = 当前时间 - 记忆时间 × 衰减系数(如 0.9^t,t 为天数),确保新记忆优先被检索。

8. 高频问题速答

Q:多 Agent 如何协作?
A:总控 Agent 识别意图后,动态路由到子 Agent(如“数学题→math_Agent”“写作→writer_Agent”),子 Agent 完成任务后将结果回传给总控,最终整合输出。

Q:群聊场景如何拓展记忆?
A:数据结构增加 Group_ID,每条消息附带 Sender_ID;短期记忆窗口扩大至 20 条,长期记忆按“群组+个人”公私域隔离存储。

Q:如何避免“脏记忆”?
A:记忆写入前需“双重校验”:① 模型对新信息做置信度评估(低置信度进“待确认区”);② 定期审计历史记录,删除重复或矛盾内容。

深度拆解:工程落地的关键挑战

1. 长期记忆增长:如何防止检索变慢?

  • 分层治理:高频记忆(如“学习记录”)用向量库实时检索,低频记忆(如“历史对话”)归档至冷存储;
  • 聚类压缩:每 100 条相似记忆生成“摘要”,减少向量库条数。

2. 短期记忆摘要粒度:如何避免信息丢失?

  • 关键信息分流:用户问题含“身份信息”(如“我叫小明”),直接存入长期记忆;
  • 增量摘要:每 5 轮对话生成“增量摘要”(仅新增内容),避免重复计算。

3. 死循环终止:如何确保 Agent 收敛?

  • 强制终止条件:设置最大轮次(如 10 轮)或最大 Token 消耗(如 1000 Token);
  • 重复检测:连续 3 轮调用同一工具且结果无变化,判定为“幻觉”,触发反思。

小结

Agent 与记忆系统的核心是“记忆管理 + 自主规划”:
- 记忆系统:短期用滑动窗口+摘要,长期用向量库+分类管理,冲突处理靠时间衰减;
- Agent 规划:简单任务用 ReAct,复杂任务用 ToT/GoT,工业级用 Plan-and-Execute + Reflexion;
- 框架选择:线性任务用 LangChain,复杂循环/多 Agent 用 LangGraph,需自主决策场景优先 Agent。

掌握这些技术,你就能构建稳定、高效的 AI 应用“大脑”,处理从简单问答到复杂任务的全场景需求。

继续阅读

全部归档
Context 与 Harness 工程
Context 与 Harness 工程

大模型应用工程分四层递进:Prompt Engineering让模型听懂需求,Context Engineering提供决策信息,Harness Engineering确保稳定执行,Learning Loop实现持续优化。后一层包含前一层。Agent落地中,模型决定天花板,Harness决定落地能力,其六层组件覆盖输入侧(上下文精细化)、动作侧(工具系统、执行编排)和校验侧(评估观测、约束恢复)。上下文腐化通过召回(RAG)、压缩(摘要提炼)、组装(结构化存储)治理。状态必须外化到文件系统,按任务状态、会话中间结果、长期记忆分层存储。实操中通过项目级/用户级/会话级配置及自动化钩子实现稳定执行。掌握这些工程方法可让大模型从“听话”到“能干”,显著提升复杂任务成功率。

混合技术应用
混合技术应用

本文通过9个典型场景,拆解RAG、Agent、多模态处理、工具调用、工程化部署等核心技术的混合应用逻辑。RAG构建企业知识库,解决幻觉与私有知识问题,生产端经文档解析、智能切片、向量化建库,消费端通过多路召回、重排、流式生成实现闭环。Agent通过意图路由、短期/长期记忆与工具调用形成对话记忆闭环;多Agent编排借助总控与子Agent分工处理复杂任务。FC、MCP与RAG构成“黄金三角”,分别负责动态工具调用、标准化接入与静态知识检索。多模态摘要降维、NL2SQL自助取数、高并发工程策略、数仓ETL及推荐系统三层链路进一步拓展应用边界。读者可掌握从技术选型到系统落地的完整思路,核心在于场景化组合RAG+向量库+大模型+工具链的底层逻辑。

OpenClaw 自托管 Agent 网关
OpenClaw 自托管 Agent 网关

OpenClaw是一个自托管开源AI助手网关,将飞书、钉钉、微信等聊天软件统一接入本地LLM Agent,实现多渠道统一接入、自托管安全可控。其核心三层架构(Channel/Brain/Body)实现关注点分离:Gateway层负责消息路由与鉴权,从不调用模型;Brain层负责指令解析、人格定义和LLM推理,支持Claude/GPT等模型无缝切换;Body层提供工具调用(如天气、日程)和文件操作。消息处理遵循七阶段Agentic循环(归一化、路由、上下文组装、LLM推理、ReAct工具循环、技能加载、持久化记忆)。记忆采用Markdown+YAML文件存储,支持人工编辑和Git备份,通过检索式访问避免上下文窗口爆炸。自动化任务支持Heartbeat心跳、Cron定时和Webhook事件触发。安全设计三道权限闸:入口闸(本地连接与配对码)、工具闸(默认拒绝白名单)、执行闸(Docker沙箱隔离)。实践踩坑提示包括记忆选择性遗忘、技能依赖耦合、Cron时区问题及Docker权限控制。核心优势:透明可控、安全隔离、灵活扩展。

评论