上下文工程:会话、记忆Context Engineering: Sessions, Memory

上下文工程:会话与记忆

作者:Kimberly Milam 和 Antonio Gulli

发布日期:2025年11月

🧠

构建有状态、智能的LLM智能体

探索会话和记忆在构建有状态、智能LLM智能体中的关键作用

目录

第一部分:基础概念

  • Introduction - 介绍
  • Context Engineering - 上下文工程

第二部分:会话管理

  • Sessions - 会话
  • 跨框架差异
  • 多智能体系统
  • 生产环境考虑

第三部分:记忆系统

  • Memory - 记忆
  • 记忆类型
  • 记忆生成
  • 记忆检索

第四部分:评估与部署

  • Testing and Evaluation - 测试与评估
  • Production Considerations - 生产环境考虑
  • Privacy and Security - 隐私与安全
  • Conclusion - 结论

介绍Introduction

核心目标:探索会话(Sessions)和记忆(Memory)在构建有状态、智能LLM智能体中的关键作用

关键概念

📋 Context Engineering

上下文工程:在LLM的上下文窗口中动态组装和管理信息的过程,以实现有状态、智能的智能体

💬 Sessions

会话:包含整个对话的容器,保存对话的按时间顺序的历史记录和智能体的工作记忆

🧠 Memory

记忆:长期持久化的机制,捕获和整合跨多个会话的关键信息,为LLM智能体提供连续和个性化的体验

核心理念:有状态和个性化的AI从上下文工程开始

上下文工程Context Engineering

定义:动态组装和管理LLM上下文窗口中的信息,使智能体能够记住、学习和个性化交互

从Prompt Engineering到Context Engineering

📝 Prompt Engineering

提示工程:

  • 专注于制作最优的系统指令
  • 通常是静态的
  • 关注单个提示

🔧 Context Engineering

上下文工程:

  • 处理整个负载
  • 基于用户、对话历史和外部数据动态构建
  • 战略性选择、总结和注入信息

类比:上下文工程就像智能体的"mise en place"(备料过程)——厨师在烹饪前收集和准备所有食材的关键步骤

上下文组件Context Components

上下文工程组装一个复杂的负载,包含多种组件:

🎯 指导推理的上下文

  • System Instructions:定义智能体角色、能力和约束的高级指令
  • Tool Definitions:智能体可用于与外部世界交互的API或函数的架构
  • Few-Shot Examples:通过上下文学习指导模型推理过程的精选示例

📊 证据与事实数据

  • Long-Term Memory:跨多个会话收集的关于用户或主题的持久化知识
  • External Knowledge:从数据库或文档检索的信息,通常使用RAG
  • Tool Outputs:工具返回的数据或结果
  • Sub-Agent Outputs:被委派特定子任务的专业智能体返回的结论或结果

💬 即时对话信息

  • Conversation History:当前交互的逐轮记录
  • State / Scratchpad:智能体用于即时推理过程的临时、进行中的信息或计算
  • User's Prompt:需要解决的即时查询

上下文管理流程Context Management Flow

1. Fetch Context

获取上下文
检索用户记忆、RAG文档和最近的对话事件

2. Prepare Context

准备上下文
动态构建完整的LLM调用提示

3. Invoke LLM

调用LLM和工具
迭代调用直到生成最终响应

4. Upload Context

上传上下文
将新信息上传到持久化存储

图1:智能体的上下文管理流程

关键点:这个循环在智能体操作循环的每一轮对话中持续进行,确保智能体始终拥有最相关的上下文

会话Sessions

定义:封装单个连续对话的即时对话历史和工作记忆的基础元素

会话的核心组件

📜 Events(事件)

对话历史:对话的构建块

  • User Input:用户消息(文本、音频、图像等)
  • Agent Response:智能体对用户的回复
  • Tool Call:智能体决定使用外部工具或API
  • Tool Output:工具调用返回的数据

🗂️ State(状态)

工作记忆:结构化的"工作记忆"或草稿板

  • 保存与当前对话相关的临时、结构化数据
  • 例如:购物车中的商品
  • 随着对话进行,智能体会追加新事件
  • 可能根据智能体中的逻辑改变状态

