AI Agent是一个以大型语言模型 (LLM) 为“大脑”,通过精巧的系统工程整合了规划、记忆、工具使用和反馈循环的复杂系统。记忆(Memory)模块提供状态保持和历史参考,记住之前的对话上下文,避免用户重复信息,使 Agent 具有状态,能够跨越多次交互保留和回忆信息。

图片

一、Agent核心架构介绍

一个完整的大模型 Agent 系统通常包含以下核心组件,它们协同工作,使得 Agent 能够自主完成复杂任务:

组件模块

核心功能

关键技术/实现

大脑 (LLM)

任务理解、规划、决策、生成

基础大模型、领域微调模型、Prompt 工程

规划 (Planning)

目标分解、任务链构建、策略制定

思维链 (CoT)、任务分解、自我反思

记忆 (Memory)

存储和召回历史信息、状态保持

向量数据库、SQL DB、状态机、会话缓存

工具 (Tools)

扩展能力边界,与环境交互

API 调用、代码执行、搜索引擎、自定义函数

这个架构的核心是一个高效的循环工作流,可以用下图来表示:

图片

二、记忆 (Memory)模块详解

记忆模块使 Agent 具有状态,能够跨越多次交互保留和回忆信息。

2.1 关键实现技术与分类

1.短期记忆 (Short-Term Memory)

实现技术:通常是对话上下文窗口。直接将最近的几轮对话历史(包括用户消息、Agent 的思考、工具调用和结果)作为文本拼接在下次请求的 Prompt 中。

2.长期记忆 (Long-Term Memory)

实现技术:检索增强生成 (RAG - Retrieval-Augmented Generation)

(1)写入:将对话历史或重要信息通过嵌入模型(Embedding Model)转化为向量(Vector),存入向量数据库(Vector DB)。

(2)读取 (检索):当需要信息时,将当前查询也转化为向量,在向量数据库中进行相似性搜索(Similarity Search),找到最相关的记忆片段,并注入到当前 Prompt 中。

核心组件:

(1)嵌入模型 (Embedding Model):如 text-embedding-ada-002, BGE, M3E。

(2)向量数据库 (Vector Database):如 Pinecone, Chroma, Milvus, Qdrant。

3.记忆分层与摘要

实现技术:对冗长的对话,可以定期调用 LLM 对过去的对话内容进行摘要(Summarization),将详细的短期记忆压缩成简洁的长期记忆要点存入向量数据库,从而节省上下文空间。

核心区别对比

特性

对话历史 (conversation_history)

记忆上下文 (memory_context)

本质

短期记忆 / 工作记忆

长期记忆 / 关联记忆

形式

原始对话记录的列表,保持严格的时间顺序

通过语义检索到的相关记忆片段,无视时间顺序

内容

最近几次交互的完整逐字记录

历史上所有交互中最相关的片段

技术

简单的列表数据结构,直接拼接进Prompt

向量化嵌入 + 向量数据库相似性搜索 (RAG)

目的

维持对话上下文的连贯性,让Agent知道“刚才我们说了什么”

汲取历史经验,让Agent知道“以前在类似情况下我们做过什么

类比

正在进行的谈话中,能记住对方刚说的最后一句话

根据当前话题,突然想起来几年前看过的一本书或经历过的一件事

为了更直观地展示它们在Agent处理请求时的协作流程,请看下面的序列图:

图片

2.2 具体场景示例

假设用户进行了以下一系列对话:

第1天:

用户: “请显示第一季度各产品类别的销售额。”

Agent: (执行查询,生成图表) “这是第一季度销售额图表...”

第2天:

用户: “哪个区域的电子产品销售最好?”

Agent: (执行查询) “北美区域的电子产品销售最佳...”

第3天:

用户: “为我们最好的产品类别生成一个年度报告。”

现在,Agent 需要处理第3天的请求,实现流程如下:

1.conversation_history角色:

(1)因为这是新一天的对话,conversation_history可能是空的,或者只包含当天的前几句问候语。

(2)它无法提供帮助,因为它不包含前几天关于“产品类别”和“区域销售”的关键对话。

2.memory_context的角色:

(1)Agent 会将当前查询 “为我们最好的产品类别生成一个年度报告” 进行向量化。

(2)在向量数据库中进行相似性搜索,会找到历史上高度相关的对话片段:

  • 第1天的对话片段(因为都包含“产品类别”)

  • 第2天的对话片段(因为包含“最好的”、“销售”)

(3)这些片段被检索出来,组成memory_context并注入Prompt。

3.LLM 收到的完整Prompt:

    f"""{system_prompt} # 以下是从长期记忆中检索到的相关历史对话(memory_context):相关记录1: [用户: 请显示第一季度各产品类别的销售额。 / Agent: ...]相关记录2: [用户: 哪个区域的电子产品销售最好? / Agent: ...] # 以下是当前对话的短期历史(conversation_history):[当前对话历史为空或只有问候] 用户: 为我们最好的产品类别生成一个年度报告。助手:"""

    4.LLM 的推理:

    (1)LLM 看到memory_context后,会理解到:

    • 用户之前查询过“产品类别销售额”,最好的类别可能是“电子产品”。

    • 用户之前关心过“区域销售”,报告中也许应该包含区域数据。

    (2)基于这些长期记忆当前请求,LLM 就能规划出正确的步骤:先查询哪些产品类别销售额最高,再针对该类别做详细的年度分析。

    三、记忆模块整体架构与技术方案

    3.1 记忆模块整体架构

    图片

    3.2 对话历史管理

    关键点conversation_history列表在内存中无限增长。

    功能点ConversationHistoryManager类

    (1)内存管理:使用固定大小的deque在内存中维护最近的对话历史

    (2)持久化存储:将对话历史保存到SQLite数据库

    (3)历史检索:根据会话ID获取最近的对话历史

    (4)摘要生成:将旧的对话记录总结并归档

    (5)会话管理:提供会话级别的清理和统计功能

    3.3 记忆上下文系统

    关键点:向量数据库中的记忆片段无限增长,检索效率下降。

    功能点EnhancedAgentMemory类

    (1)重要性评分:为每个记忆片段分配重要性评分

    (2)记忆淘汰:基于重要性评分实施记忆淘汰策略

    (3)相似记忆合并:合并高度相似的记忆片段,减少冗余

    (4)会话感知:支持按会话ID管理记忆

    (5)高级检索:支持基于重要性评分的记忆检索

    部分核心代码:

    (1)检索记忆

    图片

    (2)更新记忆

    图片

    总结

    对话历史conversation_history:是为了让Agent “别失忆”,维持当前对话的流畅和连贯。它是线性的、最近的

    记忆上下文memory_context:是为了让Agent“更聪明”,能够借鉴过去的经验来处理当前问题。它是语义的、跨时间的

    它们一个管“当下”,一个管“过去”,相互协作,共同构成了Agent完整且强大的记忆能力,并且在技术方案中关注:

    (1)控制内存增长:使用外部存储和固定大小队列;

    (2)优化存储效率:实现记忆摘要、合并和淘汰机制;

    (3)防止数据堆积:及时清理临时文件和旧数据;

    (4)监控系统健康:实时监控内存使用并自动处理异常;

    这些优化使得Agent系统在面对大量用户请求和高频使用场景能够长期稳定运行。

    Logo

    Agent 垂直技术社区,欢迎活跃、内容共建。

    更多推荐