AutoGen-AgentChat-7-GraphFlow工作流

import os
from dotenv import load_dotenv
load_dotenv()
True

GraphFlow(工作流)

在本节中,你将学习如何使用(简称“flow”)创建多智能体工作流。它采用结构化执行,并精确控制智能体如何交互以完成任务。GraphFlow

我们将首先向您展示如何创建和运行流程。然后,我们将解释如何观察和调试流程行为,并讨论管理执行的重要操作。

AutoGen AgentChat 为有向图执行提供了一个团队:

GraphFlowDiGraph :遵循规则控制代理之间执行流程的团队。支持顺序、并行、条件和循环行为。

什么时候应该使用GraphFlow?
当您需要严格控制代理的操作顺序,或者不同的结果必须导致不同的后续步骤时,请使用 Graph。从简单的团队开始,例如RoundRobinGroupChat,SelectorGroupChat 如果临时对话流程就足够了。当您的任务需要确定性控制、条件分支或处理带有循环的复杂多步骤流程时,可以过渡到结构化工作流。

警告: GraphFlow是一项实验性功能。其 API、行为和功能在未来版本中可能会发生变化。

创建并运行流程

DiGraphBuilder是一个流畅的实用程序,可让您轻松构建工作流的执行图。它支持构建:

  • 顺序链
  • 并行扇出
  • 条件分支
  • 具有安全退出条件的循环

图中的每个节点代表一个代理,边定义允许的执行路径。边可以根据代理消息选择性地设置条件。

顺序流

我们将首先创建一个简单的工作流程:作者撰写一段草稿,审阅者提供反馈。审阅者对作者进行评论后,此流程图终止。

请注意,流程会自动计算图中的所有源节点和叶节点,并且执行从图中的所有源节点开始,并在没有剩余节点可执行时完成执行。

from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import DiGraphBuilder, GraphFlow
from autogen_ext.models.openai import OpenAIChatCompletionClient

# 创建一个 OpenAI 模型客户端(使用较轻量的 gpt-4o-mini 模型)
client = OpenAIChatCompletionClient(model="gpt-4o-mini")

# 创建“撰写者”代理,用于起草关于气候变化的简短段落
writer = AssistantAgent(
    "writer",
    model_client=client,
    system_message="起草一篇关于气候变化的短文。"
)

# 创建“审阅者”代理,用于审阅草稿并提出改进建议
reviewer = AssistantAgent(
    "reviewer",
    model_client=client,
    system_message="审查草案并提出改进建议。"
)

# 构建有向图:定义代理之间的交互路径
builder = DiGraphBuilder()
builder.add_node(writer).add_node(reviewer)  # 添加两个节点(writer 和 reviewer)
builder.add_edge(writer, reviewer)  # 定义从 writer 到 reviewer 的单向边(工作流程)

# 构建并验证图结构
graph = builder.build()

# 创建图流程对象,用于执行从 writer 到 reviewer 的任务流
flow = GraphFlow([writer, reviewer], graph=graph)
# 如果在脚本中运行,请使用 `asyncio.run(...)` 并将以下代码包裹在异步函数中运行

# 启动图流程,传入任务:“写一段关于气候变化的简短段落”
stream = flow.run_stream(task="写一段关于气候变化的短文。")

# 异步迭代处理流程中的每一个事件(事件可以是代理的消息、响应、日志等)
async for event in stream:  # type: ignore
    print(event)  # 打印每一个事件的内容(在控制台输出)

