用 AI 从零搭交易所后,我更确定一件事:架构判断比写代码更重要

17 阅读13分钟

最近我在做一件很有意思的事:我正在尝试用 AI 从零搭一套白标 Perp DEX

前天才刚发布过一篇文章,介绍了当前的进展:《我的白标Perp DEX完成了Portfolio Service》

目前已经完成的几个功能模块,代码 100% 都是 AI 写的,系统设计文档也是 AI 帮我生成的。

那我在做什么呢?我每天主要做的事情其实是:

  • review AI 给出的系统设计
  • 找出它判断错的地方
  • 修正业务逻辑和规则设计
  • 调整关键模块的架构

在这个过程中,我越来越确定一件事:AI 最大的问题不是写错代码,而是做错判断。

它会做错业务逻辑判断,也会做错系统架构判断。

而在交易系统里,最危险的往往不是代码报错,而是:判断错了,但系统仍然能跑。

这种问题在测试阶段可能完全看不出来,但一旦遇到极端行情、资金对账或者强平场景,就可能直接变成系统事故。

下面分享几个我最近实现这款 Perp DEX 时遇到的真实例子。

AI 到底会犯什么错?

案例一:账本用了单式记账

第一个例子是关于账本记账的。

AI 最初实现的方案,有余额变更记录,有 ledger_entries 表,对账逻辑也有,正常业务功能是没问题的。

但是,之后我想到了一个场景:我要怎么查看手续费收入多少呢?

发现系统里缺失了手续费收入账户,才发现 AI 的实现是用单式记账的。

即是说,AI 给我的记账方案里,每一笔交易只记录了 用户侧的余额变化。例如用户 A 成交后扣了 USDT、扣了手续费,这些记录都有。

但系统侧呢?没有。

用户被扣了 5 USDT 手续费,但系统里根本没有手续费收入账户。不是“有账户没记”,而是这个账户在设计里压根不存在

这就是典型的 单式记账:只记录钱从哪里扣掉,却没有记录钱到哪里去。

在功能测试阶段完全看不出问题。用户下单、成交、扣款,一切正常。

但一旦上线,很快就会出现问题:

  • 用户扣掉的手续费,在系统里找不到对应收入
  • 手续费算错时,没有对手方记录可以交叉验证
  • 系统也无法做 借贷平衡校验

正确的做法是 复式记账

用户账户      -5 USDC
手续费账户    +5 USDC

每一笔资金变动,都必须同时存在借方和贷方,金额必须相等。

交易系统最重要的不是余额,而是资金流。

AI 会犯这个错误,是因为从“功能能跑”的角度,单式记账已经够用。但交易所的账本最终要解决的,是 对账、审计和资金安全

而这个设计错误,如果不是我想到查手续费收入这个场景,也很难发现。

案例二:订单信息通过撮合引擎透传

第二个例子是 模块边界问题

清算服务监听到撮合引擎的成交事件后,就要开始执行清算流程,但是,撮合引擎输出的成交事件里只有两个订单 ID,而清算时需要获取详细的订单信息,怎么获取呢?

最直观的方案就是清算服务通过 gRPC 方式同步调用订单服务获取需要的订单信息。但同步调用引入延迟,且高并发下订单服务会成瓶颈,以及服务耦合高。所以该方案其实并不太可行,关于这一点,AI 也能认识到,所以 AI 也不推荐这个方案。

AI 提供了另外一种方案,将订单信息完整传给撮合引擎,撮合引擎再将数据输出到成交事件中,透传给到清算服务。

这个方案在功能上完全跑得通。但这个设计有一个根本性的问题:撮合引擎被迫携带了一堆它不需要、也不应该知道的业务属性。

为什么这是个问题?

  • 撮合引擎的核心原则是纯粹:它只做一件事:格优先、时间优先的规则匹配买卖双方。它不需要知道手续费率,不需要知道 reduce_only,不需要知道用户 ID。这些字段的存在不会影响撮合结果,但会让撮合引擎的数据结构变得臃肿、耦合。
  • 上游业务变更会波及撮合引擎:今天透传手续费率,明天产品要加一个 VIP 等级字段,后天要加一个跟单标记。每加一个字段,撮合引擎的数据结构都要跟着改。一个本该最稳定的核心组件,被迫随着业务需求不断变动。
  • 撮合引擎是全系统吞吐量的天花板:每一个多余的字段都在增加它处理每笔订单的数据量。在高频场景下,这些"无害"的字段会累积成实实在在的性能负担。

