OpenAI--Agent SDK简介

项目概述

OpenAI Agents SDK 是一个轻量级但功能强大的框架,用于构建多智能体工作流。它主要利用大语言模型(LLM),通过配置智能体、交接、护栏和跟踪等功能,实现复杂的工作流管理。以下是对其各个部分运行过程和代码流程的详细介绍。

项目链接:OpenAI Agent SDK项目地址

核心架构

项目整体架构图

根据提供的代码库信息,OpenAI Agents SDK 项目的整体架构可以分为以下几个主要模块:

Output
Tracing
Models
Agents
Application
调用
交接
检查
RunResult
Trace
Model
Agent
Tool
Handoff
Guardrail
Runner
用户输入
架构图说明:
  1. 应用层(Application):用户通过输入触发 Runner 开始执行代理流程。
  2. 代理层(Agents)
    • Agent 是核心组件,包含指令、工具、交接和护栏等配置。
    • Tool 是代理可以调用的工具,用于执行特定任务。
    • Handoff 允许代理将控制权转移给其他代理。
    • Guardrail 用于输入和输出的验证,确保代理的安全性。
  3. 模型层(Models)Agent 调用 Model 来生成响应。
  4. 跟踪层(Tracing)Runner 在执行过程中会生成跟踪信息,方便调试和优化。
  5. 输出层(Output):最终生成 RunResult 作为执行结果。

项目整体流程图

用户输入
Runner初始化
选择起始Agent
运行输入护栏检查
是否通过护栏检查?
调用Model生成响应
抛出InputGuardrailTripwireTriggered异常
是否有最终输出?
运行输出护栏检查
是否有交接?
切换到新的Agent
是否有工具调用?
执行工具调用
是否通过输出护栏检查?
返回RunResult
抛出OutputGuardrailTripwireTriggered异常
流程图说明:
  1. 用户输入触发 Runner 初始化,并选择起始 Agent
  2. 对输入进行护栏检查,如果未通过则抛出异常。
  3. 调用 Model 生成响应。
  4. 判断是否有最终输出,如果有则进行输出护栏检查。
  5. 如果没有最终输出,判断是否有交接或工具调用,根据情况进行相应处理。
  6. 输出护栏检查通过后,返回 RunResult;否则抛出异常。

核心概念

1. 智能体(Agents)

智能体是配置了指令、工具、护栏和交接功能的大语言模型。在代码中,Agent 类是核心,它包含了智能体的基本信息。

from agents import Agent

agent = Agent(name="Assistant", instructions="You are a helpful assistant")
  • 运行过程:当调用 Runner.run()Runner.run_sync() 时,会启动一个循环,不断与 LLM 交互,直到得到最终输出。
  • 代码流程
    • Runner.run()Runner.run_sync() 调用 RunImpl.execute_tools_and_side_effects() 方法。
    • execute_tools_and_side_effects() 中,首先处理模型响应,包括解析工具调用、交接等信息。
    • 然后根据响应结果,决定是继续运行、进行交接还是返回最终输出。

2. 交接(Handoffs)

交接允许智能体将特定任务的控制权转移给其他智能体。

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]
)
  • 运行过程:当 triage_agent 收到请求时,根据请求的语言将任务交接给 spanish_agentenglish_agent
  • 代码流程
    • RunImpl.execute_tools_and_side_effects() 中,处理模型响应时,如果发现有交接信息,调用 execute_handoffs() 方法。
    • execute_handoffs() 方法会将控制权转移到新的智能体,并重新开始循环。

3. 护栏(Guardrails)

护栏是可配置的安全检查,用于输入和输出验证。

from agents import InputGuardrail, GuardrailFunctionOutput
from pydantic import BaseModel

class HomeworkOutput(BaseModel):
    is_homework: bool
    reasoning: str

guardrail_agent = Agent(
    name="Guardrail check",
    instructions="Check if the user is asking about homework.",
    output_type=HomeworkOutput
)
  • 运行过程:在智能体运行过程中,护栏会对输入和输出进行验证,如果不符合条件,可能会中断流程。
  • 代码流程
    • RunImpl.execute_tools_and_side_effects() 中,处理最终输出时,会根据输出类型进行验证。
    • 如果输出类型是结构化的,会调用 output_schema.validate_json() 方法进行验证。

4. 跟踪(Tracing)