# 如果希望在终端中有更好的格式化输出效果,建议使用 Console(flow.run_stream(...)) 替代打印
source='user' models_usage=None metadata={} created_at=datetime.datetime(2025, 7, 1, 12, 36, 17, 284323, tzinfo=datetime.timezone.utc) content='写一段关于气候变化的短文。' type='TextMessage'
source='writer' models_usage=RequestUsage(prompt_tokens=35, completion_tokens=250) metadata={} created_at=datetime.datetime(2025, 7, 1, 12, 36, 23, 247962, tzinfo=datetime.timezone.utc) content='气候变化是当今世界面临的最严峻挑战之一。随着工业化的加速和人类活动的不断增加,温室气体的排放量急剧上升,导致全球气温持续攀升。科学家们警告,这一过程如果不加以控制,将导致极端天气事件频发,海平面上升,以及生态系统的严重失衡。\n\n气候变化的影响已经在全球范围内显现出来:干旱、洪水、热浪等极端天气频繁出现,生物多样性遭到威胁,许多动植物面临灭绝风险。此外,气候变化还直接影响人们的生计,尤其在发展中国家,农业生产和水资源供应受到严重冲击,导致粮食安全问题突出。\n\n应对气候变化需要全球范围内的共同努力。各国应加大对可再生能源的投资,推动低碳经济的转型,同时加强生态保护,提升公众的环保意识。只有通过团结合作,我们才能为后代创造一个可持续发展的未来,减缓气候变化带来的负面影响。' type='TextMessage'
source='reviewer' models_usage=RequestUsage(prompt_tokens=289, completion_tokens=553) metadata={} created_at=datetime.datetime(2025, 7, 1, 12, 36, 34, 318484, tzinfo=datetime.timezone.utc) content='这段关于气候变化的短文已经很好地概括了这一主题的关键点,但可以通过以下方式进行改进:\n\n1. **引入数据和事实**:增加一些具体的数据或研究结果,可以让论点更具说服力。例如,提到温室气体的具体增加百分比或预测的气温上升幅度。\n\n2. **强化情感共鸣**:可以加入一些个人故事或实例,展示气候变化对普通人生活的实际影响,从而引发读者的情感共鸣。\n\n3. **呼吁行动**:结尾部分可以更加强调个人和社会层面的行动,鼓励读者参与环保活动,如减少塑料使用或支持可再生能源项目。\n\n4. **强调可行性**:可以提到一些国家或企业成功应对气候变化的案例,展示出解决问题的可行性和希望。\n\n5. **结构调整**:可以将影响、应对措施和个人行动分成清晰的小节,使其阅读更加流畅。\n\n以下是改进后的段落示例:\n\n气候变化是当今世界面临的最严峻挑战之一。随着工业化的加速与人类活动的增加,温室气体(如二氧化碳)在过去一个世纪增加了超过40%,导致全球气温持续攀升。科学家们警告,若不加以控制,全球气温可能在21世纪末上升超过2摄氏度,这将引发极端天气事件频繁发生,海平面上升,并导致生态系统的失衡。\n\n如今,气候变化的阴影已笼罩全球:干旱、洪水和热浪等极端天气频繁出现,许多动植物因此面临灭绝危机。在发展中国家,气候变化直接威胁到人们的生计,农业生产和水资源供应受到冲击,导致粮食安全问题日益突出。比如,某些地区的农民因干旱失去作物,家庭生计陷入困境。\n\n应对气候变化需要全球共同努力。一些国家通过加强对可再生能源的投资,成功实现了低碳经济的转型。同时,普通个人也可以通过减少一次性塑料的使用、支持本地可再生能源项目等方式参与其中。我们每个人都能成为改变的一部分,只有通过团结合作,才能为后代创造一个可持续发展的未来,减缓气候变化带来的负面影响。' type='TextMessage'
source='DiGraphStopAgent' models_usage=None metadata={} created_at=datetime.datetime(2025, 7, 1, 12, 36, 34, 322316, tzinfo=datetime.timezone.utc) content='Digraph execution is complete' type='StopMessage'
messages=[TextMessage(source='user', models_usage=None, metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 36, 17, 284323, tzinfo=datetime.timezone.utc), content='写一段关于气候变化的短文。', type='TextMessage'), TextMessage(source='writer', models_usage=RequestUsage(prompt_tokens=35, completion_tokens=250), metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 36, 23, 247962, tzinfo=datetime.timezone.utc), content='气候变化是当今世界面临的最严峻挑战之一。随着工业化的加速和人类活动的不断增加,温室气体的排放量急剧上升,导致全球气温持续攀升。科学家们警告,这一过程如果不加以控制,将导致极端天气事件频发,海平面上升,以及生态系统的严重失衡。\n\n气候变化的影响已经在全球范围内显现出来:干旱、洪水、热浪等极端天气频繁出现,生物多样性遭到威胁,许多动植物面临灭绝风险。此外,气候变化还直接影响人们的生计,尤其在发展中国家,农业生产和水资源供应受到严重冲击,导致粮食安全问题突出。\n\n应对气候变化需要全球范围内的共同努力。各国应加大对可再生能源的投资,推动低碳经济的转型,同时加强生态保护,提升公众的环保意识。只有通过团结合作,我们才能为后代创造一个可持续发展的未来,减缓气候变化带来的负面影响。', type='TextMessage'), TextMessage(source='reviewer', models_usage=RequestUsage(prompt_tokens=289, completion_tokens=553), metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 36, 34, 318484, tzinfo=datetime.timezone.utc), content='这段关于气候变化的短文已经很好地概括了这一主题的关键点,但可以通过以下方式进行改进:\n\n1. **引入数据和事实**:增加一些具体的数据或研究结果,可以让论点更具说服力。例如,提到温室气体的具体增加百分比或预测的气温上升幅度。\n\n2. **强化情感共鸣**:可以加入一些个人故事或实例,展示气候变化对普通人生活的实际影响,从而引发读者的情感共鸣。\n\n3. **呼吁行动**:结尾部分可以更加强调个人和社会层面的行动,鼓励读者参与环保活动,如减少塑料使用或支持可再生能源项目。\n\n4. **强调可行性**:可以提到一些国家或企业成功应对气候变化的案例,展示出解决问题的可行性和希望。\n\n5. **结构调整**:可以将影响、应对措施和个人行动分成清晰的小节,使其阅读更加流畅。\n\n以下是改进后的段落示例:\n\n气候变化是当今世界面临的最严峻挑战之一。随着工业化的加速与人类活动的增加,温室气体(如二氧化碳)在过去一个世纪增加了超过40%,导致全球气温持续攀升。科学家们警告,若不加以控制,全球气温可能在21世纪末上升超过2摄氏度,这将引发极端天气事件频繁发生,海平面上升,并导致生态系统的失衡。\n\n如今,气候变化的阴影已笼罩全球:干旱、洪水和热浪等极端天气频繁出现,许多动植物因此面临灭绝危机。在发展中国家,气候变化直接威胁到人们的生计,农业生产和水资源供应受到冲击,导致粮食安全问题日益突出。比如,某些地区的农民因干旱失去作物,家庭生计陷入困境。\n\n应对气候变化需要全球共同努力。一些国家通过加强对可再生能源的投资,成功实现了低碳经济的转型。同时,普通个人也可以通过减少一次性塑料的使用、支持本地可再生能源项目等方式参与其中。我们每个人都能成为改变的一部分,只有通过团结合作,才能为后代创造一个可持续发展的未来,减缓气候变化带来的负面影响。', type='TextMessage'), StopMessage(source='DiGraphStopAgent', models_usage=None, metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 36, 34, 322316, tzinfo=datetime.timezone.utc), content='Digraph execution is complete', type='StopMessage')] stop_reason='Stop message received'