重要:生产智能体的执行环境通常是无状态的,因此对话历史必须保存到持久化存储以维持连续的用户体验

跨框架差异Cross-Framework Differences

虽然核心思想相似,但不同的智能体框架以不同的方式实现会话、事件和状态

🔧 Agent Frameworks

智能体框架充当代码与LLM之间的通用翻译器

  • 维护LLM的对话历史和状态
  • 使用此上下文构建LLM请求
  • 解析并存储LLM响应

🎯 ADK(Agent Development Kit)

使用显式的Session对象

  • 包含Event对象列表
  • 包含单独的state对象
  • Session就像文件柜,有一个文件夹用于对话历史,另一个用于工作记忆

🔄 LangGraph

没有正式的"session"对象

  • State就是Session
  • State保存对话历史(作为Message对象列表)和所有其他工作数据
  • State是可变的,可以被转换

目标:最终目标是生成LLM可以理解的"request"。对于Gemini模型,这是List[Content]

多智能体系统的会话Sessions for Multi-Agent Systems

挑战:在多智能体系统中,多个智能体协作,必须共享信息

两种主要方法

🔄 Shared Unified History

共享统一历史:

  • 所有智能体从同一个单一对话历史中读取和写入所有事件
  • 每个智能体的消息、工具调用和观察都按时间顺序追加到一个中央日志
  • 适用于紧密耦合、协作的任务
  • 需要单一事实来源

📦 Separate Individual Histories

独立个人历史:

  • 每个智能体维护自己的私有对话历史
  • 所有内部过程(中间思维、工具使用、推理步骤)都保留在智能体的私有日志中
  • 通信仅通过显式消息进行
  • 智能体共享其最终输出,而非其过程

实现方式:独立历史通常通过Agent-as-a-Tool或使用Agent-to-Agent (A2A) Protocol实现

跨多个智能体框架的互操作性Interoperability Across Multiple Agent Frameworks

挑战:框架的内部数据表示引入了关键的架构权衡

问题分析

❌ 当前问题

  • 框架的内部数据表示使智能体与LLM解耦
  • 但也使其与使用其他智能体框架的智能体隔离
  • Session的存储模型将数据库架构直接耦合到框架的内部对象
  • 创建刚性、相对不可移植的对话记录

✅ 解决方案

Memory(记忆)层:

  • 将共享知识抽象为框架无关的数据层
  • 保存已处理的规范信息
  • 数据结构不耦合到任何单个框架的内部数据表示
  • 作为通用、公共数据层

关键洞察:Memory层允许异构智能体通过共享公共认知资源实现真正的协作智能,而无需自定义翻译器

会话的生产环境考虑Production Considerations for Sessions

将智能体迁移到生产环境时,会话管理系统必须从简单日志演变为强大的企业级服务

三个关键领域

🔒 Security and Privacy

安全与隐私:

  • Strict Isolation:会话由单个用户拥有,必须强制执行严格隔离
  • PII Redaction:在会话数据写入存储之前编辑个人身份信息
  • 使用Model Armor等工具

✅ Data Integrity

数据完整性:

  • TTL Policy:实施生存时间策略自动删除非活动会话
  • Retention Policy:定义会话应保留多长时间
  • Deterministic Order:确保操作按确定性顺序追加到会话历史

⚡ Performance

性能与可扩展性:

  • 会话数据在每次用户交互的"热路径"上
  • 读取和写入必须极快
  • 减少传输数据的大小
  • 过滤或压缩会话历史

管理长上下文对话Managing Long Context Conversation

挑战:随着对话扩展,对话的token使用量增加,导致成本、延迟和质量问题

四个主要限制

📏 Context Window Limits

上下文窗口限制:

每个LLM都有一次可以处理的最大文本量。如果对话历史超过此限制,API调用将失败

💰 API Costs

API成本:

大多数LLM提供商根据发送和接收的token数量收费。更短的历史意味着更少的token和每轮更低的成本

⏱️ Latency

延迟:

向模型发送更多文本需要更长时间处理,导致用户响应时间更慢。压缩使智能体感觉快速和响应灵敏

📉 Quality

质量:

随着token数量增加,由于上下文中的额外噪声和自回归错误,性能可能会变差

