苏州吴江做网站公司/百度贴吧的互动社区

苏州吴江做网站公司,百度贴吧的互动社区,专业网站开发技术,windows下搭建wordpress本系列博文在掘金同步发布, 更多优质文章,请关注本人掘金账号: 人肉推土机的掘金账号 AutoGen系列一:基础介绍与入门教程 AutoGen系列二:深入自定义智能体 AutoGen系列三:内置智能体的应用与实战 AutoGen系列四&am…

本系列博文在掘金同步发布, 更多优质文章,请关注本人掘金账号:
人肉推土机的掘金账号

AutoGen系列一:基础介绍与入门教程

AutoGen系列二:深入自定义智能体

AutoGen系列三:内置智能体的应用与实战

AutoGen系列四:自定义智能体的高级技巧

AutoGen系列五: 智能体团队协作的深度剖析与实践

AutoGen 技术博客系列 (六):SelectorGroupChat 的原理与实践

AutoGen 技术博客系列 (七):状态管理与组件序列化解析

AutoGen 技术博客系列 八:深入剖析 Swarm—— 智能体协作的新范式

AutoGen 技术博客系列 九:从 v0.2 到 v0.4 的迁移指南

在人工智能的浩瀚星空中,AutoGen 的 Swarm 模式犹如一颗耀眼的新星,正引领着智能体协作的新潮流。今天,就让我们一同深入探究这一强大模式的奥秘。

一、Swarm 模式:智能协作的核心引擎

Swarm 模式的设计理念独具匠心,它打破了传统智能体协作的桎梏,允许智能体基于自身能力灵活地将任务交接给其他合适的智能体,并且所有智能体在同一消息上下文环境下协同工作。这一特性使得智能体能够自主地进行任务规划和分配,极大地提升了系统的灵活性与适应性。

在其运行机制中,智能体轮流生成响应并广播,而每次发言智能体的选定取决于上下文中最新的 HandoffMessage。这就要求每个智能体都具备生成 HandoffMessage 的能力,从而明确指示任务的交接方向。例如,在 AssistantAgent 中,我们可以通过设置 handoffs 参数来精准指定可交接的目标智能体,并利用 Handoff 进一步定制消息内容和交接行为,为智能体之间的协作提供了丰富的定制化空间。

从实现原理的深度层面来看,当团队接收到任务时,首个发言智能体迅速展开任务处理,并根据任务的具体情况和自身的能力判断是否需要交接任务以及交接的对象。一旦某个智能体生成 HandoffMessage,接收智能体便会无缝接管任务,继续在相同的消息上下文环境下推进工作。这种基于消息驱动的任务交接机制,确保了任务的连贯性和高效性。

值得注意的是,AssistantAgent 依赖模型的工具调用功能来实现任务交接,这就对模型提出了较高的要求,即必须支持工具调用。若模型执行并行工具调用,可能会引发意想不到的行为。为避免此类问题,在使用 OpenAIChatCompletionClientAzureOpenAIChatCompletionClient 时,我们可以通过简单地设置 parallel_tool_calls = False 来禁用并行工具调用,确保系统的稳定运行。

二、实战案例:从航班退款到股票研究

(一)客户支持案例:航班退款的智能流程

在这里插入图片描述

【图片来源 AutoGen 官方说明文档】

在航班退款场景中,我们构建了一个包含旅行代理(Travel Agent)和航班退款专员(Flights Refunder)的智能系统,并允许用户在必要时参与交互。

旅行代理作为系统的入口,负责启动对话并全面评估用户的退款请求。当遇到退款相关任务时,它会迅速将任务交接给航班退款专员;若需要用户提供进一步的信息,如航班号等,它会将任务交接给用户。航班退款专员则专注于使用 refund_flight 工具处理退款事宜,在需要用户输入时,会暂停团队执行,等待用户提供关键信息。

