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


相关推荐
嵌入式老牛9 小时前
第4课 机器学习的三要素
人工智能·机器学习·优化·模型·学习准则
AI医影跨模态组学9 小时前
NPJ Precis Oncol 广东省人民医院放射科刘再毅团队:基于纵向MRI的深度学习模型预测乳腺癌病理完全缓解
人工智能·深度学习·论文·医学·医学影像
2301_764441339 小时前
2026年1月至4月期间,大模型招投标市场态势
人工智能·语言模型·信息与通信
Thanwind9 小时前
从0开始的机器学习之旅(一):什么是机器学习
人工智能·机器学习
ChatInfo9 小时前
多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG
人工智能
明月照山海-9 小时前
机器学习周报四十
人工智能·机器学习
ghie90909 小时前
隐马尔科夫模型(HMM)在语音识别领域的应用与代码实现
人工智能·语音识别
小墨同学boy9 小时前
越用越强不是广告语:拆解 Hermes Agent 的三层学习机制
人工智能·学习
kyle-fang9 小时前
主流微调工具
人工智能·语言模型
九卷9 小时前
100多行代码实现一个最简单的Agent(用ReAct)
ai·agent·智能体