类比:管理长对话就像聪明的旅行者为长途旅行打包行李箱——成功的关键不在于你能带多少,而在于只带你需要的东西

压缩策略Compaction Strategies

压缩策略缩小长对话历史,将对话压缩以适应模型的上下文窗口

主要策略

1️⃣ Keep the Last N Turns

保留最后N轮:

  • 最简单的策略
  • 智能体只保留最近N轮对话("滑动窗口")
  • 丢弃所有更旧的内容

2️⃣ Token-Based Truncation

基于Token的截断:

  • 在将历史发送到模型之前,计算消息中的token
  • 从最近开始向后工作
  • 包含尽可能多的消息而不超过预定义的token限制

3️⃣ Recursive Summarization

递归总结:

  • 对话的较旧部分被AI生成的总结替换
  • 随着对话增长,智能体定期使用另一个LLM调用总结最旧的消息
  • 这个总结用作历史的压缩形式

重要:高级压缩策略应该在后台异步执行昂贵的操作(如递归总结)并持久化结果

触发压缩Triggering Compaction

智能体必须决定何时需要压缩

触发机制类别

📊 Count-Based Triggers

基于计数的触发:

  • Token大小或轮数阈值:
  • 当对话超过某个预定义阈值时压缩对话
  • 这种方法通常"足够好"用于管理上下文长度

⏰ Time-Based Triggers

基于时间的触发:

  • 不是由对话大小触发
  • 由缺乏活动触发
  • 如果用户停止交互一段时间(如15或30分钟),系统可以在后台运行压缩任务

🎯 Event-Based Triggers

基于事件的触发:

  • 语义/任务完成:
  • 当智能体检测到特定任务、子目标或对话主题已完成时触发压缩

示例:可以使用ADK的EventsCompactionConfig在配置的轮数后触发基于LLM的总结

记忆Memory

定义:从对话或数据源中提取的有意义信息的快照

记忆与会话的关系

📋 Sessions

会话:

  • 生成记忆的主要数据源
  • 临时工作台
  • 包含所有必要的工具、笔记和参考资料
  • 立即可访问但也是临时的

🧠 Memory

记忆:

  • 管理会话大小的关键策略
  • 有组织的文件柜
  • 只保存最关键、最终确定的文档
  • 跨会话持久化以提供连续和个性化的体验

类比:会话就像你在特定项目上使用的工作台,而记忆就像有组织的文件柜

记忆的关键能力Key Capabilities of Memory

强大的记忆系统将基本聊天机器人转变为真正智能的智能体

🎨 Personalization

个性化:

  • 记住用户偏好、事实和过去的交互
  • 为未来响应量身定制
  • 例如:记住用户最喜欢的运动队或他们偏好的飞机座位

📏 Context Window Management

上下文窗口管理:

  • 当对话变长时,完整历史可能超过LLM的上下文窗口
  • 记忆系统可以通过创建总结或提取关键事实来压缩此历史
  • 在不每轮发送数千token的情况下保留上下文
  • 降低成本和延迟

🔍 Data Mining and Insight

数据挖掘和洞察:

  • 通过分析跨多个用户的存储记忆(以聚合、保护隐私的方式)
  • 从噪声中提取洞察
  • 例如:零售聊天机器人可能识别许多用户正在询问特定产品的退货政策

🚀 Agent Self-Improvement

智能体自我改进:

  • 智能体通过创建关于其自身性能的程序记忆来学习
  • 记录哪些策略、工具或推理路径导致成功结果
  • 使智能体能够建立有效解决方案的剧本
  • 随时间适应和改进其问题解决

记忆生态系统Memory Ecosystem

创建、存储和利用记忆是一个协作过程,每个组件都有独特的角色

1. User

提供记忆的原始源数据

2. Agent

配置决定记住什么和何时

3. Framework

提供记忆交互的结构和工具

4. Session Storage

存储会话的逐轮对话

5. Memory Manager

处理记忆的存储、检索和压缩

图2:会话、记忆和外部知识之间的信息流

关键点:记忆管理器是一个主动系统,而不仅仅是被动的向量数据库。它的核心价值在于能够智能地提取、整合和策划记忆

记忆 vs RAGMemory vs RAG

记忆经常与另一个关键架构模式进行比较:检索增强生成(RAG)