以下是具体的代码实现:

    from typing import Any, Dict, Listfrom autogen_agentchat.agents import AssistantAgentfrom autogen_agentchat.conditions import HandoffTermination, TextMentionTerminationfrom autogen_agentchat.messages import HandoffMessagefrom autogen_agentchat.teams import Swarmfrom autogen_agentchat.ui import Consolefrom autogen_ext.models.openai import OpenAIChatCompletionClient# 定义退款工具函数def refund_flight(flight_id: str) -> str:return f"Flight {flight_id} refunded"# 创建模型客户端model_client = OpenAIChatCompletionClient(model="gpt-4o",# api_key="YOUR_API_KEY",)# 创建旅行代理智能体travel_agent = AssistantAgent("travel_agent",model_client=model_client,handoffs=["flights_refunder", "user"],system_message="""You are a travel agent. The flights_refunder is in charge of refunding flights. If you need information from the user, you must first send your message, then you can handoff to the user. Use TERMINATE when the travel planning is complete.""",)# 创建航班退款专员智能体flights_refunder = AssistantAgent("flights_refunder",model_client=model_client,handoffs=["travel_agent", "user"],tools=[refund_flight],system_message="""You are an agent specialized in refunding flights. You only need flight reference numbers to refund a flight. You have the ability to refund a flight using the refund_flight tool. If you need information from the user, you must first send your message, then you can handoff to the user. When the transaction is complete, handoff to the travel agent to finalize.""",)# 设置终止条件termination = HandoffTermination(target="user") | TextMentionTermination("TERMINATE")team = Swarm([travel_agent, flights_refunder], termination_condition=termination)# 定义任务task = "I need to refund my flight."async def run_team_stream():task_result = await Console(team.run_stream(task=task))last_message = task_result.messages[-1]while isinstance(last_message, HandoffMessage) and last_message.target == "user":user_message = input("User: ")task_result = await Console(team.run_stream(task=HandoffMessage(source="user", target=last_message.source, content=user_message)))last_message = task_result.messages[-1]# 运行任务# Use asyncio.run(...) if you are running this in a script.await run_team_stream()

代码解读

  • 首先,我们导入了必要的模块和类,包括 AssistantAgentHandoffTerminationTextMentionTermination 等,这些是构建 Swarm 团队和实现任务交接、终止条件判断的关键组件。

  • 接着定义了 refund_flight 函数,它模拟了航班退款的实际操作,接受航班号作为参数并返回退款成功的消息。

  • 创建 OpenAIChatCompletionClient 作为模型客户端,用于智能体与语言模型的交互,这里指定了使用的模型为 gpt-4o

  • 然后分别创建了 travel_agentflights_refunder 两个智能体。travel_agent 的系统消息表明它作为旅行代理的角色和任务交接规则,flights_refunder 则定义了其作为航班退款专员的职责和工具使用方法。

  • 设置了终止条件 termination,它由 HandoffTermination(当交接目标为用户时触发)和 TextMentionTermination(当消息中提及 “TERMINATE” 时触发)组合而成,确保任务在合适的时机结束。

  • 最后定义了任务 “I need to refund my flight.” 并通过 run_team_stream 函数运行团队任务,在任务执行过程中,如果遇到交接给用户的情况,会暂停等待用户输入,然后继续执行任务。

运行结果如下:

当用户输入 “I need to refund my flight.” 时,旅行代理首先做出响应:

---------- user ----------
I need to refund my flight.
---------- travel_agent ----------
[FunctionCall(id='call_ZQ2rGjq4Z29pd0yP2sNcuyd2', arguments='{}', name='transfer_to_flights_refunder')]
[Prompt tokens: 119, Completion tokens: 14]
---------- travel_agent ----------
[FunctionExecutionResult(content='Transferred to flights_refunder, adopting the role of flights_refunder immediately.', call_id='call_ZQ2rGjq4Z29pd0yP2sNcuyd2')]
---------- travel_agent ----------
Transferred to flights_refunder, adopting the role of flights_refunder immediately.

随后航班退款专员接手任务,并询问用户航班号:

---------- flights_refunder ----------
Could you please provide me with the flight reference number so I can process the refund for you?
[Prompt tokens: 191, Completion tokens: 20]
---------- flights_refunder ----------
[FunctionCall(id='call_1iRfzNpxTJhRTW2ww9aQJ8sK', arguments='{}', name='transfer_to_user')]
[Prompt tokens: 219, Completion tokens: 11]
---------- flights_refunder ----------
[FunctionExecutionResult(content='Transferred to user, adopting the role of user immediately.', call_id='call_1iRfzNpxTJhRTW2ww9aQJ8sK')]
---------- flights_refunder ----------
Transferred to user, adopting the role of user immediately.

此时系统暂停,等待用户输入航班号。假设用户输入 “507811”,则航班退款专员继续执行任务:

---------- user ----------
Sure, it's 507811
---------- flights_refunder ----------
[FunctionCall(id='call_UKCsoEBdflkvpuT9Bi2xlvTd', arguments='{"flight_id":"507811"}', name='refund_flight')]
[Prompt tokens: 266, Completion tokens: 18]
---------- flights_refunder ----------
[FunctionExecutionResult(content='Flight 507811 refunded', call_id='call_UKCsoEBdflkvpuT9Bi2xlvTd')]
---------- flights_refunder ----------
Tool calls:
refund_flight({"flight_id":"507811"}) = Flight 507811 refunded