带连接的并行流

我们现在创建一个稍微复杂一点的流程:

  • 一位作家起草了一个段落。
  • 两位编辑独立编辑语法和风格(并行扇出)。
  • 最终审阅者整合他们的编辑(加入)。

执行从writer开始,同时发送给editor1和editor2,然后两者都输入到最后的 reviewer中。

# 从 autogen_agentchat 包中导入所需模块
from autogen_agentchat.agents import AssistantAgent  # 助手机器人类
from autogen_agentchat.teams import DiGraphBuilder, GraphFlow  # 构建有向图和流程控制
from autogen_agentchat.ui import Console  # 控制台输出工具
from autogen_ext.models.openai import OpenAIChatCompletionClient  # OpenAI 模型客户端

# 创建一个 OpenAI 模型客户端,使用模型为 gpt-4o-mini
client = OpenAIChatCompletionClient(model="gpt-4o-mini")

# 创建“写作助手”代理,负责起草关于气候变化的段落
writer = AssistantAgent(
    "writer",  # 代理名称
    model_client=client,  # 使用的模型客户端
    system_message="撰写一段关于气候变化的简短段落。"  # 系统提示信息(作用类似于 agent 的角色定义)
)

# 创建两个“编辑助手”代理,分别处理语法和文风
editor1 = AssistantAgent(
    "editor1",
    model_client=client,
    system_message="请对该段落进行语法编辑。"  # 第一个编辑助手负责语法修改
)

editor2 = AssistantAgent(
    "editor2",
    model_client=client,
    system_message="请对该段落进行文风润色。"  # 第二个编辑助手负责文风修改
)

# 创建“最终审稿人”代理,合并语法和文风修改,输出最终版本
final_reviewer = AssistantAgent(
    "final_reviewer",
    model_client=client,
    system_message="请整合语法和文风的修改,生成最终版本。"
)

# 创建工作流的有向图构建器
builder = DiGraphBuilder()

# 向图中添加所有节点(代理)
builder.add_node(writer).add_node(editor1).add_node(editor2).add_node(final_reviewer)

# 设置工作流路径:
# writer -> editor1 和 writer -> editor2(并行编辑)
builder.add_edge(writer, editor1)
builder.add_edge(writer, editor2)

# editor1 和 editor2 -> final_reviewer(结果汇总)
builder.add_edge(editor1, final_reviewer)
builder.add_edge(editor2, final_reviewer)

# 构建图并验证
graph = builder.build()

# 创建工作流对象,包含所有参与者和流程图
flow = GraphFlow(
    participants=builder.get_participants(),  # 获取所有参与的代理
    graph=graph,  # 指定构建好的工作流图
)

# 运行工作流任务,任务目标是“写一段关于气候变化的简短段落”
# Console(flow.run_stream(...)) 会以控制台流式输出整个过程
await Console(flow.run_stream(task="写一段关于气候变化的简短段落。"))
---------- TextMessage (user) ----------
写一段关于气候变化的简短段落。
---------- TextMessage (writer) ----------
气候变化是当今世界面临的最严峻挑战之一,它主要是由于人类活动引发的温室气体排放增加而导致的全球气温上升。这种变化不仅导致极端天气事件频繁发生,如干旱、洪水和热浪,还对生态系统、生物多样性和人类健康造成了深远的影响。各国政府和组织正在采取一系列措施,如减少碳排放、推广可再生能源和提高能效,以应对这一全球性威胁。然而,改变人类对自然资源的消费模式、促进可持续发展仍然是未来的重要任务。只有通过全球合作和集体行动,我们才能朝着减缓气候变化、保护地球环境的目标迈进。
---------- TextMessage (editor1) ----------
气候变化是当今世界面临的最严峻挑战之一,主要是由于人类活动引发的温室气体排放增加而导致的全球气温上升。这种变化不仅导致极端天气事件频繁发生,如干旱、洪水和热浪,还对生态系统、生物多样性和人类健康造成了深远的影响。各国政府和组织正在采取一系列措施,例如减少碳排放、推广可再生能源和提高能效,以应对这一全球性威胁。然而,改变人类对自然资源的消费模式、促进可持续发展仍然是未来的重要任务。只有通过全球合作和集体行动,我们才能朝着减缓气候变化、保护地球环境的目标迈进。
---------- TextMessage (editor2) ----------
气候变化已成为当今全球面临的最严峻挑战之一,其根源在于人类活动导致的温室气体排放剧增,从而引发全球气温上升。这一变化不仅使极端天气事件频频袭来,如干旱、洪水和酷热,亦对生态系统、生物多样性及人类健康产生了深远的影响。各国政府和组织纷纷采取应对措施,努力减少碳排放、推广可再生能源并提升能效,以遏制这一全球性威胁。然而,改变人类对自然资源的消费模式,推动可持续发展依然是未来亟待解决的重要任务。唯有通过全球合作与集体行动,我们方能朝着减缓气候变化、保护地球环境的目标稳步前行。
---------- TextMessage (final_reviewer) ----------
气候变化已成为当今全球面临的最严峻挑战之一,其根源在于人类活动导致的温室气体排放剧增,从而引发全球气温上升。这一变化不仅使极端天气事件频频袭来,如干旱、洪水和酷热,亦对生态系统、生物多样性及人类健康产生了深远影响。各国政府和组织纷纷采取措施,努力减少碳排放、推广可再生能源并提升能效,以遏制这一全球性威胁。然而,改变人类对自然资源的消费模式,推动可持续发展依然是未来亟待解决的重要任务。唯有通过全球合作与集体行动,我们方能朝着减缓气候变化、保护地球环境的目标稳步前行。
---------- StopMessage (DiGraphStopAgent) ----------
Digraph execution is complete





