教程 2:结构化输出代理 学习如何使用 Pydantic 模型创建返回类型安全、结构化数据的代理。本教程将教您如何确保您的代理返回一致且经过验证的 JSON 响应,以便您的应用程序能够可靠地处理这些响应。 您将学到的内容 结构化输出:使用 Pydantic 模型定义响应模式 类型安全:确保数据类型的统一性和验证 JSON 模式生成:从 Python 类自动生成模式 输出验证:内置验证和错误处理 核心概念:为什么需要结构化输出? 传统的 AI 响应是未结构化的文本,这使得它们难以通过程序进行处理。
学习如何使用 Pydantic 模型创建返回类型安全、结构化数据的代理。本教程将教您如何确保您的代理返回一致且经过验证的 JSON 响应,以便您的应用程序能够可靠地处理这些响应。
传统的 AI 响应是未结构化的文本,这使得它们难以通过程序进行处理。结构化输出解决了这一问题,具体体现在:
┌─────────────────────────────────────────────────────────────┐ │ UNSTRUCTURED vs STRUCTURED │ ├─────────────────────────────────────────────────────────────┤ │ │ │ UNSTRUCTURED OUTPUT: │ │ "The customer John Doe submitted a high priority │ │ billing issue about charges on January 15th..." │ │ │ │ STRUCTURED OUTPUT: │ │ { │ │ "customer_name": "John Doe", │ │ "issue_type": "billing", │ │ "priority": "high", │ │ "date_submitted": "2024-01-15", │ │ "description": "Incorrect charges on account" │ │ } │ └─────────────────────────────────────────────────────────────┘
本教程包含三个聚焦的结构化输出示例:
2_1_support_ticket_agent/)2_2_product_review_agent/)2_3_email_generator_agent/)2_structured_output_agent/ ├── README.md # This file - concept explanation ├── requirements.txt # Dependencies ├── 2_1_support_ticket_agent/ # Basic structured output │ ├── __init__.py │ └── agent.py # Support ticket schema (35 lines) ├── 2_2_product_review_agent/ # Complex structured output │ ├── __init__.py │ └── agent.py # Product review analysis (45 lines) ├── 2_3_email_generator_agent/ # Simple structured output │ ├── __init__.py │ └── agent.py # Email content generation (30 lines) ├── app.py # Streamlit web interface (optional) └── env.example # Environment variables template
完成本教程后,您将掌握:
output_type 参数安装 OpenAI Agents SDK:
pip install openai-agents
安装依赖:
pip install -r requirements.txt
设置环境变量:
cp env.example .env # Edit .env and add your OpenAI API key
测试支持工单代理:
python support_ticket_agent.py
测试产品评论代理:
python product_review_agent.py
运行交互式 Web 界面:
streamlit run app.py
尝试以下客户投诉:
尝试以下产品评论:
class Priority(str, Enum): LOW = "low" MEDIUM = "medium" HIGH = "high" CRITICAL = "critical" class SupportTicket(BaseModel): priority: Priority category: str
class Review(BaseModel): rating: int = Field(ge=1, le=5) sentiment: str recommend: Optional[bool] = None
class ProductReview(BaseModel): product_info: ProductInfo review_data: ReviewData analysis: ReviewAnalysis
完成本教程后,您将准备好:
免责声明:
本文档采用基于机器的 AI 翻译服务进行翻译。尽管我们力求准确,但请注意,自动翻译可能存在错误或不准确之处。应以原文语言版本的文档作为权威依据。如需获取关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。