完成退款后,航班退款专员将任务交接回旅行代理:

---------- flights_refunder ----------
[FunctionCall(id='call_MQ2CXR8UhVtjNc6jG3wSQp2W', arguments='{}', name='transfer_to_travel_agent')]
[Prompt tokens: 303, Completion tokens: 13]
---------- flights_refunder ----------
[FunctionExecutionResult(content='Transferred to travel_agent, adopting the role of travel_agent immediately.', call_id='call_MQ2CXR8UhVtjNc6jG3wSQp2W')]
---------- flights_refunder ----------
Transferred to travel_agent, adopting the role of travel_agent immediately.

最后旅行代理确认退款成功并终止流程:

---------- travel_agent ----------
Your flight with reference number 507811 has been successfully refunded. If you need anything else, feel free to let me know. Safe travels! TERMINATE
[Prompt tokens: 272, Completion tokens: 32]

从这个案例中,我们可以清晰地看到 Swarm 模式在客户支持场景中的高效应用,智能体之间的任务交接顺畅自然,有效地解决了用户的问题。

(二)股票研究案例:多智能体协同的智慧结晶

在股票研究领域,我们设计了一个由四个智能体组成的强大系统,分别是规划者(Planner)、金融分析师(Financial Analyst)、新闻分析师(News Analyst)和撰写者(Writer)。
在这里插入图片描述

【图片来源: AutoGen 官网文档】

规划者作为系统的核心协调者,负责根据任务需求有条不紊地将具体任务分配给各个专业智能体,并确保整个工作流程的高效运行。金融分析师专注于使用 get_stock_data 工具深入分析股票数据和财务指标,为研究提供坚实的数据支持。新闻分析师则利用 get_news 工具广泛收集和总结与股票相关的最新新闻资讯,并提取关键市场洞察。撰写者负责将金融和新闻分析的结果精心整理成一份逻辑严密、内容详实的最终报告。

每个智能体在完成自身任务后,都会将控制权交回给规划者,规划者根据整体进展情况决定是否继续分配任务或终止流程。这种循环往复的协作机制,充分发挥了每个智能体的专业优势,实现了高效的股票研究。

以下是具体的代码实现:

    from typing import Any, Dict, Listfrom autogen_agentchat.agents import AssistantAgentfrom autogen_agentchat.conditions import HandoffTermination, TextMentionTerminationfrom autogen_agentchat.messages import HandoffMessagefrom autogen_agentchat.teams import Swarmfrom autogen_agentchat.ui import Consolefrom autogen_ext.models.openai import OpenAIChatCompletionClient# 定义获取股票数据工具函数async def get_stock_data(symbol: str) -> Dict[str, Any]:return {"price": 180.25, "volume": 1000000, "pe_ratio": 65.4, "market_cap": "700B"}# 定义获取新闻工具函数async def get_news(query: str) -> List[Dict[str, str]]:return [{"title": "Tesla Expands Cybertruck Production","date": "2024-03-20","summary": "Tesla ramps up Cybertruck manufacturing capacity at Gigafactory Texas, aiming to meet strong demand.",},{"title": "Tesla FSD Beta Shows Promise","date": "2024-03-19","summary": "Latest Full Self-Driving beta demonstrates significant improvements in urban navigation and safety features.",},{"title": "Model Y Dominates Global EV Sales","date": "2024-03-18","summary": "Tesla's Model Y becomes best-selling electric vehicle worldwide, capturing significant market share.",},]# 创建模型客户端model_client = OpenAIChatCompletionClient(model="gpt-4o",# api_key="YOUR_API_KEY",)# 创建规划者智能体planner = AssistantAgent("planner",model_client=model_client,handoffs=["financial_analyst", "news_analyst", "writer"],system_message="""You are a research planning coordinator. Coordinate market research by delegating to specialized agents: - Financial Analyst: For stock data analysis - News Analyst: For news gathering and analysis - Writer: For compiling final report Always send your plan first, then handoff to appropriate agent. Always handoff to a single agent at a time. Use TERMINATE when research is complete.""",)# 创建金融分析师智能体financial_analyst = AssistantAgent("financial_analyst",model_client=model_client,handoffs=["planner"],tools=[get_stock_data],system_message="""You are a financial analyst. Analyze stock market data using the get_stock_data tool. Provide insights on financial metrics. Always handoff back to planner when analysis is complete.""",)# 创建新闻分析师智能体news_analyst = AssistantAgent("news_analyst",model_client=model_client,handoffs=["planner"],tools=[get_news],system_message="""You are a news analyst. Gather and analyze relevant news using the get_news tool. Summarize key market insights from news. Always handoff back to planner when analysis is complete.""",)# 创建撰写者智能体writer = AssistantAgent("writer",model_client=model_client,handoffs=["planner"],system_message="""You are a financial report writer. Compile research findings into clear, concise reports. Always handoff back to planner when writing is complete.""",)# 设置终止条件text_termination = TextMentionTermination("TERMINATE")termination = text_terminationresearch_team = Swarm(participants=[planner, financial_analyst, news_analyst, writer], termination_condition=termination)# 定义任务task = "Conduct market research for TSLA stock"await Console(research_team.run_stream(task=task))

代码解读

  • 同样先导入所需模块和类,然后定义了 get_stock_dataget_news 两个工具函数,分别模拟获取股票数据和新闻资讯的操作。

  • 创建 OpenAIChatCompletionClient 模型客户端,并指定模型为 gpt-4o

  • 接着创建了四个智能体:planner 作为规划协调者,其系统消息明确了任务分配规则和流程;financial_analyst 配备了 get_stock_data 工具用于股票数据分析;news_analyst 利用 get_news 工具进行新闻收集和分析;writer 负责撰写报告。每个智能体都设置了相应的任务交接目标和系统消息。

  • 设置终止条件为 TextMentionTermination("TERMINATE"),当消息中提及 “TERMINATE” 时任务结束。

  • 最后定义任务 “Conduct market research for TSLA stock” 并运行研究团队任务,智能体之间按照设定的流程进行协作。

运行结果如下:

当用户输入 “Conduct market research for TSLA stock” 时,规划者首先启动任务分配:

---------- user ----------
Conduct market research for TSLA stock
---------- planner ----------
[FunctionCall(id='call_BX5QaRuhmB8CxTsBlqCUIXPb', arguments='{}', name='transfer_to_financial_analyst')]
[Prompt tokens: 169, Completion tokens: 166]
---------- planner ----------
[FunctionExecutionResult(content='Transferred to financial_analyst, adopting the role of financial_analyst immediately.', call_id='call_BX5QaRuhmB8CxTsBlqCUIXPb')]
---------- planner ----------
Transferred to financial_analyst, adopting the role of financial_analyst immediately.

金融分析师接收任务并调用工具获取股票数据:

---------- financial_analyst ----------
[FunctionCall(id='call_SAXy1ebtA9mnaZo4ztp

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

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

相关文章

力扣每日一题【算法学习day.132】

前言 ###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!! 习题 1.统计相似字符串对的数目 题目链…

Spring AI + Ollama 实现调用DeepSeek-R1模型API

一、前言 随着人工智能技术的飞速发展,大语言模型(LLM)在各个领域的应用越来越广泛。DeepSeek 作为一款备受瞩目的国产大语言模型,凭借其强大的自然语言处理能力和丰富的知识储备,迅速成为业界关注的焦点。无论是文本生…

自学Java-AI结合GUI开发一个石头迷阵的游戏

自学Java-AI结合GUI开发一个石头迷阵的游戏 准备环节1、创建石头迷阵的界面2、打乱顺序3、控制上下左右移动4、判断是否通关5、统计移动步骤,重启游戏6、拓展问题 准备环节 技术: 1、GUI界面编程 2、二维数组 3、程序流程控制 4、面向对象编程 ∙ \bulle…

本地安装 Grafana Loki

本地安装 Grafana Loki 一、 安装 Loki1. 下载 Loki2. 创建 Loki 配置文件3. 创建 Loki 服务 二、安装 Promtail1. 下载 Promtail2. 创建 Promtail 配置文件3. 创建 Promtail 服务 三、 安装 Grafana四、启动所有服务五、添加loki 数据源1. 添加仪表板2. 日志查询面板 json 参考…

趣味数学300题1981版-十五个正方形

分析:移动两根变成11个正方形很简单: 移动4根变成15个正方形,分析: 一个田字格包含5个正方形,若要15个正方形需要3个田字格,如果3个田字格完全不重合,需要6*318根火柴。如果合并正方形的边&…

基于Spring Boot的兴顺物流管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

Andorid 学习 Compose UI(1):Box

今天学习和实验一下Android 的compose UI,写一些很小的Demo实验。下面和css 布局有点相似性。 如Box 看起来像html 当中的 div ,compose UI 提供Modifier 很多设置。你会发现Text,Box,Row,Image等组件 都有这个属性。我们处理任务包括对齐布局&#xff0…

Selenium实战案例1:论文pdf自动下载

在上一篇文章中,我们介绍了Selenium的基础用法和一些常见技巧。今天,我们将通过中国科学:信息科学网站内当前目录论文下载这一实战案例来进一步展示Selenium的web自动化流程。 目录 中国科学:信息科学当期目录论文下载 1.网页内…

Perfectly Clear WorkBench深度解析:专业图像处理软件的高效应用

在图像处理领域,面对照片曝光不足、色彩失真、细节模糊等常见问题,一款专业且高效的图像处理软件显得尤为重要。今天,本文将为大家详细介绍Perfectly Clear WorkBench这款图像处理软件,帮助大家更好地了解并应用其功能,提升照片质量。 一、智能图像校正,解决常见问题 Pe…

使用 DistilBERT 进行资源高效的自然语言处理

DistilBERT 是 BERT 的一个更小、更快的版本,在减少资源消耗的同时仍能保持良好性能。对于计算能力和内存受限的环境来说,它是一个理想的选择。 在自然语言处理(NLP)中,像 BERT 这样的模型提供了高精度和出色的性能。然…

【后端基础】布隆过滤器原理

文章目录 一、Bloom Filter(布隆过滤器)概述1. Bloom Filter 的特点2. Bloom Filter 的工作原理 二、示例1. 添加与查询2. 假阳性 三、Bloom Filter 的操作1、假阳性概率2、空间效率3、哈希函数的选择 四、应用 Bloom Filter 是一种非常高效的概率型数据…

docker独立部署milvus向量数据库

milvus镜像:国外封锁,国内源也不好用。基本上所有源都不能用 首先想到阿里云服务,但是阿里云国外服务器便宜的300~400呢。 基于成本考虑终于装上心心念念的milvus(*^▽^*) 安装 Milvus 安装 Milvus 独立版 wget https://raw.githubuserco…

Git操作整体流程

文章目录 1.Git创建个人仓库2、Git全局配置3、Git本地管理4. Git本地管理常用命令汇总5、使用Git命令将项目提交到远程码云管理6.使用IDEA进行管理7、Idea里面的终端8、关于提交总结 1.Git创建个人仓库 打开https://gitee.com/,登录个人账号,右上角加号…

MySQL MHA 部署全攻略:从零搭建高可用数据库架构

文章目录 1.MHA介绍2.MHA组件介绍3.集群规划4.服务器初始化5.MySQL集群部署5.1 安装MySQL集群5.2 配置一主两从5.3 测试MySQL主从5.4 赋予MHA用户连接权限 6.安装MHA环境6.1 安装MHA Node6.2 安装MHA Manager 7.配置MHA环境8.MySQL MHA高可用集群测试8.1 通过VIP连接MySQL8.2模…

如何查看java的字节码文件?javap?能用IDEA吗?

编译指令: javac YourProject.java 查看字节码文件的指令: javap -c -l YourProject.class 不添加-c指令就不会显示字节码文件: 不添加 -l 就不会显示源代码和字节码文件的对应关系: 添加-l之后多出来这些: IDEA不太…

1、Window Android 13模拟器 将编译的映像文件导入Android Studio

1、环境准备 编译环境:Ubuntu-18.04.5编译版本:android13-release下载地址:清华大学开源软件镜像站AOSP # 下载repo # 同步代码:repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android13-r…

JUC并发—9.并发安全集合三

大纲 1.并发安全的数组列表CopyOnWriteArrayList 2.并发安全的链表队列ConcurrentLinkedQueue 3.并发编程中的阻塞队列概述 4.JUC的各种阻塞队列介绍 5.LinkedBlockingQueue的具体实现原理 6.基于两个队列实现的集群同步机制 1.并发安全的数组列表CopyOnWriteArrayList …

量子计算驱动的金融衍生品定价革命:突破传统蒙特卡洛模拟的性能边界

引言:金融计算的算力困局 某国际投行采用128量子位处理器对亚洲期权组合定价时,其量子振幅估计算法在2.7秒内完成传统GPU集群需要68小时的计算任务。在蒙特卡洛路径模拟实验中,量子随机游走算法将10,000维衍生品的价格收敛速度提升4个数量级…

hive—常用的函数整理

1、size(split(...))函数用于计算分割后字符串数组的长度 实例1):由客户编号列表计算客户编号个数 --数据准备 with tmp_test01 as ( select tag074445270 tag_id,202501busi_mon , 012399931003,012399931000 index_val union all select tag07444527…

国产编辑器EverEdit - 如何在EverEdit中管理工程?

1 工程管理 1.1 应用场景 用户创建工程后,会涉及到工程的管理 ,比如:打开工程、关闭工程等 1.2 使用方法 1.2.1 打开工程 单击主菜单工程 -> 打开工程,会弹出打开对话框,用户在对话框中选择需要打开的工程文件即…