3.回测验证功能与多智能体辩论功能技术深入

一、这次功能开发,我真正想解决的不是多加两个页面

如果只从产品表面看,历史回测和智能体辩论像是两个新增功能:

  • 一个负责把策略放到历史数据里验证
  • 一个负责从多空视角讨论策略优劣

但从系统设计角度看,这两个能力其实是在补足同一件事:让一个自然语言层面的投资想法,逐步变成一个可验证、可解释、可优化的策略对象。 这背后的核心问题并不是怎么把模型接上,而是:

  1. 用户说的是模糊的自然语言,系统怎么理解?
  2. 理解之后,怎么落成可执行的策略结构?
  3. 执行之后,怎么知道结果是不是可信?
  4. 就算收益不错,怎么判断它是不是只是历史碰巧有效?
  5. 如果策略有问题,系统能不能不是只报一个结果,而是进一步告诉用户“问题在哪,怎么改”?

所以,这次工作的重点不是单点功能实现,而是在做一条更完整的链路:

自然语言输入 → 策略结构化 → 历史回测验证 → 多智能体争议分析 → 裁决与优化建议 → 前端可视化呈现

我更愿意把它理解成一个小型策略研究闭环,而不是两个孤立模块。


二、为什么要同时做历史回测与智能体辩论

在传统量化系统,回测通常已经足够技术化了,但其实有两个天然缺陷。

1. 回测能回答“发生了什么”,但不擅长回答“为什么”

回测引擎很擅长输出这些结果:

  • 总收益率
  • 年化收益率
  • 最大回撤
  • 胜率
  • 夏普比率
  • 交易次数

这些指标很重要,但它们更像是结果摘要。

它们告诉我们策略在某段历史中表现如何,却不直接告诉我们:

  • 这个策略为什么在某些阶段有效
  • 它依赖的是趋势、均值回归,还是市场噪音
  • 哪些风险是参数能控制的,哪些风险是结构性不可控的
  • 它到底适合什么市场状态,不适合什么市场状态

也就是说,回测偏“验证”,但不够“解释”。

2. 单个智能体很容易给出“听起来合理”的结论,但缺乏内部对抗

如果只让一个模型直接点评策略,它往往会给出一段流畅、完整、像样的评价。但是问题是这类评价经常有一个隐患,它是单视角的。

一个模型在一次输出里,既要当研究员、又要当风控、又要当评审、还要当优化顾问,最终很容易变成什么都说了一点,但没有真正冲突起来。

而策略评估这件事,本质上就应该有冲突:

  • 看多视角会强调收益弹性、趋势延续、市场机会
  • 看空视角会强调回撤风险、尾部风险、参数脆弱性
  • 中立裁判需要在两者之间做平衡
  • 最后还需要一个优化角色,把争论转成可执行的修改建议

所以,历史回测解决的是“证据”问题,智能体辩论解决的是“解释与决策”问题。两者结合,才更接近真实的策略研究过程。


三、不是一个聊天机器人,而是一条推理流水线

在这次项目里,我越来越明确一件事,智能体系统最重要的不是“像人一样说话”,而是“像系统一样分工”。如果把所有任务都交给一个大模型统一完成,短期看实现很快,但长期会遇到三个问题:

  1. 输出不稳定
  2. 不容易调试
  3. 某个局部出错时,很难判断到底是哪一段逻辑有问题

所以这次我更倾向于把智能拆成若干职责明确的阶段。

1. 策略智能体(测试功能):负责把想法翻译成规则

用户不会直接说:

  • MA20上穿MA60买入
  • RSI超卖买入
  • 仓位30%
  • 止损8%

真实用户更可能说的是:

  • 我想买茅台、建行和五粮液
  • 跌20%就卖出
  • 涨起来的时候再加一点
  • 想做一个中等风险的策略

这类输入其实不是代码,也不是参数,而是意图。所以回测智能体最核心的职责,不是给出投资建议,而是做一层策略 DSL 转换

  • 抽取股票标的;
  • 识别交易风格;
  • 推断可执行指标;
  • 归一化仓位、止损、止盈参数;
  • 形成一份稳定的结构化 JSON。

这一步如果做不好,后面回测再强也没意义,因为输入已经偏了。

2. 回测引擎:负责把规则放进历史里跑

当策略进入回测层后,系统就要从语义世界切换到执行世界。这里的重点是两件事。第一,尽量兼容单股票和多股票场景;第二,输出不能只有最终资产,而要有完整过程信息。

因为如果没有交易日志、资金曲线、月度收益、指标明细,前端就只能展示一个好像赚了或者亏了的结果页,这种反馈对用户来说太薄了。

所以回测层实际上承担了两个任务,一是还原历史交易过程;二是生成后续分析所需的结构化证据。