📚 RAG Engines

检索增强生成引擎:

  • 主要目标:将外部、事实知识注入上下文
  • 数据源:静态、预索引的外部知识库(PDF、wiki、文档、API)
  • 隔离级别:通常共享。知识库通常是全局、只读资源
  • 信息类型:静态、事实和权威
  • 写入模式:批处理,通过离线管理操作触发
  • 读取模式:几乎总是"作为工具"检索

🧠 Memory Managers

记忆管理器:

  • 主要目标:创建个性化和有状态的体验
  • 数据源:用户和智能体之间的对话
  • 隔离级别:高度隔离。记忆几乎总是按用户范围限定
  • 信息类型:动态和(通常)用户特定
  • 写入模式:事件驱动处理,在某些节奏触发或作为工具触发
  • 读取模式:作为工具检索或静态检索

类比:RAG是智能体的研究图书馆,而记忆管理器是其个人助理。一个真正智能的智能体需要两者

记忆类型Types of Memory

智能体的记忆可以根据信息如何存储和如何捕获进行分类

记忆结构

📝 Content(内容)

从源数据中提取的物质:

  • Structured Memories:结构化记忆,以字典或JSON等通用格式存储
  • Unstructured Memories:非结构化记忆,捕获较长交互、事件或主题本质的自然语言描述

🏷️ Metadata(元数据)

提供关于记忆的上下文:

  • 记忆的唯一标识符
  • 记忆"所有者"的标识符
  • 描述记忆内容或数据源的标签

信息类型

❓ Declarative Memory

陈述性记忆("知道什么"):

  • 智能体对事实、数字和事件的知识
  • 智能体可以明确陈述或"声明"的所有信息
  • 包括一般世界知识和特定用户事实

🔧 Procedural Memory

程序性记忆("知道如何"):

  • 智能体对技能和工作流的知识
  • 通过隐式演示如何正确执行任务来指导智能体的行动
  • 帮助回答"如何"问题

组织模式Organization Patterns

记忆管理器通常使用以下一种或多种模式来组织记忆

📦 Collections

集合模式:

  • 将内容组织为单个用户的多个自包含、自然语言记忆
  • 每个记忆是一个独特的事件、总结或观察
  • 允许存储和搜索与特定目标或主题相关的较大、非结构化信息池

👤 Structured User Profile

结构化用户档案模式:

  • 将记忆组织为一组关于用户的核心事实
  • 就像一张不断更新的联系人卡片
  • 设计用于快速查找基本、事实信息
  • 如姓名、偏好和账户详细信息

📜 Rolling Summary

滚动总结模式:

  • 将所有信息整合到一个单一的、不断发展的记忆中
  • 代表整个用户-智能体关系的自然语言总结
  • 管理器不断更新这个主文档
  • 常用于压缩长会话

存储架构Storage Architectures

存储架构是决定智能体能够多快和多智能地检索记忆的关键决策

🔍 Vector Databases

向量数据库:

  • 基于语义相似性而非精确关键字进行检索
  • 记忆被转换为嵌入向量
  • 数据库找到与用户查询概念最接近的匹配
  • 适用于检索非结构化、自然语言记忆
  • 擅长"原子事实"

🕸️ Knowledge Graphs

知识图谱:

  • 将记忆存储为实体网络及其关系
  • 检索涉及遍历此图以找到直接和间接连接
  • 允许智能体推理不同事实如何链接
  • 适用于结构化、关系查询
  • 擅长"知识三元组"

🔀 Hybrid Approach

混合方法:

  • 用向量嵌入丰富知识图谱的结构化实体
  • 使系统能够同时执行关系和语义搜索
  • 提供图的结构化推理
  • 提供向量数据库的细致、概念搜索
  • 两全其美

创建机制Creation Mechanisms

记忆还可以根据如何创建以及信息如何派生进行分类

💭 Explicit vs Implicit

显式 vs 隐式:

  • Explicit Memories:当用户给智能体直接命令记住某事时创建
  • Implicit Memories:当智能体在没有直接命令的情况下从对话中推断和提取信息时创建

🔧 Internal vs External

