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的输入


相关推荐
山间小僧4 小时前
「AI学习笔记」Agent Memory(二)跨会话记忆:从聊天记录到可演化的长期记忆
aigc·agent·vibecoding
明志数科5 小时前
具身智能数据工程观察:“数据筑基“时代的数据底座建设路径
人工智能·机器人
m0_614523556 小时前
普通视频怎么做多场景一镜到底:路线设计、逐段衔接与整体验收
人工智能·音视频
海宇服务6 小时前
零信任架构实战:基于海宇对外投资历史查询服务构建自动化供应商准入网关
运维·人工智能·架构·自动化
东风破_6 小时前
别急着上 Agentic RAG:先用 LangGraph 把最小 RAG 跑明白
人工智能
LaughingZhu6 小时前
Product Hunt 每日热榜 | 2026-09-12
人工智能·深度学习·神经网络·搜索引擎·百度
天真小巫7 小时前
2026.9.13总结(工作量日益繁重的当下,AI如何提效)
人工智能
Zguigo7 小时前
【CUDA1】GPUvsCPU,CUDA Kernel
人工智能·pytorch·深度学习
thesky1234567 小时前
用 ONNX Runtime 把 PyTorch 模型变成跨平台极速推理引擎:导出、优化、量化完整实
人工智能·深度学习·模型部署
米小虾7 小时前
把 KV Cache 从 3514 字节压到 890 字节:DeepSeek V4.1-Flash 动了什么,又没动什么
人工智能