正确的做法是什么?订单服务在提交订单给撮合引擎之前,先把完整的订单信息写入一份快照(比如 Redis)。撮合引擎只收到它需要的东西:价格、数量、方向。成交之后,清算服务拿着成交记录中的订单 ID,自己去读快照,补全它需要的业务字段。

这样一来,撮合引擎完全不碰业务属性,清算服务也能拿到完整信息,两边互不干扰。

AI 为什么会这样设计?因为"透传"是最直觉的数据传递方式。A 有数据,B 需要数据,那就让 A 把数据传给 B。AI 思考的是数据怎么流通最短路径,而不是模块之间的职责边界应该怎么划。它不理解"撮合引擎不该碰业务属性"这条约束,因为这条约束不是功能性的。违反它系统照样能跑,只是架构在慢慢腐化。

案例三:AI 只知道 Mark Price,漏掉了 Last Price 触发

交易系统里,Trigger Engine 负责监控价格,在满足条件时触发条件单,比如止损、止盈。

问题在于,条件单的触发价格并不只有一种。用户可以选择用 Mark Price 触发,也可以选择用 Last Price 触发。前者是公允价格,后者是最新成交价。大多数时候两者接近,但在极端行情或流动性不足时,可能出现明显偏差。

AI 给出的触发引擎设计里,只监听了 Mark PriceLast Price 触发类型完全不存在

这意味着什么?

如果用户设置的是一个 Last Price 触发的止损单,那么这个单永远不会被触发。价格已经暴跌,用户的止损却毫无反应,因为系统根本没有监听这个价格源。一个本应用来保护用户的止损单,就这样变成了废纸。

AI 为什么会漏掉这个设计?

因为在它的知识里,“条件单触发”最常见的默认答案就是 Mark Price。而 Last Price 触发不是一个显眼的架构模块,而是藏在产品规则和交互细节里的需求。你不主动指出,AI 根本不会意识到这里还需要另一条监听链路。

这也是它和前两个案例的区别:前两个案例,是 AI 给了方案,但方案错了;这个案例,是 AI 根本不知道这里还有东西需要设计。

为什么 AI 会在这些地方犯错?

这三个案例看起来完全不同:

  • 一个是账本设计
  • 一个是模块边界
  • 一个是触发链路

但背后的原因其实是同一种问题:AI 在系统设计上,最容易出错的是“判断”。

这些判断大致可以分为三个层次。

第一层:单模块判断

在单个模块内部,AI 很擅长给出一个“能跑”的方案。但很多系统设计的要求,并不是为了让功能跑起来,而是为了保证系统在 对账、审计和异常排查 时仍然成立。这些约束,如果没有经历过真实系统运行,很难意识到它的重要性。

第二层:跨模块判断

当系统涉及多个模块时,问题就不再只是“功能是否正确”,而是 模块之间的职责应该如何划分。很多设计从功能角度看完全合理,但从架构角度看却会破坏系统的边界,使模块之间逐渐产生不必要的耦合。

第三层:系统级判断

在更高层次上,AI 还很难意识到那些 不在主链路上的系统依赖。这些依赖往往不属于任何单一模块,而是分散在产品规则、系统行为和极端场景里。如果没有整体视角,很容易在设计时被忽略。

这三类问题有一个共同点:它们都不是代码问题,而是系统判断问题。

而这种判断,往往只有做过完整系统的人才会特别敏感。很多时候,如果没有相关经验,甚至很难意识到 AI 的设计哪里出了问题

AI 时代下,什么能力在升值?

AI 的出现,其实正在改变软件工程的能力结构。

过去很多人认为,工程师最核心的能力是 写代码。但当 AI 可以快速生成代码之后,实现层面的门槛正在迅速降低。

比如我在 2019 年写过一套撮合引擎,当时从详细设计到开发完成,大概花了一个月时间。

而这一次用 AI 重做,从完成设计到代码实现,不到两天时间,而且性能还比我当年的版本更高。

实现一个复杂系统的成本,确实被 AI 大幅降低了。

但与此同时,我花时间最多的地方反而不是写代码,而是反复检查一件事:这个系统的设计到底对不对。

