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


相关推荐
缓步前行的微尘1 小时前
Claude Code JSONL Transcript — 完整学习指南
agent
jooloo3 小时前
Codex 间歇性 400 之谜:一条对话里,它为什么有时候用 chat/completions,有时候切到 responses?
人工智能
用户5191495848453 小时前
OpenSSL PKCS#12 PBMAC1 堆栈缓冲区溢出漏洞 (CVE-2025-11187) 分析与验证
人工智能·aigc
用户5191495848454 小时前
HP Sound Research SECOMNService 权限提升漏洞利用工具
人工智能·aigc
用户018349301694 小时前
给 AI 智能体能力包一层 BFF,前端只调一个接口
人工智能
葫芦和十三7 小时前
多模态融合|是数据形态工程,不是 Prompt 工程
openai·agent·ai编程
不好听6137 小时前
Tool:让大模型长出手脚
llm·agent
这token有力气8 小时前
Function Calling 格式漂移
人工智能
onething3658 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 5 —— SSE 流式输出 + 打字机效果
人工智能·后端·全栈
用户329901675058 小时前
给 AI 返回数据加 TS 类型,别全标 any
agent