AgentScope中的多智能体辩论工作流

代码

python 复制代码
import asyncio
import os

from pydantic import (
    BaseModel,
    Field,
)

from agentscope.agent import ReActAgent
from agentscope.formatter import (
    DashScopeChatFormatter,
    DashScopeMultiAgentFormatter,
)
from agentscope.message import Msg
from agentscope.model import DashScopeChatModel
from agentscope.pipeline import MsgHub

from dotenv import load_dotenv
load_dotenv()

import agentscope

agentscope.init(
    # ...
    project="test_examples",           # 项目名称
    name="agent_debate"   ,
    studio_url="http://localhost:3000"
)
  


topic = "两个圆外切且无相对滑动。圆A的半径是圆B半径的1/3。圆A绕圆B滚动一圈回到起点。问圆A总共转了多少圈?"


# 创建两个辩论智能体,Alice和Bob,他们将讨论这个话题。
def create_solver_agent(name: str) -> ReActAgent:
    """获取一个求解智能体。"""
    return ReActAgent(
        name=name,
        sys_prompt=f"你是一个名叫{name}的辩论者。你好,欢迎来到"
        "辩论比赛。不需要完全同意对方的观点,"
        "因为我们的目标是找到正确的答案。辩论主题如下:"
        f"{topic}。请用中文回答问题。",
        model=DashScopeChatModel(
            model_name="qwen-turbo",
            api_key=os.environ["DASHSCOPE_API_KEY"],
            stream=True,
        ),
        formatter=DashScopeChatFormatter(),
    )


alice, bob = [create_solver_agent(name) for name in ["Alice", "Bob"]]

# 创建一个主持人智能体
moderator = ReActAgent(
    name="Aggregator",
    sys_prompt=(
        "你是一个主持人。将有两位辩论者参与辩论比赛。"
        "他们将提出自己的答案并讨论他们对这个话题的观点:\n"
        "```\n"
        "{topic}\n"
        "```\n"
        "在每轮结束时,你将评估双方的答案并决定哪一个是正确的。"
    ),
    model=DashScopeChatModel(
        model_name="qwen-turbo",
        api_key=os.environ["DASHSCOPE_API_KEY"],
        stream=True,
    ),
    formatter=DashScopeMultiAgentFormatter(),
)


# 主持人的结构化输出模型
class JudgeModel(BaseModel):
    """主持人的结构化输出模型。"""

    finished: bool = Field(
        description="辩论是否已经结束。",
    )
    correct_answer: str | None = Field(
        description="辩论主题的正确答案,仅在辩论结束时提供。"
        "否则保持为None。",
        default=None,
    )


async def run_multiagent_debate() -> None:
    """运行多智能体辩论工作流。"""
    while True:
        # 来自参与者的回复消息将在MsgHub中
        # 广播给所有参与者。
        async with MsgHub(participants=[alice, bob, moderator]):
            await alice(
                Msg(
                    "user",
                    "你是正方,请表达你的"
                    "观点。",
                    "user",
                ),
            )
            await bob(
                Msg(
                    "user",
                    "你是反方。你不同意正方的观点。"
                    "请提供你的理由和答案。",
                    "user",
                ),
            )

        # Alice和Bob不需要知道主持人的消息,
        # 所以主持人在MsgHub外部调用。
        msg_judge = await moderator(
            Msg(
                "user",
                "现在你已经听到了其他人的答案,"
                "辩论是否已经结束,你能得出正确答案吗?",
                "user",
            ),
            structured_model=JudgeModel,
        )
        print("【结构化输出】: ", msg_judge.metadata)

        if msg_judge.metadata.get("finished"):
            print(
                "辩论已经结束,正确答案是:",
                msg_judge.metadata.get("correct_answer"),
            )
            break

asyncio.run(run_multiagent_debate())

运行结果

agentscope studio观测结果


各个agent的输入


相关推荐
松果财经15 小时前
让创业更有后劲,长沙用金融铺就“成长跑道”
大数据·人工智能
Deepoch15 小时前
中国具身智能三大路径:极限挑战、柔性操作、普惠赋能,竞合共生
大数据·人工智能·物联网·机器人·具身模型·deepoc
brave and determined16 小时前
CANN训练营 学习(day12)昇腾AI处理器性能加速的利器:TIK实战配置与进阶开发指南
人工智能·实战·昇腾ai·开发环境配置·tik
机器之心16 小时前
T5Gemma模型再更新,谷歌还在坚持编码器-解码器架构
人工智能·openai
土豆125016 小时前
终端自治时代的 AI 开发范式:Claude Code CLI 全方位实操指南
前端·人工智能·程序员
开利网络16 小时前
从“流量”到“留量”:长效用户运营的底层逻辑
大数据·运维·人工智能·自动化·云计算
机器之心16 小时前
OpenAI最强代码模型GPT-5.2-Codex上线
人工智能·openai
深蓝学院16 小时前
自动驾驶目标检测十年进化之路:从像素、点云到多模态大模型的时代
人工智能·目标检测·自动驾驶
CoovallyAIHub16 小时前
从“模仿”到“进化”!华科&小米开源MindDrive:在线强化学习重塑「语言-动作」闭环驾驶
深度学习·算法·计算机视觉
whaosoft-14316 小时前
51c自动驾驶~合集62
人工智能·机器学习·自动驾驶