辩论协议设计 — 8 Agent 结构化对抗与交叉质询引擎 2026年5月15日 · 进阶 30秒结论 解决什么问题: 上一篇构建了数据管道,但数据不会辩论。你需要一个协议引擎,将结构化知识库转化为 8 个 Agent 的竞争性分析、交叉质询和综合结论——并且确保每个 Agent 的输出是可比较的、有证据支撑的、而非自由发挥的意见。 核心方法: 三轮结构化辩论协议——开场陈述(并行,各 Agent 从自己分析视角提出论据)、交叉质询(配对,同类 Agent 互相挑战对方论据中的逻辑漏洞和数据盲点)、总结陈词(并行,基于批评完善论点——让步或加倍)。所有输出遵循严格的 JSON Schema:主张 + 证据引用 + 置信度 + 关键假设。 关键结论: 4 维裁判评分(逻辑性 30% + 证据质量 30% + 清晰度 20% + 说服力 20%)是初始直觉权重——下一篇回测将用数据校准这些权重。提示词工程是辩论质量的核心:每个 Agent 的系统提示词不仅定义了立场,还约束了输出格式、证据引用要求和推理边界。 读完能做什么: 运行 debate_protocol_market.py(~300 行),将第一篇的知识库 JSON 接入完整的辩论引擎。你会得到结构化的辩论记录(transcript)——每一条论据带时间戳、Agent 归属和评分,可直接输入裁判 Agent 进行最终综合。 知识库已经就绪。7 个全球指数、10 个行业 ETF、10 个宏观指标——全部结构化存储,每个 Agent 都有自己定制的数据切片。但数据只是燃料。现在我们需要发动机: 辩论协议引擎 。 在投入代码之前,先看一眼我们将要产出的东西。以下是 8 个 Agent 辩论 ExampleIndex(虚构科技指数)时,技术多头 Agent 在开场轮中输出的论据: { "agent": "tech_bull", "round": "opening", "arguments": [ { "claim": "ExampleIndex 处于确认的上升趋势中,价格在所有关键均线之上", "evidence": "价格 4,850 位于 MA20(4,720)、MA50(4,510)、MA200(4,120) 之上。MA20 > MA50 > MA200,三者正向排列形成多头排列。", "confidence": 0.85, "counterpoints": ["RSI 14 为 62,接近超买区域但尚未触发"] }, { "claim": "MACD 在 3 日前金叉,动量正在加速", "evidence": "MACD 线 58.3 穿越信号线 42.1,柱状图为正且扩大。成交量在信号日高于 20 日均量 1.4 倍,确认突破有效。", "confidence": 0.78, "counterpoints": ["单一技术信号不构成独立交易依据,需结合基本面确认"] }, { "claim": "板块广度健康——75% 的组成行业在 20 日内正收益", "evidence": "10 个组成行业中 7 个显示 20 日正回报。科技和工业板块领涨,防御性板块滞后——典型的 risk-on 轮动形态。", "confidence": 0.72, "counterpoints": ["广度收窄中——相较 30 日前 9/10 正收益有所下降"] } ] } 这不是自由对话。这是 结构化对抗 ——每条论据都携带主张、证据、置信度和反论点,可以被对方精确引用和挑战。技术空头会在质询轮中逐条攻击以上三条论据。宏观空头会从完全不同的维度发起另一种攻击。而裁判将以 4 个维度评分每一条论据。 本文是 多 Agent 辩论 × 市场分析系列 的第二篇。在 第一篇 中,我们构建了数据管道和系统架构。现在,我们构建辩论引擎本身——8 个专业化 Agent 如何在三轮结构化辩论中互相撕裂对方的论点,然后由一个公正裁判综合出一份不含糊的市场分析。 为什么结构化辩论击败自由讨论 你可能会想:为什么不直接把知识库丢给 8 个 Agent,让他们自由讨论市场走向? 因为自由讨论在市场分析中有三个致命缺陷: 缺陷 在自由讨论中的表现 市场场景中的具体危害 论据漂移 话题从"技术面看什么"滑到"宏观上美联储会怎样"再滑到"地缘政治风险",没有锚点 技术分析师开始评论 CPI 数据(超出数据切片范围),基本面分析师开始画 K 线——所有 Agent 都溢出到不擅长的领域 回声室效应 8 个 Agent 可能无意中收敛到同一套叙事——比如都围绕"AI 泡沫"讨论,忽略了技术面动量信号 认知多样性在自由讨论中被动丧失。8 个 Agent 本质上退化成一个 8 倍 token 消耗的单一 Agent 无法量化比较 技术多头说"趋势向上",宏观空头说"收益率曲线倒挂"——这两个论据如何比较?谁更有说服力?没有任何共同尺度 评判员只能凭感觉综合,无法给出可审计的评分。五次运行可能得到五种不同结论。 结构化协议解决这些问题的方法是: 约束创造质量 。每个 Agent 只能在自己的分析视角内发言(论据不漂移)。每个 Agent 必须面对一个在自己的领域内攻击它的对手(防止回声室)。每条论据都有统一的 JSON 格式和裁判评分体系(跨视角可比较)。 💡 核心设计原则: 辩论协议不是限制 Agent 的创造力——它是为 Agent 的对抗性推理搭建一个竞技场。你需要边界。需要规则。需要记分牌。否则你拥有的不是 8 个 Agent 的辩论,而是 8 个 Agent 的噪音。 3 轮辩论协议:开场 → 质询 → 总结 协议改编自通用辩论框架(见 多 Agent 辩论 L2:结构化辩论协议 ),但专门为市场分析做了适配: 8 个 Agent 而非 2 个,领域内配对质询而非自由攻击。 协议总览 轮次 目标 Agent 行为 执行模式 产出 第一轮:开场陈述 每个 Agent 从自己的分析视角独立构建论点,不受对手干扰 每个 Agent 读取自己的知识库切片,生成 2-4 条结构化论据。多头论证看涨原因,空头论证看跌原因。 ✅ 8 个 Agent 全部并行 每条论据:{claim, evidence, confidence, counterpoints} 第二轮:交叉质询 在同一分析领域内,多空双方互相攻击对方的开场论据 技术多头攻击技术空头的论据(反之亦然)。基本多头攻击基本空头。每对在领域内深挖——不跨领域攻击。 ⚠️ 每对串行,4 对并行 每条质询:{target_id, challenge_type, reasoning, new_evidence} 第三轮:总结陈词 基于受到的质询,完善或放弃原有论点,做最终立场陈述 每个 Agent 阅读对手对自己的所有质询,决定:哪些论点仍然成立?哪些需要让步?最终立场是什么? ✅ 8 个 Agent 全部并行 每条总结:{refined_claims, concessions, final_stance, conviction_change} 为什么质询是配对的,而不是自由混战? 如果允许每个 Agent 攻击其他所有 Agent,一轮就有 8×7=56 个攻击向量。大部分攻击将是表面的——广而不深。通过在同一分析领域内配对 Agent: 技术多头 vs. 技术空头: 双方都同意技术分析是有效的。他们争论的是 当前技术数据意味着什么 。这是真正的专家辩论。 基本多头 vs. 基本空头: 双方都在看估值数据。争论焦点是 当前 PE 是否合理 ——不是一个说 PE、另一个说 K 线形态的噪音。 宏观多头 vs. 宏观空头 + 情绪多头 vs. 情绪空头: 同样逻辑。 ⚠️ 配对质询不是简化——它是聚焦: 每个 Agent 仍然只能在自己的知识切片内进行攻击。技术多头不会去挑战宏观空头的论据(它看不到宏观数据)。这意味着每场质询由领域专家执行。在领域内深度 > 在领域间广度。 JSON 论据格式规范 所有 Agent 在 3 轮辩论中都输出结构化 JSON——而不是自由文本。这是整个系统能够自动处理、比较和评分的基石。 开场论据格式 字段 类型 要求 示例 claim string 一句明确的、可被证伪的命题。不超过 50 字。 "ExampleIndex 处于确认上升趋势,价格在所有关键均线之上" evidence string 支持主张的具体数据。必须引用知识库中的数据点。不接受"很多""普遍"等模糊表述。 "价格 4,850 → MA20(4,720), MA50(4,510), MA200(4,120)。三者正向排列。" confidence float (0.0–1.0) Agent 对该论据的置信度。必须基于证据质量校准——证据强则置信高。不是"猜"。 0.85 counterpoints string[] Agent 自己意识到的反论点或限制条件。即使站在某一方,也必须诚实地指出论据的弱点。 ["RSI 14 为 62,接近超买但尚未触发"] 💡 为什么要求 counterpoints? 这来自 L2 辩论协议的"诚实度"维度。一个愿意主动暴露自己论点局限性的 Agent,比一个假装完美的 Agent 更可信。裁判会在评分中奖励这种诚实——会在评分中直接体现。 质询回应格式 字段 说明 target_id 被攻击的论据 ID(如 tech_bull_arg_1 ) challenge_type refute (指出逻辑或事实错误)| question_evidence (质疑证据充分性或条件)| concede (承认成立)| partial (部分承认但质疑程度或范围) reasoning 挑战的详细推理链 new_evidence 支持挑战的新证据(必须来源于知识库,不允许引入外部信息) 总结陈词格式 总结陈词不重新阐述完整论点。它精炼地结构化了 Agent 在经历质询后的状态变化: refined_claims :哪些原始论点经受住了质询?如何被完善?(JSON 数组) concessions :Agent 明确承认的让步——对手的哪些论点被接受?(JSON 数组) final_stance :最终立场陈述(string,50-100 字) conviction_change :信心变化—— strengthened | weakened | unchanged 8 个 Agent 的专属提示词设计 每个 Agent 的系统提示词包含四个层次,确保专业化而不失去结构一致性: 角色层: 定义分析视角(技术/基本/宏观/情绪)和方向立场(多头/空头) 数据层: 明确告诉 Agent 它的知识库切片中包含哪些数据模块 格式层: 强制 JSON 输出格式规范(claim/evidence/confidence/counterpoints) 行为层: 辩论规则——诚实要求、证据引用规则、禁止幻觉 Agent 专业化矩阵 Agent ID 分析视角 数据切片 时间维度 核心任务 tech_bull 🐂 技术分析 indices, technicals 1 天 – 2 周 从价格行为、均线、RSI、MACD、成交量中找看涨信号 tech_bear 🐻 技术分析 indices, technicals 1 天 – 2 周 找超买、背离、派发形态、动量衰竭信号 fund_bull 🐂 基本面分析 indices, sectors, fundamentals 3 个月 – 2 年 找盈利支持、合理估值、行业增长信号 fund_bear 🐻 基本面分析 indices, sectors, fundamentals 3 个月 – 2 年 找估值扩张风险、盈利质量恶化、利润率压缩 macro_bull 🐂 宏观分析 macro, global_markets, indices 6 个月 – 3 年 找宽松政策、增长加速、全球资金流向正面 macro_bear 🐻 宏观分析 m