Google Agent Development Kit (ADK) 指南 第六章:记忆与状态管理
系列教程:这是《Google ADK 指南》系列的第六章。
前置知识:已完成第五章,掌握工具集成。
目录
1. 记忆系统基础
1.1 记忆的作用
记忆系统让 Agent 能够:
- 💬 保持上下文:多轮对话连贯
- 👤 记住用户:个性化服务
- 📚 积累经验:持续学习改进
- 🔗 关联信息:跨会话知识
1.2 记忆架构
┌─────────────────────────────────────────────────────┐
│ 记忆管理系统 │
├─────────────────────────────────────────────────────┤
│ ┌───────────────┐ ┌───────────────┐ │
│ │ 短期记忆 │ │ 长期记忆 │ │
│ │ (对话历史) │ │ (向量存储) │ │
│ └───────┬───────┘ └───────┬───────┘ │
│ │ │ │
│ └────────┬─────────┘ │
│ ↓ │
│ ┌───────────────┐ │
│ │ 记忆管理器 │ │
│ │ (检索/更新) │ │
│ └───────────────┘ │
└─────────────────────────────────────────────────────┘
1.3 记忆类型对比
| 类型 | 存储内容 | 存储位置 | 生命周期 |
|---|---|---|---|
| 短期记忆 | 对话历史 | 内存/Redis | 会话期间 |
| 长期记忆 | 重要事实 | 向量数据库 | 永久 |
| 程序记忆 | 技能规则 | 配置文件 | 永久 |
| 情景记忆 | 特定事件 | 数据库 | 按需 |
2. 短期记忆
2.1 对话缓冲记忆
python
from google.adk.memory import ConversationBufferMemory
# 基础配置
memory = ConversationBufferMemory(
max_turns=10, # 保留 10 轮对话
max_tokens=4000, # 最多 4000 tokens
return_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 窗口记忆
python
from google.adk.memory import ConversationWindowMemory
# 只保留最近 N 轮
memory = ConversationWindowMemory(
window_size=5, # 最近 5 轮
include_summary=True # 包含早期对话摘要
)
# 自动摘要早期对话
# 对话 1-10: 摘要
# 对话 11-15: 完整历史
2.3 实体记忆
python
from google.adk.memory import EntityMemory
# 提取并存储实体信息
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 向量记忆
python
from google.adk.memory import VectorStoreMemory
from google.adk.vectorstores import VertexAISearch
# 配置向量存储
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 总结记忆
python
from google.adk.memory import SummaryMemory
# 自动总结对话
memory = SummaryMemory(
summarizer=Agent(
model=Gemini("gemini-2.0-flash"),
instruction="用一句话总结对话要点"
),
summary_interval=10 # 每 10 轮总结一次
)
# 对话过程中自动创建总结
# "用户咨询了产品 A 的价格和库存,表示考虑购买"
3.3 组合记忆
python
from google.adk.memory import CompositeMemory
# 多层记忆系统
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 会话状态
python
from google.adk.state import SessionState
# 创建会话状态
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", lambda x: x + ["item3"])
# 删除状态
state.delete("current_step")
# 清除所有
state.clear()
4.2 工作流状态
python
from google.adk.state import WorkflowState
# 多步骤工作流状态
state = WorkflowState(
workflow_id="order_process",
steps=["validate", "payment", "ship", "complete"]
)
# 推进状态
state.next_step() # validate → payment
state.goto("ship") # 直接跳转到 ship
# 检查状态
if state.current_step == "payment":
process_payment()
# 状态回滚
state.rollback() # 回到上一步
# 状态持久化
state.save() # 保存到数据库
state.load() # 从数据库加载
4.3 用户状态
python
from google.adk.state import UserState
# 用户级别状态
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 记忆压缩
python
from google.adk.memory import CompressedMemory
# 压缩长对话
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 记忆优先级
python
from google.adk.memory import PrioritizedMemory
# 给记忆设置优先级
memory = PrioritizedMemory(
priority_rules={
"user_name": 10, # 高优先级
"preferences": 8,
"chat_history": 5, # 低优先级
"temporary": 1
}
)
# 空间不足时,优先保留高优先级记忆
5.3 记忆过期
python
from google.adk.memory import ExpiringMemory
# 设置记忆过期时间
memory = ExpiringMemory(
default_ttl=86400, # 默认 1 天
rules={
"session_data": 3600, # 会话数据 1 小时
"user_profile": 604800, # 用户信息 7 天
"preferences": 2592000 # 偏好 30 天
}
)
# 自动清理过期记忆
memory.cleanup_expired()
5.4 记忆缓存
python
from google.adk.memory import CachedMemory
# 缓存频繁访问的记忆
memory = CachedMemory(
backend="redis",
ttl=300, # 5 分钟
max_size=1000
)
# 热点记忆自动缓存
# 减少数据库查询
5.5 性能监控
python
from google.adk.memory import MonitoredMemory
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 开发与编排
- 第五章:工具集成与自定义
- 第六章:记忆与状态管理 ← 本章
- 第七章:企业级功能与安全
- 第八章:实战案例与最佳实践