当前位置: 首页 > news >正文

Google Agent Development Kit (ADK) 指南 第六章:记忆与状态管理

Google Agent Development Kit (ADK) 指南 第六章:记忆与状态管理

系列教程:这是《Google ADK 指南》系列的第六章。

前置知识:已完成第五章,掌握工具集成。


目录

  1. 记忆系统基础
  2. 短期记忆
  3. 长期记忆
  4. 状态管理
  5. 记忆优化策略

1. 记忆系统基础

1.1 记忆的作用

记忆系统让 Agent 能够:

  • 💬保持上下文:多轮对话连贯
  • 👤记住用户:个性化服务
  • 📚积累经验:持续学习改进
  • 🔗关联信息:跨会话知识

1.2 记忆架构

┌─────────────────────────────────────────────────────┐ │ 记忆管理系统 │ ├─────────────────────────────────────────────────────┤ │ ┌───────────────┐ ┌───────────────┐ │ │ │ 短期记忆 │ │ 长期记忆 │ │ │ │ (对话历史) │ │ (向量存储) │ │ │ └───────┬───────┘ └───────┬───────┘ │ │ │ │ │ │ └────────┬─────────┘ │ │ ↓ │ │ ┌───────────────┐ │ │ │ 记忆管理器 │ │ │ │ (检索/更新) │ │ │ └───────────────┘ │ └─────────────────────────────────────────────────────┘

1.3 记忆类型对比

类型存储内容存储位置生命周期
短期记忆对话历史内存/Redis会话期间
长期记忆重要事实向量数据库永久
程序记忆技能规则配置文件永久
情景记忆特定事件数据库按需

2. 短期记忆

2.1 对话缓冲记忆

fromgoogle.adk.memoryimportConversationBufferMemory# 基础配置memory=ConversationBufferMemory(max_turns=10,# 保留 10 轮对话max_tokens=4000,# 最多 4000 tokensreturn_messages=True# 返回消息对象)# 使用agent=Agent(memory=memory)# 添加消息memory.add_message(role="user",content="你好")memory.add_message(role="assistant",content="你好!有什么可以帮助你的?")# 获取历史history=memory.get_history()# 输出:[("user", "你好"), ("assistant", "你好!...")]# 清除记忆memory.clear()

2.2 窗口记忆

fromgoogle.adk.memoryimportConversationWindowMemory# 只保留最近 N 轮memory=ConversationWindowMemory(window_size=5,# 最近 5 轮include_summary=True# 包含早期对话摘要)# 自动摘要早期对话# 对话 1-10: 摘要# 对话 11-15: 完整历史

2.3 实体记忆

fromgoogle.adk.memoryimportEntityMemory# 提取并存储实体信息memory=EntityMemory(entities=["user_name","preferences","location"],extraction_prompt="从对话中提取用户信息")# 自动提取memory.extract_and_store("我叫张三,喜欢喝咖啡")# 存储:{"user_name": "张三", "preferences": ["咖啡"]}# 查询实体name=memory.get_entity("user_name")# "张三"

3. 长期记忆

3.1 向量记忆

fromgoogle.adk.memoryimportVectorStoreMemoryfromgoogle.adk.vectorstoresimportVertexAISearch# 配置向量存储memory=VectorStoreMemory(store=VertexAISearch(project_id="your-project",location_id="global",index_id="memory-index"),embedding_model="text-embedding-004",top_k=5)# 添加记忆memory.add("用户喜欢红色产品",metadata={"user_id":"u123","category":"preference"})memory.add("用户住在北京",metadata={"user_id":"u123","category":"location"})# 语义搜索results=memory.search("用户偏好什么颜色?")# 返回最相关的记忆

3.2 总结记忆

fromgoogle.adk.memoryimportSummaryMemory# 自动总结对话memory=SummaryMemory(summarizer=Agent(model=Gemini("gemini-2.0-flash"),instruction="用一句话总结对话要点"),summary_interval=10# 每 10 轮总结一次)# 对话过程中自动创建总结# "用户咨询了产品 A 的价格和库存,表示考虑购买"

3.3 组合记忆

fromgoogle.adk.memoryimportCompositeMemory# 多层记忆系统memory=CompositeMemory(# 短期:最近对话short_term=ConversationBufferMemory(max_turns=10),# 中期:会话摘要mid_term=SummaryMemory(),# 长期:向量存储long_term=VectorStoreMemory(store=VertexAISearch(...)),# 实体:用户信息entity=EntityMemory(entities=["profile","preferences"]))# 检索时融合所有记忆context=memory.get_context(query="用户喜欢什么?")

4. 状态管理

4.1 会话状态

fromgoogle.adk.stateimportSessionState# 创建会话状态state=SessionState(session_id="session_123",ttl=3600# 1 小时过期)# 设置状态state.set("user_id","u123")state.set("cart_items",["item1","item2"])state.set("current_step","payment")# 获取状态user_id=state.get("user_id")cart=state.get("cart_items")# 更新状态state.update("cart_items",lambdax:x+["item3"])# 删除状态state.delete("current_step")# 清除所有state.clear()

4.2 工作流状态

fromgoogle.adk.stateimportWorkflowState# 多步骤工作流状态state=WorkflowState(workflow_id="order_process",steps=["validate","payment","ship","complete"])# 推进状态state.next_step()# validate → paymentstate.goto("ship")# 直接跳转到 ship# 检查状态ifstate.current_step=="payment":process_payment()# 状态回滚state.rollback()# 回到上一步# 状态持久化state.save()# 保存到数据库state.load()# 从数据库加载

