day21 agent SDK框架

news/2025/11/5 9:20:41/文章来源:https://www.cnblogs.com/fuminer/p/19192300

OpenAI开源Agents SDK智能体开发实战

Agents SDK简介

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

  • GitHub官网:https://github.com/openai/openai-agents-python/
image-20250730100450206

根据官方介绍,OpenAI Agents SDK 让你能够通过一个轻量、易用、抽象极少的工具包来构建基于智能体的 AI 应用。它是 Swarm 的一个面向生产环境的升级版本。该 SDK 仅包含极少量基础构件:

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

结合 Python 使用时,这些构件足够强大,能够表达工具与智能体之间的复杂关系,并让你在没有高学习成本的前提下构建真实可用的应用程序。

OpenAI的Agents SDK 的设计遵循两个核心原则:

  1. 功能足够强大,值得使用,容易上手
  2. 默认配置即可很好地运行,但你也可以完全自定义行为逻辑

以下是该 SDK 的主要特性:

  • Agent 循环机制:内置的智能体循环逻辑,自动处理工具调用、结果返回给 LLM、直到任务完成的全过程
  • Python 优先:使用原生 Python 语言特性来编排与串联智能体,而无需学习新的抽象概念
  • Handoff(智能体间任务交接):强大的功能,可在多个智能体间协调与任务委派
  • Guardrail(输入验证护栏):支持与智能体并行运行输入验证逻辑,若验证失败可提前中断流程
  • 函数工具化:可以将任何 Python 函数转为工具,自动生成 Schema
  • 追踪系统(Tracing):内置追踪功能,可视化、调试、监控你的智能体流程

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

image-20250730100911993

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

Agents SDK基础使用

  • Agents SDK安装流程

    #创建虚拟环境指定python版本,测试结果 python=3.10 好用,其他版本会有问题。
    conda create --name 虚拟环境名称 python=3.10
    conda activate 虚拟环境名称
    pip install openai-agents -i https://pypi.tuna.tsinghua.edu.cn/simple#安装内核
    pip install ipykernel
    python -m ipykernel install --user --name=虚拟环境名称
    
  • Agents SDK简单调用流程

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

    其中Agent就是一个Multi-Agent系统中最小执行单元,而Runner则是运行一次次任务的调度函数。但是需要注意的是,由于Agents SDK默认支持的模型是OpenAI的GPT系列模型,因此在修改底层模型的时候,还需要额外导入AsyncOpenAI、OpenAIChatCompletionsModel和ModelSettings等模块。

    from openai import AsyncOpenAI
    from agents import OpenAIChatCompletionsModel,Agent,Runner,set_default_openai_client
    from agents.model_settings import ModelSettings
    

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

    #自定义模型对象
    external_client = AsyncOpenAI(base_url = "https://api.deepseek.com",api_key=API_KEY, 
    )
    #将自定义模型设置为默认模型
    set_default_openai_client(external_client)#创建模型客户端
    deepseek_model = OpenAIChatCompletionsModel(model="deepseek-chat",openai_client=external_client)
    

    然后即可创建一个Agent:

    agent = Agent(name="Assistant", instructions="你是一名助人为乐的助手。",model=deepseek_model)
    

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

    result = await Runner.run(agent, "请写一首关于编程中递归的俳句。") 
    print(result.final_output)
    

Agents SDK构造多轮对话机器人

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

[MessageOutputItem(agent=Agent(name='Assistant', instructions='你是一名助人为乐的助手。', handoff_description=None, handoffs=[], model=<agents.models.openai_chatcompletions.OpenAIChatCompletionsModel object at 0x0000015531F87F50>, model_settings=ModelSettings(temperature=None, top_p=None, frequency_penalty=None, presence_penalty=None, tool_choice=None, parallel_tool_calls=False, truncation=None, max_tokens=None), tools=[], mcp_servers=[], input_guardrails=[], output_guardrails=[], output_type=None, hooks=None, tool_use_behavior='run_llm_again', reset_tool_choice=True), raw_item=ResponseOutputMessage(id='__fake_id__', content=[ResponseOutputText(annotations=[], text='函数自呼唤,  \n层层深入栈如山,  \n基线终归还。', type='output_text')], role='assistant', status='completed', type='message'), type='message_output_item')]

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

len(result.new_items) #结果为:1

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

type(result.new_items[0]) #agents.items.MessageOutputItem

