多个智能体一起干活,怎么不打架
- 看懂一个多智能体投研系统内部是怎么组织的:谁等谁、消息传的是全文还是摘要、共享状态落在哪
- 用三个可操作的判据,分辨一份多角色报告里的「一致」是真独立还是伪共识
- 说清结论冲突时的三种裁决机制,以及为什么在这里投票是最不可靠的一种
你配了一个「AI 投研团队」,五个角色:多头、空头、风控、汇总、拍板。跑完一家公司,报告出来了,结构漂亮,五个角色都签了名。
然后你会撞上两种结局中的一种。
一种是五份意见惊人地一致——多头说好,空头也说「风险总体可控」,风控写「建议正常配置」。你本来指望看到一场辩论,结果看到一份合唱。
另一种更麻烦:最后拍板那段里出现了一个很具体的数字,你想回头核一下它从哪来的,翻遍前面四份材料,没有。它不在任何一份上游产物里,是拍板的那一步自己长出来的。
这两种结局看着不一样,其实是同一个毛病:这几个角色之间的连接方式出了问题。不是它们各自不够聪明,是消息怎么传、谁能看见谁、谁的话算数,这几件事没定清楚。
本篇讲的就是这一层。做投研,别让 AI 一个提示词问到底 那篇讲的是角色该怎么设、成功标准该怎么写、提示词怎么落笔——那是方法论。这篇讲当这些角色被组装成一个会自己跑的系统之后,中间那些管道长什么样,以及每根管道会怎么漏。你不必自己去搭这套东西,但你必须知道你手上那份报告是从什么样的管道里流出来的。
先说人话:一场办公室里的传话游戏
想象一家公司要决定一件事。
老板让四个下属各写一份材料,写完交给部门主管;主管读完四份,写一页纸的摘要;老板只看那一页纸。
第一个问题在最后一环。老板看到那一页纸上写着「产能利用率偏低」,他问主管:这个数具体是多少?主管说材料里写了。回去一翻,材料里写的是一个范围,还附了「口径不确定」四个字。到了摘要里,范围和不确定都没了,只剩一句干脆的结论。
没人撒谎,每一步都只是「概括了一下」。但走完三步,一句带条件的话变成了一句不带条件的话。
第二个问题在最前面。如果这四个下属是在同一个会议室里、一个接一个发言写的材料,那么第一个人定了调,后面三个大概率都会顺着说。你以为你收到四份独立意见,其实你收到的是一份意见加三份附议。
第三个问题最阴。假设写风险那份材料的人临时请假,没交。主管的摘要照样能写出来——他手上还有三份呢,拼一拼一页纸满满当当。老板拿到的这页纸,和四份材料齐全时写出来的那页纸,长得一模一样。他看不出少了什么。
把「下属」换成 AI 智能体,这三件事一件不少,而且更严重——因为它们发生得更快,也更没有痕迹。
智能体这个词听着玄,说白了就是:一个被设定了身份和职责的模型实例,它能自己决定去调用哪个外部功能、看到结果再决定下一步。它跟你在对话框里问一句答一句的区别,就是它会自己动手取数据。多智能体,就是把好几个这样的东西编成一队。
对你的研究意味着什么
上面三个问题,落到投资上分别对应三种具体的坏事。
第一种:你以为的交叉验证,其实是复读。 你搞多角色,图的是不同视角互相挑错。但如果这几个角色共用同一个底座模型、看得见彼此的输出,那它们的错误是高度相关的——同一个盲点,五个人一起看不见。这时候「一致」不是证据,是噪声。这跟你组合里那些看着分散、实际一起跌的持仓是同一个数学结构,让大模型直接做交易决策,这条路现在走到哪了 里对这一点有更完整的展开。
第二种:结论和证据脱钩,你没法回查。 一份研究材料的可用性,取决于你能不能顺着任何一句话往回摸到一手来源。链条越长、中间的概括次数越多,能摸回去的比例越低。摸不回去的那些数字,价值是零,风险不是零——因为它们读起来和能摸回去的那些一模一样。
第三种,也是最该警惕的:沉默的缺失。 一份少了风控意见的报告,和一份完整的报告,在你眼里长得没有区别。错误至少还会自相矛盾,缺失什么都不会。
这三条决定的不是「这玩意好不好用」,而是你敢不敢把它的输出拿去改变自己的仓位。答案在本篇末尾会说得很清楚:不管管道搭得多干净,它交给你的都是待验证的研究材料,不是决策。
机制层:把一个团队画成一张只许往前走的图
拿一个能读到源码的开源项目当标本会具体得多。Vibe-Trading 里有一块叫 swarm 的多智能体模块,下面讲的都基于它的源码快照,是读代码得出的机制说明,不是运行结果。
它把一个团队拆成两样东西。
一样是角色定义:一个唯一编号、一段岗位说明、一份工具白名单(这个角色被允许调用哪些外部功能,白名单之外的它够不着)、循环轮数上限、超时时间、重试次数。这些上限都有默认值且可以按角色单独配置,具体数字属于会变的实现细节,不必记。要记的是这件事本身——每个角色的活动范围是被事先框死的,不是它想干嘛就干嘛。
另一样是任务:谁来干、给它一句什么样的指令、以及最关键的一项——它要等哪几个任务先跑完。
这些「等谁」的声明连起来,就是一张有向图。系统跑之前会先把这张图分层:没有前置依赖的排第一层,只依赖第一层的排第二层,依此类推。同一层里的任务并行跑。
分层这件事有个副产品,值得单独说:如果图里有环,跑之前就会被拒绝。 分层算法处理不完全部任务时,直接报错说图里存在环。
为什么这一条对投研特别重要?把环翻译成人话就是:A 的结论要引用 B,B 的结论又要引用 A。这在研究里叫循环论证,是最难自己发现的一类逻辑错误——你读一份材料读得头头是道,浑然不觉两个论点在互相扶着对方站着。而在这里,它是一个能被算法当场查出来的结构错误。
同一层并行,这四个字就是「独立」的技术含义。 同层的角色互相看不见对方的产出,因为它们同时在跑,谁也没有谁的结果。上一节讲的「会议室里第一个人定调」,在结构上被排除了——不是靠嘱咐它们「请独立思考」,是靠它们物理上拿不到别人的东西。
消息怎么传:不是一块黑板,是定向投递
同层并行解决了独立性,但下游总得拿到上游的东西,这就回到传话游戏。
这里的做法不是搞一块所有人都能写的公共黑板。是一张明确的映射表:下游任务显式声明「我要拿哪个上游的产物,在我这儿叫什么名字」。系统按这张表把对应的上游摘要取出来,拼成一段「上游上下文」,塞进下游角色的提示词里。没在表上的,下游一个字也看不到。
这个设计的好处是信息流向可查——任何一条信息出现在下游,一定能指出它是从哪条声明过的边上流过来的。坏处是它传的是摘要,不是全过程。
标本里那个「投资委员会」预设把这个取舍暴露得非常清楚。它的图是这样的:多头和空头两个角色在第一层并行;风控在第二层,同时拿到多头报告和空头报告;拍板的组合经理在第三层——它只依赖风控这一环,映射表里也只有一项,取的是风控那份产物。
也就是说,最终拍板的那个角色,读到的是风控对多空辩论的转述,不是多空原文。
这是一个刻意的设计选择,理由也很实在:模型一次能读的内容是有上限的,把上游全文一路往下堆,走不了几层就爆了,而且成本按读进去的量算。但代价就是本篇开头那场传话游戏——拍板者手上是第二手材料。原文里那句「口径不确定」还在不在,取决于风控那一步概括时有没有把它带上。
对你的意义很直接:拿到一份多角色报告,先问一句「最后这段是根据第几手材料写的」。 这个问题不涉及任何技术,但它能筛掉一大半看着很唬人的输出。
至于共享状态放在哪——整个运行过程会落成两份东西:一份是运行档案,记着这次跑的是哪个预设、每个任务什么状态、产出了哪些文件;另一份是只追加的事件日志,任务开始、完成、失败、被阻塞,逐条按时间写下去。
这两份东西加起来,就是「可审计」的全部含义。 事后你能回答「这个结论当时的输入是什么、哪一步花了多久、哪一步没跑成」,而不是只能看着一段漂亮文字干瞪眼。一个不落盘事件日志的多智能体系统,跑完就没了,你连它有没有真的跑过五个角色都验不了。
上游断了,下游该不该照跑
这是我在这份源码里看到的最值得说的一处。
任务的状态不止「成功/失败」两种,中间有一个独立状态叫被阻塞。派发任何一个任务之前,系统会逐个检查它声明的上游是不是真的都完成了。只要有一个没完成——失败了、超时了、甚至任务记录压根不存在——这个任务就不派发,直接标成被阻塞,把「被谁挡住了、对方当时是什么状态」写进事件日志。同一层里跟它没有共同上游的同伴不受影响,照跑。
源码里在这段检查前面留了一段注释,说明为什么必须有它。大意是:不做这个检查的话,失败的上游会静默地产生一个空的上下文条目——因为下游取上游摘要的那段循环,只会复制「存在的」摘要——于是下游就在完全没有上游输入的情况下跑起来了。注释里举的例子正是投资委员会:组合经理依赖风控,风控挂掉之后,组合经理照样会产出一个「决策」,而这个决策没有任何风险输入。注释给这种情况的定性是安全攸关。
停下来体会一下这里发生了什么。
没有这段检查,你会拿到一份完整的、格式正确的、包含最终结论的报告。它唯一的问题是:风控那一环从来没跑过。而这件事在报告的任何一处都看不出来。
沉默的缺失比明显的错误危险得多。 错误会自相矛盾,会数字对不上,会让你觉得别扭;缺失什么都不会,它只是让报告少了一块,而报告的形状不会因此改变。这就是为什么「被阻塞」值得做成一个独立状态、值得单独写进日志——它把一件本来无痕的事,变成了一条你事后查得到的记录。
你不用去改代码。你要做的是把这句话变成一个习惯:看多角色报告,先数人头。约定有五个角色,就去确认这五个角色是不是都真的产出了东西。少一个,整份报告的结论都要降级。
怎么防止「干了活的样子」
还有一种更细的失败:角色跑完了,没报错,但什么也没干成。
标本里把这种情况和「失败」分开了,单立一个终态,含义是「运行过程没出异常,但没有产出实质交付物」。判据是一组结构和内容上的启发式检查,包括:产出是空的;产出只是一份计划,写到「接下来我将执行」就结束了;产出是原始工具返回的那坨结构化数据,没有经过任何分析;产出里明说自己用的是模拟数据、占位数据;以及——一个手里握着数据工具的角色,一次数据工具都没调,也没写出报告文件。
最后这条是关键。它检查的不是「说得对不对」,是**「有没有去取数」**。这是一个可以机械核验的事实。
这类检查能挡住什么、挡不住什么,得说清楚。它挡得住「明说自己在编」的——产出里出现「以下为示例数据」这种字样,直接判定为没干成。它挡不住「不吭声地编」——一个数字凭空出现,语气笃定,格式正确,没有任何字面标记,这套检查是看不出来的。要对付后者得靠另一条线:要求每个具体数字都必须能追溯到本次运行内的某次工具返回或上游产物,凑不出来源就删掉并注明未经核验。这条线以及它挡不住的那些情况,幻觉与事实核验 那篇讲得更细。
多智能体最诱人的失败模式就藏在这里:看上去每个岗位都有人。 岗位有人不等于岗位干活了。
冲突了,谁说了算
现在说裁决。几个角色给出互相矛盾的结论,系统怎么定?大体有三条路,各有各的适用范围。
第一条:结构裁决。 在图上专门指定一个下游角色做汇总,并且把它的职责写死为「解释矛盾,不许抹平矛盾」。这条路的作用是保证矛盾不会被悄悄消音,但它不产生新证据——汇总者手里的信息不比上游多,它能做的是把分歧写清楚、指出要裁决这个分歧该去查哪份原始资料,而不是自己拍一个答案。这也正是它该做的。
第二条:否决位。 把某个角色放在拍板者的必经上游。上游没完成,下游直接被阻塞,出不来结论。这在结构上等价于一票否决——但注意,它否决的是流程的完整性,不是观点。风控说「我反对」,图不会因此停;风控没跑出来,图才会停。这两件事经常被混为一谈。真要让「反对」有效力,得把反对写成拍板角色必须逐条回应的输入,而不是指望系统替你执行。
第三条:证据裁决。谁的数字有来源,谁赢。 这是三条里唯一真正解决问题的。前两条管的是程序,这条管的是实质。判据不看谁的措辞更笃定、不看谁的分析更长,只看一件事:这个数能不能追回到本次运行内的一手来源。
然后说那个最容易被想当然采用、实际上最不该用的办法:投票。
五个角色三比二,听着挺民主。问题在于这五张票不是五份独立证据。它们共用同一个底座模型、同一批训练语料、同一套语言习惯。票数在这里衡量的不是「有多少证据支持」,而是「同一个盲点被复读了几遍」。 人凑委员会,成员至少成长经历不一样、屁股坐的位置不一样;共用底座的五个角色,更接近同一个人换了五件衣服。
把投票当裁决,是多智能体投研里最容易犯、后果又最隐蔽的一个错。它给你的不是共识,是一个被放大了五倍的确信度,而底下的证据一份没多。
三个判据,分辨真独立和伪共识
不看源码也能用的三条,拿到任何一份多角色报告都能过一遍。
一、看有没有人在同一层。 如果五个角色是串成一条链跑的,第二个读了第一个的、第三个读了第二个的,那这不是团队,是一个人写了五段。链式结构天然产生一致,因为每一环都在迁就上一环。至少要有两个角色是并行的、互相看不见的,「独立」这两个字才有着落。
二、看下游拿到的是什么。 三种情况,代价各不同:拿到上游全文,下游会顺着上游的框架说话,独立性最差;拿到上游摘要,省预算但会传话失真;各自拿原始数据自己算,独立性最好,但成本最高、也最容易出现两个角色算出两个数还都对不上口径的局面。没有免费选项,你只需要知道自己拿的是哪一种。
三、看有没有一个角色的成功标准是「找错」。 如果所有角色的岗位说明都是「分析某某方面」,那一致就是默认结局——没人以推翻别人为职责,自然没人去推翻。必须有至少一个角色,它交不出反面证据就算失职。标本里那个多空对立的预设就是这个思路:空头研究员的岗位说明里明确要求它挑战共识、不要随大流。
这三条和 做投研,别让 AI 一个提示词问到底 里那三个条件是一回事的两面——那篇告诉你角色该怎么写,这篇告诉你写好的角色被接成系统之后,哪些条件会在管道里悄悄丢失。
多智能体不是免费的
每加一个角色,你要多付三样东西:一份计算开销、一段等待时间、一个新的失败点。
前两样是线性增长的,第三样不是。五个角色串成链,任何一环出问题,下游全废;即便每一环单独看都很可靠,链条整体的可靠性也是逐环打折的。这就是为什么真跑起来之后,「阻塞」和「没干成实质活」这两种状态会比你想象的更常见。
还有一层是预算。模型一次能读多少内容是有上限的,上游全文往下堆几层就顶到天花板;用摘要压缩就必然失真。这个取舍没有正解,只有你自己清楚代价的选择。什么活值得这么大动干戈、什么活一个角色跑一遍就够,可以顺着 什么活值得用最贵的模型 往下想。单个角色内部那圈「感知—决策—执行」的循环各步会怎么错,在 Agent 循环 里单讲。
一句话:能用一个角色说清楚的事,不要编五个角色。 多智能体解决的是「视角单一」这一个问题,它不解决任何别的问题,还会带来一堆新的。
涉及真钱的那条线
上面所有内容讲的都是产出研究材料。一旦这条链的末端接上真实下单,性质完全变了,本节的每一句都请当成硬约束读。
链条越长,越不该自动执行。 单个模型出错,你至少还能看到它的完整推理;五个角色串起来,错误可以在任何一环产生,在下一环被概括掉,在再下一环被当成既定事实引用。等它变成一张委托单,中间已经隔了好几次转述,没有任何人在任何一步真正确认过。多智能体让报告更好看,同时让责任更难定位——这两件事是同一个机制的两面。
如果你在任何地方看到「多智能体自动交易系统」的说法,下面几件事是判断它是否认真的最低门槛,一条都不能少:
授权边界必须在代码结构上成立,不能写在提示词里。 提示词是可以被后续文本影响、被绕开、在模型状态混乱时失效的。真正的边界长这样:写入授权的那个动作被做成模型根本发现不了的东西——不注册进工具表,执行循环里没有任何地方引用它,唯一的写入路径要求一个由人在界面上点出来的确认凭证,而这个凭证模型造不出来。想犯错都找不到入口,这才叫边界。 具体实现在 让大模型直接做交易决策,这条路现在走到哪了 里有展开,这里不重复。
额度必须有上限,且上限不由模型决定。 单笔、单日、单标的三层,写在模型够不着的地方。
必须能中断,而且中断要能立刻生效。 层级超时、任务超时、全局停止开关,缺一个都不算。一个跑起来就停不下来的东西,无论它平时表现多好,都不该碰真钱。
必须能审计。 事件日志、每一步的输入输出、每个数字的来源。事后复不出盘的系统,等于没有系统——你连它为什么错都说不出来,谈何改进。
这四条都满足,也只说明它的工程边界是认真的,跟它能不能赚钱毫无关系,这是两个不相干的维度。本篇不教怎么搭一套能下单的东西,也不认为这条路上存在稳定的收益。把下单权交出去之前该问自己哪些问题,把下单权交给 AI 之前 单独讲。
小结
- 多角色 AI 报告里的「一致」,先当噪声看,别当证据看。共用同一个底座模型的角色,错误是高度相关的——一致可能只是同一个盲点被复读了几遍。
- 「独立」在技术上的含义是同层并行、互相看不见。串成一条链的五个角色不是团队,是一个人写了五段。
- 消息传的通常是摘要而不是全文,这是为了省预算,代价是传话失真。拿到报告先问:最后这段是根据第几手材料写的。
- 上游没跑成,下游必须被阻塞并留下记录。沉默的缺失比明显的错误危险得多——一份少了风控的报告,和完整的报告长得一模一样。
- 「角色跑完了」不等于「角色干活了」。可机械核验的判据是:它到底调没调数据工具、写没写出东西。
- 冲突裁决只有一条路真正管用:谁的数字有来源谁赢。投票是最差的一种,因为票数衡量的不是证据数量。
- 多智能体只解决「视角单一」一个问题,成本、延迟、失败点全都上升。能用一个角色说清的,别编五个。
- 末端接真实下单时,授权边界、额度上限、可中断、可审计四条一条都不能少;而这四条只说明工程边界认真,与盈利能力无关。
一句不带术语的话说完这篇:几个人一起干活,最值钱的不是他们最后说法一致,是你能查清楚每句话是谁说的、根据什么说的、以及有没有人根本没来上班。
本文所引源码机制均来自上述快照版本,是阅读代码与配置文件得出的说明,不是运行结果;实现细节会随版本变化。本文不评价任何工具或方法的盈利能力。回 量化与 AI 投研概念库 看其它概念各自在说什么;本站内容为投资教育,不构成任何投资建议,边界见 免责声明。
本文为投资教育整理,关键数据与结论请结合下列权威来源验证。