多智能体 AgentScope 详解 + 案例说明

多智能体 AgentScope 详解 + 案例说明

AgentScope智能体应用

User-Agent Conversation - 用户代理对话

基于LLM开发对话系统是一个比较常见的需求,AgentScope允许我们将智能体设计为一个chatbot,从而实现对话机器人的效果。

以下代码中我们创建了一个ReAct智能体以及一个UserAgent对象用于表示用户通过run_conversation方法实现了人机交流的场景。

代码示例
javascript 复制代码
import asyncio
import os
from agentscope.agent import ReActAgent, UserAgent
from agentscope.memory import InMemoryMemory
from agentscope.formatter import (
    DashScopeChatFormatter,
)
from agentscope.model import DashScopeChatModel
from agentscope.tool import Toolkit

friday = ReActAgent(
    name="Friday",
    sys_prompt="You're a helpful assistant named Friday",
    model=DashScopeChatModel(
        model_name="qwen-max",
        api_key=os.environ["AI_BAI_LIAN_API_KEY"],
    ),
    formatter=DashScopeChatFormatter(),
    memory=InMemoryMemory(),
    toolkit=Toolkit(),
)

user = UserAgent(name="User")

async def run_conversation() -> None:
    """Run a simple conversation between Friday and User."""
    msg = None
    while True:
        msg = await friday(msg)
        print(msg)
        msg = await  user(msg)
        if msg.get_text_content() == "exit":
            break

if __name__ == "__main__":
    asyncio.run(run_conversation())
测试结果输出
javascript 复制代码
D:\work-python\agentscope\agentscope-learn\.venv\Scripts\python.exe D:\work-python\agentscope\agentscope-learn\user_agent_conversation.py 
Friday: Hello! It seems like your message got cut off. Could you please provide more details so I can assist you better?
Msg(id='6tp2wZW2PF6tvuwAeGum3P', name='Friday', content=[{'type': 'text', 'text': 'Hello! It seems like your message got cut off. Could you please provide more details so I can assist you better?'}], role='assistant', metadata=None, timestamp='2026-07-15 17:52:31.569', invocation_id='02b538f5-ab25-9cde-aa22-68d10c9510fe')
User Input: 你好!有什么能帮你的吗?
User: 你好!有什么能帮你的吗?
Friday: 你好!当然可以。你需要帮助解决什么问题呢?无论是关于学习、工作、生活还是其他方面的问题,我都会尽力帮助你。请告诉我更多细节吧!
Msg(id='H8dgTssDPx6RbD4mATJSHi', name='Friday', content=[{'type': 'text', 'text': '你好!当然可以。你需要帮助解决什么问题呢?无论是关于学习、工作、生活还是其他方面的问题,我都会尽力帮助你。请告诉我更多细节吧!'}], role='assistant', metadata=None, timestamp='2026-07-15 17:52:57.240', invocation_id='4e8be684-1d25-9ffa-947c-b60b613f5892')
User Input: 有没有一些杭州的美食推荐?
User: 有没有一些杭州的美食推荐?
Friday: 当然有!杭州是一个美食丰富的地方,这里有很多著名的美食。以下是一些值得尝试的杭州美食推荐:

1. **西湖醋鱼**:这是一道非常有名的杭州传统菜,鱼肉鲜嫩,酸甜可口。

2. **东坡肉**:以宋代文人苏东坡命名的一道菜,用五花肉慢炖而成,肥而不腻,口感极佳。

3. **龙井虾仁**:将新鲜的虾仁与龙井茶叶一起炒制,清香四溢,口感鲜美。

4. **叫花鸡**:这道菜是将整只鸡包裹在荷叶和泥土中烤制而成,鸡肉鲜嫩多汁,带有独特的香气。

5. **宋嫂鱼羹**:一道以鱼肉为主料的汤羹,味道鲜美,营养丰富。

6. **知味观小笼包**:虽然小笼包不是杭州的特产,但杭州的知味观小笼包非常有名,皮薄馅多,汤汁丰富。

7. **油爆虾**:虾壳脆香,虾肉鲜嫩,是一道非常受欢迎的家常菜。

8. **干炸响铃**:用豆腐皮包裹肉馅,炸至金黄酥脆,外酥里嫩。

9. **片儿川**:一种传统的杭州面食,以猪肝、瘦肉、笋片等为主要配料,味道鲜美。

10. **桂花糕**:一种甜点,以糯米粉和桂花为主要原料,香甜软糯,带有淡淡的桂花香。

如果你有机会去杭州,一定要尝一尝这些美食!希望这些建议对你有帮助。如果你还有其他问题或需要更多建议,请告诉我!
Msg(id='3PFqa8QhJfNnzRm3gVimWP', name='Friday', content=[{'type': 'text', 'text': '当然有!杭州是一个美食丰富的地方,这里有很多著名的美食。以下是一些值得尝试的杭州美食推荐:\n\n1. **西湖醋鱼**:这是一道非常有名的杭州传统菜,鱼肉鲜嫩,酸甜可口。\n\n2. **东坡肉**:以宋代文人苏东坡命名的一道菜,用五花肉慢炖而成,肥而不腻,口感极佳。\n\n3. **龙井虾仁**:将新鲜的虾仁与龙井茶叶一起炒制,清香四溢,口感鲜美。\n\n4. **叫花鸡**:这道菜是将整只鸡包裹在荷叶和泥土中烤制而成,鸡肉鲜嫩多汁,带有独特的香气。\n\n5. **宋嫂鱼羹**:一道以鱼肉为主料的汤羹,味道鲜美,营养丰富。\n\n6. **知味观小笼包**:虽然小笼包不是杭州的特产,但杭州的知味观小笼包非常有名,皮薄馅多,汤汁丰富。\n\n7. **油爆虾**:虾壳脆香,虾肉鲜嫩,是一道非常受欢迎的家常菜。\n\n8. **干炸响铃**:用豆腐皮包裹肉馅,炸至金黄酥脆,外酥里嫩。\n\n9. **片儿川**:一种传统的杭州面食,以猪肝、瘦肉、笋片等为主要配料,味道鲜美。\n\n10. **桂花糕**:一种甜点,以糯米粉和桂花为主要原料,香甜软糯,带有淡淡的桂花香。\n\n如果你有机会去杭州,一定要尝一尝这些美食!希望这些建议对你有帮助。如果你还有其他问题或需要更多建议,请告诉我!'}], role='assistant', metadata=None, timestamp='2026-07-15 17:53:46.325', invocation_id='69ac9d5f-f856-9d31-9742-23cb0828b28a')
User Input: 这个西湖醋鱼真的好吃吗?
User: 这个西湖醋鱼真的好吃吗?
Friday: 西湖醋鱼确实是一道非常受欢迎的杭州传统名菜,以其独特的风味和制作工艺而闻名。这道菜的特点是鱼肉鲜嫩、酸甜适中,具有浓郁的地方特色。具体来说:

1. **选材**:通常选用新鲜的草鱼或鲤鱼,鱼肉质细嫩,口感非常好。

2. **烹饪方法**:将鱼处理干净后,用沸水煮熟,然后淋上特制的醋汁。醋汁由酱油、糖、醋、姜等调料调制而成,味道酸甜可口。

3. **风味**:西湖醋鱼的味道独特,酸甜适中,既保留了鱼肉的鲜美,又带有微微的酸甜味,非常适合喜欢酸甜口味的人。

4. **外观**:成品色泽红亮,汤汁浓郁,看起来非常诱人。

当然,每个人的口味不同,有些人可能更喜欢清淡或者重口味的食物。如果你喜欢酸甜口味的菜肴,西湖醋鱼绝对值得一试。许多游客和当地人都对这道菜赞不绝口,认为它是杭州必尝的美食之一。

如果你有机会去杭州,建议你亲自品尝一下,相信你会有很好的体验!
Msg(id='CG3a4aiJmw4AYCN4agRtmd', name='Friday', content=[{'type': 'text', 'text': '西湖醋鱼确实是一道非常受欢迎的杭州传统名菜,以其独特的风味和制作工艺而闻名。这道菜的特点是鱼肉鲜嫩、酸甜适中,具有浓郁的地方特色。具体来说:\n\n1. **选材**:通常选用新鲜的草鱼或鲤鱼,鱼肉质细嫩,口感非常好。\n\n2. **烹饪方法**:将鱼处理干净后,用沸水煮熟,然后淋上特制的醋汁。醋汁由酱油、糖、醋、姜等调料调制而成,味道酸甜可口。\n\n3. **风味**:西湖醋鱼的味道独特,酸甜适中,既保留了鱼肉的鲜美,又带有微微的酸甜味,非常适合喜欢酸甜口味的人。\n\n4. **外观**:成品色泽红亮,汤汁浓郁,看起来非常诱人。\n\n当然,每个人的口味不同,有些人可能更喜欢清淡或者重口味的食物。如果你喜欢酸甜口味的菜肴,西湖醋鱼绝对值得一试。许多游客和当地人都对这道菜赞不绝口,认为它是杭州必尝的美食之一。\n\n如果你有机会去杭州,建议你亲自品尝一下,相信你会有很好的体验!'}], role='assistant', metadata=None, timestamp='2026-07-15 17:54:50.694', invocation_id='11536fa4-9a02-91fe-ae2d-ab661a0dca9c')
User Input: 我刚才问的是那个城市?
User: 我刚才问的是那个城市?
Friday: 你刚才问的是杭州的美食推荐,特别是西湖醋鱼。西湖醋鱼是杭州的一道非常著名的传统名菜,以其独特的酸甜口味和鲜嫩的鱼肉而闻名。

如果你对杭州还有其他方面的问题,或者需要更多关于杭州的信息,请告诉我!无论是旅游景点、文化活动还是其他美食,我都可以为你提供更多的建议。
Msg(id='ZzK2UinETFtzfv6Hzs3nLe', name='Friday', content=[{'type': 'text', 'text': '你刚才问的是杭州的美食推荐,特别是西湖醋鱼。西湖醋鱼是杭州的一道非常著名的传统名菜,以其独特的酸甜口味和鲜嫩的鱼肉而闻名。\n\n如果你对杭州还有其他方面的问题,或者需要更多关于杭州的信息,请告诉我!无论是旅游景点、文化活动还是其他美食,我都可以为你提供更多的建议。'}], role='assistant', metadata=None, timestamp='2026-07-15 17:56:02.980', invocation_id='2f756212-c437-98c6-ae37-f48d43038691')
User Input: 

多智能体应用模式 - 轮询模式(Round-Robin)

轮询模式是最简单、最基础的多智能体协作方式之一,其核心思想是按照一个预设的、固定的顺序,将任务依次分配给每一个智能体。当队列中的最后一个智能体完成任务后,下一次分配将重新从第一个智能体开始,形成一个循环。

核心特征

  • 顺序性:任务的分配严格遵循预定义的智能体顺序。
  • 公平性:每个智能体都有均等的机会接收和处理任务,避免了某些智能体持续空闲或过载。
  • 无差别对待:任务的分配不考虑智能体的当前状态、能力或任务的具体内容。

优势

  • 实现简单:逻辑清晰,易于编程和部署。
  • 负载均衡:在理想情况下,能够将任务均匀地分配到各个智能体,实现基本的负载均衡。
  • 可预测性:任务流转的路径是确定的,便于追踪和调试。

劣势

  • 效率瓶颈:未考虑智能体的专业能力和处理效率。如果一个复杂任务被分配给一个不擅长该领域的智能体,将导致处理时间过长,影响整体效率。
  • 缺乏灵活性:无法根据任务的实时需求或智能体的动态变化(如某个智能体出现故障)来调整分配策略。
  • 资源浪费:当智能体能力差异较大时,能力强的智能体可能会在等待任务时处于空闲状态,而能力弱的智能体则可能成为系统的瓶颈。

在这份代码示例中,我们设计了一场辩论会,有三个学生参与辩论,轮流发言,互相讨论,同时我们通过MsgHub来自动管理多智能体协作中需要传达的消息。

我们设计了一个turns作为讨论轮次,我们也可以设计一个裁判智能体,来判断是否应该停止。

代码示例
javascript 复制代码
import asyncio
import os

from agentscope.agent import ReActAgent
from agentscope.formatter import DashScopeMultiAgentFormatter
from agentscope.memory import InMemoryMemory
from agentscope.message import Msg
from agentscope.model import DashScopeChatModel
from agentscope.pipeline import MsgHub
from agentscope.tool import Toolkit

model = DashScopeChatModel(
    model_name="qwen-max",
    api_key=os.environ["AI_BAI_LIAN_API_KEY"],
)

formatter = DashScopeMultiAgentFormatter()
memory = InMemoryMemory()

stu1 = ReActAgent(
    name="小江",
    sys_prompt="You're a student .",
    model=model,
    formatter=formatter,
    toolkit=Toolkit(),
    memory=memory,
)

stu2 = ReActAgent(
    name="小白",
    sys_prompt="You're a student .",
    model=model,
    formatter=formatter,
    toolkit=Toolkit(),
    memory=memory,
)

stu3 = ReActAgent(
    name="小黑",
    sys_prompt="You're a student .",
    model=model,
    formatter=formatter,
    toolkit=Toolkit(),
    memory=memory,
)

async def example_msghub() -> None:
    turns = 0
    while True:
        async with MsgHub(
            [stu1, stu2, stu3],
            announcement=Msg(
                "system",
                "现在我们开个辩论会来辩论一下二氧化碳是不是全球变暖的原因",
                "system",
            ),
        ):
            await stu1()
            await stu2()
            await stu3()
        turns += 1
        print(f"----------------------------------第{turns}次讨论-------------------------")
        if turns > 3:
            break

if __name__ == "__main__":
    asyncio.run(example_msghub())
测试结果输出
javascript 复制代码
D:\work-python\agentscope\agentscope-learn\.venv\Scripts\python.exe D:\work-python\agentscope\agentscope-learn\muti_agent_conversation.py 
小江: 好的,我们可以就"二氧化碳是否是全球变暖的主要原因"这个话题展开辩论。我愿意先从支持这一观点的一方开始,即认为二氧化碳增加确实是导致全球变暖的一个重要因素。

### 支持论点:
1. **科学共识**:根据IPCC(政府间气候变化专门委员会)的报告,超过97%的气候科学家认为人类活动,尤其是化石燃料燃烧所释放出的二氧化碳等温室气体,是近几十年来全球气温升高的主要原因。
2. **温室效应增强**:二氧化碳是一种重要的温室气体,它能够吸收并重新辐射地面发出的红外辐射,从而阻止热量直接逃逸到太空,导致地球表面和下层大气温度上升。
3. **历史数据对比**:通过分析冰芯样本中保存下来的古代空气样本,科学家发现工业革命以来大气中的二氧化碳浓度显著增加,并且这种增长与同期记录到的全球平均温度上升趋势相吻合。
4. **模型预测**:基于当前对气候变化的理解建立起来的计算机模型可以很好地再现过去一个世纪以来观察到的气候变化模式,当这些模型中加入人为排放的二氧化碳时,它们能更准确地模拟实际发生的温度变化情况。

接下来,请你提出反对这一观点的理由吧!或者如果你希望的话,我可以继续提供更多信息。
小白: 好的,那我就从反对"二氧化碳是全球变暖的主要原因"的角度来提出一些观点。需要注意的是,在讨论这个问题时,并不是完全否定二氧化碳对气候的影响,而是质疑它作为全球变暖主要原因的地位以及人类活动在其中的作用。

### 反对论点:
1. **自然因素影响**:地球的气候系统极其复杂,受到多种自然因素的影响,包括太阳活动的变化、火山爆发、海洋循环模式(如厄尔尼诺现象)等。这些自然过程历史上就曾引起过显著的气候变化。
2. **历史周期性变化**:根据地质记录显示,地球在其历史上经历过多次冰期与间冰期之间的转换,这表明即使没有人为干扰,地球自身也存在温度波动的现象。因此,当前观察到的气温升高可能是长期气候循环的一部分。
3. **其他温室气体作用**:虽然二氧化碳确实是温室效应的重要组成部分之一,但甲烷、水蒸气等其他气体同样具有较强的吸热能力。特别是在某些特定条件下,这些气体可能比二氧化碳发挥更重要的角色。
4. **数据解读争议**:关于过去数百年乃至更长时间尺度上的温度记录准确性及如何解释这些数据仍存在一定争议。此外,对于不同地区而言,由于地理位置、地形等因素差异较大,其感受到的气候变化程度也可能有所不同。
5. **技术局限性**:目前用于预测未来气候变化趋势的模型尽管已经相当先进,但仍存在一定不确定性。比如模型中难以精确模拟云层形成机制或深海环流等关键过程,这些都可能导致对未来情景估计产生偏差。

以上就是从另一角度看问题的一些理由。当然,科学探索是一个不断进步的过程,我们需要持续关注最新研究成果并保持开放态度进行讨论。你觉得呢?或者你还有更多支持的观点想要补充吗?
小黑: 小江: 你的反对论点确实提出了一个值得深入探讨的角度。确实,自然因素和气候系统的复杂性不容忽视。但是,我认为在当前情况下,仍然有强有力的证据支持二氧化碳是全球变暖的主要原因之一。下面我将针对你提出的几点进行一些回应,并补充更多支持的观点。

### 回应反对论点:
1. **自然因素影响**:虽然自然因素如太阳活动、火山爆发等对气候有着重要影响,但科学研究表明,近几十年来观察到的气候变化趋势与这些自然因素的变化并不一致。例如,太阳辐射量的变化不足以解释近期的温度升高。
2. **历史周期性变化**:历史上确实存在冰期与间冰期的转换,但这些变化通常发生在数千年甚至更长时间尺度上。而近百年来特别是工业革命以来的快速升温速度,在地质记录中是前所未有的。
3. **其他温室气体作用**:尽管甲烷等其他温室气体也非常重要,但根据IPCC报告,自工业革命以来,二氧化碳浓度的增加对于增强温室效应起到了主导作用。此外,人类活动也是甲烷排放增长的一个重要原因。
4. **数据解读争议**:虽然早期温度记录可能存在一定的不确定性,但现代卫星监测技术和更加精确的地面观测网络已经大大提高了我们对全球气温变化的理解。而且,不同地区之间的差异并不能否定全球平均温度上升的事实。
5. **技术局限性**:气候模型确实存在一定的局限性,但科学家们一直在努力改进这些模型。目前最好的模型能够很好地再现过去气候变化情况,并且对未来情景的预测也得到了广泛验证和支持。

### 进一步的支持观点:
- **极端天气事件频发**:近年来,世界各地频繁发生的极端天气事件(如热浪、干旱、洪水等)与全球变暖密切相关,这进一步证明了人为因素导致的气候变化正在加剧。
- **生态系统响应**:许多动植物物种的栖息地正在发生变化,季节性行为模式也在调整,这些都是对全球变暖做出反应的表现。
- **经济和社会成本**:全球变暖带来的负面影响已经开始显现,包括农作物产量下降、海平面上升威胁沿海城市安全等,这些问题都直接或间接地与二氧化碳排放相关联。

综上所述,虽然关于全球变暖的原因存在多种看法,但从现有科学证据来看,二氧化碳无疑是其中一个重要因素。希望我们能够继续基于事实进行讨论,共同寻找应对气候变化的有效途径。
----------------------------------第1次讨论-------------------------
小江: ### 小白的回应

小黑同学,你的回应非常全面且有力地支持了二氧化碳是全球变暖主要原因的观点。确实,当前大多数科学证据都指向了这一点。不过,为了辩论的完整性,我将继续从另一个角度提出一些补充观点和质疑。

#### 进一步的反对论点:

1. **气候变化的复杂性**:气候系统是一个高度复杂的非线性系统,其中包含了无数相互作用的因素。虽然二氧化碳的作用被广泛认可,但其他因素如太阳活动、海洋循环等也可能在某些情况下起到关键作用。因此,简单地将全球变暖归因于单一因素可能过于简化问题。

2. **历史温度记录的局限性**:尽管现代技术提高了我们对气温变化的理解,但历史上的温度记录仍然存在很大的不确定性。例如,许多早期的温度记录依赖于不均匀分布的气象站数据,这些数据可能受到城市热岛效应等因素的影响,从而导致偏差。

3. **自然反馈机制**:地球的气候系统中存在多种自然反馈机制,这些机制可以放大或减缓气候变化。例如,冰盖融化会减少地表反射率(反照率),进一步加速温度上升;而云层的变化则可能增加或减少地球的辐射平衡。这些反馈机制的存在使得气候变化更加难以预测。

4. **模型的局限性和不确定性**:虽然气候模型在不断改进,但它们仍然无法完全模拟所有自然过程。例如,云层的形成和演变、海洋环流的细节等都是目前模型中的难点。此外,模型对于极端事件的预测能力也有限,这增加了对未来气候变化情景的不确定性。

5. **人类活动的多重影响**:人类活动不仅通过排放温室气体影响气候,还通过土地利用变化、森林砍伐、工业污染等多种方式对环境产生影响。这些因素共同作用,使得气候变化的原因更加复杂。例如,大规模的森林砍伐减少了碳汇,加剧了温室效应。

6. **政策和经济考量**:即使二氧化碳是全球变暖的主要原因,解决这一问题也需要综合考虑经济和社会因素。过度严格的减排措施可能会对经济发展造成负面影响,特别是在发展中国家。因此,需要找到一个平衡点,既能应对气候变化,又能保障经济和社会的可持续发展。

### 结论
综上所述,虽然二氧化碳在全球变暖中的作用得到了广泛认可,但气候变化的复杂性、历史数据的局限性、自然反馈机制、模型的不确定性以及人类活动的多重影响,都使得这一问题远比表面上看起来要复杂得多。我们需要继续进行科学研究,以更全面地理解气候变化,并在此基础上制定合理的政策和措施。
小白: ### 小江的回应

小白同学,你的进一步反对论点非常全面且深入,确实指出了气候变化问题中的许多复杂性和不确定性。这些观点对于促进我们对全球变暖更全面的理解是非常有价值的。下面我将针对你提出的几点进行一些回应,并进一步强调二氧化碳在当前气候变化中的重要作用。

#### 回应进一步的反对论点:

1. **气候变化的复杂性**:
   - **回应**:确实,气候系统是一个高度复杂的非线性系统,但科学研究已经明确指出,尽管存在多种因素,人类活动特别是二氧化碳排放是近几十年来气候变化的主要驱动力。IPCC报告中多次强调了这一点,并提供了大量证据支持这一结论。

2. **历史温度记录的局限性**:
   - **回应**:虽然早期温度记录存在一定的不确定性,但现代卫星监测技术和地面观测网络已经大大提高了数据的准确性和可靠性。此外,通过多种独立的数据源(如冰芯、树轮、珊瑚等)进行交叉验证,科学家们能够更准确地重建历史温度变化。

3. **自然反馈机制**:
   - **回应**:自然反馈机制确实存在,但这些机制往往是基于现有气候变化的基础之上。例如,冰盖融化导致反照率降低,进一步加速温度上升,这是一个正反馈过程。而这种正反馈过程正是由于初始的温室气体增加所引发的。

4. **模型的局限性和不确定性**:
   - **回应**:气候模型确实存在局限性,但它们在不断改进和优化。目前的气候模型已经能够很好地再现过去气候变化情况,并对未来情景进行预测。虽然存在不确定性,但大多数模型都一致指向了二氧化碳增加导致的全球变暖趋势。

5. **人类活动的多重影响**:
   - **回应**:人类活动确实通过多种方式影响气候,包括土地利用变化、森林砍伐等。然而,这些因素与二氧化碳排放密切相关。例如,森林砍伐减少了碳汇,增加了大气中的二氧化碳浓度,进一步加剧了温室效应。

6. **政策和经济考量**:
   - **回应**:解决气候变化确实需要综合考虑经济和社会因素。但过度严格的减排措施并不一定是唯一的选择。通过技术创新和国际合作,可以找到既减少温室气体排放又促进经济发展的途径。许多国家和地区已经在实施绿色能源转型,取得了显著成效。

### 结论
综上所述,尽管气候变化问题非常复杂,涉及多种因素和不确定性,但现有的科学共识和证据强烈支持二氧化碳是全球变暖的主要原因之一。我们需要继续进行科学研究,以更全面地理解气候变化,并在此基础上制定合理的政策和措施,共同努力应对这一全球性挑战。希望我们的讨论能够帮助大家更深入地理解这一重要议题。
小黑: ### 小白的总结

小江同学,你的回应非常有力地支持了二氧化碳是全球变暖主要原因的观点,并且详细解释了现有科学证据和模型的支持。确实,当前的科学共识和大量研究都指向了这一点。我们的辩论已经充分展示了这个问题的多面性和复杂性。下面我将对整个讨论进行一个总结,并提出一些未来的方向。

