OpenAI 代理SDK入门指南

OpenAI 代理SDK是一种轻量级但功能强大的框架,用于构建多代理工作流。它支持多种核心概念,如代理、手移交、安全检查和追踪功能。以下是对这些概念的详细介绍和示例代码。

核心概念

代理(Agents)

代理是指配置了指令、工具、安全检查和手移交的LLM(大型语言模型)。代理可以根据不同的任务进行定制。

手移交(Handoffs)

手移交是一种特殊的工具调用,用于在代理之间转移控制。它允许代理根据输入或其他条件将任务转交给其他代理。

安全检查(Guardrails)

安全检查是可配置的输入和输出验证机制,确保代理的行为符合预期。

追踪(Tracing)

追踪功能允许您查看、调试和优化代理的运行情况。它支持自定义追踪范围和多种外部追踪处理器。

快速开始

环境设置

  1. 创建虚拟环境

    bash 复制代码
    python -m venv env
    source env/bin/activate
  2. 安装代理SDK

    bash 复制代码
    pip install openai-agents

    如果需要语音支持,可以使用以下命令:

    bash 复制代码
    pip install 'openai-agents[voice]'

Hello World 示例

python 复制代码
from agents import Agent, Runner

# 创建代理
agent = Agent(name="Assistant", instructions="You are a helpful assistant")

# 运行代理并打印结果
result = Runner.run_sync(agent, "Write a haiku about recursion in programming.")
print(result.final_output)

手移交示例

python 复制代码
from agents import Agent, Runner
import asyncio

# 创建代理
spanish_agent = Agent(
    name="Spanish agent",
    instructions="You only speak Spanish.",
)

english_agent = Agent(
    name="English agent",
    instructions="You only speak English",
)

triage_agent = Agent(
    name="Triage agent",
    instructions="Handoff to the appropriate agent based on the language of the request.",
    handoffs=[spanish_agent, english_agent],
)


async def main():
    result = await Runner.run(triage_agent, input="Hola, ¿cómo estás?")
    print(result.final_output)

if __name__ == "__main__":
    asyncio.run(main())

函数示例

python 复制代码
import asyncio

from agents import Agent, Runner, function_tool


@function_tool
def get_weather(city: str) -> str:
    return f"The weather in {city} is sunny."


agent = Agent(
    name="Hello world",
    instructions="You are a helpful agent.",
    tools=[get_weather],
)


async def main():
    result = await Runner.run(agent, input="What's the weather in Tokyo?")
    print(result.final_output)

if __name__ == "__main__":
    asyncio.run(main())

代理循环

代理循环是指代理运行的过程,直到产生最终输出。这个过程包括:

  1. 调用LLM:使用代理的模型和设置以及消息历史。
  2. 处理响应:如果响应包含最终输出,则结束循环。如果包含手移交,则切换代理并重复步骤1。
  3. 处理工具调用:如果有工具调用,则处理并追加工具响应到消息历史中,然后重复步骤1。

最终输出

最终输出是代理循环中代理产生的最后一个输出。如果代理设置了输出类型,则最终输出是匹配该类型的结构化输出。否则,第一个不包含工具调用或手移交的LLM响应被视为最终输出。

常见代理模式

代理SDK支持多种代理模式,包括确定性流程、迭代循环等。这些模式可以在examples/agent_patterns中找到示例。

追踪

追踪功能自动记录代理的运行情况,支持自定义追踪范围和多种外部追踪处理器,如Logfire、AgentOps等。有关如何自定义或禁用追踪,请参阅相关文档。

相关推荐
leobertlan28 分钟前
2025年终总结
前端·后端·程序员
面向Google编程1 小时前
从零学习Kafka:数据存储
后端·kafka
子兮曰1 小时前
OpenClaw架构揭秘:178k stars的个人AI助手如何用Gateway模式统一控制12+通讯频道
前端·javascript·github
旅之灵夫2 小时前
【GitHub项目推荐--Remotion:使用React编程化创建视频】⭐⭐⭐
github
易安说AI2 小时前
Claude Opus 4.6 凌晨发布,我体验了一整晚,说说真实感受。
后端
易安说AI2 小时前
Ralph Loop 让Claude无止尽干活的牛马...
前端·后端
易安说AI2 小时前
用 Claude Code 远程分析生产日志,追踪 Claude Max 账户被封原因
后端
颜酱3 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
发现一只大呆瓜4 小时前
前端性能优化:图片懒加载的三种手写方案
前端·javascript·面试
Coder_Boy_5 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端