AI 可以帮你写一个撮合引擎,但它不会告诉你:

  • 账本设计能不能通过审计
  • 模块边界是否被污染
  • 在极端行情下系统是否还能稳定运行

换句话说:AI 可以帮你实现系统,但很难帮你验证系统。

所以在 AI 时代,一个很有意思的变化正在发生:实现能力的门槛在降低,而 系统级判断能力反而变得更稀缺

当 AI 可以生成越来越多代码时,真正有价值的能力不再只是“写什么代码”,而是:判断这个系统应该怎么设计。

这也是我做「CEX&DEX 课程」的原因。

CEX&DEX课程到底教什么?

这门课完整的名称应该叫 「CEX & DEX 交易系统架构课」,一共 10 节,从 CEX 讲到 DEX。

但它不教你怎么写代码。因为在 AI 时代,代码实现本身正在越来越快地被抹平。

它真正要讲的是:交易系统每一层的核心判断点是什么。

比如:

  • 撮合引擎为什么必须是系统的裁决中心,不能被绕过也不能被分裂?
  • 账本为什么必须用复式记账?"余额对了"为什么不等于"账对了"?
  • 风控为什么必须同步嵌在交易流程中,而不能做成异步旁路?
  • 主链路之外的反向流、旁路链路和共享状态——这些暗线在哪,为什么它们才是系统复杂度的主要来源?
  • 从 CEX 到 DEX,信任模型怎么变化?哪些模块的逻辑完全不变,哪些必须重新设计?

这些问题的答案,不在任何一个模块的代码里,也不在任何一篇技术文档里。它们散落在系统设计的决策过程中,只有做过完整系统的人才能告诉你。

这门课做的,就是把这些关键判断点系统地拆开、讲清楚。

课程结构我拆成了 10 节:前 6 节讲 CEX 的核心架构,后 4 节讲 DEX 的模式差异和扩展路径。

节次主题
第 1 节交易所首先是一个资金系统
第 2 节撮合引擎为什么必须是系统中心
第 3 节账本(Ledger)为什么一定是系统兜底
第 4 节风控为什么必须嵌在交易流程中
第 5 节钱包与链上资产管理
第 6 节全链路串联:交易系统的暗线与闭环
第 7 节从 CEX 到 DEX:信任模型与架构重构
第 8 节从单链到多链:Perp DEX 的充提扩展与信任代价
第 9 节共识撮合:当撮合引擎嵌入区块链
第 10 节实战推演:从零设计一个 Perp DEX

最后一节不是概念总结,而是一个完整的实战推演。

我会给你一个真实约束场景:15 人团队、6 个月、USDC 保证金永续合约。然后带你亲手走一遍,从模式选择到服务依赖图,完成 7 个关键架构决策。

前面提到的那三个 AI 犯错案例,其实分别对应的就是这门课里的核心内容:

  • 账本单式记账 → 第 3 节
  • 撮合引擎职责污染 / 全链路依赖缺失 → 第 2 节 + 第 6 节
  • Last Price 触发链路漏设计 → 第 4 节

课程里不只是告诉你“正确答案是什么”,更重要的是讲清楚:为什么这个答案成立,违反它的代价是什么。

为什么是我来讲?

因为我有过多次从 0 到 1 搭建 CEX 和 DEX 的完整经验。

不是只做某一层,而是从账户模型、撮合引擎、风控清算、钱包充提到链上合约,每一层的架构决策我都亲自做过。

正因为做过,我知道一个正确的系统设计长什么样。所以当 AI 给出一个“能跑但不对”的方案时,我能很快看出问题在哪。

这篇文章里的三个案例就是最好的证明:没做过完整系统的人,很多时候连 AI 的错都看不出来。

而这门课想传递的,就是这种判断力。

课程进展

目前,课程已经讲完了前面 6 节,即已经讲完了 CEX 部分,接下来就要开始讲 DEX 部分的内容了。

另外,关于第 10 节的内容,我又做了一个挑战,加入了一个实战推演,将前面的内容全部串联起来。

课程价格,目前为 2399 元

等 10 节课全部讲完之后还会再涨一次价。

还是和之前一样,要报名的朋友加我微信(keegan704)直接转账即可,报名后我将邀请加入学员群。


扩展阅读: