ArtCraft 多供应商集成架构:同时调用 Midjourney、Sora、Grok 与 World Labs 的完整拆解
【免费下载链接】artcraftArtCraft is an intentional crafting engine for artists, designers, and filmmakers项目地址: https://gitcode.com/gh_mirrors/ar/artcraft
ArtCraft 是一款面向艺术家、设计师和电影人的「创作引擎」,其核心卖点之一是多供应商 AI 集成——你可以在同一个桌面应用里,用 Midjourney 画图、用 Sora 2 生成视频、用 Grok Imagine 出图、用 World Labs 构建 3D 世界,甚至还能生成音乐和 3D 网格。它是怎么做到的?本文带你完整拆解 ArtCraft 的多供应商集成架构。
一张表看懂:ArtCraft 接了哪些 AI 供应商
ArtCraft 把不同厂商的能力统一纳管,官方支持的供应商一览(见 README.md):
| 供应商 | 能做什么 | 底层能力 |
|---|---|---|
| ArtCraft(自家云) | 图片、视频、音乐、3D 网格、3D 世界 | 62 个模型目录,含 Seedance、Veo、Kling、FLUX、GPT Image 等 |
| Midjourney | 图片生成 | MJ 7 / Niji / 8 系列 |
| Grok | Grok Imagine、Grok Video | 图片 + 视频 |
| Sora | Sora 1 / Sora 2 / GPT Image 1 | 视频 + 图片 |
| World Labs | Marble 世界生成 + 3D 高斯泼溅 | 3D 空间模型 |
对用户来说,这意味着:不需要在五个平台之间来回切换、分别注册、分别充值——打开 ArtCraft,选模型,出活。
架构核心:一个「路由器」统一分发所有请求
多供应商集成的难点不在于"能调用",而在于各家 API 的协议、参数、鉴权、计费方式全都不同。ArtCraft 的解法是经典的路由器模式(Router Pattern),核心代码在 artcraft_router 这个 Rust 模块里。
路由器的供应商枚举定义在 router_provider.rs,一目了然:
pub enum RouterProvider { Artcraft, Midjourney, Fal, GmiCloud, GrokApi, KinoviWeb, WorldLabs, }每一个生成请求进来后,路由器会按(供应商, 模型)这个二元组把请求分发给对应的构建函数。以图片生成为例,在 generate_image_request_builder.rs 中,一个match语句就覆盖了 Midjourney、FLUX、GPT Image、Seedream 等全部组合:
(Midjourney, Midjourney7|8)→ 走直连 Midjourney 客户端(Artcraft, Flux1Dev)→ 走自家 API(KinoviWeb, Midjourney7)→ 走第三方聚合通道
这就是"同时调用四家供应商"的第一层答案:上层业务只面对一个统一的请求构建器,差异全部被路由层吸收了。
第二层:每家供应商一个独立客户端 Crate
路由层之下,是crates/api_clients/目录下的独立客户端,每家供应商一个 Crate,互不干扰:
| 客户端 Crate | 负责什么 | 关键目录 |
|---|---|---|
| midjourney_client | Midjourney 直连 | endpoints/ 定义 API 端点 |
| grok_api_client | Grok Imagine / Video | api/ 封装接口调用 |
| worldlabs_api_client | Marble 世界生成 | pricing/ 内置计价逻辑 |
| openai_sora_client | Sora 视频生成 | recipes/ 请求模板 |
| fal_client | FL 聚合平台(400+ 请求类型) | requests/ |
| kinovi_web_client | Kinovi 聚合(Suno 音乐等) | generate/ |
每个客户端内部都有统一的结构:creds/或credentials/(凭据管理)、error/(错误类型)、requests/(请求定义)。
💡 这样"插件化"的好处是:新增一家供应商,只需要新建一个客户端 Crate,然后在路由器里注册
(Provider, Model)分支即可,其他部分完全不用动。generate_video/AGENTS.md 甚至专门写了"如何新增一个供应商/模型"的五步指南。
第三层:两阶段请求生命周期(草稿 → 最终请求)
不同供应商的差异远不止"接口地址不同":Midjourney 需要先上传图片,World Labs 的 Marble 要区分 Draft 和 Plus 档位,而 ArtCraft 自家 API 可以直接用媒体令牌。
ArtCraft 用两阶段设计抹平这些差异(详见 generate_video/AGENTS.md 中的生命周期图):
请求构建器 build2() │ ├─► Draft(草稿):先算成本,不发起网络调用 │ │ estimate_cost() ← 生成前就能显示价格 │ ▼ finalize(context) ← 此时才上传媒体、解析令牌 │ 最终 Request │ └─► Request(直发):支持媒体令牌的供应商跳过草稿阶段对新手用户来说,这套设计最直接的体感是:点击生成之前,界面上已经能显示这次生成的预估费用——即使最终要花钱调用 Sora 或 Midjourney。
五大生成域:图片、视频、音频、3D 网格、3D 世界
generate/mod.rs 把生成能力划分为五个平行的"域",每个域内都是providers/{供应商}/{模型}的目录结构:
| 生成域 | 覆盖模型举例 | 可路由的供应商 |
|---|---|---|
generate_image | MJ 7/8、FLUX、GPT Image、Nano Banana、Seedream | Artcraft、Midjourney、Fal、Kinovi |
generate_video | Sora 2、Veo 3、Kling、Seedance、Grok Video | Artcraft、Fal、Grok、Kinovi、直连 |
generate_audio | Suno Music / Remix、Seed Audio | Artcraft、Fal、Kinovi |
generate_mesh | Hunyuan 3D、Meshy、Tripo3D、Rodin | Artcraft、Fal |
generate_splat | World Labs Marble 1.0/1.1、TripoSplat | Artcraft、Fal、WorldLabs |
以 World Labs 为例,providers/worldlabs/ 目录下按模型细分为marble_1p0/、marble_1p1/等子模块,每个子模块包含build.rs(构建请求)、cost.rs(计价)、request.rs(发送请求)三件套——五域、多供应商之间完全同构,这正是该架构可维护性的来源。
为什么这套架构对创作者重要?
回到用户视角,"多供应商集成"带来了三个实实在在的收益:
- 按任务选模型:画概念图用 Midjourney,做分镜视频用 Sora 2,建 3D 场景用 World Labs Marble——一个工作流内无缝切换;
- 成本透明:两阶段请求让每次生成前都能预估费用,避免"盲烧积分";
- 容错与聚合:同一模型往往同时存在 Artcraft 自家通道和 Fal 等聚合通道,供应商 API 波动时路由器可切换路径。
结语:想深入了解源码?
这套"路由器 + 独立客户端 Crate + 两阶段请求"的多供应商架构,值得所有要做 AI 聚合平台的开发者参考。如果你想动手研究,建议按这条路径阅读:
- 路由入口:artcraft_router/src/lib.rs
- 供应商枚举:router_provider.rs
- 视频域生命周期文档:generate_video/AGENTS.md
- 各供应商客户端:crates/api_clients/
本地开发环境搭建方法参考 dev_setup.md,开发调试脚本在 script/artcraft/。
【免费下载链接】artcraftArtCraft is an intentional crafting engine for artists, designers, and filmmakers项目地址: https://gitcode.com/gh_mirrors/ar/artcraft
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考