[RFC] 108 - AI 绘画模态 #7442
Replies: 17 comments 29 replies
-
这个好,期待 |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
这个什么时候能用啊 |
Beta Was this translation helpful? Give feedback.
-
这个如果能开发出来,兼职是lobechat功能的一大扩充 |
Beta Was this translation helpful? Give feedback.
-
好期待啊,最近拿了fal的优惠码,正愁不知道怎么用在lobechat里 |
Beta Was this translation helpful? Give feedback.
-
gpt-image-1的支持也是放在这块一起来做吗? |
Beta Was this translation helpful? Give feedback.
-
2.0版本才会上线吗 这是妥妥的生产力工具 快等不及了 |
Beta Was this translation helpful? Give feedback.
-
等的花儿都谢了 |
Beta Was this translation helpful? Give feedback.
-
体验地址: |
Beta Was this translation helpful? Give feedback.
-
太给力了 极大提升生产力 希望早日合并到主分支 |
Beta Was this translation helpful? Give feedback.
-
然后报错失败,四张图片的区域全部显示错误 Unexpected token 'A', "An error o"... is not valid JSON |
Beta Was this translation helpful? Give feedback.
-
release 了, 欢迎反馈问题:#8429 |
Beta Was this translation helpful? Give feedback.
-
因为我手头只有GPT的key(Azure的gpt-image-1用new-api转发的),目前测试稳定,建议给fal也增加厂商系列的环境变量,用于控制展示的模型或者禁用掉厂商的所有模型。 |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
GPT-5的图片输出能力是走的这一套吗,还是正常对话那种?我对话试了几次都是直接输出了svg,绘图这里也选不了GPT-5 |
Beta Was this translation helpful? Give feedback.
-
请问什么时候会支持Azure OpenAI的自定义模型,像是gpt-image-1和FLUX.1-Kontext-pro目前只支持原厂的,希望尽快能兼容Azure OpenAI :) |
Beta Was this translation helpful? Give feedback.
-
RFC 128 需要拓展 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
背景
目标
针对 AI 绘画场景的创作工具。
开发计划
一期目标
AI 绘画场景下基本的文生图功能。
同时,为了系统的扩展性和未来其它需求做铺垫需要设计实现下面这些架构。
多 providers 架构
这本身就是 lobe chat 的核心优势之一,把 chat 的多 provider 功能延续到其它模态。
就是说可以使用不同 provider 提供的 image 模型,例如 openai provider 的 gpt-4o-image, dalle3, google provider 的 imagen-4, fal 的上百种 ai 模型。
常见的 provider 还有 replicate, runware, together.ai, stablity.ai, ttapi, kling, seedream 等。
一期将率先支持 fal.ai, openai,本来也想支持 google 的 imagen-4 的,但是发现目前 google 官方的 imagen-4 只支持 vertex ai 调用,不如先支持 fal 的 imagen-4。
任务执行模型
在 AI 生成任务中,我们可以从用户体验和技术实现两个维度来分析。
用户体验:同步 vs. 异步
从用户体验的角度看,任务可以分为两种模式:
结论: 为了提供更好的用户体验,避免用户在不确定的等待中感到沮喪,AI 绘画功能将仅支持异步任务模式。
技术实现:阻塞式请求 vs. Webhook/后台队列
实现异步的用户体验,后端有多种技术方案。原先我们讨论过两种主要方式:
trigger.dev
或支持 webhook 的 AI Provider)推送到一个后台队列中,然后立即响应客户端,告知任务已创建。当后台任务完成后,通过 Webhook 等机制回调我们的服务来更新任务状态。实施计划:
tRPC
的async router
在服务端执行生成任务。我们会接受其在 Serverless 平台上的超时限制。async_task
表。因此,此功能必须依赖服务端数据库,不支持纯客户端数据库模式。多模态
虽然这一期只做 AI 生图,但是也需要在设计层面为
AI 视频
,AI 音乐
等更多模态做好准备。其中最最重要的两块是:数据库设计和全局状态设计,前期没设计好后面迁移起来贼麻烦。
举例说明一下数据库怎么设计对多模态比较友好:无论是 AI 生图还是视频,我们预计可能都会支持收藏,发布,软删除等功能。那这些功能其实是多模态公共的能力。如果针对每个模态定义对应的表去存储这些状态,也就是
那这样我们在实现收藏功能的时候就需要实现多个接口,或者针对不同的模态去访问对应的表,n 个模态逻辑复杂度就是 n。
但是如果我们抽取公共的 generation 表,把公共业务逻辑数据放在 generation 表上,例如收藏,发布:
那我们实现收藏功能的时候其实只需要针对 generation 表做更新就好了,不需要针对 imageConfigs 和 videoConfigs 表做更新, n 个模态逻辑复杂度也还是 1。
如果我们要做 gallery(渲染 published 状态的 generation),其中既要展示图片,又要展示视频,那我们只需要针对 generation 表做查询就好了,不需要针对 imageConfigs 和 videoConfigs 表做查询。
后续计划
界面
桌面端
示意界面如下:v0
一期配置面板目标就是能用,后续可以做得更易用,图形化一些,参考 https://shots.so/。
移动端
桌面端和移动端实现可以独立拆分,考虑到工作量问题,放二期实现。
参考了即梦 app 的设计,简单示例:
数据库设计
providers 管理
统一在现有的 AI 服务商设置那里管理:
多 providers 架构
项目中已经存在 AiProvider 和 AiModel 两张表。
AiProvider
AiModel
生成系统
其实就是中间这个生成列表的数据库设计。概述下各个表之间的关系:
GenerationBatch
抽象一个生成批次。
图片的语义化搜索(后续功能):
Generation
单张图的生成。
重试逻辑:generation 保持不变,生成新的 async task
各种 prompt:
GenerationTopic
多模态相关的思考
按照目前的设计,从命名也可以看出来,generationTopic/generationBatch/generation 是多模态通用的。
这意味着:
Midjourney
目前调用 provider 的时候预期调用方式是 4 张图调用 4 次推理请求,webhook 回调的时候回调 4 次,绝大多数 AI 绘画 provider 都可以实现。
midjourney 它的生成和其它生成不一样,webhook 回调返回得是一张图包含四个缩略图,在这种情况下,希望 provider 在 agentRuntime 层自己做切成 4 张图的逻辑,或者我们自己提供一个切图服务给它们调用。
多 provider 适配
和 LLM 不太一样的是,图片生成和视频生成大多都比较耗时,一般走的是 webhook 回调,目前 agentRuntime 可能不足以满足需求。
方案一
在增加 provider 的时候增加一个对应的 webhook 路由,在其中处理对应 provider 的回调逻辑。
方案二
使用单一 webhook 路由,每个 providerRuntime 提供 match 方法和 handle 方法。match 方法返回 true 就调用对应 handle 方法处理生成回调。
结论:这块得结合异步任务架构一起讨论。
AI 绘画入口
我觉得最方便最不和现有设计冲突的地方还是直接左侧侧边栏加一个 item,点击后打开新页面。或者暂时可以这样设计,后序引入 projects 概念后整合进 projects。
AI Image 参数标准化
不同的 ai image provider 的模型参数名称,case 都不一样,例如 fal 的 cfg 参数是 guidance_scale,但是 runWare 的参数又是 CFGScale。
需要定制一套统一的标准化的参数名称。
好处:
一期支持的参数:
考虑可以借鉴 comfyUI 官方节点的参数名称:
模型参数示例
新增一个模型支持需要到对应的文件夹新增 json 文件,例如 fal 新增 flux-schnell 支持需要新增
src/config/paramsSchemas/fal/flux-schnell.json
:然后在
src/config/aiModels/fal.ts
中使用:Beta Was this translation helpful? Give feedback.
All reactions