跳转至

openai/openai-agents-js

仓库:openai/openai-agents-js

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

它负责的也是 Agent runtime,只是落在 JavaScript 和 TypeScript 生态里。价值不在于“Node 也能跑 Agent”,而在于把 agent、tool、session、trace、handoff、approval 这些运行时对象带进更贴近全栈协作的环境。

如果你同时看过 Python 版本,会更容易发现官方真正想强调的是什么:语言可以变,运行时边界不能糊。

先抓整体结构

这套仓库最值得按这个顺序看:

  1. 最小 agent。
  2. tools。
  3. handoff 和 agents-as-tools。
  4. sessions。
  5. tracing 和 human-in-the-loop。

这个顺序能帮你把“执行能力”和“运行时支撑能力”分开。前者回答“这一步能做什么”,后者回答“这条链怎样续接、怎样回放、怎样被人打断”。

一条典型执行链

一条典型链路和 Python 版本很接近:

  1. 服务端收到用户输入,并加载当前 session。
  2. Agent 根据工具和状态决定是回答、调工具,还是交接给另一个 Agent。
  3. 工具调用和返回结果被写进 trace。
  4. 如果需要人工确认,运行时在正式节点停下来。
  5. 结果回到会话状态里,供下一轮继续使用。

JS 版本特别值得看的地方,在于这条链如何和事件流、Web 应用、Node 服务边界配合。它会逼你思考:哪些事件适合往前端流,哪些状态必须保留在服务端,哪些 trace 只适合内部排障。

值得学的设计

这个项目最值得学的有两点。

第一,和 Python 版本保持概念对齐。这样你会看到 Agent runtime 的核心不是某门语言的 API 写法,而是 session、trace、handoff、approval 这些对象本身。第二,它更容易让你看到前后端边界问题。前端可以消费事件流,但不应该承担运行时真实状态;session 可以被 UI 展示,但不应该由 UI 决定最终形态。

如果你在做聊天产品或内部助手,这点很重要。很多团队前端事件做得很炫,但一到断线恢复、人工审批、权限审计就开始混乱,问题通常不在前端能力,而在运行时状态没有被正式建模。

适合借回自己项目的点

  • 先把 Agent runtime 的对象想清楚,再决定语言和框架。
  • 把 session/history 做成服务端正式状态。
  • 把 trace 和 approval 放进主路径,而不是以后再补。
  • 分清前端事件流和后端执行状态,各自承担自己的职责。

不要照抄的地方

  • 不要把前端事件对象直接当运行时状态对象。
  • 不要因为 JS 写起来顺手,就忽略了服务端权限、副作用治理和审计。
  • 不要把“官方两种语言都支持”理解成“语言层细节都不重要”。运行时概念稳定,不代表宿主环境差异可以忽略。