day30 多智能体编排高级-OpenAI开源Agents SDK智能体开发实战

day30 多智能体编排高级-OpenAI开源Agents SDK智能体开发实战

2025年3月11号,OpenAI正式推出其下第一款企业级Multi-Agent开发框架Agents-SDK,该框架是此前OpenAI在去年推出的Swarm的升级版,在保留了Swarm的高效便捷的Multi-Agent开发特性的同时,加入了更多面向企业级应用的功能。

  • Agent(智能体):即带有指令和工具的大语言模型(LLM)
  • Handoff(交接):允许智能体将特定任务委托给其他智能体
  • Guardrail(护栏):用于对输入内容进行验证

同时,在2025年3月27号,Agents SDK正式官宣支持MCP使用,这也使得Agents SDK的实际应用场景得到待拓展:

image-20250730100911993

因此仅需在创建Agent的时候,将MCP服务器视作为一项工具,即可顺利调用MCP服务器进行Agent开发。

  • Agents SDK安装流程
    
    
  • Agents SDK简单调用流程

    接下来尝试快速调用Agents SDK进行模型响应。需要注意的是,Agents SDK作为一个工业级的Multi-Agent开发框架,实际使用过程中有非常多的的技术细节,但如果希望快速测试一些功能,则只需要导入Agent和Runner两个模块即可快速运行。

    
    

    然后可以按照如下方式创建一个Agent对象,并调用DeepSeek模型作为基础模型:

    
    

    然后即可创建一个Agent:

    
    

    当创建完一个Agent后,接下来即可测试进行调用:

    
    

不同于传统的模型 API是Messages驱动(传入Message、传出Message),Agents SDK是事件驱动,既Agents SDK会将整个运行过程看成是一次次的事件。例如上述创建完俳句后,全部的事件都保留在result中,我们可以通过属性来查看全部的事件,全部的事件用一个列表进行表示:


而在此前的对话中,只发生了一次事件:


就是一次MessageOutputItem,也就是消息创建事件(也就是大模型发生一次回复):


而具体回复的内容,则可以通过来查看:


而Agents SDK为了方便我们快速构造多轮对话机器人,专门提供了一个to_input_list()方法,可以直接将用户的输入和本次输出结果拼接成一个消息列表:


而此时,我们只需要将此前对话消息,加上新一轮的对话消息,即可快速进行多轮对话:




多轮对话构造:


对于任意一个Agent开发框架,能够顺利调用外部工具都是基础要求,而Multi-Agent框架则进一步要求不仅能够顺利调用多个外部工具,还需要能够在多个不同的Agent中进行切换,以便于执行不同类型任务。

Agents SDK调用外部工具的流程相对来说简单很多,只需要按照如下方式执行即可:

  • 导入functionAgent 智能体_tool类
    
    
  • 使用Python装饰器,构建一个外部工具:
    
    
  • 创建代理,并在tools参数中增加一个get_weather工具:
    
    
  • 测试调用结果
    
    

这里我们还是采用weather_agent来进行多地天气查询,即可测试Agents SDK是否会开启多工具并联调用:


接下来继续尝试进行多工具串联调用测试。此时我们再定义一个write_file函数,用于将“文本写入本地”:


然后再创建一个同时可以调用天气查询和写入本地文件的Agent:


然后尝试运行:


如果以上介绍的Agents SDK的相关功能只是对于大模型基础能力的增强的话,那Agents SDK的Handoffs(交接)功能,则是搭建Multi-Agent的关键技术。

所谓Multi-Agent,指的是在某些场景下、为了解决一些更加复杂的任务,我们则可以考虑通过多个智能体协作的方式来完成。相比使用一个Agent来调用多种工具,我们使用不同的Agent来管理不同类别的工具,将会使整个架构更加清晰、维护更加便捷,同时也会使得整个Agent系统功能更加灵活、运行更加稳定。

接下来我们就通过一个简单的示例,来查看Agents SDK的Handoffs基础功能实现方法。这里先创建一组只能用某种语言进行回复的智能体:


然后创建一个可以自由调度其他几个智能体的分诊智能体triage_agent,这里我们可以通过handoffs参数,来确定当前分诊智能体能够调用的智能体范围。而当分诊智能体运行时,会根据用户的需求,以及分诊智能体的实际功能,将任务转交给对应的智能体来完成:


从上述例子不难看出,Agents SDK的Handoffs功能能够非常便捷的调用不同的Agent来实现某一项具体的需求。但这个分诊的Agent到底是如何判断可以将需求转交给哪个Agent的呢?由于Handoffs采用了和Function calling相同的机制,因此默认会根据Agent的名字和Instruction来判断Agent的功能。但有的时候这种识别并不能描述全部情况。

有一种更加稳妥的方法是使用参数来描述Agent的功能,才能进行更加准确的转交。




外部函数组创建流程


核心Agent提示词模板


航班修改智能体(Flight Modification Agent)


航班取消智能体(Flight Cancel Agent)


航班更改智能体(Flight Change Agent)


行李找寻智能体(Lost Baggage Agent)


客户信息


分诊智能体(Triage Agent)


增加智能体之间的转交功能Handoffs


创建对话函数



最终执行:


点击查看航班转移代码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:Ai探索者,转载请注明出处:https://javaforall.net/244486.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月15日 下午8:43
下一篇 2026年3月15日 下午8:43


相关推荐

关注全栈程序员社区公众号