内部 vs 外部:

  • Internal Memory:记忆管理直接内置在智能体框架中
  • External Memory:使用单独、专门的服务专用于记忆管理

记忆范围

👤 User-Level Scope

用户级范围:

  • 最常见的实现
  • 为每个个人创建连续、个性化的体验
  • 记忆绑定到特定用户ID

💬 Session-Level Scope

会话级范围:

  • 用于压缩长对话
  • 创建从单个会话中提取的洞察的持久记录
  • 上下文隔离到该特定会话

🌐 Application-Level Scope

应用级范围:

  • 应用程序所有用户都可访问的记忆
  • 用于提供共享上下文
  • 广播系统范围信息

多模态记忆Multimodal Memory

描述智能体如何处理非文本信息(如图像、视频和音频)的关键概念

📥 Memory from Multimodal Source

来自多模态源的记忆:

  • 最常见的实现
  • 智能体可以处理各种数据类型(文本、图像、音频)
  • 但它创建的记忆是从该源派生的文本洞察
  • 例如:处理用户的语音备忘录以创建记忆
  • 不存储音频文件本身,而是转录音频并创建文本记忆

🖼️ Memory with Multimodal Content

具有多模态内容的记忆:

  • 更高级的方法
  • 记忆本身包含非文本媒体
  • 智能体不仅描述内容,还直接存储内容
  • 例如:用户上传图像并说"记住这个设计作为我们的logo"
  • 智能体创建一个直接包含图像文件的记忆

当前趋势:大多数当代记忆管理器专注于处理多模态源,同时生成文本内容,因为生成和检索非结构化二进制数据需要专门的模型、算法和基础设施

记忆生成Memory Generation

定义:自主地将原始对话数据转换为结构化、有意义的洞察

记忆生成是一个LLM驱动的ETL(提取、转换、加载)管道

四个阶段

1. Ingestion

摄入
客户端提供原始数据源

2. Extraction

提取与过滤
提取有意义内容

3. Consolidation

整合
冲突解决和去重

4. Storage

存储
持久化到持久存储层

图3:记忆生成的高级算法

核心优势:记忆管理器自动化此管道,提供将对话噪声转换为结构化知识的单一、连贯系统

记忆提取Memory Extraction

目标:回答基本问题:"这次对话中的什么信息足够有意义,可以成为记忆?"

这不是简单总结;这是一个有针对性的、智能的过滤过程

提取方法

📋 Schema-Based

基于架构:

  • LLM被赋予预定义的JSON架构或模板
  • 使用结构化输出等LLM功能
  • LLM被指示使用对话中的相应信息构建JSON

📝 Natural Language

自然语言:

  • LLM由简单的自然语言主题定义引导
  • 定义"有意义"的含义
  • 提供一组主题定义

🎯 Few-Shot Prompting

少样本提示:

  • LLM被"展示"应该提取什么信息
  • 提示包括输入文本和理想的高保真记忆的几个示例
  • LLM从示例中学习所需的提取模式

关键点:"有意义"不是一个普遍概念;它完全由智能体的目的和用例定义

记忆整合Memory Consolidation

定义:将新信息整合到一个连贯、准确和不断发展的知识库中

解决的基本问题

⚠️ 问题1: 信息重复

用户可能在不同的对话中以多种方式提到相同的事实。简单的提取过程会创建两个冗余记忆

⚠️ 问题2: 冲突信息

用户的状态随时间变化。没有整合,智能体的记忆将包含相互矛盾的事实

⚠️ 问题3: 信息演进

一个简单的事实可以变得更细致。初始记忆可能会演变得更复杂的理解

⚠️ 问题4: 记忆相关性衰减

并非所有记忆永远有用。智能体必须主动修剪旧的、陈旧的或低置信度的记忆

主要操作:UPDATE(更新)、CREATE(创建)、DELETE/INVALIDATE(删除/作废)

记忆来源Memory Provenance

可信度直接来自记忆的来源——其起源的详细记录和历史

数据源类型

🚀 Bootstrapped Data

引导数据:

  • 从内部系统预加载的信息
  • 如CRM
  • 高信任数据
  • 用于初始化用户记忆
  • 解决冷启动问题

💬 User Input

用户输入:

  • 显式提供的数据(如表单,高信任)
  • 从对话中隐式提取的信息(通常不太可信)