而具体回复的内容,则可以通过raw_item来查看:result.new_items[0].raw_item

ResponseOutputMessage(id='__fake_id__', content=[ResponseOutputText(annotations=[], text='函数自呼唤,  \n层层深入栈如山,  \n基线终归还。', type='output_text')], role='assistant', status='completed', type='message')

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

result.to_input_list()

[{'content': '请写一首关于编程中递归的俳句。', 'role': 'user'},{'id': '__fake_id__','content': [{'annotations': [],'text': '函数自呼唤,  \n层层深入栈如山,  \n基线终归还。','type': 'output_text'}],'role': 'assistant','status': 'completed','type': 'message'}]

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

messages = result.to_input_list()
messages.append({"role": "user", "content":"请问我的上一个问题是什么?"})
messages
#messages结果如下:[{'content': '请写一首关于编程中递归的俳句。', 'role': 'user'},{'id': '__fake_id__','content': [{'annotations': [],'text': '函数自呼唤,  \n层层深入栈如山,  \n基线终归还。','type': 'output_text'}],'role': 'assistant','status': 'completed','type': 'message'},{'role': 'user', 'content': '请问我的上一个问题是什么?'}]
#获取回复
result1 = await Runner.run(agent, messages) 
result1.final_output

多轮对话构造:

from IPython.display import display, Code, Markdown, Image
async def chat(Agent):input_items = []while True:user_input = input("💬 请输入你的消息(输入quit退出):")if user_input.lower() in ["exit", "quit"]:print("✅ 对话已结束")breakinput_items.append({"content": user_input, "role": "user"})result = await Runner.run(Agent, input_items)display(Markdown(result.final_output))input_items = result.to_input_list()await chat(agent)

Agents SDK调用外部工具流程

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

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

  • 导入function_tool类

    from agents import function_tool
    import requests,json
    
  • 使用Python装饰器,构建一个外部工具:

    @function_tool
    def get_weather(loc):"""查询即时天气函数:param loc: 必要参数,字符串类型,用于表示查询天气的具体城市名称,\注意,中国的城市需要用对应城市的英文名称代替,例如如果需要查询北京市天气,则loc参数需要输入'Beijing';:return:OpenWeather API查询即时天气的结果,具体URL请求地址为:https://api.openweathermap.org/data/2.5/weather\返回结果对象类型为解析之后的JSON格式对象,并用字符串形式进行表示,其中包含了全部重要的天气信息"""# Step 1.构建请求url = "https://api.openweathermap.org/data/2.5/weather"# Step 2.设置查询参数params = {"q": loc,               "appid": xxx,    # 输入自己的API key"units": "metric",            # 使用摄氏度而不是华氏度"lang":"zh_cn"                # 输出语言为简体中文}# Step 3.发送GET请求response = requests.get(url, params=params)# Step 4.解析响应data = response.json()return json.dumps(data)
    
  • 创建代理,并在tools参数中增加一个get_weather工具:

    weather_agent = Agent(name="天气查询Agent",instructions="你是一名助人为乐的助手,并且可以进行天气信息查询",tools=[get_weather],model=deepseek_model
    )
    
  • 测试调用结果

    weather_result = await Runner.run(weather_agent, input="你好,请问今天北京天气如何?")
    weather_result.final_output
    

Agents SDK多工具并联&串联执行流程

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

multi_weather_result = await Runner.run(weather_agent, input="你好,请问今天北京和杭州天气如何?")
multi_weather_result.final_output

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

@function_tool
def write_file(content):"""将指定内容写入本地文件。:param content: 必要参数,字符串类型,用于表示需要写入文档的具体内容。:return:是否成功写入"""return "已成功写入本地文件。"

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

new_agent = Agent(name="综合功能Agent",instructions="你是一名助人为乐的助手",tools=[get_weather, write_file],model=deepseek_model
)

然后尝试运行:

new_agent_result = await Runner.run(new_agent, input="请帮我查询北京和杭州天气,并将其写入本地。")
new_agent_result.final_output

Agents SDK的多Agent执行流程

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

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

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

zhangfei_agent = Agent(name="张飞",instructions="用张飞口吻回复用户问题。",model=deepseek_model
)zhuge_agent = Agent(name="诸葛亮",instructions="用诸葛亮口吻回复用户问题。",model=deepseek_model
)

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

