教程7:会话与内存管理


文档摘要

教程 7:会话与内存管理 掌握使用会话实现自动对话记忆!本教程将教你如何利用 OpenAI Agents SDK 内置的会话记忆功能,在多次运行代理时自动维护对话历史,而无需手动管理内存。 你将学到的内容 自动记忆:会话可自动处理对话历史 SQLite 会话:持久化与内存中的对话存储 内存操作:添加、检索和管理对话条目 会话管理:多会话及自定义实现 核心概念:什么是会话? 会话提供自动对话记忆,让你无需在每次轮次之间手动处理 。可以把会话看作一个智能对话数据库,它: 自动存储所有对话历史 在每次代理运行前检索上下文 为不同的会话 ID 维护独立的对话 支持跨应用重启的持久化存储 教程概览 本教程将演示三种关键会话模式: 1.

教程 7:会话与内存管理

掌握使用会话实现自动对话记忆!本教程将教你如何利用 OpenAI Agents SDK 内置的会话记忆功能,在多次运行代理时自动维护对话历史,而无需手动管理内存。

你将学到的内容

  • 自动记忆:会话可自动处理对话历史
  • SQLite 会话:持久化与内存中的对话存储
  • 内存操作:添加、检索和管理对话条目
  • 会话管理:多会话及自定义实现

核心概念:什么是会话?

会话提供自动对话记忆,让你无需在每次轮次之间手动处理.to_input_list()。可以把会话看作一个智能对话数据库,它:

  • 自动存储所有对话历史
  • 在每次代理运行前检索上下文
  • 为不同的会话 ID 维护独立的对话
  • 支持跨应用重启的持久化存储
┌─────────────────────────────────────────────────────────────┐ │ SESSION WORKFLOW │ ├─────────────────────────────────────────────────────────────┤ │ │ │ USER INPUT │ │ │ │ │ ▼ │ │ ┌─────────────┐ 1. RETRIEVE HISTORY │ │ │ SESSION │◀─────────────────────────────────────────┐ │ │ │ MEMORY │ │ │ │ └─────────────┘ 2. PREPEND TO INPUT │ │ │ │ │ │ │ ▼ │ │ │ ┌─────────────┐ │ │ │ │ AGENT │ 3. PROCESS WITH CONTEXT │ │ │ │ RUNNER │ │ │ │ └─────────────┘ │ │ │ │ │ │ │ ▼ │ │ │ ┌─────────────┐ 4. STORE NEW ITEMS │ │ │ │ RESPONSE │──────────────────────────────────────────┘ │ │ │ GENERATED │ │ │ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘

教程概览

本教程将演示三种关键会话模式

1. 基础 SQLite 会话basic_sessions.py)

  • In-memory and persistent session storage
  • Automatic conversation history management
  • Simple multi-turn conversations

2. Advanced Memory Operations (memory_operations.py)

  • Memory manipulation with get_items(), add_items(), pop_item()
  • Conversation corrections and modifications
  • Session management operations

3. Multiple Sessions (multi_sessions.py

  • 管理不同对话上下文
  • 会话隔离与组织
  • 自定义会话实现

项目结构

7_sessions/ ├── README.md # This file - concept explanation ├── requirements.txt # Dependencies ├── streamlit_sessions_app.py # Interactive Streamlit demo (recommended) ├── 7_1_basic_sessions/ │ ├── agent.py # SQLite sessions basics │ └── README.md # Basic sessions documentation ├── 7_2_memory_operations/ │ ├── agent.py # Advanced memory operations │ └── README.md # Memory operations documentation ├── 7_3_multi_sessions/ │ ├── agent.py # Multiple session management │ └── README.md # Multi-sessions documentation └── env.example # Environment variables template

学习目标

完成本教程后,你将理解:

  • ✅ 如何使用 SQLiteSession 实现自动内存管理
  • ✅ 内存与持久化会话的区别
  • ✅ 高级内存操作用于对话管理
  • ✅ 管理多个并发会话
  • ✅ 何时使用会话而非手动对话管理

开始使用

  1. 安装 OpenAI Agents SDK

    pip install openai-agents
  2. 安装依赖

    pip install -r requirements.txt
  3. 设置环境变量

    cp env.example .env # Edit .env and add your OpenAI API key
  4. 启动交互式演示(推荐)

    streamlit run streamlit_sessions_app.py

    或者运行单个示例:

  5. 测试基础会话

    python 7_1_basic_sessions/agent.py
  6. 尝试内存操作

    python 7_2_memory_operations/agent.py
  7. 测试多会话

    python 7_3_multi_sessions/agent.py

示例用例

基础会话

  • “金门大桥位于哪个城市?” → “它位于哪个州?”
  • “我叫爱丽丝” → “我的名字是什么?”
  • “我是一名开发者” → “我从事什么工作?”

内存操作

  • 使用 pop_item() 更正之前的消息:`
  • Clearing conversation history with clear_session()
  • Adding custom conversation items

Multiple Sessions

  • Different users: user_123, user_456
  • Different contexts: support_ticket_789, sales_inquiry_101
  • Different applications: chatbot_session, `assistant_session

关键会话模式

1. 基础会话使用

from agents import Agent, Runner, SQLiteSession agent = Agent(name="Assistant", instructions="Reply concisely.") session = SQLiteSession("conversation_123") result = await Runner.run(agent, "Hello", session=session)

2. 持久化 vs 内存

# In-memory (lost when process ends) session = SQLiteSession("user_123") # Persistent file-based session = SQLiteSession("user_123", "conversations.db")

3. 内存操作

# Get conversation history items = await session.get_items() # Add custom items await session.add_items([{"role": "user", "content": "Hello"}]) # Remove last item (for corrections) last_item = await session.pop_item() # Clear all history await session.clear_session()

会话设计最佳实践

  1. 有意义的会话 ID:使用描述性 ID,如 user_12345 or support_ticket_789
  2. Persistent Storage: Use file-based sessions for production applications
  3. Session Isolation: Keep different conversation contexts in separate sessions
  4. Memory Management: Use pop_item(),以便更正对话
  5. 清理:当对话需要重新开始时,清除会话

下一步

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

故障排除

  • 内存未持久化:确保你使用基于文件的 SQLiteSession,并指定数据库路径
  • 会话冲突:为不同对话上下文使用唯一会话 ID
  • 性能问题:考虑为高流量应用实现自定义会话后端
  • 数据库错误:检查 SQLite 数据库文件的文件权限

专业提示

  • 从简单入手:开发和测试时先从内存会话开始
  • 规划会话架构:在构建前设计好会话 ID 策略
  • 监控内存使用:跟踪对话长度并实施清理策略
  • 测试会话持久化:验证对话能否在应用重启后继续存在
  • 考虑扩展性:为生产系统规划自定义会话实现

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


发布者: 作者: 转发
评论区 (0)
U