🔧 Tool Output

工具输出:

  • 从外部工具调用返回的数据
  • 不鼓励从工具输出生成记忆
  • 这些记忆往往是脆弱和陈旧的
  • 更适合短期缓存

关键点:这些细节对于两个原因至关重要:它们决定了每个源在记忆整合期间的权重,以及智能体在推理期间应该多大程度上依赖该记忆

触发记忆生成Triggering Memory Generation

智能体必须决定何时应该尝试记忆生成。这是一个关键的架构选择

触发策略

📊 Session Completion

会话完成:

  • 在多轮会话结束时触发生成
  • 成本效益高
  • 但可能创建较低保真度的记忆

🔄 Turn Cadence

轮次节奏:

  • 在特定轮数后运行过程
  • 例如:每5轮
  • 平衡成本和保真度

⚡ Real-Time

实时:

  • 在每一轮后生成记忆
  • 确保记忆高度详细和新鲜
  • 但成本最高

权衡:频繁生成确保记忆高度详细和新鲜,但成本最高。不频繁生成更具成本效益,但可能创建较低保真度的记忆

记忆作为工具Memory-as-a-Tool

更高级的方法:允许智能体自己决定何时创建记忆

在此模式中,记忆生成被公开为工具(如create_memory)

工作流程

🔧 工具定义

工具定义应该定义什么类型的信息应该被认为是有意义的

🤖 智能体决策

智能体可以分析对话并自主决定在识别出值得持久化的有意义信息时调用此工具

优势:这将识别"有意义信息"的责任从外部记忆管理器转移到智能体(以及你作为开发者)本身

注意:记忆生成是一个昂贵的操作,需要LLM调用和数据库写入。对于生产中的智能体,记忆生成应该几乎总是作为后台过程异步处理

记忆检索Memory Retrieval

目标:发现与当前对话最相关的记忆

评分维度

🎯 Relevance

相关性(语义相似性):

这个记忆在概念上与当前对话有多相关?

⏰ Recency

最近性(基于时间):

这个记忆是最近创建的吗?

⭐ Importance

重要性(重要性):

这个记忆整体有多关键?

最佳策略:混合方法,结合所有三个维度的分数。仅依赖基于向量的相关性是一个常见的陷阱

检索时机

🔄 Proactive Retrieval

主动检索:

  • 在每轮开始时自动加载记忆
  • 确保上下文始终可用
  • 但对于不需要记忆访问的轮次引入不必要的延迟

⚡ Reactive Retrieval

反应式检索(Memory-as-a-Tool):

  • 智能体被赋予一个工具来查询其记忆
  • 自己决定何时检索上下文
  • 更高效和健壮

推理中的记忆Inference with Memories

一旦检索到相关记忆,最后一步是策略性地将它们放入模型的上下文窗口

放置策略

📋 System Instructions

系统指令:

  • 将记忆附加到系统指令
  • 保持对话历史干净
  • 给予记忆高权威
  • 理想用于稳定、"全局"信息
  • 如用户档案

💬 Conversation History

对话历史:

  • 将检索到的记忆直接注入逐轮对话
  • 可以放置在完整对话历史之前
  • 或就在最新用户查询之前
  • 理想用于临时、情景记忆

风险:系统指令中存在"过度影响"的风险,对话历史中存在"对话注入"的风险

最佳实践:混合策略通常最有效。使用系统提示作为稳定、全局的记忆,使用对话注入或记忆作为工具用于临时、情景的记忆

程序性记忆Procedural Memories

定义:改进智能体工作流和推理的机制

存储"如何"不是一个信息检索问题;它是一个推理增强问题

程序性记忆生命周期

📤 Extraction

提取:

  • 需要专门的提示
  • 从成功的交互中提取可重用的策略或"剧本"
  • 而不是仅仅捕获事实或有意义的信息

🔀 Consolidation

整合:

  • 策划工作流本身("如何")
  • 将新的成功方法与现有的"最佳实践"整合
  • 修补已知计划中的有缺陷步骤
  • 修剪过时或无效的程序

🔍 Retrieval

检索:

  • 目标不是检索数据来回答问题
  • 而是检索一个计划来指导智能体如何执行复杂任务
  • 程序性记忆可能具有与陈述性记忆不同的数据架构

