openai/openai-agents-js¶
这个项目在系统里负责哪一层¶
它负责的也是 Agent runtime,只是落在 JavaScript 和 TypeScript 生态里。价值不在于“Node 也能跑 Agent”,而在于把 agent、tool、session、trace、handoff、approval 这些运行时对象带进更贴近全栈协作的环境。
如果你同时看过 Python 版本,会更容易发现官方真正想强调的是什么:语言可以变,运行时边界不能糊。
先抓整体结构¶
这套仓库最值得按这个顺序看:
- 最小 agent。
- tools。
- handoff 和 agents-as-tools。
- sessions。
- tracing 和 human-in-the-loop。
这个顺序能帮你把“执行能力”和“运行时支撑能力”分开。前者回答“这一步能做什么”,后者回答“这条链怎样续接、怎样回放、怎样被人打断”。
一条典型执行链¶
一条典型链路和 Python 版本很接近:
- 服务端收到用户输入,并加载当前 session。
- Agent 根据工具和状态决定是回答、调工具,还是交接给另一个 Agent。
- 工具调用和返回结果被写进 trace。
- 如果需要人工确认,运行时在正式节点停下来。
- 结果回到会话状态里,供下一轮继续使用。
JS 版本特别值得看的地方,在于这条链如何和事件流、Web 应用、Node 服务边界配合。它会逼你思考:哪些事件适合往前端流,哪些状态必须保留在服务端,哪些 trace 只适合内部排障。
值得学的设计¶
这个项目最值得学的有两点。
第一,和 Python 版本保持概念对齐。这样你会看到 Agent runtime 的核心不是某门语言的 API 写法,而是 session、trace、handoff、approval 这些对象本身。第二,它更容易让你看到前后端边界问题。前端可以消费事件流,但不应该承担运行时真实状态;session 可以被 UI 展示,但不应该由 UI 决定最终形态。
如果你在做聊天产品或内部助手,这点很重要。很多团队前端事件做得很炫,但一到断线恢复、人工审批、权限审计就开始混乱,问题通常不在前端能力,而在运行时状态没有被正式建模。
适合借回自己项目的点¶
- 先把 Agent runtime 的对象想清楚,再决定语言和框架。
- 把 session/history 做成服务端正式状态。
- 把 trace 和 approval 放进主路径,而不是以后再补。
- 分清前端事件流和后端执行状态,各自承担自己的职责。
不要照抄的地方¶
- 不要把前端事件对象直接当运行时状态对象。
- 不要因为 JS 写起来顺手,就忽略了服务端权限、副作用治理和审计。
- 不要把“官方两种语言都支持”理解成“语言层细节都不重要”。运行时概念稳定,不代表宿主环境差异可以忽略。