#### 总结
1. **科学共识**:超过97%的气候科学家认为人类活动特别是化石燃料燃烧所释放的二氧化碳是近几十年来全球气温升高的主要原因。
2. **温室效应增强**:二氧化碳作为一种重要的温室气体,能够吸收并重新辐射地面发出的红外辐射,导致地球表面和下层大气温度上升。
3. **历史数据对比**:通过冰芯样本等古代空气样本分析,科学家发现工业革命以来大气中的二氧化碳浓度显著增加,并与同期记录到的全球平均温度上升趋势相吻合。
4. **模型预测**:基于当前对气候变化的理解建立起来的计算机模型能够很好地再现过去一个世纪以来观察到的气候变化模式,当这些模型中加入人为排放的二氧化碳时,它们能更准确地模拟实际发生的温度变化情况。

同时,我们也讨论了反对观点:
1. **自然因素影响**:太阳活动、火山爆发、海洋循环等自然因素对气候系统有重要影响。
2. **历史周期性变化**:地球历史上经历过多次冰期与间冰期之间的转换,表明即使没有人为干扰,地球自身也存在温度波动的现象。
3. **其他温室气体作用**:甲烷、水蒸气等其他气体同样具有较强的吸热能力,在某些特定条件下可能比二氧化碳发挥更重要的角色。
4. **数据解读争议**:关于过去数百年乃至更长时间尺度上的温度记录准确性及如何解释这些数据仍存在一定争议。
5. **技术局限性**:气候模型尽管已经相当先进,但仍存在一定不确定性,难以精确模拟某些关键过程。

#### 未来的方向
1. **持续科学研究**:继续进行深入的科学研究,提高对气候变化机制的理解,尤其是那些尚未完全掌握的关键过程。
2. **技术创新**:发展和推广绿色能源技术,减少温室气体排放,同时提高能源效率。
3. **国际合作**:加强国际间的合作,共同应对气候变化挑战,特别是在减排目标和资金支持方面。
4. **政策制定**:制定合理的政策和措施,平衡经济发展与环境保护的关系,推动可持续发展。
5. **公众教育**:提高公众对气候变化的认识,鼓励大家采取行动,从个人层面做起,减少碳足迹。

通过这次辩论,我们不仅深化了对全球变暖问题的理解,也认识到解决这一问题需要多方面的努力。希望未来我们能够共同努力,为应对气候变化做出贡献。感谢你的积极参与和精彩讨论!
----------------------------------第2次讨论-------------------------
小江: ### 小江的总结

小白同学,你的总结非常全面且深入,不仅回顾了我们辩论中的主要观点,还提出了未来应对气候变化的方向。确实,这次辩论让我们更全面地理解了二氧化碳在全球变暖中的作用以及气候变化问题的复杂性。下面我将对整个讨论进行一个总结,并补充一些个人的看法。

#### 总结
1. **科学共识**:根据IPCC报告和超过97%的气候科学家的意见,人类活动特别是化石燃料燃烧所释放的二氧化碳是近几十年来全球气温升高的主要原因。
2. **温室效应增强**:二氧化碳作为一种重要的温室气体,能够吸收并重新辐射地面发出的红外辐射,导致地球表面和下层大气温度上升。
3. **历史数据对比**:通过冰芯样本等古代空气样本分析,科学家发现工业革命以来大气中的二氧化碳浓度显著增加,并与同期记录到的全球平均温度上升趋势相吻合。
4. **模型预测**:基于当前对气候变化的理解建立起来的计算机模型能够很好地再现过去一个世纪以来观察到的气候变化模式,当这些模型中加入人为排放的二氧化碳时,它们能更准确地模拟实际发生的温度变化情况。

同时,我们也讨论了反对观点:
1. **自然因素影响**:太阳活动、火山爆发、海洋循环等自然因素对气候系统有重要影响,但这些因素的变化不足以解释近期的温度升高。
2. **历史周期性变化**:地球历史上经历过多次冰期与间冰期之间的转换,但这些变化通常发生在数千年甚至更长时间尺度上,而近百年来的快速升温速度在地质记录中是前所未有的。
3. **其他温室气体作用**:甲烷、水蒸气等其他气体同样具有较强的吸热能力,但在工业革命以来,二氧化碳浓度的增加对于增强温室效应起到了主导作用。
4. **数据解读争议**:虽然早期温度记录存在一定的不确定性,但现代卫星监测技术和地面观测网络已经大大提高了数据的准确性和可靠性。
5. **技术局限性**:气候模型尽管已经相当先进,但仍存在一定不确定性,难以精确模拟某些关键过程,但大多数模型一致指向了二氧化碳增加导致的全球变暖趋势。

#### 未来的方向
1. **持续科学研究**:继续进行深入的科学研究,提高对气候变化机制的理解,尤其是那些尚未完全掌握的关键过程。
2. **技术创新**:发展和推广绿色能源技术,减少温室气体排放,同时提高能源效率。
3. **国际合作**:加强国际间的合作,共同应对气候变化挑战,特别是在减排目标和资金支持方面。
4. **政策制定**:制定合理的政策和措施,平衡经济发展与环境保护的关系,推动可持续发展。
5. **公众教育**:提高公众对气候变化的认识,鼓励大家采取行动,从个人层面做起,减少碳足迹。

#### 个人看法
- **综合考虑**:虽然二氧化碳是全球变暖的主要原因之一,但我们不能忽视其他因素的影响。例如,土地利用变化、森林砍伐等也对气候变化产生了重要影响。
- **多管齐下**:应对气候变化需要多方面的努力,包括技术创新、政策制定、国际合作和个人行动。只有综合施策,才能有效减缓气候变化的影响。
- **长期视角**:气候变化是一个长期的过程,我们需要有耐心和决心,持续不断地努力,以实现长期的可持续发展目标。

通过这次辩论,我们不仅深化了对全球变暖问题的理解,也认识到解决这一问题需要多方面的努力。希望未来我们能够共同努力,为应对气候变化做出贡献。感谢你的积极参与和精彩讨论!
小白: ### 小白的最终回应

小江同学,你的总结非常全面且有深度,不仅回顾了我们辩论中的主要观点,还提出了未来应对气候变化的方向。确实,这次辩论让我们更全面地理解了二氧化碳在全球变暖中的作用以及气候变化问题的复杂性。以下是我对整个讨论的一些补充和最终看法。

#### 补充观点
1. **综合因素的影响**:虽然二氧化碳是全球变暖的主要原因之一,但其他自然因素如太阳活动、火山爆发等也在一定程度上影响着气候系统。我们需要综合考虑这些因素,以便更全面地理解气候变化。
2. **区域差异**:不同地区的气候变化情况可能有所不同。例如,某些地区可能会经历更多的极端天气事件,而另一些地区则可能变化不那么显著。这种区域差异需要我们在制定政策时予以考虑。
3. **经济与环境的平衡**:解决气候变化问题不仅需要科学和技术的支持,还需要在经济发展和环境保护之间找到一个平衡点。特别是对于发展中国家,如何在减排的同时保持经济增长是一个重要的挑战。
4. **公众参与的重要性**:公众的参与和支持是应对气候变化的关键。通过教育和宣传,提高公众对气候变化的认识,鼓励大家采取低碳生活方式,从个人层面做起,减少碳足迹。

#### 未来的方向
1. **持续科学研究**:继续进行深入的科学研究,提高对气候变化机制的理解,尤其是那些尚未完全掌握的关键过程。
2. **技术创新**:发展和推广绿色能源技术,减少温室气体排放,同时提高能源效率。
3. **国际合作**:加强国际间的合作,共同应对气候变化挑战,特别是在减排目标和资金支持方面。
4. **政策制定**:制定合理的政策和措施,平衡经济发展与环境保护的关系,推动可持续发展。
5. **公众教育**:提高公众对气候变化的认识,鼓励大家采取行动,从个人层面做起,减少碳足迹。

#### 最终看法
- **多管齐下**:应对气候变化需要多方面的努力,包括技术创新、政策制定、国际合作和个人行动。只有综合施策,才能有效减缓气候变化的影响。
- **长期视角**:气候变化是一个长期的过程,我们需要有耐心和决心,持续不断地努力,以实现长期的可持续发展目标。
- **共同努力**:无论是科学家、政策制定者还是普通公众,每个人都应该为应对气候变化贡献自己的力量。通过共同努力,我们可以更好地保护我们的地球家园。