TaskResult(messages=[TextMessage(source='user', models_usage=None, metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 36, 47, 656771, tzinfo=datetime.timezone.utc), content='写一段关于气候变化的简短段落。', type='TextMessage'), TextMessage(source='writer', models_usage=RequestUsage(prompt_tokens=40, completion_tokens=168), metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 36, 51, 698436, tzinfo=datetime.timezone.utc), content='气候变化是当今世界面临的最严峻挑战之一,它主要是由于人类活动引发的温室气体排放增加而导致的全球气温上升。这种变化不仅导致极端天气事件频繁发生,如干旱、洪水和热浪,还对生态系统、生物多样性和人类健康造成了深远的影响。各国政府和组织正在采取一系列措施,如减少碳排放、推广可再生能源和提高能效,以应对这一全球性威胁。然而,改变人类对自然资源的消费模式、促进可持续发展仍然是未来的重要任务。只有通过全球合作和集体行动,我们才能朝着减缓气候变化、保护地球环境的目标迈进。', type='TextMessage'), TextMessage(source='editor1', models_usage=RequestUsage(prompt_tokens=209, completion_tokens=168), metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 36, 54, 693929, tzinfo=datetime.timezone.utc), content='气候变化是当今世界面临的最严峻挑战之一,主要是由于人类活动引发的温室气体排放增加而导致的全球气温上升。这种变化不仅导致极端天气事件频繁发生,如干旱、洪水和热浪,还对生态系统、生物多样性和人类健康造成了深远的影响。各国政府和组织正在采取一系列措施,例如减少碳排放、推广可再生能源和提高能效,以应对这一全球性威胁。然而,改变人类对自然资源的消费模式、促进可持续发展仍然是未来的重要任务。只有通过全球合作和集体行动,我们才能朝着减缓气候变化、保护地球环境的目标迈进。', type='TextMessage'), TextMessage(source='editor2', models_usage=RequestUsage(prompt_tokens=210, completion_tokens=184), metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 36, 55, 271333, tzinfo=datetime.timezone.utc), content='气候变化已成为当今全球面临的最严峻挑战之一,其根源在于人类活动导致的温室气体排放剧增,从而引发全球气温上升。这一变化不仅使极端天气事件频频袭来,如干旱、洪水和酷热,亦对生态系统、生物多样性及人类健康产生了深远的影响。各国政府和组织纷纷采取应对措施,努力减少碳排放、推广可再生能源并提升能效,以遏制这一全球性威胁。然而,改变人类对自然资源的消费模式,推动可持续发展依然是未来亟待解决的重要任务。唯有通过全球合作与集体行动,我们方能朝着减缓气候变化、保护地球环境的目标稳步前行。', type='TextMessage'), TextMessage(source='final_reviewer', models_usage=RequestUsage(prompt_tokens=580, completion_tokens=181), metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 36, 58, 754252, tzinfo=datetime.timezone.utc), content='气候变化已成为当今全球面临的最严峻挑战之一,其根源在于人类活动导致的温室气体排放剧增,从而引发全球气温上升。这一变化不仅使极端天气事件频频袭来,如干旱、洪水和酷热,亦对生态系统、生物多样性及人类健康产生了深远影响。各国政府和组织纷纷采取措施,努力减少碳排放、推广可再生能源并提升能效,以遏制这一全球性威胁。然而,改变人类对自然资源的消费模式,推动可持续发展依然是未来亟待解决的重要任务。唯有通过全球合作与集体行动,我们方能朝着减缓气候变化、保护地球环境的目标稳步前行。', type='TextMessage'), StopMessage(source='DiGraphStopAgent', models_usage=None, metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 36, 58, 758784, tzinfo=datetime.timezone.utc), content='Digraph execution is complete', type='StopMessage')], stop_reason='Stop message received')

消息过滤

执行图 vs. 消息图

在 中GraphFlow,执行图使用 定义 DiGraph,它控制代理的执行顺序。但是,执行图并不控制代理从其他代理接收哪些消息。默认情况下,所有消息都会发送给图中的所有代理。

消息过滤是一项单独的功能,允许您过滤每个代理收到的消息,并将其模型上下文限制为仅包含相关信息。消息过滤器集定义了流程中的消息图。

指定消息图可以帮助:

  • 减少幻觉
  • 控制内存负载
  • 仅关注代理的相关信息

您可以MessageFilterAgent与MessageFilterConfig和一起使用PerSourceFilter来定义这些规则。

# 导入所需模块和类
from autogen_agentchat.agents import AssistantAgent, MessageFilterAgent, MessageFilterConfig, PerSourceFilter  # 智能体和消息过滤相关类
from autogen_agentchat.teams import DiGraphBuilder, GraphFlow  # 构建图结构与任务流程
from autogen_agentchat.ui import Console  # 控制台输出组件
from autogen_ext.models.openai import OpenAIChatCompletionClient  # OpenAI 模型客户端封装

