教程5.2:持久化对话代理


文档摘要

️ 教程 5.2:持久化对话代理 欢迎来到持久化会话管理!本教程将教你如何使用 和 SQLite 创建一个能够跨多个会话记住对话的 AI 代理。 你将学到的内容 DatabaseSessionService:使用 SQLite 的持久化会话存储 跨会话记忆:在程序重启后仍能记住对话 数据库管理:设置和管理会话数据库 数据持久化:长期存储对话历史 会话恢复:检索之前的对话 核心概念:持久化会话 DatabaseSessionService 将会话数据存储在 SQLite 数据库文件中。

️ 教程 5.2:持久化对话代理

欢迎来到持久化会话管理!本教程将教你如何使用 DatabaseSessionService 和 SQLite 创建一个能够跨多个会话记住对话的 AI 代理。

你将学到的内容

  • DatabaseSessionService:使用 SQLite 的持久化会话存储
  • 跨会话记忆:在程序重启后仍能记住对话
  • 数据库管理:设置和管理会话数据库
  • 数据持久化:长期存储对话历史
  • 会话恢复:检索之前的对话

核心概念:持久化会话

DatabaseSessionService 将会话数据存储在 SQLite 数据库文件中。这意味着:

  • 持久化存储 - 数据在程序重启后依然存在
  • 跨会话记忆 - 跨会话记住对话
  • 数据完整性 - 符合 SQLite 的 ACID 标准
  • 可扩展 - 可处理多个用户和会话
  • 需要设置 - 需要初始化数据库
  • 基于文件 - 仅限单机使用

非常适合:

  • 生产应用
  • 多用户系统
  • 长期对话历史
  • 数据分析与洞察

关键组件

1. DatabaseSessionService

from google.adk.sessions import DatabaseSessionService

2. 数据库结构

┌─────────────────────────────────────────────────────────────┐ │ SQLITE DATABASE │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ SESSIONS │ │ STATE │ │ EVENTS │ │ │ ├─────────────┤ ├─────────────┤ ├─────────────┤ │ │ │ session_id │ │ session_id │ │ event_id │ │ │ │ user_id │ │ state_data │ │ session_id │ │ │ │ app_name │ │ updated_at │ │ event_type │ │ │ │ created_at │ └─────────────┘ │ content │ │ │ └─────────────┘ │ timestamp │ │ │ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘

3. 带持久化的会话生命周期

┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ CREATE │───▶│ USE │───▶│ CLOSE │ │ SESSION │ │ SESSION │ │ SESSION │ │ (DB) │ │ (DB) │ │ (DB) │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Database │ │ Database │ │ Database │ │ Created │ │ Updated │ │ Archived │ └─────────────┘ └─────────────┘ └─────────────┘

教程概览

在本教程中,我们将创建一个 简单持久化代理,它能够:

  • 在程序重启后记住对话
  • 使用 SQLite 数据库进行持久化存储
  • 展示基本的跨会话记忆功能
  • 对比内存会话的区别

项目结构

5_2_persistent_conversation/ ├── README.md # This file - concept explanation ├── requirements.txt # Dependencies ├── agent.py # Main agent with database session management ├── app.py # Streamlit web interface └── sessions.db # SQLite database (created automatically)

学习目标

完成本教程后,你将掌握:

  • ✅ 如何使用 SQLite 设置 DatabaseSessionService
  • ✅ 如何创建持久化会话
  • ✅ 如何跨会话检索对话历史
  • ✅ 如何管理数据库连接和事务
  • ✅ 如何构建能够长期记住对话的代理

开始使用

  1. 安装依赖

    pip install -r requirements.txt
  2. 设置你的环境

    # Create a .env file with your Google AI API key echo "GOOGLE_API_KEY=your_api_key_here" > .env
  3. 运行代理

    # Start the Streamlit app streamlit run app.py
  4. 测试持久化功能

    • 与代理进行一次对话
    • 关闭浏览器或应用
    • 重新启动应用
    • 继续之前的对话——它会记住!

代码详解

数据库会话管理的关键代码:

# 1. Create database session service session_service = DatabaseSessionService( db_url="sqlite:///sessions.db" ) # 2. Initialize database (creates tables) await session_service.initialize() # 3. Create or retrieve session session = await session_service.get_session( app_name="demo", user_id="user123", session_id="session_user123" ) # 4. Use with Runner for agent execution async for event in runner.run_async( user_id=user_id, session_id=session_id, new_message=user_content ): # Handle response

测试你的代理

尝试以下持久化测试:

测试 1:跨会话记忆

Session 1: User: "My name is Bob" Agent: "Nice to meet you, Bob!" Session 2 (after restart): User: "What's my name?" Agent: "Your name is Bob!"

测试 2:兴趣记忆

Session 1: User: "I love coding" Agent: "That's great! Coding is a wonderful skill." Session 2 (after restart): User: "What do I love?" Agent: "You love coding!"

测试 3:数据库验证

1. Have a conversation 2. Check for sessions.db file in project directory 3. Restart the app 4. Continue conversation - it remembers!

下一步

完成本教程后,你将准备好:

  • 教程 5.3:云端记忆 - 学习基于云的会话存储
  • 高级数据库模式 - 多用户会话管理
  • 数据分析 - 分析对话模式

专业提示

  • 数据库位置:SQLite 文件会创建在你的项目目录中
  • 备份策略:建议备份 sessions.db 文件
  • 性能:SQLite 对中小型应用来说速度很快
  • 扩展性:对于大型应用,可以考虑 PostgreSQL 或云数据库

重要提示

  • 数据库文件:会在你的项目目录中创建一个 sessions.db 文件
  • 数据持久化:对话在程序重启后依然存在
  • 文件权限:确保项目目录有写入权限
  • 备份:数据库文件包含所有对话数据——请务必备份!

免责声明
本文档采用基于机器的 AI 翻译服务进行翻译。尽管我们力求准确,但请注意,自动翻译可能存在错误或不准确之处。应以原文语言版本的文档作为权威依据。如需获取关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。


作者与出处
原作者: Shubhamsaboo
来源:Shubhamsaboo
许可证:Apache-2.0
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: Shubhamsaboo 转发
评论区 (0)
U