triage_agent = Agent(name="分诊智能体",instructions="你是分诊智能体,你可以根据用户要求将其转移到张飞或者诸葛亮智能体中",handoffs=[zhangfei_agent, zhuge_agent],model=deepseek_model
)
res = await Runner.run(triage_agent, input="让张飞讲一个段子")
res.final_output
##############################################
res = await Runner.run(triage_agent, input="让诸葛亮讲一个段子")
res.final_output

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

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

zhangfei_agent = Agent(name="张飞",instructions="用张飞口吻回复用户问题。",handoff_description="当用户提到‘勇猛’、‘战斗’、‘喝酒’、‘战场’等关键词时,或者语气激昂、充满力量感的问题,适合由我来回应。",model=deepseek_model
)zhuge_agent = Agent(name="诸葛亮",instructions="用诸葛亮口吻回复用户问题。",handoff_description="如果用户询问策略、计谋、智慧、治国安邦、历史分析等内容,尤其是涉及谋定后动、运筹帷幄的话题,请把我引入对话。",model=deepseek_model
)triage_agent = Agent(name="分诊智能体",instructions="你是分诊智能体,你可以根据用户要求将其转移到张飞或者诸葛亮智能体中",handoffs=[zhangfei_agent, zhuge_agent],handoff_description="我会先接收用户的输入,判断其意图是否匹配某个专家领域:若涉及武力、勇气、冲锋陷阵类内容 → 转交至‘张飞’;若涉及谋略、智谋、战略规划类内容 → 转交至‘诸葛亮’。",model=deepseek_model
)res = await Runner.run(triage_agent, input="如何制定战前策略?")
res.final_output
###############################################
res = await Runner.run(triage_agent, input="战场上如何可以对敌人一击毙命?需要掌握什么武术招式呢?")
res.final_output

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/956404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年口碑好的注册公司区域口碑榜

2025年口碑好的注册公司区域口碑榜 在如今纷繁复杂的商业环境中,企业的创立与发展往往面临着诸多工商财税、知识产权等方面的难题。从公司注册时的繁琐流程,到运营过程中的税务申报,再到知识产权的保护与资质办理,…

2025年11月护肝保健品品牌推荐榜:真实口碑与认证数据排 行

凌晨两点还在回工作消息、周末聚餐一杯接一杯,很多人把“肝疼”当成玩笑,却悄悄把体检报告里的“轻中度脂肪肝”划进重点。国家卫健委《2023国民健康白皮书》显示,18—45岁人群中每四人就有一项以上肝脏指标异常,而…

2025年口碑好的稻米品牌厂家排行榜

2025年口碑好的稻米品牌厂家排行榜 随着消费者对食品品质要求的提升,稻米市场的品牌化、品质化趋势日益明显。2025年,一批以优质原料、先进工艺和良好口碑为核心的稻米品牌脱颖而出。本文基于市场调研、用户反馈及行…

2025 最新推荐!充电桩厂家排行榜:技术、安全与服务三重维度权威测评优质品牌榜单一体式双枪 / 双枪直流 / 通用快充充电桩公司推荐

引言 据行业协会最新发布的《2025 充电设施性能评估报告》显示,全球新能源汽车渗透率预计将突破 25%,充电桩市场需求同步激增,但行业产品事故率仍达 3.2%,用户对安全与效率的投诉占比超 45%。为破解选购难题,协会…

2025年全屋定制MES系统哪家合适?五大服务商推荐

在定制家居行业智能化转型的浪潮中,MES系统作为生产端数字化的核心引擎,正成为企业突破柔性生产瓶颈、提升交付效率的关键抓手。据《2024中国定制家居智能制造白皮书》显示,92%的头部企业已部署或计划部署MES系统,…

2025年优质的全屋定制门墙柜厂家最新权威推荐榜

2025年优质的全屋定制门墙柜厂家最新权威推荐榜 随着消费者对家居品质和个性化需求的不断提升,全屋定制行业迎来了快速发展期。门墙柜一体化设计成为现代家居的主流趋势,不仅能够最大化利用空间,还能实现风格统一、…

实用指南:iPhone 17 Pro Max 的影像升级全解:从长焦、前置聊到 ProRes RAW

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年有信用的物流顶级口碑榜

2025年有信用的物流顶级口碑榜在当今快速发展的商业环境中,物流服务已成为企业供应链中不可或缺的关键环节。选择一家信誉良好、服务优质的物流公司,不仅能确保货物安全准时送达,还能为企业节省成本、提高运营效率。…