4.3 用户状态

fromgoogle.adk.stateimportUserState# 用户级别状态user_state=UserState(user_id="u123",storage="redis"# 或 "database", "gcs")# 用户画像user_state.set_profile({"name":"张三","level":"VIP","preferences":{"color":"红色","category":"电子产品"},"history":["order_001","order_002"]})# 访问计数user_state.increment("visit_count")user_state.increment("purchase_count")# 最后活跃时间user_state.update("last_active",datetime.now())

5. 记忆优化策略

5.1 记忆压缩

fromgoogle.adk.memoryimportCompressedMemory# 压缩长对话memory=CompressedMemory(compressor=Agent(model=Gemini("gemini-2.0-flash"),instruction="压缩对话,保留关键信息"),compression_ratio=0.3,# 压缩到 30%trigger_tokens=3000# 超过 3000 tokens 时压缩)# 原始对话:3000 tokens# 压缩后:900 tokens

5.2 记忆优先级

fromgoogle.adk.memoryimportPrioritizedMemory# 给记忆设置优先级memory=PrioritizedMemory(priority_rules={"user_name":10,# 高优先级"preferences":8,"chat_history":5,# 低优先级"temporary":1})# 空间不足时,优先保留高优先级记忆

5.3 记忆过期

fromgoogle.adk.memoryimportExpiringMemory# 设置记忆过期时间memory=ExpiringMemory(default_ttl=86400,# 默认 1 天rules={"session_data":3600,# 会话数据 1 小时"user_profile":604800,# 用户信息 7 天"preferences":2592000# 偏好 30 天})# 自动清理过期记忆memory.cleanup_expired()

5.4 记忆缓存

fromgoogle.adk.memoryimportCachedMemory# 缓存频繁访问的记忆memory=CachedMemory(backend="redis",ttl=300,# 5 分钟max_size=1000)# 热点记忆自动缓存# 减少数据库查询

5.5 性能监控

fromgoogle.adk.memoryimportMonitoredMemory memory=MonitoredMemory(base_memory=ConversationBufferMemory(...),metrics=["access_latency","storage_size","hit_rate"])# 获取指标metrics=memory.get_metrics()# {"access_latency": 0.05, "storage_size": "1MB", "hit_rate": 0.95}

系列教程导航

  • 第一章:ADK 简介与对比
  • 第二章:环境搭建与快速开始
  • 第三章:核心概念与架构
  • 第四章:Agent 开发与编排
  • 第五章:工具集成与自定义
  • 第六章:记忆与状态管理 ← 本章
  • 第七章:企业级功能与安全
  • 第八章:实战案例与最佳实践
http://www.jsqmd.com/news/516494/

相关文章:

  • Pixel Dimension Fissioner效果展示:会议纪要→行动项清单维度裂变
  • Vue3+Element Plus项目实战:优雅集成Minio前端直传功能(含进度条与错误处理)
  • 单细胞DotPlot美化实战:手把手教你用ggplot2打造个性化细胞注释条
  • 嵌入式音频系统I2S与ES8388参数配置全解析
  • Step3-VL-10B-Base助力软件测试:自动化生成测试用例与UI验证
  • Adafruit STSPIN220 Arduino步进电机驱动库详解
  • 深入浅出:从香农熵到互信息的核心概念与应用解析
  • 汇编语言入门:理解CPU如何执行代码
  • 用ArgoCD自动化部署kubeflow:手把手教你玩转deployKF发行版(v0.1.4最新版)
  • Pixel Dimension Fissioner步骤详解:上传文本→设置参数→裂变→导出PDF全流程
  • Qwen3-Reranker-8B多模态应用:结合图像与文本的重排序
  • EVA-02模型MySQL数据对接实战:自动化文本内容处理流水线
  • 大数据治理与AI:如何用机器学习提升数据质量监控效率
  • FLUX小红书V2模型安全防护:防范对抗样本攻击
  • SolidColorBrush在非UI线程创建的避坑指南(WPF MVVM绑定场景)
  • FLUX.1海景美女图惊艳效果:water splash+barefoot+joyful动态瞬间
  • OCS2实时求解器性能优化全攻略:如何让机械臂控制频率提升50%
  • NSudo权限提升机制实战解析:Windows系统权限管理架构深度剖析
  • HelloDrum:嵌入式电子鼓高精度压电传感库
  • 从QT上位机到Linux脚本:我的FPGA PCIe测速工具箱(附XDMA驱动API调用详解)
  • Qwen3-Reranker实战教程:Python API封装Qwen3-Reranker供其他服务调用
  • YOLOv5训练时卡在下载Arial.ttf字体?手把手教你两种快速修复方法(附代码)
  • 清单来了:8个降AI率网站测评,本科生降AIGC必备攻略
  • 公司注册申请公司如何选不踩坑?2026年靠谱推荐高新技术企业认证专业服务伙伴 - 品牌推荐
  • 从零开始构建3DGS数据集:实战指南与优化技巧
  • ChatGLM-6B在游戏NPC对话系统中的创新应用
  • GLM-Image文生图新手教程:5个高质量提示词模板(含中英文双语示例)
  • RFM用户分层实战指南|从理论到Python代码落地
  • CRNN识别双层车牌?一个‘偷懒’却有效的思路,给算法工程师的思维拓展课
  • 2026年企业选型必看:五家GEO优化服务商技术路径拆解与精准适配指南 - 品牌推荐