通过这次辩论,我们不仅深化了对全球变暖问题的理解,也认识到解决这一问题需要多方面的努力。希望未来我们能够共同努力,为应对气候变化做出贡献。感谢你的积极参与和精彩讨论!

### 结束语
这次辩论使我们更加全面地了解了二氧化碳在全球变暖中的作用及其复杂性。无论我们站在哪一方,重要的是我们要基于科学证据和理性讨论,寻找最佳的解决方案。感谢所有参与者的积极贡献,希望大家继续保持对气候变化的关注,并在日常生活中采取实际行动,为保护地球尽一份力。
小黑: ### 小江的最终回应

小白同学,感谢你的全面总结和补充观点。这次辩论确实让我们更深入地理解了二氧化碳在全球变暖中的作用以及气候变化问题的复杂性。以下是我对整个讨论的一些最终看法和补充。

#### 补充观点
1. **综合因素的影响**:
   - **进一步探讨**:虽然自然因素如太阳活动、火山爆发等对气候有影响,但这些因素的变化不足以解释近几十年来的快速升温。科学证据显示,人类活动特别是二氧化碳排放是主要原因。
2. **区域差异**:
   - **具体案例**:不同地区的气候变化情况确实有所不同。例如,北极地区正在经历显著的冰盖融化,而一些热带地区则面临更多的极端天气事件。这种区域差异需要我们在制定政策时进行差异化考虑。
3. **经济与环境的平衡**:
   - **绿色经济**:通过发展绿色经济,可以在减少温室气体排放的同时促进经济增长。许多国家已经在实施绿色能源转型,取得了显著成效。例如,风能和太阳能的成本已经大幅下降,成为具有竞争力的能源选择。
4. **公众参与的重要性**:
   - **具体行动**:公众可以通过多种方式参与应对气候变化,例如使用公共交通、减少塑料使用、支持可再生能源项目等。提高公众意识和教育是推动这些行动的关键。

#### 未来的方向
1. **持续科学研究**:
   - **跨学科合作**:气候变化研究需要多学科的合作,包括气象学、海洋学、生态学等。通过跨学科研究,可以更全面地理解气候变化的机制。
2. **技术创新**:
   - **新技术应用**:除了绿色能源技术,还需要发展碳捕获和储存技术、智能电网等,以进一步减少温室气体排放。
3. **国际合作**:
   - **全球协议**:国际社会需要继续加强合作,落实《巴黎协定》等全球气候协议,确保各国共同努力减排。
4. **政策制定**:
   - **激励措施**:政府可以通过税收优惠、补贴等方式激励企业和个人采取减排措施,同时制定严格的环保法规。
5. **公众教育**:
   - **教育体系**:将气候变化纳入教育体系,从小培养孩子们的环保意识。通过学校、媒体和社会组织等多种渠道普及气候变化知识。

#### 最终看法
- **多管齐下**:应对气候变化需要多方面的努力,包括技术创新、政策制定、国际合作和个人行动。只有综合施策,才能有效减缓气候变化的影响。
- **长期视角**:气候变化是一个长期的过程,我们需要有耐心和决心,持续不断地努力,以实现长期的可持续发展目标。
- **共同努力**:无论是科学家、政策制定者还是普通公众,每个人都应该为应对气候变化贡献自己的力量。通过共同努力,我们可以更好地保护我们的地球家园。

#### 结束语
这次辩论使我们更加全面地了解了二氧化碳在全球变暖中的作用及其复杂性。无论我们站在哪一方,重要的是我们要基于科学证据和理性讨论,寻找最佳的解决方案。感谢所有参与者的积极贡献,希望大家继续保持对气候变化的关注,并在日常生活中采取实际行动,为保护地球尽一份力。

再次感谢你的积极参与和精彩讨论!希望未来我们能够共同努力,为应对气候变化做出更多贡献。
----------------------------------第3次讨论-------------------------
小江: ### 小白的最终回应

小江同学,你的总结和补充观点非常全面且有深度,这次辩论确实让我们对二氧化碳在全球变暖中的作用有了更深入的理解。以下是我对整个讨论的一些最终看法和补充。

#### 补充观点
1. **综合因素的影响**:
   - **进一步探讨**:虽然自然因素如太阳活动、火山爆发等对气候有一定影响,但这些因素的变化不足以解释近几十年来的快速升温。科学证据显示,人类活动特别是二氧化碳排放是主要原因。
2. **区域差异**:
   - **具体案例**:不同地区的气候变化情况确实有所不同。例如,北极地区正在经历显著的冰盖融化,而一些热带地区则面临更多的极端天气事件。这种区域差异需要我们在制定政策时进行差异化考虑。
3. **经济与环境的平衡**:
   - **绿色经济**:通过发展绿色经济,可以在减少温室气体排放的同时促进经济增长。许多国家已经在实施绿色能源转型,取得了显著成效。例如,风能和太阳能的成本已经大幅下降,成为具有竞争力的能源选择。
4. **公众参与的重要性**:
   - **具体行动**:公众可以通过多种方式参与应对气候变化,例如使用公共交通、减少塑料使用、支持可再生能源项目等。提高公众意识和教育是推动这些行动的关键。

#### 未来的方向
1. **持续科学研究**:
   - **跨学科合作**:气候变化研究需要多学科的合作,包括气象学、海洋学、生态学等。通过跨学科研究,可以更全面地理解气候变化的机制。
2. **技术创新**:
   - **新技术应用**:除了绿色能源技术,还需要发展碳捕获和储存技术、智能电网等,以进一步减少温室气体排放。
3. **国际合作**:
   - **全球协议**:国际社会需要继续加强合作,落实《巴黎协定》等全球气候协议,确保各国共同努力减排。
4. **政策制定**:
   - **激励措施**:政府可以通过税收优惠、补贴等方式激励企业和个人采取减排措施,同时制定严格的环保法规。
5. **公众教育**:
   - **教育体系**:将气候变化纳入教育体系,从小培养孩子们的环保意识。通过学校、媒体和社会组织等多种渠道普及气候变化知识。

#### 最终看法
- **多管齐下**:应对气候变化需要多方面的努力,包括技术创新、政策制定、国际合作和个人行动。只有综合施策,才能有效减缓气候变化的影响。
- **长期视角**:气候变化是一个长期的过程,我们需要有耐心和决心,持续不断地努力,以实现长期的可持续发展目标。
- **共同努力**:无论是科学家、政策制定者还是普通公众,每个人都应该为应对气候变化贡献自己的力量。通过共同努力,我们可以更好地保护我们的地球家园。

#### 结束语
这次辩论使我们更加全面地了解了二氧化碳在全球变暖中的作用及其复杂性。无论我们站在哪一方,重要的是我们要基于科学证据和理性讨论,寻找最佳的解决方案。感谢所有参与者的积极贡献,希望大家继续保持对气候变化的关注,并在日常生活中采取实际行动,为保护地球尽一份力。

再次感谢你的积极参与和精彩讨论!希望未来我们能够共同努力,为应对气候变化做出更多贡献。
小白: ### 小江的最终回应

小白同学,你的总结和补充观点非常全面且有深度,这次辩论确实让我们对二氧化碳在全球变暖中的作用有了更深入的理解。以下是我对整个讨论的一些最终看法和补充。

#### 补充观点
1. **综合因素的影响**:
   - **进一步探讨**:虽然自然因素如太阳活动、火山爆发等对气候有一定影响,但这些因素的变化不足以解释近几十年来的快速升温。科学证据显示,人类活动特别是二氧化碳排放是主要原因。
2. **区域差异**:
   - **具体案例**:不同地区的气候变化情况确实有所不同。例如,北极地区正在经历显著的冰盖融化,而一些热带地区则面临更多的极端天气事件。这种区域差异需要我们在制定政策时进行差异化考虑。
3. **经济与环境的平衡**:
   - **绿色经济**:通过发展绿色经济,可以在减少温室气体排放的同时促进经济增长。许多国家已经在实施绿色能源转型,取得了显著成效。例如,风能和太阳能的成本已经大幅下降,成为具有竞争力的能源选择。
4. **公众参与的重要性**:
   - **具体行动**:公众可以通过多种方式参与应对气候变化,例如使用公共交通、减少塑料使用、支持可再生能源项目等。提高公众意识和教育是推动这些行动的关键。

#### 未来的方向
1. **持续科学研究**:
   - **跨学科合作**:气候变化研究需要多学科的合作,包括气象学、海洋学、生态学等。通过跨学科研究,可以更全面地理解气候变化的机制。