# 创建模型客户端,使用 gpt-4o-mini 模型
client = OpenAIChatCompletionClient(model="gpt-4o-mini")

# 创建角色代理(Agent)

# 研究员代理,负责汇总气候变化的关键信息
researcher = AssistantAgent(
    "researcher",  # 代理名称
    model_client=client,
    system_message="请汇总有关气候变化的关键信息。"  # 系统提示,设定角色行为
)

# 分析师代理,负责审查研究员的摘要并提出改进建议
analyst = AssistantAgent(
    "analyst",
    model_client=client,
    system_message="请审查摘要内容并提出改进建议。"
)

# 演讲者代理,根据最终摘要准备幻灯片内容
presenter = AssistantAgent(
    "presenter",
    model_client=client,
    system_message="请根据最终摘要准备一页演示文稿幻灯片内容。"
)

# 应用消息过滤器:限制每个代理只能接收到特定来源的最后一条消息

# 包装分析师,只允许其接收来自 researcher 的最后一条消息
filtered_analyst = MessageFilterAgent(
    name="analyst",  # 必须保持与原始 agent 名称一致
    wrapped_agent=analyst,  # 被包装的原始 agent
    filter=MessageFilterConfig(  # 设置过滤配置
        per_source=[
            PerSourceFilter(source="researcher", position="last", count=1)  # 仅接收 研究员代理researcher 的最后一条消息
        ]
    )
)

# 包装 演讲者代理 presenter,只允许其接收来自 analyst 的最后一条消息
filtered_presenter = MessageFilterAgent(
    name="presenter",
    wrapped_agent=presenter,
    filter=MessageFilterConfig(
        per_source=[
            PerSourceFilter(source="analyst", position="last", count=1)  # 仅接收 分析师代理analyst 的最后一条消息
        ]
    )
)

# 构建代理之间的工作流程图

builder = DiGraphBuilder()  # 初始化图构建器

# 添加所有节点(即参与的代理)
builder.add_node(researcher).add_node(filtered_analyst).add_node(filtered_presenter)

# 设置节点之间的连接关系(工作流顺序)
builder.add_edge(researcher, filtered_analyst)  # researcher -> analyst
builder.add_edge(filtered_analyst, filtered_presenter)  # analyst -> presenter

# 创建任务流程对象
flow = GraphFlow(
    participants=builder.get_participants(),  # 获取所有参与者
    graph=builder.build(),  # 构建有向图
)

# 执行任务流,并以流式方式将执行结果输出到控制台
await Console(flow.run_stream(task="请汇总有关气候变化的关键信息。"))
---------- TextMessage (user) ----------
请汇总有关气候变化的关键信息。
---------- TextMessage (researcher) ----------
气候变化是指由于人类活动及自然因素导致的地球气候系统的变化。以下是一些关于气候变化的关键信息:

1. **温室气体排放**:主要的温室气体包括二氧化碳(CO2)、甲烷(CH4)、氮氧化物(N2O)和氟化气体。这些气体通过燃烧化石燃料、农业、森林砍伐等途径被释放到大气中,导致温室效应加剧。

2. **全球变暖**:科学研究表明,自19世纪中叶以来,全球平均气温已上升约1.2摄氏度。气温升高会导致极端天气频发、海平面上升、冰川融化和生态系统改变。

3. **影响**:
   - **极端天气**:气候变化导致更频繁的热浪、洪水、干旱和飓风等自然灾害。
   - **生态影响**:许多野生动物的栖息地受到威胁,部分物种面临灭绝风险。生态系统的变化也影响食物链。
   - **社会经济影响**:气候变化对农业、渔业、水资源和健康等领域产生深远影响,可能导致粮食安全和水资源短缺。

4. **国际响应**:
   - **巴黎协定**:2015年达成的国际协议,目标是将全球气温上升控制在比工业化前水平高2摄氏度以内,并努力限制在1.5摄氏度以内。
   - **可再生能源转型**:世界各国正加大力度发展风能、太阳能等可再生能源,以减少对化石燃料的依赖。

5. **适应与减缓**:
   - **减缓措施**:包括减少温室气体排放、提高能源效率和发展低碳技术。
   - **适应措施**:增强社会对于气候变化影响的适应能力,如建设更耐洪水的基础设施、改善水资源管理等。

6. **公众意识和行动**:越来越多的人意识到气候变化的紧迫性,积极参与环保运动,推动政策改变和可持续生活方式。

气候变化是一个全球性挑战,需要国际社会共同努力解决。
---------- TextMessage (analyst) ----------
这个摘要内容全面而清晰,涵盖了气候变化的多个重要方面。不过,仍有一些改进建议,以增强其表达效果和逻辑结构:

1. **段落结构和标题**:将不同的主题分成更清晰的段落,并为每个段落添加小标题,以提高可读性。例如,可以为“温室气体排放”、“全球变暖”、“影响”、“国际响应”、“适应与减缓”、“公众意识和行动”分别设置标题,并使用项目符号或编号列表来增强结构感。

2. **简化和精炼**:某些段落中的信息可以更为简洁。可以尝试将冗长的句子分解成短句,提高信息传递的效率。

3. **采用数据来支持**:在主要观点中,更多使用研究数据或具体案例来支持论点,例如引用具体的研究数据或气候变化的影响案例,以增强说服力。

4. **更详细的“适应与减缓”措施**:可以扩充此部分内容,具体列举一些成功的案例或具体的技术方法,进一步说明减缓和适应的有效性。

