From 4bbebd9987ac0dfa2986a208cfade94566dd652f Mon Sep 17 00:00:00 2001 From: gongchengtu <1817063960@qq.com> Date: Wed, 11 Feb 2026 21:39:03 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=20CLAUDE.md=20?= =?UTF-8?q?=E5=8F=8D=E6=98=A0=E5=A4=9A=E6=A8=A1=E5=9E=8B=E9=80=82=E9=85=8D?= =?UTF-8?q?=E5=99=A8=E6=9E=B6=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新项目概述支持的 AI 模型列表 - 新增模型适配器架构章节 - 说明多图结果处理和签名 URL 处理机制 --- CLAUDE.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 55577fec..2e79f66f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,7 +6,7 @@ ## 项目概述 -**Opentu (开图)** 是一个基于 Plait 框架构建的开源白板应用。支持思维导图、流程图、自由绘画、图片插入,以及 AI 驱动的内容生成(通过 Gemini 生成图片,通过 Veo3/Sora-2 生成视频)。 +**Opentu (开图)** 是一个基于 Plait 框架构建的开源白板应用。支持思维导图、流程图、自由绘画、图片插入,以及 AI 驱动的内容生成(支持 Gemini、Midjourney、Flux、Seedream、Kling 等多种图片/视频生成模型)。 | 属性 | 值 | |------|-----| @@ -87,7 +87,7 @@ aitu/ | 构建工具 | Nx 19.3, pnpm, SWC | | UI 框架 | TDesign React, Tailwind CSS, Lucide React | | 绘图框架 | Plait ^0.84, Slate.js, RoughJS, Mermaid | -| AI/API | Gemini API, Veo3, Sora-2 | +| AI/API | Gemini API, Midjourney, Flux, Seedream, Kling, Veo3, Sora-2 | | 状态管理 | React Context, RxJS, LocalForage | | 测试 | Vitest, Playwright | @@ -109,6 +109,52 @@ Service Worker (后台执行) **核心特性**:页面刷新不影响任务执行,通过 `remoteId` 恢复视频轮询。 +### 模型适配器架构 + +支持多种 AI 图片/视频生成模型,通过统一的适配器接口集成: + +**已集成模型**: +- **图片生成**:Gemini (Imagen 3)、Midjourney、Flux、Seedream 5.0 +- **视频生成**:Veo 3、Sora 2、Kling、Seedance + +**适配器注册与路由**: +```typescript +// 1. 定义适配器(实现 ImageModelAdapter 或 VideoModelAdapter) +export const mjImageAdapter: ImageModelAdapter = { + id: 'mj-image-adapter', + matchTags: ['mj'], // 模型标签匹配 + supportedModels: ['mj-imagine'], + async generateImage(context, request) { /* ... */ } +}; + +// 2. 注册到全局 registry +registerModelAdapter(mjImageAdapter); + +// 3. 运行时路由(generation-api-service.ts) +const adapter = resolveAdapterForModel(model); +if (adapter) { + await executeImageViaAdapter(taskId, adapter, params); +} +``` + +**关键文件**: +- `services/model-adapters/registry.ts` - 适配器注册表 +- `services/model-adapters/types.ts` - 适配器接口定义 +- `services/model-adapters/default-adapters.ts` - 默认适配器注册 +- `services/media-executor/fallback-adapter-routes.ts` - 适配器执行路由 + +**多图结果处理**: +- 适配器返回 `{ url, urls?, format }` 结构 +- `urls` 数组包含所有生成的图片 URL +- 任务完成前自动缓存远程 URL 到本地 `/__aitu_cache__/` +- UI 层展开多图为独立预览项,支持水平排列插入 + +**签名 URL 处理**: +- TOS/Volces 等签名 URL 会校验 Referer 导致 403 +- 所有 ``/`