目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步。想要系统学习AI知识的朋友可以看看我的教程http://blog.csdn.net/jiangjunshow,教程通俗易懂,风趣幽默,从深度学习基础原理到各领域实战应用都有讲解。

前言

现在单智能体玩着都没意思了,最近多智能体对抗才是真的火!我突发奇想:让两个AI拿着同一个辩题互怼,一个正方一个反方,它们会像人类辩手一样针锋相对,还是互相商业互吹陷入死循环?

说干就干!我用2026年最火的LangGraph框架搭了个多智能体辩论系统,还加了个裁判智能体最后定胜负,全程代码开源,零基础也能跑通~ 看完这篇,你也能自己调教两个AI吵架,超有意思的!

一、实验核心设计:3个智能体的“辩论小剧场”

做这个实验之前,我先把整体逻辑捋清楚了,咱不搞花里胡哨的,核心就3个角色,分工明确得很,跟真人辩论赛一模一样~

1.1 智能体角色定义
  • 正方Agent:立场坚定,逮着辩题死磕,发言必须带数据/案例支撑,被反驳了还得立马回击
  • 反方Agent:主打一个“挑刺”,必须盯着正方的话找逻辑漏洞,引用原话反驳,别自说自话
  • 裁判Agent:纯中立选手,不参与辩论,记录全程发言,最后根据逻辑、论据、反驳力度定输赢
1.2 技术栈选型(2026最新,新手友好)

为啥选LangGraph?这可是现在生产级多智能体的首选框架啊~✅ 基于图结构设计,状态管理、上下文共享贼方便,比老版LangChain的Chain套Chain舒服多了,调试起来不头疼!
整个实验的技术栈超轻量,都是Python生态的,不用装花里胡哨的东西:

  • 核心框架:LangGraph(多智能体编排)
  • 大模型:ChatGLM-4(国产模型,调用方便,不用翻墙)
  • 环境管理:python-dotenv(管理API密钥)
  • 可视化:graphviz(生成辩论流程图)
  • 运行环境:Python 3.10+
1.3 辩论整体流程(附流程图)

整个辩论是结构化的,轮次固定,不会乱套,流程走一遍就懂:

Created with Raphaël 2.3.0 开始 输入辩题+设置辩论轮次 初始化3个智能体+上下文记忆 正方发言,存入历史记录 反方基于历史反驳,存入记录 是否达到设定轮次? 裁判智能体总结+判定胜负 实验结束 yes no

简单说就是:输入辩题→正方先立论→反方反驳→循环N轮→裁判定输赢,全程上下文记忆会跟着走,智能体不会忘事~

二、关键配置:让AI“会吵架”的核心技巧

很多人做多智能体对话,最后变成AI互相尬聊,核心问题就是Prompt没写好+参数没调对!我踩了坑,给大家整理了最优配置,直接抄作业就行~

2.1 智能体Prompt模板(亲测有效,可直接改)

Prompt是灵魂!尤其是反方的Prompt,必须加强约束,不然它就会佛系发言,一点对抗性都没有~👇

# 正方Prompt模板
pro_prompt = """
你是专业辩论赛正方辩手,当前辩题:{topic},当前是第{round}轮辩论。
【辩论历史】:{history}
请严格遵守以下规则:
1. 立论清晰,必须用数据/案例支撑你的观点,别空话;
2. 如果反方已经发言,必须针对其观点进行逻辑回击,不能避重就轻;
3. 发言控制在300字以内,简洁有力!
"""

# 反方Prompt模板(重点!强约束)
con_prompt = """
你是专业辩论赛反方辩手,当前辩题:{topic},当前是第{round}轮辩论。
【辩论历史】:{history}
请严格遵守以下规则:
1. 必须先引用正方最新发言的原话,再指出其逻辑谬误/证据不足的地方;
2. 反驳要有理有据,可举反例,不抬杠;
3. 绝对不能自说自话,脱离正方的观点;
4. 发言控制在300字以内,一针见血!
"""

# 裁判Prompt模板
judge_prompt = """
你是中立的辩论赛裁判,无任何立场,当前辩题:{topic}。
【完整辩论历史】:{history}
请根据以下标准判定胜负:
1. 论据充分性:是否有数据/案例支撑,论据是否有效;
2. 逻辑严谨性:发言是否有逻辑漏洞,反驳是否精准;
3. 立场坚定性:是否全程围绕辩题,无跑题、无前后矛盾。
要求:先总结正反两方核心观点+辩论亮点,再明确说出获胜方,最后说明判定理由,500字以内。
"""
2.2 核心参数最优配置(表格版,直接抄)