5. **强调紧迫性**:在总结部分可以增加一两句强调气候变化的紧迫性和这一问题对未来世代的影响,以激发读者的关注和行动。

6. **明确呼吁行动**:结尾时可以加入一个强有力的呼吁,鼓励个体、社区和国家采取行动,共同应对气候变化挑战。

7. **使用图表或图示**(如果适用):对于能够视觉呈现的信息(如气温变化图表)可考虑在最终报告中增加图表,以便更直观地展示气候变化的影响。

改进后的摘要将更具逻辑性、条理清晰,更能有效地沟通气候变化的复杂性及其全球影响和必要的应对措施。
---------- TextMessage (presenter) ----------
# 气候变化的综合分析

## 1. 温室气体排放
- 全球温室气体排放显著增加
- 主要来源:交通、工业、农业等

## 2. 全球变暖
- 平均气温上升的现状
- 影响海平面上升和极端气候

## 3. 影响
- 对生态系统和生物多样性的威胁
- 对人类健康和经济的负面影响

## 4. 国际响应
- 各国间的政策合作(如《巴黎协定》)
- 政府和组织的减排目标

## 5. 适应与减缓
- 具体措施:可再生能源、节能技术
- 成功案例:可再生能源的推广应用

## 6. 公众意识和行动
- 加强公众教育和意识
- 鼓励社区行动和个人改变

## 7. 紧迫性
- 气候变化对未来世代的深远影响
- 需立即采取行动以避免不可逆转的后果

## 8. 强有力的呼吁
- 每个人都是应对气候变化的重要一环
- 共同努力,保护我们的地球

## 9. 视觉支持(待添加)
- 图表:全球气温变化趋势
- 图示:温室气体排放各来源占比

---

**结论**:气候变化是一个复杂而紧迫的问题,需全球共同努力,加强适应与减缓措施,确保未来可持续发展。
---------- StopMessage (DiGraphStopAgent) ----------
Digraph execution is complete





TaskResult(messages=[TextMessage(source='user', models_usage=None, metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 54, 23, 461762, tzinfo=datetime.timezone.utc), content='请汇总有关气候变化的关键信息。', type='TextMessage'), TextMessage(source='researcher', models_usage=RequestUsage(prompt_tokens=38, completion_tokens=522), metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 54, 34, 928177, tzinfo=datetime.timezone.utc), content='气候变化是指由于人类活动及自然因素导致的地球气候系统的变化。以下是一些关于气候变化的关键信息:\n\n1. **温室气体排放**:主要的温室气体包括二氧化碳(CO2)、甲烷(CH4)、氮氧化物(N2O)和氟化气体。这些气体通过燃烧化石燃料、农业、森林砍伐等途径被释放到大气中,导致温室效应加剧。\n\n2. **全球变暖**:科学研究表明,自19世纪中叶以来,全球平均气温已上升约1.2摄氏度。气温升高会导致极端天气频发、海平面上升、冰川融化和生态系统改变。\n\n3. **影响**:\n   - **极端天气**:气候变化导致更频繁的热浪、洪水、干旱和飓风等自然灾害。\n   - **生态影响**:许多野生动物的栖息地受到威胁,部分物种面临灭绝风险。生态系统的变化也影响食物链。\n   - **社会经济影响**:气候变化对农业、渔业、水资源和健康等领域产生深远影响,可能导致粮食安全和水资源短缺。\n\n4. **国际响应**:\n   - **巴黎协定**:2015年达成的国际协议,目标是将全球气温上升控制在比工业化前水平高2摄氏度以内,并努力限制在1.5摄氏度以内。\n   - **可再生能源转型**:世界各国正加大力度发展风能、太阳能等可再生能源,以减少对化石燃料的依赖。\n\n5. **适应与减缓**:\n   - **减缓措施**:包括减少温室气体排放、提高能源效率和发展低碳技术。\n   - **适应措施**:增强社会对于气候变化影响的适应能力,如建设更耐洪水的基础设施、改善水资源管理等。\n\n6. **公众意识和行动**:越来越多的人意识到气候变化的紧迫性,积极参与环保运动,推动政策改变和可持续生活方式。\n\n气候变化是一个全球性挑战,需要国际社会共同努力解决。', type='TextMessage'), TextMessage(source='analyst', models_usage=RequestUsage(prompt_tokens=547, completion_tokens=430), metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 54, 43, 819099, tzinfo=datetime.timezone.utc), content='这个摘要内容全面而清晰,涵盖了气候变化的多个重要方面。不过,仍有一些改进建议,以增强其表达效果和逻辑结构:\n\n1. **段落结构和标题**:将不同的主题分成更清晰的段落,并为每个段落添加小标题,以提高可读性。例如,可以为“温室气体排放”、“全球变暖”、“影响”、“国际响应”、“适应与减缓”、“公众意识和行动”分别设置标题,并使用项目符号或编号列表来增强结构感。\n\n2. **简化和精炼**:某些段落中的信息可以更为简洁。可以尝试将冗长的句子分解成短句,提高信息传递的效率。\n\n3. **采用数据来支持**:在主要观点中,更多使用研究数据或具体案例来支持论点,例如引用具体的研究数据或气候变化的影响案例,以增强说服力。\n\n4. **更详细的“适应与减缓”措施**:可以扩充此部分内容,具体列举一些成功的案例或具体的技术方法,进一步说明减缓和适应的有效性。\n\n5. **强调紧迫性**:在总结部分可以增加一两句强调气候变化的紧迫性和这一问题对未来世代的影响,以激发读者的关注和行动。\n\n6. **明确呼吁行动**:结尾时可以加入一个强有力的呼吁,鼓励个体、社区和国家采取行动,共同应对气候变化挑战。\n\n7. **使用图表或图示**(如果适用):对于能够视觉呈现的信息(如气温变化图表)可考虑在最终报告中增加图表,以便更直观地展示气候变化的影响。\n\n改进后的摘要将更具逻辑性、条理清晰,更能有效地沟通气候变化的复杂性及其全球影响和必要的应对措施。', type='TextMessage'), TextMessage(source='presenter', models_usage=RequestUsage(prompt_tokens=460, completion_tokens=354), metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 54, 50, 528497, tzinfo=datetime.timezone.utc), content='# 气候变化的综合分析\n\n## 1. 温室气体排放\n- 全球温室气体排放显著增加\n- 主要来源:交通、工业、农业等\n\n## 2. 全球变暖\n- 平均气温上升的现状\n- 影响海平面上升和极端气候\n\n## 3. 影响\n- 对生态系统和生物多样性的威胁\n- 对人类健康和经济的负面影响\n\n## 4. 国际响应\n- 各国间的政策合作(如《巴黎协定》)\n- 政府和组织的减排目标\n\n## 5. 适应与减缓\n- 具体措施:可再生能源、节能技术\n- 成功案例:可再生能源的推广应用\n\n## 6. 公众意识和行动\n- 加强公众教育和意识\n- 鼓励社区行动和个人改变\n\n## 7. 紧迫性\n- 气候变化对未来世代的深远影响\n- 需立即采取行动以避免不可逆转的后果\n\n## 8. 强有力的呼吁\n- 每个人都是应对气候变化的重要一环\n- 共同努力,保护我们的地球\n\n## 9. 视觉支持(待添加)\n- 图表:全球气温变化趋势\n- 图示:温室气体排放各来源占比\n\n---\n\n**结论**:气候变化是一个复杂而紧迫的问题,需全球共同努力,加强适应与减缓措施,确保未来可持续发展。', type='TextMessage'), StopMessage(source='DiGraphStopAgent', models_usage=None, metadata={}, created_at=datetime.datetime(2025, 7, 1, 12, 54, 50, 533359, tzinfo=datetime.timezone.utc), content='Digraph execution is complete', type='StopMessage')], stop_reason='Stop message received')