与微调的区别:微调是相对缓慢、离线的训练过程,改变模型权重。程序性记忆通过动态注入正确的"剧本"到提示中提供快速、在线的适应

测试与评估Testing and Evaluation

评估智能体的记忆是一个多层过程

评估维度

📊 Memory Generation Quality

记忆生成质量:

  • Precision:精确度,智能体创建的记忆中有多少是准确和相关的?
  • Recall:召回率,智能体从源中应该记住的所有相关事实中,它捕获了百分之多少?
  • F1-Score:精确度和召回率的调和平均值

⚡ Memory Retrieval Performance

记忆检索性能:

  • Recall@K:当需要记忆时,正确的记忆是否在前K个检索结果中找到?
  • Latency:延迟,整个检索过程必须在严格的延迟预算内执行

🎯 End-to-End Task Success

端到端任务成功:

  • 记忆实际上是否帮助智能体更好地完成其工作?
  • 使用LLM"评判"比较智能体的最终输出与黄金答案
  • 评判确定智能体的答案是否准确

持续改进:评估不是一次性事件;它是持续改进的引擎。迭代过程涉及建立基线、分析失败、调整系统和重新评估

生产环境考虑Production Considerations

将记忆启用的智能体从原型迁移到生产需要关注企业级架构关注点

关键要求

🏗️ Architecture

架构:

  • 解耦记忆处理与主应用程序逻辑
  • 事件驱动模式
  • 通过直接、非阻塞API调用实现

📈 Scalability

可扩展性:

  • 处理高频事件而不失败
  • 防止死锁或竞争条件
  • 使用事务性数据库操作或乐观锁定
  • 强大的消息队列

🌍 Resilience

弹性:

  • 对瞬态错误具有弹性
  • 使用指数退避的重试机制
  • 多区域复制
  • 全局一致的知识库

流程:1. 智能体推送数据 → 2. 记忆管理器在后台处理 → 3. 记忆被持久化 → 4. 智能体检索记忆

隐私和安全风险Privacy and Security Risks

记忆来源于并包含用户数据,因此需要严格的隐私和安全控制

关键安全原则

🔒 Data Isolation

数据隔离:

  • Strict Isolation:严格隔离是档案的首要规则
  • 记忆必须在用户或租户级别严格隔离
  • 使用限制性访问控制列表(ACL)强制执行
  • 一个用户永远不能访问另一个用户的记忆

🛡️ PII Redaction

PII编辑:

  • 在将任何文档归档之前,档案员执行关键的安全步骤
  • 仔细检查每一页以编辑敏感的个人身份信息(PII)
  • 确保在不产生责任的情况下保存知识
  • 使用Model Armor等工具

Memory Poisoning:档案员受过训练,可以发现并丢弃伪造或故意误导的文档——这是防止记忆中毒的保障。系统必须在将信息提交到长期记忆之前验证和清理信息

结论Conclusion

核心要点:会话和记忆是构建有状态、智能LLM智能体的基础

关键总结

📋 Context Engineering

上下文工程:

  • 动态组装和管理LLM上下文窗口中的信息
  • 从静态提示工程演进到动态上下文工程
  • 像智能体的"mise en place"(备料过程)

💬 Sessions

会话:

  • 封装单个连续对话的即时对话历史和工作记忆
  • 包含Events(事件)和State(状态)
  • 支持多智能体系统的不同架构模式

🧠 Memory

记忆:

  • 长期持久化的机制
  • 捕获和整合跨多个会话的关键信息
  • 提供连续和个性化的体验
  • 与RAG不同,专注于用户特定上下文

🚀 Production Ready

生产就绪:

  • 关注安全、隐私、数据完整性、性能和可扩展性
  • 异步处理记忆生成
  • 严格的用户隔离和PII编辑

最终目标:通过有效的上下文工程、会话管理和记忆系统,开发者可以创建更强大、个性化和持久的AI体验

🙏

Thank You!

谢谢!

Context Engineering: Sessions, Memory
上下文工程:会话与记忆

作者:Kimberly Milam 和 Antonio Gulli

发布日期:2025年11月

1 / 37

目录