2025年热门的广东阿里巴巴运营优质服务榜

2025年热门的广东阿里巴巴运营优质服务榜 在数字化转型浪潮中,阿里巴巴运营服务成为中小企业提升线上竞争力的关键。优质的运营服务商不仅能帮助企业入驻平台,更能通过精细化运营实现流量增长、询盘转化和业绩提升。…

2025年6月北京GEO优化公司实力榜:五强横向评测与选择参 考

在北京,当品牌希望自己在DeepSeek、豆包、通义千问等AI搜索里被精准推荐,却苦于算法规则变化快、内部缺乏跨平台技术人才时,GEO优化公司就成了刚需。用户常见场景有三:一是跨国快消集团要在新品上市周期内同步提升…

2025年11月护肝保健品品牌推荐榜:蓝帽子 认证产品对比评测

凌晨两点还在回工作消息、周末聚餐一杯接一杯,很多人把“肝疼”当成玩笑,却悄悄把体检报告里的“轻中度脂肪肝”划进重点。国家卫健委《2023国民健康白皮书》显示,18—45岁人群中每四人就有一项以上肝脏指标异常,而…

2025年靠谱的1688运营权威优选榜

2025年靠谱的1688运营权威优选榜 在竞争激烈的B2B电商领域,1688平台已成为企业拓展供应链与批发业务的核心渠道。优秀的运营服务商能帮助企业快速提升店铺流量、转化率及品牌影响力。本榜单基于服务能力、客户口碑、…

AI应用开发学习路线---“先入门、重实践、快速见效”

“先入门、重实践、快速见效” 的AI应用开发学习路线。我们的核心思想是:“先知其然,快速做出东西;再知其所以然,逐步深入优化。” 这条路线分为三个清晰的阶段,让你像爬楼梯一样,一步步从入门到精通。核心心态准…

2025年热门的抖音运营最佳口碑推荐榜

2025年热门的抖音运营最佳口碑推荐榜 随着短视频平台的持续爆发,抖音已成为企业品牌营销的核心阵地。2025年,专业的抖音代运营服务商成为企业突破流量瓶颈的关键伙伴。本文基于真实客户反馈、服务案例及行业数据,精…

基于Java+Springboot+Vue开发的蛋糕商城管理系统源码+运行步骤

项目简介该项目是基于Java+Springboot+Vue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过…

2025年11月护肝保健品品牌推荐对比:行业白皮书数据与排名解析

经常需要应酬、熬夜或长期服药的人,往往会在体检报告上看到“转氨酶升高”“脂肪肝倾向”等提示,于是想挑一款靠谱的护肝保健品,却又被满屏“解酒神器”“速效修复”弄得无从下手。中国保健协会发布的《2024护肝保健…

2025年正规的西铁城机床代理商用户推荐榜

2025年正规的西铁城机床代理商用户推荐榜 在精密机械加工领域,西铁城(CITIZEN)机床凭借高精度、高稳定性和智能化技术,成为全球高端数控机床的代表品牌之一。选择正规代理商是保障设备品质、技术服务及长期合作的…

2025 年空气能厂家最新推荐排行榜:品牌技术整合与全场景服务能力深度解析及权威选购指南空气能净化水系统 / 空气能商用机 / 空气能源热泵公司推荐

引言 在双碳目标持续推进的背景下,空气能作为清洁能源利用的核心领域,市场需求迎来爆发式增长。为精准筛选优质服务商,行业权威协会联合专业测评机构开展 2025 年空气能企业综合测评,通过 “技术实力、案例落地、服…

2025年质量好的奥尔良食品添加剂品牌厂家排行榜

2025年质量好的奥尔良食品添加剂品牌厂家排行榜 随着食品工业的快速发展,奥尔良风味食品因其独特的风味和广泛的适用性,在肉制品、休闲食品、调理制品等领域备受欢迎。优质的食品添加剂不仅能提升食品的口感、色泽和…

2025年技术好的网站建设实力推荐排行榜

2025年技术好的网站建设实力推荐排行榜 在数字化时代,网站建设已成为企业展示品牌形象、拓展市场的重要途径。随着技术的不断进步,2025年的网站建设行业更加注重用户体验、智能化与个性化定制。本文将推荐5家在技术…