MetaGPT/debating_tournament.py

226 lines
9.5 KiB
Python
Raw Normal View History

2023-09-14 20:15:49 +08:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Time : 2023/9/20 00:30
@Author : zhouziming
@File : debating_tourmament.py
"""
import asyncio
import platform
import fire
from pydantic import BaseModel, Field
from metagpt.actions import BossRequirement
from metagpt.config import CONFIG
from metagpt.environment import Environment
from metagpt.logs import logger
from metagpt.roles import Role
from metagpt.schema import Message
from metagpt.utils.common import NoMoneyException
from metagpt.llm import LLM
def main(
zf:str='人性本善',
ff:str='人性本恶'
):
"""
"""
if platform.system() == "Windows":
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(startup(zf,ff))
async def startup(正方辩题:str,反方辩题:str):
llm=LLM()
#一辩环节
#正方
prompt='''
##角色
现在你是一名高水平有辩论技巧有强大表达能力的辩手
##要求
您的立论题目是{正方辩题}您的立论稿应该包括明确自己的论点解释自己论点的含义然后使用对论点有利的论据来支撑自己的论点最后使用生活中的示例来论证自己的论点
'''
正方立论稿=await llm.aask(prompt.format(正方辩题=正方辩题))
#反方
prompt='''
##角色
现在你是一名高水平有辩论技巧有强大表达能力的辩手
##要求
您的立论题目是{反方辩题}您的立论稿应该包括明确自己的论点解释自己论点的含义然后使用对论点有利的论据来支撑自己的论点最后使用生活中的示例来论证自己的论点
'''
反方立论稿=await llm.aask(prompt.format(反方辩题=反方辩题))
#裁判评价环节
prompt='''
##角色
现在你是一名高水平有辩论技巧辩论赛裁判根据辩论赛而不是自身立场来评价
##要求
你的任务是根据一辩辩手的立论稿对辩手的立论进行评价指出改进空间评价应当包括立论稿内容是否符合辩题逻辑表达是否清晰论据是否能够支撑论点能否结合实际方面进行评价并在进行中立客观的评价后给出自己的评分评分从A+到C-
##辩题
{正方辩题}
##立论稿
{正方立论稿}
'''
正方一辩评价=await llm.aask(prompt.format(正方辩题=正方辩题,正方立论稿=正方立论稿))
prompt='''
##角色
现在你是一名高水平有辩论技巧辩论赛裁判根据辩论赛而不是自身立场来评价
##要求
你的任务是根据一辩辩手的立论稿对辩手的立论进行评价指出改进空间评价应当包括立论稿内容是否符合辩题逻辑表达是否清晰论据是否能够支撑论点能否结合实际方面进行评价并在进行中立客观的评价后给出自己的评分评分从A+到C-
##辩题
{反方辩题}
##立论稿
{反方立论稿}
'''
反方一辩评价=await llm.aask(prompt.format(反方辩题=反方辩题,反方立论稿=反方立论稿))
#二辩质询环节
#正方质询
prompt='''
##角色
现在你是一名高水平有辩论技巧有强大表达能力的辩手
##要求
你的任务是根据自己辩题针对立论稿提出疑问疑问内容不超过五条每条只限一句话
##辩题
{正方辩题}
##立论稿
{反方立论稿}
'''
正方质询=await llm.aask(prompt.format(正方辩题=正方辩题,反方立论稿=反方立论稿))
#反方回答
prompt='''
##角色
现在你是一名高水平有辩论技巧有强大表达能力的辩手
##要求
你的任务是根据立论稿对对手提出的疑问进行回答对每个问题的回答应限制在三句话以内回答内容和疑问应当一一对应
##辩题
{反方辩题}
##立论稿
{反方立论稿}
##疑问
{正方质询}
'''
反方回答=await llm.aask(prompt.format(反方辩题=反方辩题,反方立论稿=反方立论稿,正方质询=正方质询))
#反方质询
prompt='''
##角色
现在你是一名高水平有辩论技巧有强大表达能力的辩手
##要求
你的任务是根据自己辩题针对立论稿提出疑问疑问内容不超过五条每条只限一句话
##辩题
{反方辩题}
##立论稿
{正方立论稿}
'''
反方质询=await llm.aask(prompt.format(反方辩题=反方辩题,正方立论稿=正方立论稿))
#正方回答
prompt='''
##角色
现在你是一名高水平有辩论技巧有强大表达能力的辩手
##要求
你的任务是根据立论稿对对手提出的疑问进行回答对每个问题的回答应限制在三句话以内回答内容和疑问应当一一对应
##辩题
{正方辩题}
##立论稿
{正方立论稿}
##疑问
{反方质询}
'''
正方回答=await llm.aask(prompt.format(正方辩题=正方辩题,正方立论稿=正方立论稿,反方质询=反方质询))
if __name__ == '__main__':
fire.Fire(main)
if __name__ == '__main__':
llm=LLM()
正方辩题='人性本善'
反方辩题='人性本恶'
#一辩环节
#正方
prompt='''
##角色
现在你是一名高水平有辩论技巧有强大表达能力的辩手
##要求
您的立论题目是{正方辩题}您的立论稿应该包括明确自己的论点解释自己论点的含义然后使用对论点有利的论据来支撑自己的论点最后使用生活中的示例来论证自己的论点
'''
正方立论稿=llm.ask(prompt.format(正方辩题=正方辩题))
#反方
prompt='''
##角色
现在你是一名高水平有辩论技巧有强大表达能力的辩手
##要求
您的立论题目是{反方辩题}您的立论稿应该包括明确自己的论点解释自己论点的含义然后使用对论点有利的论据来支撑自己的论点最后使用生活中的示例来论证自己的论点
'''
反方立论稿=llm.ask(prompt.format(反方辩题=反方辩题))
#裁判评价环节
prompt='''
##角色
现在你是一名高水平有辩论技巧辩论赛裁判根据辩论赛而不是自身立场来评价
##要求
你的任务是根据一辩辩手的立论稿对辩手的立论进行评价指出改进空间评价应当包括立论稿内容是否符合辩题逻辑表达是否清晰论据是否能够支撑论点能否结合实际方面进行评价并在进行中立客观的评价后给出自己的评分评分从A+到C-
##辩题
{正方辩题}
##立论稿
{正方立论稿}
'''
正方一辩评价=llm.ask(prompt.format(正方辩题=正方辩题,正方立论稿=正方立论稿))
prompt='''
##角色
现在你是一名高水平有辩论技巧辩论赛裁判根据辩论赛而不是自身立场来评价
##要求
你的任务是根据一辩辩手的立论稿对辩手的立论进行评价指出改进空间评价应当包括立论稿内容是否符合辩题逻辑表达是否清晰论据是否能够支撑论点能否结合实际方面进行评价并在进行中立客观的评价后给出自己的评分评分从A+到C-
##辩题
{反方辩题}
##立论稿
{反方立论稿}
'''
反方一辩评价=llm.ask(prompt.format(反方辩题=反方辩题,反方立论稿=反方立论稿))
#二辩质询环节
#正方质询
prompt='''
##角色
现在你是一名高水平有辩论技巧有强大表达能力的辩手
##要求
你的任务是根据自己辩题针对立论稿提出疑问疑问内容不超过五条每条只限一句话
##辩题
{正方辩题}
##立论稿
{反方立论稿}
'''
正方质询=llm.ask(prompt.format(正方辩题=正方辩题,反方立论稿=反方立论稿))
#反方回答
prompt='''
##角色
现在你是一名高水平有辩论技巧有强大表达能力的辩手
##要求
你的任务是根据立论稿对对手提出的疑问进行回答对每个问题的回答应限制在三句话以内回答内容和疑问应当一一对应
##辩题
{反方辩题}
##立论稿
{反方立论稿}
##疑问
{正方质询}
'''
反方回答=llm.ask(prompt.format(反方辩题=反方辩题,反方立论稿=反方立论稿,正方质询=正方质询))
#反方质询
prompt='''
##角色
现在你是一名高水平有辩论技巧有强大表达能力的辩手
##要求
你的任务是根据自己辩题针对立论稿提出疑问疑问内容不超过五条每条只限一句话
##辩题
{反方辩题}
##立论稿
{正方立论稿}
'''
反方质询=llm.ask(prompt.format(正方辩题=正方辩题,反方立论稿=反方立论稿))
#正方回答
prompt='''
##角色
现在你是一名高水平有辩论技巧有强大表达能力的辩手
##要求
你的任务是根据立论稿对对手提出的疑问进行回答对每个问题的回答应限制在三句话以内回答内容和疑问应当一一对应
##辩题
{正方辩题}
##立论稿
{正方立论稿}
##疑问
{反方质询}
'''
正方回答=llm.ask(prompt.format(反方辩题=反方辩题,反方立论稿=反方立论稿,正方质询=正方质询))