跳转至

openai/openai-agents-python

仓库:openai/openai-agents-python

这个项目在系统里负责哪一层

这个项目负责的是 Agent runtime。它解决的不是“模型怎样多调几次函数”,而是“多步执行、工具调用、会话状态、人工审批和 trace 应该怎样被组织成正式运行时”。

如果你把 Agent 理解成“大一点的 prompt”,这个项目会直接把这个想法推翻。它把 Agent 相关复杂度拆成一组明确对象,而不是藏在几段提示词里。

先抓整体结构

最值得先抓的是这些对象:

  • Agent:定义角色边界、模型配置和可用能力。
  • Tool:把外部能力接进运行时。
  • Session:保存会话状态,不让历史散落在 UI 和 handler 里。
  • Guardrails:在运行时补边界,不让模型建议直接变成动作。
  • Tracing:把多步执行变成可回放的链路。
  • Handoff:让不同 Agent 之间的交接成为正式动作。

只要这几个对象分开,你就会明白官方在做的是 runtime,而不是 prompt 模板集合。

一条典型执行链

一条多步执行大致会这样跑:

  1. 运行时拿到用户输入,并加载当前 session。
  2. 当前 Agent 根据角色、工具和状态决定下一步。
  3. 如果需要工具,运行时发起工具调用,并把结果写回状态和 trace。
  4. 如果需要切换角色,就通过 handoff 把控制权交给另一个 Agent。
  5. 如果命中 guardrail 或高风险动作,就进入审批或人工介入。
  6. 满足停止条件后返回结果,并把状态留给下一轮续接。

这条链最值钱的地方在于,它把“查工具”“切角色”“停下来让人确认”都当成了运行时里的正式事件,而不是散落在业务代码里的临时分支。

值得学的设计

这个仓库最值得学的有三点。

第一,handoffagent-as-tool 被明确分开。前者是角色交接,后者是能力复用,二者在上下文隔离、控制权和结果形态上都不是一回事。第二,Session 被放在主路径里,说明官方默认多步系统必须有正式状态对象。第三,Tracing 不是附属功能,而是运行时必需品,因为没有 trace,多步执行一旦偏掉就很难复盘。

这些设计放到企业系统里非常实用。比如一个企业助手可能先由“资料检索 Agent”找制度,再把结果交给“业务执行 Agent”决定是否继续操作。这里最难的不是角色名字,而是交接时谁保留控制权、谁继承哪些状态、哪一步需要人确认。

适合借回自己项目的点

  • 把 agent、tool、session、trace 这些边界显式化。
  • 把人工确认做成正式节点,而不是临时 if 分支。
  • 把会话状态放进运行时对象,而不是前端顺手传来的聊天记录。
  • 把角色切换、能力复用和工具调用分开建模。

不要照抄的地方

  • 不要把 guardrails 当成权限系统本身。真正的权限还是要靠服务端兜。
  • 不要因为框架支持 handoff,就默认系统应该上多 Agent。
  • 不要忽略只读工具和高风险写工具在治理上的差别。运行时支持能力,不等于风险已经消失。