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

相关推荐
考虑考虑1 小时前
cmd局部设置java变量
运维·后端·自动化运维
wangruofeng1 小时前
一个 Markdown 文件攒下 37k 星,i-have-adhd 给 AI 输出立了 10 条规矩
github·aigc·ai编程
怕浪猫2 小时前
长会话不崩盘:DeepSeek Harness 的上下文压缩与目标管理策略
面试·github·agent
ocean21032 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
DogDaoDao3 小时前
SimToolReal 解读:用“物体中心“视角重新定义灵巧工具操作
人工智能·机器人·github·关键点·人形机器人·gpt-4o·simtoolreal
陈随易4 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
letisgo54 小时前
JAVA 高级进阶07篇《@Transactional失效的8个场景:代理机制到传播行为》
java·面试·transactional·spring事务·aop动态代理
wing985 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
EatFan5 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
步行cgn6 小时前
Spring 报错:No bean class specified on bean definition 的原因与解决
java·后端·spring