高级示例:条件循环 + 过滤摘要

此示例演示:

  • 生成器和审阅者之间的循环(当审阅者说“批准”时退出)
  • 仅查看第一个用户输入和最后一条审阅者消息的摘要代理
# 导入 AutoGen 的核心模块
from autogen_agentchat.agents import AssistantAgent, MessageFilterAgent, MessageFilterConfig, PerSourceFilter
from autogen_agentchat.teams import DiGraphBuilder, GraphFlow
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient

# 创建 OpenAI 模型客户端,使用 gpt-4o-mini 模型
model_client = OpenAIChatCompletionClient(model="gpt-4o-mini")

# 定义智能体(Agent)

# 生成者智能体:负责提出创意点子
generator = AssistantAgent(
    name="generator",
    model_client=model_client,
    system_message="生成一系列有创意的点子。"
)

# 审核者智能体:负责审核点子并提供反馈,如果认可就返回 'APPROVE'
reviewer = AssistantAgent(
    name="reviewer",
    model_client=model_client,
    system_message="审核创意点子并提供反馈,如果认可则只回复 'APPROVE' 表示最终通过。"
)

# 总结者核心智能体:汇总用户请求与最终反馈
summarizer_core = AssistantAgent(
    name="summary",
    model_client=model_client,
    system_message="请总结用户请求以及最终反馈内容。"
)

# 构建带过滤器的总结智能体,只允许用户的首条消息和 reviewer 的最终反馈进入 summarizer
filtered_summarizer = MessageFilterAgent(
    name="summary",  # 名称必须和参与者列表一致
    wrapped_agent=summarizer_core,
    filter=MessageFilterConfig(
        per_source=[
            PerSourceFilter(source="user", position="first", count=1),        # 用户的首条消息
            PerSourceFilter(source="reviewer", position="last", count=1),     # 审核者的最终反馈
        ]
    ),
)

# 使用有向图构建工作流(DAG)

builder = DiGraphBuilder()
# 添加节点(智能体)
builder.add_node(generator).add_node(reviewer).add_node(filtered_summarizer)

# 添加边:generator → reviewer,无条件
builder.add_edge(generator, reviewer)

# 添加条件边:如果 reviewer 的回复包含 'APPROVE',则流程继续到总结者
builder.add_edge(
    reviewer,
    filtered_summarizer,
    condition=lambda msg: "APPROVE" in msg.to_model_text()
)

# 如果 reviewer 不认可点子(未包含 'APPROVE'),流程回到 generator 重新生成
builder.add_edge(
    reviewer,
    generator,
    condition=lambda msg: "APPROVE" not in msg.to_model_text()
)

# 设置流程入口为 generator(如果没有 source 节点则必须指定)
builder.set_entry_point(generator)

# 构建图对象
graph = builder.build()

# 创建图工作流对象
flow = GraphFlow(
    participants=builder.get_participants(),  # 获取所有参与者
    graph=graph,                              # 设置图结构
)
# 运行工作流并在控制台中流式输出结果
await Console(
    flow.run_stream(task="头脑风暴:如何减少塑料浪费?")
)
---------- TextMessage (user) ----------
头脑风暴:如何减少塑料浪费?
---------- TextMessage (generator) ----------
1. **可重复使用的替代品**:开发一系列可重复使用的产品,如可折叠购物袋、可续用的食物保鲜膜(比如用蜡布代替塑料膜)等。