跟踪是内置的智能体运行跟踪功能,可用于查看、调试和优化工作流。

from agents.tracing.setup import TraceProvider

trace_provider = TraceProvider()
  • 运行过程:在智能体运行过程中,会创建跟踪信息并发送到指定的后端。
  • 代码流程
    • TraceProvider 类负责管理跟踪处理器。
    • 在创建跟踪或跨度时,会调用相应的处理器进行处理。
    • 处理器会在跟踪开始、结束,跨度开始、结束等事件发生时进行相应的操作。

项目使用步骤

1. 环境搭建

python -m venv env
source env/bin/activate
  • 运行过程:创建一个虚拟环境并激活它,确保项目的依赖与系统环境隔离。
  • 代码流程:这是 Python 标准的虚拟环境创建和激活步骤,由 Python 解释器和操作系统完成。

2. 安装 SDK

pip install openai-agents
  • 运行过程:使用 pip 工具从 Python Package Index(PyPI)下载并安装 openai-agents 包。
  • 代码流程pip 会解析依赖关系,下载所需的包,并将其安装到虚拟环境中。

3. 示例代码

Hello world 示例
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)
  • 运行过程:创建一个简单的智能体,调用 Runner.run_sync() 方法与 LLM 交互,获取最终输出并打印。
  • 代码流程
    • 创建 Agent 对象,设置名称和指令。
    • 调用 Runner.run_sync() 方法,该方法会调用 RunImpl.execute_tools_and_side_effects() 方法进行处理。
    • execute_tools_and_side_effects() 中,与 LLM 交互,处理响应,直到得到最终输出。
    • 返回最终输出并打印。
交接示例
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())
  • 运行过程:创建三个智能体,其中 triage_agent 负责根据请求语言进行交接,调用 Runner.run() 方法处理请求,最终输出结果。
  • 代码流程
    • 创建三个 Agent 对象,设置名称、指令和交接信息。
    • 调用 Runner.run() 方法,该方法会调用 RunImpl.execute_tools_and_side_effects() 方法进行处理。
    • execute_tools_and_side_effects() 中,处理模型响应时发现交接信息,调用 execute_handoffs() 方法将控制权转移到 spanish_agent
    • spanish_agent 处理请求并返回最终输出。
    • 返回最终输出并打印。
函数示例
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())
  • 运行过程:创建一个带有工具的智能体,调用 Runner.run() 方法处理请求,智能体调用工具获取天气信息并返回最终输出。
  • 代码流程
    • 使用 @function_tool 装饰器将 get_weather 函数转换为工具。
    • 创建 Agent 对象,设置名称、指令和工具。
    • 调用 Runner.run() 方法,该方法会调用 RunImpl.execute_tools_and_side_effects() 方法进行处理。
    • execute_tools_and_side_effects() 中,处理模型响应时发现工具调用,调用 execute_function_tool_calls() 方法执行工具。
    • 工具执行后返回结果,继续与 LLM 交互,直到得到最终输出。
    • 返回最终输出并打印。

智能体循环

当调用 Runner.run() 时,会运行一个循环,直到得到最终输出。

# 伪代码表示循环过程
while True:
    # 1. 调用 LLM
    response = call_llm(agent, message_history)
    # 2. 处理响应
    processed_response = process_response(response)
    # 3. 检查是否有最终输出
    if processed_response.has_final_output():
        return processed_response.final_output
    # 4. 检查是否有交接
    if processed_response.has_handoff():
        agent = processed_response.handoff_agent
        continue
    # 5. 处理工具调用
    process_tool_calls(processed_response.tool_calls)
    # 6. 更新消息历史
    update_message_history(processed_response)
  • 运行过程
    1. 使用智能体的模型和设置以及消息历史调用 LLM。
    2. 处理 LLM 返回的响应,包括解析工具调用、交接等信息。
    3. 如果响应有最终输出,返回并结束循环。
    4. 如果响应有交接,切换到新的智能体并回到步骤 1。
    5. 处理工具调用(如果有)并追加工具响应消息,然后回到步骤 1。
  • 代码流程
    • Runner.run() 方法中,调用 RunImpl.execute_tools_and_side_effects() 方法,该方法内部实现了循环逻辑。
    • execute_tools_and_side_effects() 中,使用 ModelResponse 对象表示 LLM 的响应,使用 ProcessedResponse 对象表示处理后的响应。
    • 根据 ProcessedResponse 对象的属性,判断是否有最终输出、交接或工具调用,并进行相应的处理。

