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 对话缓冲记忆

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}

系列教程导航

相关推荐
no_work2 小时前
万能图像处理小助手1.1_傅里叶变化_椒盐噪声_直方图均衡等图片批量处理
图像处理·人工智能·python
twc8292 小时前
写好提示词
人工智能·大模型·llm·提示词工程
guoji77882 小时前
Gemini 3.1 Pro 混合专家系统与注意力机制深度拆解
人工智能
爱钓鱼的程序员小郭2 小时前
3D打印全流程自动化(AI增强)
人工智能
njsgcs2 小时前
wl迭代以哪个节点为最后零件点进行计算呢,怎么实现图不变性的
人工智能
workflower2 小时前
需求-什么时候才算完成
人工智能·机器人·集成测试·ai编程·软件需求
程序员爱酸奶2 小时前
CLI不死,GUI必死?
人工智能
简单光学2 小时前
极简衍射光学神经网络(m-DONN)
人工智能·深度学习·神经网络·衍射光学神经网络
2401_884662102 小时前
CSDN年度技术趋势预测文章大纲
python