调参真的太重要了!温度太高AI跑题,太低又太死板,我试了十几次,整理了新手友好的配置表👇

参数项 正方Agent 反方Agent 裁判Agent 说明
模型温度(temperature) 0.7 0.8 0.1 正反方带点随机性,裁判必须绝对理性
最大生成长度(max_tokens) 300 300 500 控制发言篇幅,不拖沓
上下文窗口 2048 2048 4096 裁判需要记住全程,窗口要大
重复惩罚系数 1.2 1.2 1.0 防止AI重复说一句话

三、完整代码实现(全开源,直接运行)

话不多说,上硬菜!完整代码来了,注释写得超详细,复制到本地,改个API密钥就能跑~💻
环境准备:先装依赖,一行命令搞定:

pip install langgraph langchain-chatglm python-dotenv graphviz
3.1 完整可运行代码
import os
from dotenv import load_dotenv
from langgraph import Graph, StateGraph, messages
from langchain_chatglm import ChatGLM
from typing import List, Dict, Any

# 加载环境变量(把你的ChatGLM-4 API密钥写在.env文件里)
load_dotenv()
API_KEY = os.getenv("CHATGLM_API_KEY")
API_BASE = os.getenv("CHATGLM_API_BASE")

# 初始化大模型
def init_llm(temperature: float, max_tokens: int) -> ChatGLM:
    return ChatGLM(
        model_name="chatglm4",
        openai_api_key=API_KEY,
        openai_api_base=API_BASE,
        temperature=temperature,
        max_tokens=max_tokens
    )

# 初始化各智能体LLM
pro_llm = init_llm(temperature=0.7, max_tokens=300)
con_llm = init_llm(temperature=0.8, max_tokens=300)
judge_llm = init_llm(temperature=0.1, max_tokens=500)

# 定义辩论状态(LangGraph核心,管理上下文和轮次)
class DebateState(Dict):
    topic: str  # 辩题
    round: int  # 当前轮次
    max_rounds: int  # 最大轮次
    history: List[str]  # 辩论历史
    result: str  # 辩论结果

# 正方发言节点
def pro_speak(state: DebateState) -> DebateState:
    # 拼接Prompt
    prompt = pro_prompt.format(
        topic=state["topic"],
        round=state["round"],
        history="\n".join(state["history"])
    )
    # 调用模型生成发言
    response = pro_llm.invoke(prompt)
    pro_content = f"正方第{state['round']}轮:{response.content}"
    # 更新历史和状态
    state["history"].append(pro_content)
    print(pro_content)
    return state

# 反方发言节点
def con_speak(state: DebateState) -> DebateState:
    prompt = con_prompt.format(
        topic=state["topic"],
        round=state["round"],
        history="\n".join(state["history"])
    )
    response = con_llm.invoke(prompt)
    con_content = f"反方第{state['round']}轮:{response.content}"
    state["history"].append(con_content)
    print(con_content)
    # 轮次+1
    state["round"] += 1
    return state

# 裁判判定节点
def judge_debate(state: DebateState) -> DebateState:
    prompt = judge_prompt.format(
        topic=state["topic"],
        history="\n".join(state["history"])
    )
    response = judge_llm.invoke(prompt)
    state["result"] = f"裁判总结与判定:{response.content}"
    print("\n" + state["result"])
    return state

# 轮次判断节点(是否继续辩论)
def should_continue(state: DebateState) -> str:
    if state["round"] <= state["max_rounds"]:
        return "pro_speak"  # 继续下一轮
    else:
        return "judge_debate"  # 进入裁判环节

# 构建LangGraph工作流
def build_debate_graph() -> StateGraph:
    graph_builder = StateGraph(DebateState)
    # 添加节点
    graph_builder.add_node("pro_speak", pro_speak)
    graph_builder.add_node("con_speak", con_speak)
    graph_builder.add_node("judge_debate", judge_debate)
    # 设置起始节点
    graph_builder.set_entry_point("pro_speak")
    # 添加边:正方→反方→判断轮次
    graph_builder.add_edge("pro_speak", "con_speak")
    graph_builder.add_conditional_edges("con_speak", should_continue, {
        "pro_speak": "pro_speak",
        "judge_debate": "judge_debate"
    })
    # 裁判环节为结束节点
    graph_builder.set_finish_point("judge_debate")
    # 编译图
    return graph_builder.compile()

