技术文章

交付一个 AI 创作平台,客户把它做成了对外业务

两个月交付、上线后由客户对外开放运营。这篇记录我们做对了什么,以及架构上唯一那个关键决定。

2026-10-03 交付案例 · 架构设计

这是我们交付的第一个完整平台。它的结果比预期好——客户没有把它当内部工具,而是直接拿去做成了对外业务。

下面把过程记下来,重点是那个架构决定,以及它带来的差别。

客户要的不是「生成」,是「项目」

最初的沟通里,客户说的是「想要一个能出图的 AI 工具」。

但聊下去会发现,真实需求不在生成那一步。他们做的是视觉内容项目,一条内容从开始到交付,要经过很多次生成、比较、返工和确认。工具解决的是「一次生成」,而项目需要解决的是另外几件事:

  • 素材要能存住、能被找到,而不是生成完就散在一堆对话框里
  • 同一个创意要能出多个版本,并且能来回比较
  • 上下文要能保留——为什么要这么改、参考的是哪张图
  • 图像和视频要能接上,而不是各做各的
  • 每一笔资源消耗花在哪,要说得清

把这几件事收进同一个空间,才叫生产线。这是整个项目真正的需求。

唯一关键的架构决定

技术上最重要的一个决定,是把「核心」和「发行版」分开。

具体做法是:同一套核心代码,通过编译期发行版机制支持多个品牌独立发布。每个发行版有自己的品牌、数据、对象存储和部署实例,彼此完全隔离。这个边界是在构建阶段确定的,不是靠运行时开关去隐藏。

为什么不用运行时开关?因为开关本质上是一份代码里塞了很多条件分支——它会把「客户版」和「自营版」的能力差异变成运行期的 if-else,时间一长,两边互相污染,谁也说不清某个功能到底属于谁。

编译期隔离带来的直接好处是:

  • 能力边界在构建产物里就固定了,不会被误开
  • 差异化功能不会泄漏到不该有的版本里
  • 第二套发行版的交付成本大幅下降——核心是现成的,只需要做适配和品牌替换

这个决定在交付阶段没有体现出多少价值,但在第二个发行版上线的时候,差别就明显了:它让「第一个客户花两个月」和「第二个客户要多久」不再是同一个数量级的问题。

交付了什么

两个月完成,范围覆盖整个系统的运行:

创作端

  • 无限画布:节点编排、语义连线、分组、版本快照与恢复
  • 九种语义参考角色:创作指令、普通参考、首帧、尾帧、蒙版、主体、背景、深度、序列
  • 图像与视频生成:多模型接入、画幅与分辨率配置、批量生成、任务队列

平台端

  • 素材中心:上传与生成结果统一入库、检索、标签、回收站
  • 团队协作:成员角色、容量与积分预算
  • 积分与计费:预占、结算、退款、双边账本
  • 后台治理:用户、空间、模型线路、审计、运营

上线之后

系统交付后由客户自主运营,他们已经把它开放给外部用户使用。

截至 2026 年 10 月初,服务器访问日志的实测数据是:

指标数值
统计区间2026-09-19 至 2026-10-02(13.5 天)
累计请求132 万次
活跃工作空间163 个
独立访问来源472 个
日均独立访问80–120 个

(独立 IP 不等于独立用户——存在多人共用出口 IP、以及单人使用多设备的情况,所以这里说「访问来源」。)

这个体量不算大,但它的意义在于:有人在上面真的干活,不是点进来看一眼就走。 请求量超过 5000 次的那批来源,是长时间在线做实际生产的用户。

复盘

回头看,做对的主要是三件事。

一、先定义问题,再定义功能。

如果一开始就按「做个出图工具」去理解需求,交付物会是一个生成器。真正的判断是:客户缺的不是生成能力,是把生成能力组织成生产流程的那一层。功能清单是后面推导出来的结果,不是起点。

二、把架构边界放在构建期,而不是运行期。

运行时开关写起来快,但它把复杂度推到了未来。编译期隔离下手更重,换来的是一条不会随时间腐烂的边界。

三、交付之后还看得见。

系统上线不是终点。日志、健康检查、备份与回滚这些「不显眼」的部分,决定了交付物能不能真的被客户拿去做生意。这次能拿到实测数据,也是因为这些东西从一开始就在。


如果你也在做类似的事——不管是想找人交付,还是想评估一个方案的可行性——可以直接联系我们聊聊。