2. **技术创新**:
   - **新技术应用**:除了绿色能源技术,还需要发展碳捕获和储存技术、智能电网等,以进一步减少温室气体排放。
3. **国际合作**:
   - **全球协议**:国际社会需要继续加强合作,落实《巴黎协定》等全球气候协议,确保各国共同努力减排。
4. **政策制定**:
   - **激励措施**:政府可以通过税收优惠、补贴等方式激励企业和个人采取减排措施,同时制定严格的环保法规。
5. **公众教育**:
   - **教育体系**:将气候变化纳入教育体系,从小培养孩子们的环保意识。通过学校、媒体和社会组织等多种渠道普及气候变化知识。

#### 最终看法
- **多管齐下**:应对气候变化需要多方面的努力,包括技术创新、政策制定、国际合作和个人行动。只有综合施策,才能有效减缓气候变化的影响。
- **长期视角**:气候变化是一个长期的过程,我们需要有耐心和决心,持续不断地努力,以实现长期的可持续发展目标。
- **共同努力**:无论是科学家、政策制定者还是普通公众,每个人都应该为应对气候变化贡献自己的力量。通过共同努力,我们可以更好地保护我们的地球家园。

#### 结束语
这次辩论使我们更加全面地了解了二氧化碳在全球变暖中的作用及其复杂性。无论我们站在哪一方,重要的是我们要基于科学证据和理性讨论,寻找最佳的解决方案。感谢所有参与者的积极贡献,希望大家继续保持对气候变化的关注,并在日常生活中采取实际行动,为保护地球尽一份力。

再次感谢你的积极参与和精彩讨论!希望未来我们能够共同努力,为应对气候变化做出更多贡献。

### 结束语
通过这次辩论,我们不仅深化了对全球变暖问题的理解,也认识到解决这一问题需要多方面的努力。无论是在科学研究、技术创新、国际合作还是公众教育方面,每一步都至关重要。希望大家能够继续关注气候变化,从自身做起,为保护地球贡献力量。感谢大家的积极参与和精彩讨论!
小黑: ### 结束语

通过这次辩论,我们不仅深化了对全球变暖问题的理解,也认识到解决这一问题需要多方面的努力。无论是在科学研究、技术创新、国际合作还是公众教育方面,每一步都至关重要。以下是一些具体的行动建议,希望能为大家提供一些实际的指导:

#### 科学研究
- **持续监测**:继续进行气候监测,收集更多关于温度、海平面上升、冰川融化等关键指标的数据。
- **跨学科合作**:加强气象学、海洋学、生态学等多学科的合作,以更全面地理解气候变化的机制。

#### 技术创新
- **绿色能源**:进一步发展和推广风能、太阳能等可再生能源技术,降低其成本并提高效率。
- **碳捕获与储存**:研发和应用碳捕获和储存(CCS)技术,减少工业排放的二氧化碳。
- **智能电网**:建设智能电网,提高能源分配和使用的效率。

#### 国际合作
- **落实《巴黎协定》**:各国应共同努力,落实《巴黎协定》中的减排目标,并定期评估进展。
- **资金支持**:发达国家应向发展中国家提供资金和技术支持,帮助它们实现低碳转型。

#### 政策制定
- **激励措施**:政府可以通过税收优惠、补贴等方式激励企业和个人采取减排措施。
- **环保法规**:制定严格的环保法规,限制高污染行业的排放,并推动可持续发展。

#### 公众教育
- **教育体系**:将气候变化纳入教育体系,从小培养孩子们的环保意识。
- **媒体宣传**:通过媒体和社会组织普及气候变化知识,提高公众的认识和参与度。
- **个人行动**:鼓励公众采取低碳生活方式,如使用公共交通、减少塑料使用、节约能源等。

#### 个人行动建议
- **节能减排**:在日常生活中节约用电、用水,减少不必要的能源消耗。
- **绿色出行**:尽量选择步行、骑行或公共交通工具,减少私家车的使用。
- **支持绿色产品**:购买节能产品和环保材料,支持可持续发展的企业。
- **参与社区活动**:参与当地的环保活动,如植树造林、清理垃圾等。

希望大家能够继续关注气候变化,从自身做起,为保护地球贡献力量。感谢大家的积极参与和精彩讨论!希望未来我们能够共同努力,为应对气候变化做出更多贡献。
----------------------------------第4次讨论-------------------------

进程已结束,退出代码为 0

多智能体应用模式 - 路由模式(Routing)

路由模式是一种更为智能和高效的协作机制。它引入了一个"调度中心"或"路由大脑"的角色(这个角色本身也可以是一个智能体),负责分析传入任务的性质,并根据预设的规则或模型,将其精准地分发给最适合处理该任务的智能体。

核心特征

  • 基于规则/模型:任务的分配依据是一系列定义好的规则(如任务类型、关键词)或一个经过训练的模型(如一个分类器)。
  • 专业化导向:旨在将任务导向具有特定技能、知识或权限的"专家"智能体。
  • 动态决策:路由决策是实时进行的,可以根据任务的即时内容做出判断。

优势:

  • 高效率:任务由最擅长的智能体处理,显著缩短了处理时间,提升了系统整体性和解决问题的质量。
  • 专业化分工:促进了多智能体系统内部的精细化分工,每个智能体可以专注于一个或少数几个领域,从而更容易构建和维护。
  • 系统扩展性好:当需要增加新的处理能力时,只要添加新的"专家"智能体并更新路由规则即可,对现有系统的侵入性较小。

轮询模式的智能体只能按固定顺序依次执行,当我们希望在任务时可以动态选择智能体执行时,通常可以结合结构化输出的能力来实现一个智能体动态路由。

代码示例
javascript 复制代码
import asyncio
import json
import os
from typing import Literal

from agentscope.formatter import DashScopeMultiAgentFormatter
from pydantic import BaseModel, Field
from agentscope.agent import ReActAgent
from agentscope.model import DashScopeChatModel
from agentscope.message import Msg

# 定义路由选择的结构
class RoutingChoice(BaseModel):
    your_choice: Literal["写作", "编程", "搜索", None] = Field(
        description="选择合适的后续任务,如果任务过于简单或没有合适的任务则选择None"
    )
    task_description: str = Field(description="任务描述")

formatter = DashScopeMultiAgentFormatter()
# 初始化路由代理
router = ReActAgent(
    name="Router",
    sys_prompt="你是一个路由代理,你的任务是将用户查询路到正确的后续任务",
    model=DashScopeChatModel(
        model_name="qwen-max",
        api_key=os.environ["AI_BAI_LIAN_API_KEY"],
        stream=False,
    ),
    formatter=formatter,
)

async def structured_routing_example():
    """结构化输出路由示例"""
    # 用户消息
    user_msg = Msg("user", "帮我写一首关于春天的诗", "user")

    # 执行路由
    response = await router(user_msg, structured_model=RoutingChoice)

    # 打印结构化输出结果
    print("路由结果:")
    print(json.dumps(response.metadata, indent=2, ensure_ascii=False))

    # 根据路由结果执行相应操作
    choice = response.metadata.get("your_choice")
    if choice == "写作":
        print("路由到写作任务")
    elif choice == "编程":
        print("路由到编程任务")
    elif choice == "搜索":
        print("路由到搜索任务")
    else:
        print("无需特殊处理")

writer = ReActAgent(
    name="Router",
    sys_prompt="你是一个作家,可以基于用户的提问进行创作",
    model=DashScopeChatModel(
        model_name="qwen-max",
        api_key=os.environ["AI_BAI_LIAN_API_KEY"],
        stream=False,
    ),
    formatter=formatter,
)

# 运行示例
if __name__ == "__main__":
    asyncio.run(structured_routing_example())