# 主函数:运行辩论实验
if __name__ == "__main__":
    # 配置实验参数
    debate_topic = "AI是否会取代程序员"  # 可自定义辩题
    max_rounds = 3  # 可自定义辩论轮次
    # 初始化初始状态
    initial_state = {
        "topic": debate_topic,
        "round": 1,
        "max_rounds": max_rounds,
        "history": [],
        "result": ""
    }
    # 构建并运行图
    debate_graph = build_debate_graph()
    debate_graph.invoke(initial_state)
    # 保存辩论记录到本地
    with open("ai_debate_log.txt", "w", encoding="utf-8") as f:
        f.write(f"AI辩论实验记录\n辩题:{debate_topic}\n最大轮次:{max_rounds}\n\n")
        f.write("\n".join(initial_state["history"]))
        f.write("\n\n" + initial_state["result"])
    print("\n✅ 辩论实验完成!记录已保存至ai_debate_log.txt")
3.2 运行注意事项
  1. 把ChatGLM-4的API密钥和BASE地址写在.env文件里,格式:CHATGLM_API_KEY=你的密钥CHATGLM_API_BASE=你的BASE地址
  2. 辩题可以随便改,比如“AI是否有利于教育公平”“在线办公是否比线下高效”都可以;
  3. 辩论轮次建议设3-5轮,太多了会拖沓,太少了辩不起来;
  4. 运行后会自动生成ai_debate_log.txt,保存全程辩论记录,方便复盘~

四、实验结果:AI互怼现场,太精彩了!

我用“AI是否会取代程序员”这个辩题跑了3轮,两个AI的对抗性直接拉满,裁判最后定的反方获胜,给大家看个精彩片段~👇

正方第1轮:AI会取代程序员,据Gartner数据,2027年超60%的基础代码将由AI生成,低代码/无代码平台会让初级程序员失去工作,AI的编码效率是人类的10倍以上,未来基础开发岗位会被完全替代。
反方第1轮:正方提到“2027年超60%的基础代码由AI生成”,但该数据仅指向基础代码,而程序员的核心价值并非写基础代码,而是需求分析、架构设计、业务逻辑梳理,这些需要人类的行业经验和创造力,AI目前无法替代。此外,AI编码需要程序员提精准需求,没有程序员,AI的代码毫无意义。
正方第2轮:…(针对反方观点回击)
反方第2轮:…(引用正方原话反驳)

裁判最后判定反方获胜的核心理由:正方仅聚焦“基础代码生成”,忽略了程序员的核心价值,论据片面;反方精准抓住正方的逻辑漏洞,论据更全面,且全程反驳都紧扣正方观点,逻辑严谨~

真的超有意思!不同的辩题会有不同的结果,大家可以自己试试~

五、实验总结+行业思考

做完这个实验,我最大的感受是:多智能体的核心不是智能,而是协作/对抗的编排~单智能体的能力再强,也只是单点突破,而多智能体通过合理的角色分工、状态管理,能实现1+1>2的效果,这也是未来AI的核心发展方向之一。

另外,这个实验还有很多可以优化的点,大家可以自己拓展:

  1. 给智能体加搜索工具(比如TavilySearch),让AI实时查最新数据,论据更真实;
  2. 增加观众智能体,给辩论打分,让结果更客观;
  3. 换成不同的大模型对抗(比如ChatGLM-4 vs Qwen-2),看看不同模型的辩论风格;
  4. 做自由辩论模式,让智能体自主决定发言时机,更贴近真人辩论赛~

觉得这篇文章有用的话,别忘了点赞+收藏+关注~后续还会更更多多智能体实战案例,比如AI团队写代码、AI玩狼人杀等等,超有意思的,关注我不迷路~😜

目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步。想要系统学习AI知识的朋友可以看看我的教程http://blog.csdn.net/jiangjunshow,教程通俗易懂,风趣幽默,从深度学习基础原理到各领域实战应用都有讲解。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