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等。有关如何自定义或禁用追踪,请参阅相关文档。

相关推荐
会编程的林俊杰12 小时前
SpringBoot项目启动时的依赖处理
java·spring boot·后端
码事漫谈12 小时前
C++循环结构探微:深入理解while与do...while
后端
狂炫冰美式13 小时前
前端实时推送 & WebSocket 面试题(2026版)
前端·http·面试
码事漫谈13 小时前
现代C++:一场静默的革命,告别“C with Classes”
后端
AntBlack14 小时前
AI Agent : CrewAI 简单使用 + 尝试一下股票分析
后端·python·ai编程
刘一说14 小时前
深入理解 Spring Boot 单元测试:从基础到最佳实践
spring boot·后端·单元测试
白露与泡影14 小时前
Spring Boot项目优化和JVM调优
jvm·spring boot·后端
草梅友仁14 小时前
代码重构与测试覆盖率提升实践 | 2025 年第 46 周草梅周报
单元测试·开源·github
是店小二呀14 小时前
五分钟理解Rust的核心概念:所有权Rust
开发语言·后端·rust