核心概念
- 智能体(Agents):配置了指令、工具、防护栏和移交功能的LLM
- 移交(Handoffs):允许智能体将控制权转移给其他智能体来处理特定任务
- 防护栏(Guardrails):可配置的输入/输出验证安全检查
- 追踪(Tracing):内置的智能体运行跟踪,用于调试和优化
安装
git clone https://github.com/openai/openai-agents-python.git
cd openai-agents-python
设置Python环境:
python -m venv env
source env/bin/activate # Linux/Mac
# 或者在Windows上:
# env\Scripts\activate
安装SDK:
pip install openai-agents
设置API密钥:
# Linux/Mac
export OPENAI_API_KEY=你的密钥
# Windows
# set OPENAI_API_KEY=你的密钥
运行示例:
# 例如,运行hello world示例
cd examples/basic
python hello_world.py
实例分析:
- agent_patterns文件夹
agents_as_tools.py:
- 展示了”代理即工具”模式
- 前线代理(orchestrator_agent)接收用户消息,然后从一组翻译代理中选择合适的工具
- 包含西班牙语、法语和意大利语翻译代理
- 最后使用合成代理检查翻译并产生最终响应
deterministic.py:
- 展示了确定性流程,每个步骤由特定代理执行
- 流程:生成故事大纲 → 检查大纲质量和类型 → 如果符合条件则创作故事
- 包含质量门控检查,如果大纲不是高质量或不是科幻故事则终止流程
input_guardrails.py:
- 展示了如何使用输入防护机制
- 防护机制在代理执行的同时并行运行
- 实现了一个检测用户是否请求解决数学作业的防护措施
- 如果防护触发,会用拒绝消息响应而不是正常处理请求
llm_as_a_judge.py:
- 展示了”LLM作为评判者”模式
- 第一个代理生成故事大纲,第二个代理评判并提供反馈
- 循环迭代直到评判代理对大纲满意为止
- 强制要求至少一次修改(”第一次尝试永远不给通过”)
output_guardrails.py:
- 展示了如何使用输出防护机制
- 检查代理输出是否包含敏感数据(这里是电话号码)
- 如果检测到敏感数据,防护措施会触发
parallelization.py:
- 展示了并行化模式
- 并行运行同一代理三次,产生三个不同的翻译结果
- 然后使用选择代理挑选最佳翻译
routing.py:
- 展示了交接/路由模式
- 分流代理接收第一条消息,然后根据请求的语言交给合适的代理
- 支持法语、西班牙语和英语代理
- 响应实时流式传输给用户
hello_world.py
这是最基本的例子,展示了如何创建一个简单的代理并运行它:
- 创建一个只用海口(haiku)回答的代理
- 使用
Runner.run()
执行代理 - 获取最终输出结果
dynamic_system_prompt.py
展示了如何基于上下文动态设置代理的指令:
- 创建自定义上下文类(
CustomContext
),包含代理的风格 - 定义动态指令函数,根据风格返回不同的指令
- 随机选择风格(海口、海盗或机器人)并运行代理
agent_lifecycle_example.py
和 lifecycle_example.py
这两个文件展示了代理生命周期的监控:
- 定义自定义钩子类来监控代理的各种事件
- 使用工具(如
random_number
和multiply_by_two
) - 设置代理之间的交接逻辑(如果数字为奇数则交给乘法代理)
- 监控和输出代理执行的完整生命周期
区别在于 agent_lifecycle_example.py
使用 AgentHooks
绑定到特定代理,而 lifecycle_example.py
使用 RunHooks
绑定到整个运行过程。
stream_items.py
和 stream_text.py
展示了框架的流式输出功能:
stream_items.py
展示如何处理各种流式事件(工具调用、工具输出、消息输出等)stream_text.py
展示如何直接流式输出文本内容
计算机控制:通过 ComputerTool
和 AsyncComputer
接口,代理可以直接控制浏览器执行复杂的网页操作任务,这对于自动化网络交互、数据收集和UI测试非常有用。
向量搜索:通过 FileSearchTool
,代理可以搜索预先准备的向量数据库,适用于文档检索、知识库问答等场景。
网络搜索:通过 WebSearchTool
,代理可以直接搜索互联网获取实时信息,适合需要最新数据的场景。
演示
research_bot
web_search.py