3. 辩论智能体:负责“把证据组织成对抗式分析”

我在设计辩论模块时,刻意避免让它变成一个更会说话的总结器。只是总结回测结果,它的价值有限。真正有意义的是让它形成一种结构化冲突

  • Bull Agent 站在策略收益潜力一侧
  • Bear Agent 站在风险控制一侧
  • Judge Agent 不是折中,而是做裁决
  • Refiner Agent 不是复述,而是将争论转成参数优化建议

这样做的本质,不是为了模拟辩论的形式,而是为了迫使系统在内部形成多视角推理。对于策略这种天然存在收益和风险矛盾的问题,这种结构比单轮总结更接近真实研究流程。


四、让每个智能体都只承担自己该承担的那部分不确定性

做智能体系统时,一个很容易踩的坑是:希望某个 Agent 一步到位解决所有问题。但实际上复杂系统里最危险的不是能力不够强,而是边界不清。所以在这套设计里,我比较强调把不确定性拆开。

1. 策略智能体的不确定性:自然语言理解

策略智能体面对的主要不确定性,是用户输入本身不标准,因此需要:

  • 强约束输出格式
  • 尽可能把模糊表达映射为可执行字段
  • 在无法完全理解时提供降级策略

这里的重点不是回答得多聪明,而是不要破坏后续执行链路。

2. 回测引擎的不确定性:市场数据与执行细节

回测层的不确定性并不来自语言,而来自数据和交易过程:

  • AKShare 是否能拿到数据
  • 多股票数据是否完整
  • 指标是否足够形成信号
  • 交易分析器能否稳定计算出指标

所以回测层更像工程系统,需要强调:

  • 容错
  • 数据缺失处理
  • 指标回退计算
  • 结果持久化

这和智能体层完全不是一种问题。

3. 辩论智能体的不确定性:解释与裁决

辩论模块最大的不确定性,不在于能不能说出一些分析,而在于:

  • 不同角色输出是否会过于空泛
  • 多轮辩论是否只是换一种说法重复
  • 最终结论是否能落到具体策略参数
  • 优化建议是否真正可执行

所以在这部分,我更关注的不是文采,而是结构化落地:

  • 每轮讨论聚焦不同主题
  • 综合结论必须落到仓位、止损、止盈、买卖条件
  • 前端展示不能只显示宏大叙事,而是要能让用户看懂下一步怎么做

这其实体现的是一个很重要的设计观念:

好的智能体系统,不是让模型自由发挥,而是通过分工、约束和上下文控制,把模型能力收敛为稳定的系统行为。


五、技术进度上,这次做成了哪些关键闭环

从开发推进来看,这部分工作不是一次性完成的,而是在不断补“最后一公里”。

1. 第一阶段:跑通基础链路

最先完成的是功能闭环的“骨架”:

  • 自然语言输入回测想法;
  • 回测智能体解析参数;
  • 回测引擎执行;
  • 返回结果页;
  • 多空辩论可以触发并返回结构化结果。

这一阶段的目标是证明:链路可以贯通。

2. 第二阶段:从“能返回结果”升级到“结果要能被前端真正使用”

随着前后端联调推进,很快发现一个典型问题:

后端已经产出了一部分分析结构,但前端不一定真正消费到了这些字段。

这也是很多 AI 系统在集成时会出现的断层:

  • 后端有数据
  • 前端没展示
  • 用户感知上等于功能没做

所以后续工作里,我更重视这几件事:

  • 买入条件、卖出条件是否真正写到详情页
  • 多空辩论结论是否真正展示
  • 回测页标题是否显示策略名而不是股票代码串
  • 多股票标的是否以更可读的方式展示
  • 数据源失败时是否有明确的用户提示

这一步其实是在把模型输出转成用户可理解的产品行为。

3. 第三阶段:从可展示升级到可解释

这一阶段最大的体会是:

解释性不是多写几段文字,而是让分析结果和策略参数真正对应起来。

比如,之前综合结论如果只是说:

  • 该策略在收益和风险之间具备一定平衡
  • 建议结合市场环境持续优化

这类表述虽然不算错,但信息密度太低,用户看完并不知道:

  • 该不该做
  • 仓位应该调到多少
  • 止损止盈要不要改
  • 买卖条件究竟哪里有问题

所以后续调整的方向就变成:

  • 让辩论轮次围绕不同主题展开
  • 让最终裁决落到参数层
  • 让优化建议能直接和策略结构对接

换句话说,辩论模块不能只是会评价,还要能推动策略迭代。

4. 第四阶段:补足工程稳定性

真正进入使用场景后,会暴露出很多不是算法问题,而是工程问题的细节:

  • 旧数据库表结构与新模型字段不一致
  • 部分回测指标返回为空
  • 数据源失败时前端没有弹窗感知
  • 多标的展示方式不友好
  • 编译层面的小问题会阻断整条交付链路

这些问题单看都不高级,但它们决定了系统能不能真正交付。

所以这次我更深的感受是:

AI 功能的完成度,不取决于模型回答得多像人,而取决于它能不能稳定嵌进工程系统里。


六、它的价值不在于热闹,而在于给策略评估增加了“内部制衡”

很多人一听多智能体辩论,容易把它理解成一种更花哨的交互形式。但在这个项目里,我更看重的是它提供了一种内部制衡机制。策略研究天然容易有确认偏误,第一,一旦研究者相信某个策略有效,就更容易搜集支持它的证据;第二,一旦回测结果还不错,就容易忽视参数过拟合、极端行情失效、样本依赖等问题。而多角色辩论的价值就在于,系统内部会有人持续提出反面意见。

  • 看多角色负责把机会讲透
  • 看空角色负责把问题挑明
  • 裁判角色负责不被任一方绑架
  • 优化角色负责把冲突沉淀成修改方案

这种结构的意义,是把策略评估从单向判断,变成一个受约束的决策过程。这其实更接近真实投研场景里的评审会,而不是普通问答。


七、历史回测不是策略终点,而是策略讨论的证据底座

如果没有回测,辩论就容易漂浮在空中。因为所有讨论都可以很合理,但没有证据支持,就很难判断到底是逻辑有问题,还是市场阶段有问题。所以在我看来,历史回测的作用不只是输出指标,而是给整个策略讨论提供一个证据底座。有了这个底座后,系统里的很多环节才有意义:

  • 为什么要看回撤?因为它能验证风险暴露是否真实存在
  • 为什么要看交易次数?因为它关系到信号密度与策略风格
  • 为什么要看资金曲线?因为它能反映策略稳定性,而不只是最终收益
  • 为什么要看多股票结果?因为单标的表现不代表组合层面有效

所以,回测在这里不是孤立模块,而是整个智能策略研究系统的证据中台。


八、智能体系统的重点,正在从会回答转向会协作

过去做 AI 功能,很多时候关注的是:模型接没接上;回答自然不自然;能不能一问一答地完成任务。但这次做完之后,我更明显地感觉到:

真正有价值的智能体系统,重点不是单次回答质量,而是多角色、多模块之间的协作能力。

这意味着系统设计要回答这些问题:

  • 哪一层负责理解意图?
  • 哪一层负责执行验证?
  • 哪一层负责解释争议?
  • 哪一层负责做最终裁决?
  • 哪一层负责把结果变成用户能看懂的呈现?

当这些边界清楚以后,模型能力才会真正变成系统能力。否则再强的模型,也容易变为每一层都参与一点,但没有任何一层真正负责到底。


九、下一步我更想继续推进的方向

如果从当前进度继续往下走,我认为这套能力还有几个值得继续深化的方向。

1. 从固定辩论角色升级到可配置评审框架

当前辩论主要围绕多头、空头、裁判、优化专家展开,已经可以覆盖核心收益—风险矛盾。但未来还可以继续细化,例如引入

  • 执行成本视角
  • 组合配置视角
  • 宏观环境视角
  • 因子稳定性视角

这会让系统从通用辩论器进一步走向专业投研评审框架。

2. 从单次回测升级到多阶段验证

历史回测只是第一步。后续如果加入:

  • 不同市场阶段切片
  • 参数敏感性分析
  • 样本内和样本外验证
  • 多标的对照实验

那么智能体辩论会建立在更扎实的证据之上,结论也会更有说服力。

3. 从结果展示升级到策略迭代工作台

我更希望未来这个系统不是停留在给出一次结论,而是能支持:

  • 用户查看问题
  • 一键接受优化参数
  • 再次发起回测
  • 对比优化前后表现
  • 保存策略演化历史

如果做到这一步,这套系统就不只是一个展示AI能力的应用,而会更像一个面向个人投资者的轻量化策略研究环境。


十、结语

回头看这次功能开发,我觉得最有价值的地方,并不是把大模型接进了系统,也不是做出了一个会说话的辩论页面。真正有意义的是,我开始把原本分散在研究、验证、评审、优化里的几个动作,逐步组织成了一套可以协同工作的流程。这套流程不一定已经非常成熟,但它已经体现出一个比较明确的方向:

  • 不让用户停留在有个想法但不会验证
  • 不让系统停留在回测了一下但没有解释
  • 不让智能体停留在说得很好听但不落地

而是让策略从想法开始,经过验证、讨论、裁决和优化,形成一个可追踪、可展示、可迭代的对象。从这个意义上说历史回测和智能体辩论并不是两个并列功能。它们共同组成的其实是一个更接近真实投研流程的智能系统雏形。而这也正是我这阶段最想继续打磨的方向。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