ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

给A股装一个会辩论的AI:多智能体协作的实战解析

给A股装一个会辩论的AI:多智能体协作的实战解析 自从把AI Agent用于A股分析之后我很多朋友问我你是不是搞了个自动炒股机器人其实不是。我做的这套系统本质上是给A股装了一个“会辩论的AI”——让两个分别扮演多头和空头的大模型Agent围绕同一只股票进行多轮辩论再由一个裁判Agent输出结构化的分析纪要。这个思路一开始源于我自己的一个痛点每天面对行情、研报、公告、新闻信息量太大单一AI助手给的结论又不透明我根本不敢信。与其让它直接告诉我“买还是卖”不如让AI把多空双方的逻辑摊开吵一架。这个项目也正好赶上了AI Agent和应用开发的热潮从大模型接口到多智能体协作再到前端交互整套技术栈都比较典型。如果你对AI应用开发、金融NLP或者Agent多角色协作感兴趣这篇文档里的思路和踩坑记录应该对你有用。1. 为什么A股分析需要“辩论”而不是“断言”1.1 单一模型问答模式的三个致命问题在动手写代码之前我先试过市面上主流的几种AI投研助手。它们的交互模式高度一致你问“怎么看宁德时代”它给你一段结论——看多、看空或者中性。这种模式最大的问题不是大模型不够聪明而是它的回答缺少可证伪性。第一个问题是“立场不稳定”。同一个问题换个问法、换个上下文结论可能翻天覆地。比如问“宁德时代当前估值是否合理”它说合理问“宁德时代现在能买吗”它又列一堆风险提示。这让我无法判断它到底是看多还是看空因为大模型在生成回答时会倾向于迎合用户的提问框架。第二个问题是“逻辑不可追溯”。它给了你十个看多理由但你看完之后根本不知道哪条是核心变量、哪条只是凑数。更麻烦的是如果其中一条逻辑是错的你很难在有限时间里把整段回答拆开逐一验证。第三个问题也是我最在意的是“对抗性不足”。真实的市场观点从来不是单方向的任何一个看多理由背后都站着一个能反驳它的空头逻辑。如果AI只输出单边理由等于替你过滤掉了反面信息这在投资决策里是致命的。1.2 辩论机制能补齐什么短板我后来想明白了一个道理散户和专业机构之间的信息差不只是数据获取能力的差距更是“多空逻辑推演能力”的差距。机构里的研究员和基金经理开会时是怎么做的有人负责抬轿有人负责拆台最后拍板的人听完双方攻防再做判断。这套流程的价值不在于谁吵赢了而在于把所有可能性都摆到桌面上。“会辩论的AI”本质上就是在复刻这套流程。我设计的目标很明确这个系统不负责预测涨跌不负责给买卖建议只负责把多空双方的论据、核心假设、关键变量和风险点全部整理出来。用户自己根据这些材料做判断。这样做有三个好处第一AI不用再扮演“股神”它只需要扮演一个信息组织者和逻辑检验者第二多空双方的对抗过程天然具备可追溯性——每个论点都对应着一条数据或一段新闻第三辩论过程本身会暴露很多非专业人士容易忽略的维度比如“行业景气度上行会不会被估值透支”这类潜在风险。1.3 这个项目适合谁参考做完这套系统之后我总结了一下它的适用人群。如果你正在做AI应用开发尤其是Agent类产品你可以参考它的多角色协作设计如果你是做金融NLP或者量化投研的可以参考它如何用LLM处理非结构化数据和情绪信息如果你只是对AI感兴趣想看看大模型除了聊天之外还能做什么那这个项目也算是一个完整的案例——从数据获取、提示词设计、Agent调度到前端展示一个也不少。2. 拆解“会辩论”的技术内核多智能体协作与多空观点对抗2.1 整体架构为什么是四个Agent而不是两个整个系统的核心由四个Agent构成主持人Agent、多方Agent、空方Agent、裁判Agent。很多人第一反应是既然是多空辩论两个Agent不就够了吗加上主持人和裁判纯属多余。实际上这两个角色恰恰是系统能否稳定输出的关键。主持人Agent承担的是流程控制任务。它负责抛出辩题、控制辩论轮次、在每一轮结束后做阶段小结。没有它两个大模型Agent很容易在第三轮辩论时跑偏到“行业政策”或者“宏观经济”等无关话题上去。裁判Agent则负责在辩论结束后给出结构化的评审结果它的存在让“吵架”有了结论——虽然这个结论不是涨跌预测而是多空论据的对比和关键变量的识别。四个Agent的分工是主持人Agent维持辩论秩序抛题每轮归纳双方核心观点多方Agent聚焦正面因素寻找看多逻辑引用数据和新闻作为支撑空方Agent聚焦负面因素寻找看空逻辑对多方论点逐条反驳裁判Agent综合全文输出多空论据清单、核心分歧点和需重点跟踪的变量。2.2 角色提示词把“人设”喂给大模型的关键这里最核心的技术细节是提示词的设计。我最早犯过一个错误只给Agent写一两句角色说明比如“你是一个看多的分析师”结果输出质量非常差——大模型确实会说看多的话但内容泛泛而谈完全没有研究员该有的深度。后来我把提示词扩展成一套完整的“研究员风格约束”包括分析框架、语言风格、论证要求和引用规范四部分。下面这段代码是我在项目中实际使用的多方Agent提示词模板的核心节选SYSTEM_PROMPT_BULL 你是拥有十年A股经验的多头分析师。你的任务是为指定股票寻找尽可能充分的看多逻辑。 约束条件 1. 必须从基本面、行业景气度、估值水平、政策环境、资金面五个维度展开论证 2. 每个论点必须附带至少一个可验证的数据或事实依据例如财报数据、行业增速、研发投入等 3. 禁止使用模糊表述比如“有望”、“可能”、“预计”这类词后面必须跟上具体逻辑 4. 你的论证会被一个资深空头分析师反驳所以请主动预判对方的攻击点并在论述中提前加固 5. 语言要求专业、克制不得出现情绪化词汇。 输出格式 每个论点采用结论—依据—推演三段式结构。 这里有一个细节值得说一下第4条约束“你的论证会被资深空头反驳所以请主动预判对方的攻击点”是一个很关键的设定。加了这句话之后多方Agent的输出质量提升非常明显它不再只是罗列利好而是会主动承认一些风险因素然后再给出“为什么这些风险不影响看多结论”的论证。这种“让步式论证”才是真实研报里经常出现的写法也更容易让裁判Agent做出更均衡的判断。2.3 辩论流程与记忆机制三轮攻防怎么跑辩论流程被定义为一个循环主持人抛题多方先发言空方反驳多方再回应这样算一轮。实测下来三轮辩论的效果是最好的。一轮太浅很多逻辑没有展开五轮以上成本急剧上升而且很容易出现“车轱辘话”——双方来回表述同一个观点信息增量趋于零。核心代码如下def debate_loop(stock_code, max_rounds3): context init_brief(stock_code) # 初始化数据简报 speech_history [] for round_idx in range(max_rounds): # 主持人组织本轮 moderator_turn call_agent(moderator, context, speech_history, round_idx) # 多方发言 bull_turn call_agent(bull, context, moderator_turn, speech_history) # 空方发言必须针对多方观点进行反驳 bear_turn call_agent(bear, context, bull_turn, speech_history) # 如果空方发言之后多方有需要补充的再多一轮回应 bull_rebuttal call_agent(bull, context, bear_turn, speech_history, rebuttalTrue) # 记忆把本轮所有内容写入历史 speech_history.extend([moderator_turn, bull_turn, bear_turn, bull_rebuttal]) return speech_history记忆机制是整个循环里最容易被忽视的部分。大模型的上下文窗口虽然越来越大但你不能真的把前两轮的完整辩论全文一股脑全塞进去——因为这些Agent用的还是普通的大模型API每次调用都是无状态的需要你自己维护历史。我之前试过直接把所有历史拼接进下一轮Prompt结果第三个回合经常出现“复读机”现象。后来改为由主持人在每轮结束时先输出一段“本轮核心分歧点摘要”下一轮只把摘要和上一轮双方最后一段发言传给继续辩论的Agent。这样既保证了信息连续又大大减少了Token消耗。2.4 裁判Agent的评分维度从“谁赢了”到“哪些逻辑值得看”打完三轮辩论之后裁判Agent开始工作。我给它设计了一套结构化的输出要求不评判“多空谁说得对”而是从以下四个维度进行整理论据强度各方论点的数据支撑是否扎实有没有明显的事实错误逻辑一致性论点之间是否有矛盾推演链条是否完整分歧点识别多空双方的核心分歧集中在哪些具体变量上需跟踪指标未来哪些数据变化会打破当前的平衡。裁判Agent的Prompt里专门加了一条在梳理多空分歧点时必须明确指出双方在哪一个具体指标上存在不同预期。比如多方认为净利润增速能保持在25%以上空方认为会回落到10%那么裁判Agent就要把这个数值差异点出来而不是泛泛地写“双方对业绩增速有分歧”。这一条很重要因为它直接决定了输出的可操作性。3. 产品形态与落地路径A股用户是怎么用上它的3.1 数据源选型免费的公开数据也够用聊完算法聊落地。一套AI系统不管底层多复杂最终用户能感知到的就是“输入股票代码得到一份分析报告”。那么数据从哪来成了第一个现实问题。金融数据接口有很多但大部分实时行情数据都是付费的。考虑到我一开始只是做个人工具我选了免费的数据方案。数据获取分成三路行情数据用AkShare拉日K线、市盈率、市净率等基础指标同时也拿最近60个交易日的涨跌幅分布公告数据从巨潮资讯网抓取最近一年的公司公告标题和摘要重点关注业绩预告、重大合同、减持增持公告新闻数据用爬虫抓取最近一周的舆情信息按正面、负面、中性先做一轮粗分类。这个方案的成本基本为零但有一个明显短板——研报数据拿不到。后来我是用公开的券商研报摘要页面做了补充但也只覆盖了部分头部券商的个股覆盖。如果你要做一个生产级的系统数据源肯定要换成付费的商业终端。个人项目阶段免费方案完全够用。3.2 交互设计从“命令行”到“输入代码直接看报告”第一版系统是纯命令行的运行效果不错但我自己都懒得用。后来我花了两天时间套了个简单的前端页面——用一个输入框接收股票代码点击“开始辩论”后端把整个辩论流程跑完输出一份结构化的报告。报告页面长这样 股票002594 比亚迪 辩题当前价位下比亚迪是否具备持续上行空间 【多方核心论点】 1. 新能源车渗透率持续提升2024年行业销量增速预计保持在20%以上比亚迪作为头部车企直接受益 2. 海外市场放量多国建厂带动出口业务毛利率改善 3. 高端品牌腾势、仰望爬坡产品均价提升逻辑清晰。 【空方核心论点】 1. 国内市场份额接近30%后继续向上难度增大价格战可能拖累毛利 2. 海外建厂前期资本开支大未来两年自由现金流承压 3. 新能源汽车行业整体产能过剩风险累积价格体系有崩塌可能。 【核心分歧】 双方最大的分歧点在于比亚迪国内市占率能否稳定在30%以上。 - 多方认为品牌力和产品周期能支撑份额空方认为价格战会侵蚀份额。 【需重点跟踪指标】 - 月度销量和市占率变化 - 单车平均售价ASP变动 - 海外工厂投产进度这份报告最值钱的不是看多或者看空的结论而是“双方核心分歧点”那段。我拿给几个做投资的朋友看他们的第一反应都是列表里这些分歧点恰恰是平时自己研究一只股票时最需要花时间盯住的东西。3.3 工程化落地中的成本与并发问题辩论流程跑一次需要多少次大模型调用按三轮辩论计算主持人3次、多方6次、空方3次、最后裁判1次总共13次调用。这个量级对于个人使用来说问题不大但如果开放给用户同时使用成本会很快失控。我做了三个优化结果缓存同一个股票代码在24小时内的辩论结果直接缓存不再重复跑。A股一天之内基本面和信息面不会有太大变化这个策略非常有效标题摘要压缩每一轮传给下一轮的内容不是全部历史而是压缩后的摘要Token消耗减少40%左右并发限流后端用Redis做了一层简单的计数限流每天总量控制避免账单一夜之间爆掉。成本绝对值方面按当时大模型API的定价算跑一次完整辩论大约消耗18万Token左右折合人民币两三毛钱。加上缓存机制实际分摊到每次请求的成本远低于这个数。4. A股场景特有的坑从数据噪音到情绪过拟合的实测排错4.1 研报的“一致看多”陷阱这个项目踩过的坑比跑通流程本身更能代表工程量。第一个大坑来自研报数据。我最初接到券商研报摘要之后直接原样喂给多方Agent当参考材料。结果发现几乎所有券商研报的摘要里都带着明显的看多倾向因为卖方研报本质上很少出“卖出”评级。多方Agent拿到这些材料之后简直如鱼得水引用的数据全是正面的。问题爆发在一次辩论中。裁判Agent最后输出的分歧点清单里居然连一个空方数据引用都没有空方Agent全程只能从逻辑层面反驳没有数据支撑。这已经不算一场合格的辩论了。排查之后发现空方Agent的Prompt约束中有“引用数据支撑”这一条但它拿到的数据简报里90%都是研报摘要根本没给它提供足够的空方弹药。修复方案是打破了“同一个数据包所有人共用”的做法。我现在给多方Agent的数据包侧重券商研报摘要、企业公告的正面内容、行业利好新闻给空方Agent的数据包侧重财务指标的恶化项、负面新闻、估值历史分位偏高提示、股权质押与减持记录。数据源是同一批但分发时按正负面维度做了拆分。这比单纯在Prompt里喊“请寻找负面消息”有效得多因为大模型是真的会“手里有什么就说什么”的。4.2 新闻标题的情绪化措辞污染第二个坑来自新闻数据。A股新闻有很多标题党情绪色彩非常浓。“暴跌”、“崩盘”、“惊天大涨”这类词很常见。大模型在读取这些标题之后很容易在辩论中放大情绪语气。有一次裁判Agent输出的报告里居然出现“市场恐慌情绪蔓延”这种判断但实际的跌幅只有3%。我后来在新闻预处理阶段加了一个“情绪词降权”模块把标题里的情绪词识别出来替换成中性表述。比如“暴跌”改成“下跌”“爆发”改成“上涨”。这个处理看起来很简单但对辩论质量的提升非常明显——Agent的发言会变得更像一个克制的研究员而不是一个激动的自媒体的转载者。4.3 财务数据的日期与复权陷阱金融数据的坑稍不注意就是硬伤。我遇到最典型的是“前复权和后复权”的问题。拉历史行情的时候如果采用后复权数据当前股价和K线图上的数值会差一大截如果采用前复权历史上某个时点的价格又是失真的。辩论Agent如果引用历史价格来论证“当前估值处于历史低位”一旦复权方式不一致结论就可能颠倒。解决方式是在数据预处理阶段统一采用前复权口径并且在传入Agent之前把“当前收盘价”、“历史极值区间”、“估值分位”这些关键指标直接算好以结构化字段传给Agent而不是让Agent自己去读一大堆原始数据。这里有一个重要的原则数据预处理阶段能解决的问题绝不要指望大模型的数学能力去解决。4.4 大模型幻觉在金融场景会被无限放大金融场景最不能容忍的就是AI编数据。有一次多方Agent在辩论中引用了一个“市占率提升至34%”的数据我看着眼熟但怎么也想不起来在哪份材料里见过后来查证发现AI把这个数据完全凭空捏造了。类似的情况出现了好几次。我的应对方案是引用溯源。要求所有Agent在输出论点时必须附上数据来源编号比如“数据来源公司2023年半年报”或者“来源Wind行业数据库”。裁判Agent在评审时也把“是否有明确来源”列为第一道筛选条件——没有来源的论点直接降权处理。这么做之后幻觉出现的频率大幅下降但并没有完全消失还需要在最后输出报告前增加一道“事实校验”环节用程序校验Agent引用数据中的关键数字是否和原始数据一致。4.5 裁判Agent被某一方悄悄说服最后这个坑是最隐蔽的。我原以为裁判Agent只需要按照评分维度做汇总应该保持中立。但在一次回测中我发现裁判Agent输出的“多方优势”项得分跟多方Agent发言的篇幅长度呈正相关——发言越长越容易说服裁判哪怕论据质量不高。后来分析原因是论证篇幅长的答案包含更多的信息量在注意力机制下更容易影响裁判的判断。修复方式是引入盲评机制裁判Agent只读双方论点列表不知道哪个论点是多方说的、哪个是空方说的并且限制每一份论点摘要不超过200字。这样一来裁判的判断就很难被发言篇幅偷走优势。5. 实测效果与局限辩论AI什么时候靠谱、什么时候别信5.1 回测样本里的对比结论我选了一批股票做对比测试一组用辩论模式生成报告一组用“直接问答”模式生成报告然后让三个真人用户分别给两组报告的可信度和信息量打分。过去半年在50只不同行业股票上的初步测试结果显示辩论模式的信息完整度更高自不用说更重要的是报告里“双方核心分歧点”出现的数量是直接问答模式的3倍以上——这意味着辩论AI确实搞出了更多有价值的信息。从“模拟决策参考”这个维度看真人用户普遍反映辩论模式下的报告让人更容易形成自己的判断因为反面观点被充分暴露了。问卷里整理出来的原话是“看辩论报告我知道自己该跟踪什么指标看普通问答我只能看到一堆理由。”5.2 它解决不了的问题外部信息和短期博弈这套系统的局限性也很明显。A股市场短期走势受资金博弈和外部突发信息影响极大比如盘中突发政策、大单异动、短期情绪共振这类信息靠“多空辩论”根本测不准。我自己从来不拿这个系统的输出去预测“明天涨还是跌”它只适合做中期维度的信息梳理和逻辑推演。如果说得直接一点这个“会辩论的AI”更像一个深度学习助手帮你把多空逻辑理清楚而不是一个“智能炒股软件”。它最大的价值在于——当你看好一只股票的时候它逼着你看清楚对手盘到底在担心什么。5.3 后续可以怎么扩展这个项目我目前维护在个人版本但可以拓展的方向确实挺多。可以做公告增量触发——一家公司发完重要公告后自动启动辩论可以引入产业链数据公司和上下游互相印证也可以把同样的架构快速复制到港股和美股市场只需要换一下数据源和提示词里的市场规则描述。我自己实际用下来最舒服的一个扩展是“定期重辩”——每个月对持仓股票重新跑一次辩论对照上个月的辩论纪要看哪些分歧点被市场验证了哪些假设被证伪了。这份时间序列本身就是很好的复盘材料。最后分享一个实测中的小技巧让空方Agent负责给报告起标题多方Agent负责给报告提供关键数据这样出来的报告文本质量明显更克制、更有说服力。我也不知道是什么原理但这个组合用了很久效果一直很稳。
返回列表