教程 5:上下文管理 掌握使用 OpenAI Agents SDK 开发上下文感知智能体!本教程将教你如何利用 传递自定义上下文对象,使智能体在整个执行过程中能够访问用户数据、会话信息和状态。 你将学到的内容 RunContextWrapper:向智能体传递自定义上下文对象 上下文感知工具:构建可访问用户状态和偏好设置的工具 类型安全上下文:使用泛型类型实现编译时安全性 上下文操作:在智能体执行过程中更新和修改上下文 生产模式:真实场景中的上下文管理策略 核心概念:什么是上下文管理? 上下文管理让你能够向智能体传递自定义数据结构,这些数据结构会在整个智能体执行过程中持续存在。
掌握使用 OpenAI Agents SDK 开发上下文感知智能体!本教程将教你如何利用 RunContextWrapper 传递自定义上下文对象,使智能体在整个执行过程中能够访问用户数据、会话信息和状态。
上下文管理让你能够向智能体传递自定义数据结构,这些数据结构会在整个智能体执行过程中持续存在。可以把上下文想象成一个共享状态容器,它:
┌─────────────────────────────────────────────────────────────┐ │ CONTEXT WORKFLOW │ ├─────────────────────────────────────────────────────────────┤ │ │ │ USER CONTEXT │ │ ┌─────────────┐ │ │ │ UserInfo │ 1. PASS TO RUNNER │ │ │ - name │ ────────────────────────────────────────┐ │ │ │ - uid │ │ │ │ │ - prefs │ ▼ │ │ └─────────────┘ │ │ ┌─────────────┐ │ │ │ AGENT │ 2. CONTEXT AVAILABLE │ │ │ RUNNER │ TO ALL TOOLS │ │ └─────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────┐ 3. TOOLS ACCESS │ │ │ TOOL CALLS │ CONTEXT VIA │ │ │ WITH │ RunContextWrapper │ │ │ CONTEXT │ │ │ └─────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────┐ 4. CONTEXT CAN BE │ │ │ CONTEXT │ MODIFIED AND │ │ │ UPDATED │ PERSISTS │ │ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
用于存储状态和用户信息的自定义数据类:
@dataclass class UserInfo: name: str uid: int preferences: dict = None
提供对工具中上下文访问的类型安全包装器:
@function_tool async def my_tool(wrapper: RunContextWrapper[UserInfo]) -> str: user = wrapper.context # Access the UserInfo object return f"Hello {user.name}"
使用泛型类型实现上下文安全性的智能体:
agent = Agent[UserInfo]( name="Context Agent", tools=[context_aware_tool] )
fetch_user_profile(): Retrieve user information from contextupdate_user_preference(): Modify user settings in contextget_personalized_greeting(): Generate custom greetingsAgent[UserInfo] for compile-time checksRunContextWrapper[UserInfo]完成本教程后,你将掌握:
安装 OpenAI Agents SDK:
pip install openai-agents
设置环境:
cp env.example .env # Edit .env and add your OpenAI API key
运行上下文示例:
import asyncio from agent import context_example # Test context management asyncio.run(context_example())
from dataclasses import dataclass @dataclass class UserInfo: name: str uid: int preferences: dict = None
@function_tool async def my_tool(wrapper: RunContextWrapper[UserInfo]) -> str: user = wrapper.context return f"Processing for {user.name}"
user_context = UserInfo(name="Alice", uid=123) result = await Runner.run(agent, "message", context=user_context)
@function_tool async def update_preference(wrapper: RunContextWrapper[UserInfo], key: str, value: str) -> str: wrapper.context.preferences[key] = value return f"Updated {key} to {value}"
掌握上下文管理后,你将准备好:
免责声明:
本文档采用基于机器的 AI 翻译服务进行翻译。尽管我们力求准确,但请注意,自动翻译可能存在错误或不准确之处。应以原文语言版本的文档作为权威依据。如需获取关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。