最终输出

最终输出是智能体在循环中产生的最后结果。

# 判断最终输出的伪代码
if agent.output_type:
    # 有输出类型,检查是否为结构化输出
    if response.has_structured_output(agent.output_type):
        final_output = response.structured_output
else:
    # 无输出类型,检查是否无工具调用或交接
    if not response.has_tool_calls() and not response.has_handoff():
        final_output = response.message
  • 运行过程
    1. 如果智能体设置了 output_type,最终输出是当 LLM 返回符合该类型的结构化输出时。
    2. 如果没有 output_type(即纯文本响应),则第一个没有任何工具调用或交接的 LLM 响应被视为最终输出。
  • 代码流程
    • RunImpl.execute_tools_and_side_effects() 中,处理最终输出时,根据 output_schema 判断是否有输出类型。
    • 如果有输出类型,调用 output_schema.validate_json() 方法验证是否为结构化输出。
    • 如果没有输出类型,检查是否有工具调用或交接,如果没有则将消息作为最终输出。

开发流程

1. 安装 uv
uv --version
  • 运行过程:检查 uv 工具是否安装。
  • 代码流程:由操作系统执行命令,检查 uv 工具的版本信息。
2. 安装依赖
make sync
  • 运行过程:使用 make 工具执行 sync 目标,安装项目的依赖。
  • 代码流程make 工具会读取 Makefile 文件,执行相应的命令,安装依赖。
3. 代码检查和测试
make tests  # run tests
make mypy   # run typechecker
make lint   # run linter
  • 运行过程
    • make tests:运行项目的测试代码,确保功能的正确性。
    • make mypy:运行类型检查器,检查代码中的类型错误。
    • make lint:运行代码检查工具,检查代码的风格和规范。
  • 代码流程
    • make tests 会执行 pytest 命令,运行 tests 目录下的测试代码。
    • make mypy 会执行 mypy 命令,对项目代码进行类型检查。
    • make lint 会执行 ruff 命令,对项目代码进行风格和规范检查。

总结

OpenAI Agents SDK 通过智能体、交接、护栏和跟踪等机制,构建了一个灵活、可扩展的多智能体工作流框架。其代码流程清晰,通过 RunnerRunImpl 类实现了智能体的运行和管理,通过 TraceProvider 类实现了跟踪功能,通过 Agent 类实现了智能体的配置和管理。开发者可以根据自己的需求,配置不同的智能体和工具,构建复杂的工作流。

