数据截至 (上游 commit 2c5560339cd7)
OpenAI Agents SDK (Python) — 架构与原理
30 秒导读: 这是 OpenAI 官方的 Python 框架,用来搭建「多个 AI agent 协作完成任务」的工作流。它本质上就是一个循环:把对话喂给 LLM → 看 LLM 想干嘛(说话?调工具?换个 agent 接手?)→ 执行 → 再喂回去,直到产出最终答案。它不绑定 OpenAI 模型,100+ 模型都能接。
1. 这是什么(零基础也能懂)
一句话定义: OpenAI Agents SDK 是一个 Python 库,帮你把「一个或多个由 LLM 驱动、能调用工具的 agent」编排成一个能自动运行到底的工作流。
解决什么问题 / 给谁用: 假设你想做一个客服机器人——用户问问题,AI 要么直接答,要么查数据库(调工具),要么转给「退款专员 agent」处理。你不想自己手写「调一次模型、解析它要调哪个函数、跑函数、把结果塞回去、再调模型」这一长串胶水代码。这个 SDK 就是那层胶水,而且把它做得很薄、很清晰。
它的几个核心概念(对外暴露的积木):
| 概念 | 白话 | 在哪 |
|---|---|---|
Agent | 一个配好「指令 + 工具 + 交接对象」的 LLM | agent.py:269 |
Runner | 把 agent 跑起来的引擎(Runner.run(...)) | run.py:234 |
工具(function_tool) | 把普通 Python 函数变成 LLM 能调的工具 | tool.py:2509 |
交接(handoff) | 一个 agent 把任务转交给另一个 agent | handoffs/__init__.py:260 |
护栏(guardrail) | 在输入/输出上跑的安全校验,触发就中断 | guardrail.py:71 |
会话(Session) | 自动管理多轮对话历史 | memory/session.py:16 |
追踪(tracing) | 自动记录整个 run 的每一步,可调试可观测 | tracing/__init__.py |
用起来什么样: 一个最小例子——定义一个带工具的 agent,然后 Runner.run_sync 跑它:
# 示意,基于 README 的真实 API 形态
from agents import Agent, Runner, function_tool
@function_tool # 把这个函数变成 LLM 可调用的工具
def get_weather(city: str) -> str: # 类型注解会被自动转成 JSON schema
"""查某城市天气。""" # docstring 变成给 LLM 看的工具描述
return f"{city} 今天晴。"
agent = Agent(
name="助手",
instructions="你是一个乐于助人的助手。", # 这就是 system prompt
tools=[get_weather],
)
result = Runner.run_sync(agent, "北京天气怎么样?")
print(result.final_output) # → 模型先调 get_weather,拿到结果后再总结回答
一句话直觉/类比: 把 Runner.run() 想成一个 「带工具箱的对话回合制游戏」:每个回合,LLM 看完当前局面后只能做三件事之一——说出最终答案(游戏结束)、调用工具(执行后进入下回合)、把话筒交给另一个 agent(换人接着玩)。SDK 就是那个忠实执行规则、记分、记录回放的「裁判」。