2. **回收奖励计划**:鼓励消费者参与塑料回收,通过积分系统给予奖励,比如购物优惠券或小礼品。

3. **塑料替代品创新**:研发新材料,比如生物可降解塑料或植物基础的包装材料,来取代传统塑料。

4. **环保教育**:在学校和社区开展塑料减量和环保意识的教育活动,提高公众对塑料危害的认识。

5. **社区清洁活动**:组织定期的环保志愿者活动,清理公园、海滩和社区中的塑料垃圾,同时普及减少塑料使用的倡议。

6. **DIY再利用工坊**:建立DIY工坊,教人们如何将废弃的塑料物品转化为实用的手工艺品,如花盆、家具或装饰品。

7. **支持零包装商店**:鼓励建立和支持零包装商店,消费者可以自带容器购买商品,从源头减少塑料的使用。

8. **塑料数据透明度**:推动企业披露其塑料使用和回收数据,促进公众监督和选择环保品牌。

9. **政府政策倡导**:推动立法,限制一次性塑料的使用,并鼓励企业采用可持续的包装方案。

10. **塑料信息库**:创建一个在线平台,提供关于塑料产品的环保信息和选择替代品的指南。

11. **艺术展览**:举办以塑料废物为主题的艺术展览,借助艺术引发公众对塑料污染的关注和讨论。

12. **智能包装**:开发智能包装技术,通过感应材料监测塑料的使用量并发出警报,提醒消费者减少使用。

这些点子可以为减少塑料浪费提供多角度的解决方案,希望能引发更多的创意和行动!
---------- TextMessage (reviewer) ----------
APPROVE
---------- TextMessage (summary) ----------
用户请求是进行一次头脑风暴,以探讨如何减少塑料浪费。最终反馈内容是审核通过。
---------- StopMessage (DiGraphStopAgent) ----------
Digraph execution is complete





TaskResult(messages=[TextMessage(source='user', models_usage=None, metadata={}, created_at=datetime.datetime(2025, 7, 2, 2, 16, 35, 35322, tzinfo=datetime.timezone.utc), content='头脑风暴:如何减少塑料浪费?', type='TextMessage'), TextMessage(source='generator', models_usage=RequestUsage(prompt_tokens=34, completion_tokens=467), metadata={}, created_at=datetime.datetime(2025, 7, 2, 2, 16, 43, 517175, tzinfo=datetime.timezone.utc), content='1. **可重复使用的替代品**:开发一系列可重复使用的产品,如可折叠购物袋、可续用的食物保鲜膜(比如用蜡布代替塑料膜)等。\n\n2. **回收奖励计划**:鼓励消费者参与塑料回收,通过积分系统给予奖励,比如购物优惠券或小礼品。\n\n3. **塑料替代品创新**:研发新材料,比如生物可降解塑料或植物基础的包装材料,来取代传统塑料。\n\n4. **环保教育**:在学校和社区开展塑料减量和环保意识的教育活动,提高公众对塑料危害的认识。\n\n5. **社区清洁活动**:组织定期的环保志愿者活动,清理公园、海滩和社区中的塑料垃圾,同时普及减少塑料使用的倡议。\n\n6. **DIY再利用工坊**:建立DIY工坊,教人们如何将废弃的塑料物品转化为实用的手工艺品,如花盆、家具或装饰品。\n\n7. **支持零包装商店**:鼓励建立和支持零包装商店,消费者可以自带容器购买商品,从源头减少塑料的使用。\n\n8. **塑料数据透明度**:推动企业披露其塑料使用和回收数据,促进公众监督和选择环保品牌。\n\n9. **政府政策倡导**:推动立法,限制一次性塑料的使用,并鼓励企业采用可持续的包装方案。\n\n10. **塑料信息库**:创建一个在线平台,提供关于塑料产品的环保信息和选择替代品的指南。\n\n11. **艺术展览**:举办以塑料废物为主题的艺术展览,借助艺术引发公众对塑料污染的关注和讨论。\n\n12. **智能包装**:开发智能包装技术,通过感应材料监测塑料的使用量并发出警报,提醒消费者减少使用。\n\n这些点子可以为减少塑料浪费提供多角度的解决方案,希望能引发更多的创意和行动!', type='TextMessage'), TextMessage(source='reviewer', models_usage=RequestUsage(prompt_tokens=520, completion_tokens=3), metadata={}, created_at=datetime.datetime(2025, 7, 2, 2, 16, 44, 139426, tzinfo=datetime.timezone.utc), content='APPROVE', type='TextMessage'), TextMessage(source='summary', models_usage=RequestUsage(prompt_tokens=43, completion_tokens=26), metadata={}, created_at=datetime.datetime(2025, 7, 2, 2, 16, 45, 457348, tzinfo=datetime.timezone.utc), content='用户请求是进行一次头脑风暴,以探讨如何减少塑料浪费。最终反馈内容是审核通过。', type='TextMessage'), StopMessage(source='DiGraphStopAgent', models_usage=None, metadata={}, created_at=datetime.datetime(2025, 7, 2, 2, 16, 45, 460974, tzinfo=datetime.timezone.utc), content='Digraph execution is complete', type='StopMessage')], stop_reason='Stop message received')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值