OpenAI Agents SDK 编排与交接

2026-11-06 16:09 更新

不同专项智能体应分别负责不同工作时,多智能体工作流会很有用。设计的第一个问题,是每个分支中谁负责最终呈现给用户的答案。

选择编排模式

模式 适用情况 行为
交接(handoff) 某个专项智能体应接管该分支的对话 控制权转给专项智能体
把智能体作为工具 管理者应保持控制,把专项智能体作为职责有限的能力调用 管理者仍负责回复

用交接转移职责

专项智能体应负责下一条回复,而非只在幕后协助时,适合使用交接:

来源示例 1(javascript):

// [中文] 示例1:用交接转移职责。
// [中文] 创建账单、退款和分流智能体,将两个专项智能体登记为交接目标;此处只配置路由,没有执行一次运行。
import { Agent, handoff } from "@openai/agents";

const billingAgent = new Agent({ name: "Billing agent" });
const refundAgent = new Agent({ name: "Refund agent" });

const triageAgent = Agent.create({
  name: "Triage agent",
  handoffs: [billingAgent, handoff(refundAgent)],
});

来源示例 2(python):

## [中文] 示例2:用交接转移职责。
## [中文] 创建账单、退款和分流智能体,将两个专项智能体登记为交接目标;此处只配置路由,没有执行一次运行。
from agents import Agent, handoff

billing_agent = Agent(name="Billing agent")
refund_agent = Agent(name="Refund agent")

triage_agent = Agent(
    name="Triage agent",
    handoffs=[billing_agent, handoff(refund_agent)],
)

保持路由清晰:每个专项智能体只承担明确而有限的工作;TypeScript的handoffDescription、Python的handoff_description应简短具体;下一分支确实需要不同指令、工具或策略时再拆分。

高级交接还可以携带结构化元数据或经过过滤的历史。具体API因语言而异,详见对应SDK文档。

在管理者式工作流中把智能体作为工具

主智能体应负责最终答案,并把专项智能体作为助手调用时,使用TypeScript的agent.asTool()或Python的agent.as_tool():

来源示例 3(javascript):

// [中文] 示例3:在管理者式工作流中把智能体作为工具。
// [中文] 摘要智能体指令及工具描述均要求“为所给文本生成简洁摘要”;把它包装成summarize_text工具交给研究助手。
// [中文] 管理者保留最终回复职责,这不同于handoff转移控制权;本段只定义配置。
import { Agent } from "@openai/agents";

const summarizer = new Agent({
  name: "Summarizer",
  instructions: "Generate a concise summary of the supplied text.",
});

const mainAgent = new Agent({
  name: "Research assistant",
  tools: [
    summarizer.asTool({
      toolName: "summarize_text",
      toolDescription: "Generate a concise summary of the supplied text.",
    }),
  ],
});

来源示例 4(python):

## [中文] 示例4:在管理者式工作流中把智能体作为工具。
## [中文] 摘要智能体指令及工具描述均要求“为所给文本生成简洁摘要”;把它包装成summarize_text工具交给研究助手。
## [中文] 管理者保留最终回复职责,这不同于handoff转移控制权;本段只定义配置。
from agents import Agent

summarizer = Agent(
    name="Summarizer",
    instructions="Generate a concise summary of the supplied text.",
)

main_agent = Agent(
    name="Research assistant",
    tools=[
        summarizer.as_tool(
            tool_name="summarize_text",
            tool_description="Generate a concise summary of the supplied text.",
        )
    ],
)

以下情况通常更适合这种模式:管理者应综合最终答案;专项智能体完成摘要、分类等有限任务;希望维持稳定的外层工作流并嵌套调用,而非转移职责。

约定发生变化时才添加专项智能体

尽可能先从一个智能体开始。新增专项智能体应能明显改善能力隔离、策略隔离、提示词清晰度或追踪可读性。

过早拆分会增加提示词、追踪和批准入口,却未必改善工作流。

后续步骤

确定职责归属后,可阅读:

  • 智能体定义:细化指令、工具和输出约定。
  • 运行智能体:交接和工具在单次运行中的行为。
  • 结果与状态:TypeScript的lastAgent、Python的last_agent及可恢复状态如何影响下一轮。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号