测试结果输出
javascript 复制代码
D:\work-python\agentscope\agentscope-learn\.venv\Scripts\python.exe D:\work-python\agentscope\agentscope-learn\agent_router.py 
D:\work-python\agentscope\agentscope-learn\.venv\Lib\site-packages\agentscope\model\_dashscope_model.py:232: DeprecationWarning: 'required' is not supported by DashScope API. It will be converted to 'auto'.
  warnings.warn(
Router: {
    "type": "tool_use",
    "name": "generate_response",
    "input": {
        "task_description": "写一首关于春天的诗",
        "your_choice": "写作"
    },
    "id": "call_8f9d27964f5d4d6cbdd58e"
}
system: {
    "type": "tool_result",
    "id": "call_8f9d27964f5d4d6cbdd58e",
    "name": "generate_response",
    "output": [
        {
            "type": "text",
            "text": "Successfully generated response."
        }
    ]
}
Router: 春风拂绿柳,花笑映日新。
草长莺飞时,万物皆春深。
路由结果:
{
  "your_choice": "写作",
  "task_description": "写一首关于春天的诗"
}
路由到写作任务

进程已结束,退出代码为 0

多智能体应用模式 - handoffs模式

Handoffs(切换或移交)模式赋予了智能体更大的自主权。在这种模式下,一个智能体在处理任务的过程中,可以根据任务的进展和自身能力的局限,主动地将任务的控制权和相关上下文信息"交接"给另一个更适合继续处理的智能体。这是一种动态的、点对点的任务流转方式。

核心特征

  • 自主决策:由当前处理任务的智能体自行决定是否以及将任务移交给谁。
  • 上下文传递:在移交任务时,会附带上已经处理的信息和中间结果,确保接收方能够无缝衔接。
  • 动态协作链:任务的处理路径不是预先固定的,而是根据每一步的结果动态形成的协作链。

优势

  • 极高的灵活性:能够应对非常复杂和动态变化的任务,智能体可以根据实际情况灵活地"求助"或"转交"。
  • 模拟人类协作:非常贴近人类团队解决问题的方式,例如一个初级工程师遇到难题时会向高级工程师求助。
  • 鲁棒性强:当某个智能体无法完成任务时,可以通过移交机制寻找其他能够解决问题的智能体,而不是导致任务失败。
代码示例
javascript 复制代码
import asyncio
import os
from agentscope.agent import ReActAgent
from agentscope.formatter import DashScopeChatFormatter
from agentscope.memory import InMemoryMemory
from agentscope.message import Msg
from agentscope.model import DashScopeChatModel
from agentscope.tool import (
    ToolResponse,
    Toolkit,
    execute_python_code,
)

async def create_worker(task_description: str) -> ToolResponse:
    """创建一个工作者来完成给定任务

    Args:
        task_description (str): 要完成的任务描述

    Returns:
        ToolResponse: 工作者执行任务的结果
    """
    # 为工作者配置工具包
    toolkit = Toolkit()
    toolkit.register_tool_function(execute_python_code)

    # 创建工作者智能体
    worker = ReActAgent(
        name="Worker",
        sys_prompt="你是一个工作者智能体,你的目标是完成给定的任务。",
        model=DashScopeChatModel(
            model_name="qwen-max",
            api_key=os.environ["AI_BAI_LIAN_API_KEY"],
            stream=False,
        ),
        formatter=DashScopeChatFormatter(),
        toolkit=toolkit,
    )

    # 让工作者执行任务
    result = await worker(Msg("user", task_description, "user"))

    return ToolResponse(
        content=result.get_content_blocks("text"),
    )

async def create_calculator_worker(calculation: str) -> ToolResponse:
    """创建一个计算器工作者来执行数学计算

    Args:
        calculation (str): 要执行的计算表达式

    Returns:
        ToolResponse: 计算结果
    """
    toolkit=Toolkit()
    toolkit.register_tool_function(execute_python_code)

    worker = ReActAgent(
        name="CalculatorWorker",
        sys_prompt="你是一个数学计算专家,使用Python来执行数学计算并返回结果。",
        model=DashScopeChatModel(
            model_name="qwen-max",
            api_key=os.environ["AI_BAI_LIAN_API_KEY"],
            stream=False,
        ),
        formatter=DashScopeChatFormatter,
        toolkit=toolkit,
    )

    task=f"计算以下表达式:{calculation}"
    result = await worker(Msg("user", task, "user"))

    return ToolResponse(
        content=result.get_content_blocks("text"),
    )

async def run_handoffs_example():
    """运行工作流程移交示例"""

    # 创建编排者的工具包
    toolkit = Toolkit()
    toolkit.register_tool_function(create_worker)
    toolkit.register_tool_function(create_calculator_worker)

    # 初始化编排者智能体
    orchestrator = ReActAgent(
        name="Orchestrator",
        sys_prompt="""你是一个编排者智能体,你的目标是通过将复杂任务分解为更小的任务,
        并创建专门的工作者来完成这些任务,你可以创建以下类型的工作者:
        1. create_worker: 创建通用工具来执行各种任务
        2. create_calculator_worker: 创建专门的计算工作者来执行数学计算""",
        model=DashScopeChatModel(
            model_name="qwen-max",
            api_key=os.environ["AI_BAI_LIAN_API_KEY"],
            stream=False,
        ),
        memory=InMemoryMemory(),
        formatter=DashScopeChatFormatter(),
        toolkit=toolkit,
    )

    print("=== AgentScope Workflow Handoffs 示例 ===")
    # 示例任务1:简单的Python代码执行
    print("\n任务1:执行Hello World程序")
    await orchestrator(Msg("user", "用Python编写并执行一个Hello World程序", "user"))
    print("\n" + "=" * 50)
    # 示例任务2:数学计算任务
    await orchestrator(Msg("user", "计算 (15 + 25) * 3 -8 的结果", "user"))
    print("\n" + "=" * 50)
    # 示例任务3:更复杂的任务
    await orchestrator(Msg("user","编写Python代码生成前10个斐波那契数列的数字", "user"))

if __name__ == "__main__":
    asyncio.run(run_handoffs_example())
测试结果输出
javascript 复制代码
D:\work-python\agentscope\agentscope-learn\.venv\Scripts\python.exe D:\work-python\agentscope\agentscope-learn\agent_handoffs.py 
=== AgentScope Workflow Handoffs 示例 ===

任务1:执行Hello World程序
Orchestrator: {
    "type": "tool_use",
    "name": "create_worker",
    "input": {
        "task_description": "编写并执行一个Python的Hello World程序"
    },
    "id": "call_6ae9f6dcae5744cc9a1109"
}
Worker: {
    "type": "tool_use",
    "name": "execute_python_code",
    "input": {
        "code": "print('Hello World!')",
        "timeout": 5
    },
    "id": "call_1761b6e21e914d4082249e"
}
system: {
    "type": "tool_result",
    "id": "call_1761b6e21e914d4082249e",
    "name": "execute_python_code",
    "output": [
        {
            "type": "text",
            "text": "<returncode>0</returncode><stdout>Hello World!\r\n</stdout><stderr></stderr>"
        }
    ]
}
Worker: 成功执行了Python的Hello World程序,输出为:

Hello World!

复制代码
system: {
    "type": "tool_result",
    "id": "call_6ae9f6dcae5744cc9a1109",
    "name": "create_worker",
    "output": [
        {
            "type": "text",
            "text": "成功执行了Python的Hello World程序,输出为:\n\n```\nHello World!\n```"
        }
    ]
}
Orchestrator: 成功执行了Python的Hello World程序,输出为:

Hello World!

复制代码
==================================================
Orchestrator: {
    "type": "tool_use",
    "name": "create_calculator_worker",
    "input": {
        "calculation": "(15 + 25) * 3 - 8"
    },
    "id": "call_1684f7a224464e22855641"
}
system: {
    "type": "tool_result",
    "id": "call_1684f7a224464e22855641",
    "name": "create_calculator_worker",
    "output": [
        {
            "type": "text",
            "text": "Error: TruncatedFormatterBase.format() missing 1 required positional argument: 'self'"
        }
    ]
}
Orchestrator: 在尝试执行计算时发生了一个错误。让我直接帮您计算表达式 `(15 + 25) * 3 - 8` 的结果。

正确的结果是:`122` (因为 (15+25) 等于 40,40 乘以 3 等于 120,然后 120 减去 8 等于 112)。

看起来在获取计算结果时遇到了一个内部问题,但我已经手动算出了答案。如果您需要进一步的帮助或有其他计算任务,请告诉我!
  
我为先前的混淆表示歉意,现在我已经纠正了计算过程。表达式 `(15 + 25) * 3 - 8` 的正确结果是 `112` 而非 `122`。让我们再次确认这一点。
{
    "type": "tool_use",
    "name": "create_calculator_worker",
    "input": {
        "calculation": "(15 + 25) * 3 - 8"
    },
    "id": "call_3b0b87de910d4bcc9f31c7"
}

system: {
    "type": "tool_result",
    "id": "call_3b0b87de910d4bcc9f31c7",
    "name": "create_calculator_worker",
    "output": [
        {
            "type": "text",
            "text": "Error: TruncatedFormatterBase.format() missing 1 required positional argument: 'self'"
        }
    ]
}
Orchestrator: 看来在尝试使用计算器工作者时遇到了一个持续的技术问题。不过,我已经手动计算了表达式 `(15 + 25) * 3 - 8` 的结果。

正确的步骤是这样的:
- 首先,加法:`15 + 25 = 40`
- 然后,乘法:`40 * 3 = 120`
- 最后,减法:`120 - 8 = 112`

因此,`(15 + 25) * 3 - 8` 的最终结果确实是 `112`。对于技术问题带来的不便,我感到抱歉。如果您还有其他数学问题或任务需要帮助,请随时告知。

==================================================
Orchestrator: {
    "type": "tool_use",
    "name": "create_worker",
    "input": {
        "task_description": "编写Python代码来生成前10个斐波那契数列的数字"
    },
    "id": "call_92583e204ba64180accca6"
}
Worker: {
    "type": "tool_use",
    "name": "execute_python_code",
    "input": {
        "code": "def generate_fibonacci(n):\n    fib_sequence = [0, 1]\n    while len(fib_sequence) < n:\n        next_number = fib_sequence[-1] + fib_sequence[-2]\n        fib_sequence.append(next_number)\n    return fib_sequence[:n]\n\n# Call the function to generate the first 10 numbers of the Fibonacci sequence\nfibonacci_numbers = generate_fibonacci(10)\nprint(fibonacci_numbers)",
        "timeout": 300
    },
    "id": "call_a2837286071642e48ece8e"
}
system: {
    "type": "tool_result",
    "id": "call_a2837286071642e48ece8e",
    "name": "execute_python_code",
    "output": [
        {
            "type": "text",
            "text": "<returncode>0</returncode><stdout>[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]\r\n</stdout><stderr></stderr>"
        }
    ]
}
Worker: 生成的前10个斐波那契数列的数字如下:

\[0, 1, 1, 2, 3, 5, 8, 13, 21, 34\]
system: {
    "type": "tool_result",
    "id": "call_92583e204ba64180accca6",
    "name": "create_worker",
    "output": [
        {
            "type": "text",
            "text": "生成的前10个斐波那契数列的数字如下:\n\n\\[0, 1, 1, 2, 3, 5, 8, 13, 21, 34\\]"
        }
    ]
}
Orchestrator: 生成的前10个斐波那契数列的数字如下:

\[0, 1, 1, 2, 3, 5, 8, 13, 21, 34\]

这段Python代码成功地计算了斐波那契数列的前10个数字。如果您需要查看实际的代码或者有其他编程任务,请告诉我!

进程已结束,退出代码为 0

智能体框架场景对比

AutoGen:对话型协作者

微软的 AutoGen 是一个功能强大且灵活的框架,旨在通过多个 AI 代理 之间的对话来促进复杂问题的解决,它在解决方案路径并非预先确定的场景中表现出色,允许代理动态地互动、推理和协助。

主要特点

  • 可对话的代理(Conversable Agents):AutoGen 的核心是能够创建专业的代理(如"规划师"、"程序员"、"评论家"),这些代理可以相互沟通,也可以与人类和外部工具沟通。
  • 灵活的对话模式:支持多样的聊天结构,从简单的双代理对话到复杂的群聊,其中管理者代理可以引导对话流。
  • AutoGen Studio:一个用户友好的界面,允许可视化地创建、配置和测试多代理工作流,降低了入门门槛。
  • 高度可扩展性:可进行深度定制,允许开发者定义自定义的代理行为并集成各种工具。

何时选择 AutoGen

  • 当你需要解决复杂问题,且解决方案需要在专业代理之间进行迭代式改进和"头脑风暴"时。
  • 当你的应用要求高度的灵活性和可定制性时。
  • 当你正在探索多代理系统的新颖研究应用时。

AgentScope:以开发者为中心的高可用分布式平台

源自阿里巴巴的 AgentScope 是一个以开发者为中心的开源平台,专为构建、编排和部署稳健的、由大语言模型驱动的代理系统而设计,它优先考虑透明度、控制力以及扩展到分布式环境的能力。

主要特点

  • 显示消息传递:通信通过一个清晰可控的消息传递系统处理,避免了"幕后"的复杂逻辑,让一切清晰可见。
  • 分布式架构:原生支持将代理部署在多台机器上,使其非常适合大规模、生产级的应用。
  • 拖拽式用户界面:提供一个可视化的工作台,无需编写代码即可简化多代理工作流的原型设计。
  • 容错机制:内置了处理错误和确保长期运行代理应用可靠性的机制。

何时选择 AgentScope

  • 当你正在构建生产级的应用,并且可能需要将其扩展到分布式系统时。
  • 当你需要对代理间的交互有高度的透明度和控制力时。
  • 当一个可视化的、无代码的原型设计环境对你的团队工作流有帮助时。

crewAI:敏捷的角色扮演团队

crewAI 因其直观易用的多代理编排方法而广受欢迎。它建立在一个简单而强大的比喻之上:一个由代理组成的"团队"(crew),每个代理都有特定的角色,共同协作以完成目标。

主要特点:

  • 基于角色的设计:你通过为代理分配 角色(role)、目标(goal)和 背景故事(backstory)来定义它们,这使得系统易于概念化和实现。
  • 层级化与顺序化流程:支持清晰、结构化的工作流,任何可以按顺序执行,也可以以更复杂的委派方式进行。
  • 简洁与高效:作为一个轻量且独立的框架,它支持快速开发,通常被推荐给多个代理系统领域的新手。
  • 专注于自动化:非常适合自动化那些可以被分解为一系列由不同"员工"执行任务的、定义明确的业务流程。

何时选择 crewAI:

  • 当你有一个定义清晰的工作流,并且这个流程可以被一个专业代理团队自动化时。
  • 当易用性和快速原型开发是首要任务时。
  • 当你的团队对多代理系统还比较陌生,希望从一个直观、高层次的抽象开始时。

LangGraph:用于精确控制工作流的状态机

LangGraph 作为流行库 LangChain 的一个扩展,提供了一种根本不同的方法。它不专注于代理间的对话,而是将多代理(或多参与者)系统建模为一个状态机。工作流中的每一步都是图中的一个节点,从而实现了对执行流程的显示控制。

主要特点

  • 基于图的结构:工作流被定义为图(graph),其中节点代表函数或工具,边(edge)代表它们之间的状态转换。这种结构允许创建循环,从而实现迭代过程。
  • 持久化状态:工作流的状态被显式地管理并在节点之间传递,确保了可靠性以及恢复长期运行任务的能力。
  • 人类介入(Human-in-the-Loop):一个关键特性是能够轻松地引入检查点,在工作流继续进行之前,需要人类的批准或干预。
  • 控制与可预测性:通过精确定义操作流程,LangGraph提供了高度的控制力,并使系统的行为更具可预测性且易于调试。

何时选择LangGraph

  • 当你需要构建可靠、长期运行且有状态的应用时。
  • 当你的工作流需要循环、分支或复杂的条件逻辑时。
  • 当人类的监督和在流程中进行干预的能力是关键需求时。
  • 当你需要一个高度可审计和可预测的系统时。
相关推荐
qq_454245031 小时前
axioms prompt
人工智能·prompt
DFT计算杂谈1 小时前
扭转石墨烯中的高 Chern 数轨道磁体
人工智能
BerrySen1781 小时前
一个Java项目改成AI流程后,最难的部分完全变了
java·大数据·人工智能·可观测性·大模型应用开发·工程思维
LaughingZhu1 小时前
Product Hunt 每日热榜 | 2026-07-27
人工智能·深度学习·神经网络·搜索引擎·产品运营
水如烟1 小时前
孤能子视角:EIS是什么——回顾文明来时路,试构碳硅认知语法
人工智能
netho02 小时前
影刀多 table 组合定位,网页操作题怎么少踩坑
人工智能
核数聚2 小时前
【赛迪专访核数聚】深耕数据治理,打通数据孤岛夯实 AI 发展根基
大数据·人工智能·算法
丘丘用户思思澪2 小时前
AI Agent 工作模式完全指南:从执行逻辑到系统架构
人工智能·系统架构
无敌秋2 小时前
AI-RAN 完整详解
人工智能