<think>好的,我现在需要处理用户的问题:“请使用中文回答我或者给我介绍一下: AI Agent”。首先,回顾之前的对话历史,用户之前询问了关于Manus VR的注册和使用方法,现在转向询问AI Agent。这说明用户可能对科技相关的术语或工具有兴趣,或者正在研究相关领域。 接下来,我需要确定用户的具体需求。用户可能希望了解AI Agent的基本概念、应用场景、技术原理,或者如何使用它。由于用户之前的问题是关于注册和使用,可能他们希望得到比较实用的信息,而不仅仅是理论上的定义。但作为介绍,还是需要先明确概念,再扩展其他方面。 首先,我应该定义AI Agent是什么。根据我的知识库,AI Agent人工智能代理,能够感知环境、自主决策并执行任务。需要以简明易懂的语言解释,避免使用过多技术术语,但又要准确。 然后,需要分点介绍核心特征,比如自主性、感知能力、决策能力和目标导向。这样结构清晰,方便用户理解。接着,应用场景是用户可能关心的部分,需要列举几个主要领域,如智能助手、工业自动化、游戏NPC、医疗和金融等,每个领域举例子说明,让用户有具体的认识。 技术原理部分需要简要说明,可能用户中有开发者或技术人员,他们想了解背后的机制。需要提到感知模块、知识库、决策算法和执行反馈,但不需要过于深入,保持概述层面。 此外,用户可能想知道如何开发或使用AI Agent,所以需要提供基本步骤,比如明确需求、选择工具、训练模型、部署测试。这里可以提到一些常用框架和平台,比如TensorFlow、PyTorch、Dialogflow,帮助用户有进一步行动的方向。 最后,注意事项部分需要提醒用户数据、伦理、可解释性和持续学习的问题,这些是实际应用中需要考虑的重要方面。特别是隐私和伦理问题,现在越来越受到关注。 需要检查是否符合之前的系统级指令,比如数学公式是否正确使用,但这里可能不需要数学公式。结构上要分点,使用标题和列表,保持清晰。语言使用中文,口语化,但不过于随意。同时确保信息准确,比如提到的框架和例子是否正确。 可能用户的问题比较广泛,是否需要进一步细化?比如,用户是否想了解某个特定类型的AI Agent?但根据当前问题,保持一般性介绍即可。如果有不确定的地方,建议用户参考更多资料或官方文档,以保持回答的严谨性。 最后,总结整个思考过程,确保覆盖了定义、特征、应用、原理、开发步骤和注意事项,结构合理,信息全面,符合用户的需求。</think>**AI Agent 是什么?** **AI Agent**(人工智能代理)是一种能够**感知环境、自主决策并执行任务**的智能程序或系统。它通过传感器、数据输入或用户指令获取信息,利用算法(如机器学习、深度学习)分析数据并作出响应,最终通过执行器或接口输出结果。其核心目标是**模拟人类或生物的智能行为**,在复杂环境中独立或协作完成任务。 --- ### **核心特征** 1. **自主性** - 无需全程人工干预,可基于预设规则或学习经验独立运作。 - 示例:自动驾驶汽车根据路况自动调整行驶路径。 2. **感知与交互能力** - 通过摄像头、语音识别、传感器等获取环境信息,并与用户或其他系统交互。 - 示例:智能音箱通过语音指令播放音乐。 3. **决策与学习能力** - 使用强化学习、神经网络等技术优化决策,并持续从数据中改进性能。 - 示例:AlphaGo 通过自我对弈提升棋力。 4. **目标导向性** - 围绕特定目标(如优化效率、解决问题)设计行动策略。 - 示例:物流调度 AI 最小化运输成本。 --- ### **典型应用场景** 1. **个人助手** - 如 Siri、ChatGPT,帮助用户管理日程、解答问题。 2. **工业自动化** - 工厂中的质检机器人、仓储物流 AGV(自动导引车)。 3. **游戏与虚拟世界** - NPC(非玩家角色)具备自适应行为,提升游戏体验。 4. **医疗诊断** - 分析医学影像(如 X 光片)辅助医生判断病情。 5. **金融风控** - 实时监测交易数据,识别欺诈行为。 --- ### **技术原理简析** 1. **感知模块** - 数据输入:文本、图像、传感器信号等。 - 技术:计算机视觉(CV)、自然语言处理(NLP)。 2. **知识库与推理引擎** - 存储领域知识,通过逻辑推理或概率模型生成决策。 3. **决策算法** - 常用方法:强化学习(RL)、深度 Q 网络(DQN)、蒙特卡洛树搜索(MCTS)。 4. **执行与反馈** - 行动输出:控制机械臂、发送指令、生成文本等。 - 反馈循环:根据结果调整策略(如奖励机制)。 --- ### **如何开发/使用 AI Agent?** 1. **明确需求** - 定义目标(如客服聊天、自动化控制)和适用场景。 2. **选择工具与框架** - 开发框架:TensorFlow、PyTorch、Microsoft Bot Framework。 - 低代码平台:Dialogflow(谷歌)、Rasa(开源)。 3. **训练与优化** - 数据准备:标注数据集或使用公开数据集(如 ImageNet)。 - 模型训练:调整超参数,提升准确率与泛化能力。 4. **部署与测试** - 集成到应用:通过 API、SDK 嵌入现有系统。 - 持续监控:收集反馈数据,迭代优化模型。 --- ### **注意事项** 1. **数据隐私与安全** - 确保训练数据脱敏,避免泄露用户信息。 2. **伦理与可控性** - 设定道德边界,防止 AI 作出有害决策(如歧视性判断)。 3. **可解释性** - 复杂模型(如深度学习)需提供决策依据,增强用户信任。 4. **持续学习与维护** - 定期更新模型以适应环境变化(如新语言、新规则)。 如需深入实践,可参考 OpenAI Gym(强化学习环境)、Hugging Face(NLP 模型库)等资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱の小公举

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值