.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "tutorial/workflow_multiagent_debate.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_tutorial_workflow_multiagent_debate.py: .. _multiagent-debate: Multi-Agent Debate ======================== Multi-Agent debate 模拟不同智能体之间的多轮讨论场景,通常包括几个 solver 和一个 aggregator。 典型情况下,solver 生成并交换他们的答案,而 aggregator 收集并总结答案。 我们实现了 `EMNLP 2024`_ 中的示例,其中两个 solver 智能体将按固定顺序讨论一个话题,根据先前的辩论历史表达他们的论点。 在每一轮中,主持人智能体将决定是否可以在当前轮获得最终的正确答案。 .. GENERATED FROM PYTHON SOURCE LINES 14-120 .. code-block:: Python import asyncio import os from pydantic import Field, BaseModel from agentscope.agent import ReActAgent from agentscope.formatter import ( DashScopeMultiAgentFormatter, ) from agentscope.message import Msg from agentscope.model import DashScopeChatModel from agentscope.pipeline import MsgHub # 准备一个话题 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-max", api_key=os.environ["DASHSCOPE_API_KEY"], stream=False, ), formatter=DashScopeMultiAgentFormatter(), ) alice, bob = [create_solver_agent(name) for name in ["Alice", "Bob"]] # 创建主持人智能体 moderator = ReActAgent( name="Aggregator", sys_prompt=f"""你是一个主持人。将有两个辩论者参与辩论比赛。他们将就以下话题提出观点并进行讨论: `````` {topic} `````` 在每轮讨论结束时,你将评估辩论是否结束,以及话题正确的答案。""", model=DashScopeChatModel( model_name="qwen-max", api_key=os.environ["DASHSCOPE_API_KEY"], stream=False, ), # 使用多智能体格式化器,因为主持人将接收来自多于用户和助手的消息 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, ) if msg_judge.metadata.get("finished"): print( "\n辩论结束,正确答案是:", msg_judge.metadata.get("correct_answer"), ) break asyncio.run(run_multiagent_debate()) .. rst-class:: sphx-glr-script-out .. code-block:: pytb Traceback (most recent call last): File "/Users/hjt0309/Documents/AI_project/agentscope_doc/agentscope-main/docs/tutorial/zh_CN/src/workflow_multiagent_debate.py", line 117, in asyncio.run(run_multiagent_debate()) File "/opt/miniconda3/lib/python3.12/asyncio/runners.py", line 194, in run return runner.run(main) ^^^^^^^^^^^^^^^^ File "/opt/miniconda3/lib/python3.12/asyncio/runners.py", line 118, in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/miniconda3/lib/python3.12/asyncio/base_events.py", line 686, in run_until_complete return future.result() ^^^^^^^^^^^^^^^ File "/Users/hjt0309/Documents/AI_project/agentscope_doc/agentscope-main/docs/tutorial/zh_CN/src/workflow_multiagent_debate.py", line 84, in run_multiagent_debate await alice( File "/Users/hjt0309/Documents/AI_project/agentscope_doc/agentscope-main/src/agentscope/agent/_agent_base.py", line 451, in __call__ reply_msg = await self.reply(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/hjt0309/Documents/AI_project/agentscope_doc/agentscope-main/src/agentscope/agent/_agent_meta.py", line 120, in async_wrapper current_output = await original_func( ^^^^^^^^^^^^^^^^^^^^ File "/Users/hjt0309/Documents/AI_project/agentscope_doc/agentscope-main/src/agentscope/tracing/_trace.py", line 392, in wrapper return await func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/hjt0309/Documents/AI_project/agentscope_doc/agentscope-main/src/agentscope/agent/_react_agent.py", line 309, in reply msg_reasoning = await self._reasoning(tool_choice) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/hjt0309/Documents/AI_project/agentscope_doc/agentscope-main/src/agentscope/agent/_agent_meta.py", line 120, in async_wrapper current_output = await original_func( ^^^^^^^^^^^^^^^^^^^^ File "/Users/hjt0309/Documents/AI_project/agentscope_doc/agentscope-main/src/agentscope/agent/_react_agent.py", line 430, in _reasoning res = await self.model( ^^^^^^^^^^^^^^^^^ File "/Users/hjt0309/Documents/AI_project/agentscope_doc/agentscope-main/src/agentscope/tracing/_trace.py", line 604, in async_wrapper return await func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/hjt0309/Documents/AI_project/agentscope_doc/agentscope-main/src/agentscope/model/_dashscope_model.py", line 234, in __call__ parsed_response = await self._parse_dashscope_generation_response( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/hjt0309/Documents/AI_project/agentscope_doc/agentscope-main/src/agentscope/model/_dashscope_model.py", line 414, in _parse_dashscope_generation_response raise RuntimeError(response) RuntimeError: {"status_code": 401, "request_id": "163ef91b-1986-4f1d-9602-72804412e8a8", "code": "InvalidApiKey", "message": "Invalid API-key provided.", "output": null, "usage": null} .. GENERATED FROM PYTHON SOURCE LINES 121-129 进一步阅读 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :ref:`pipeline` .. _EMNLP 2024: Encouraging Divergent Thinking in Large Language Models through Multi-Agent Debate. EMNLP 2024. .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.194 seconds) .. _sphx_glr_download_tutorial_workflow_multiagent_debate.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: workflow_multiagent_debate.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: workflow_multiagent_debate.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: workflow_multiagent_debate.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_