ruoyi-vue-pro 开发指南 ruoyi-vue-pro 开发指南
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • AI 大模型手册
  • 公众号手册
  • 系统手册
  • 运维手册
  • 前端手册 Vue 2.x
  • 前端手册 Vue 3.x
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • AI 大模型手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben(ant-design-vue) (opens new window)
  • Vue2 + element-ui (opens new window)
微服务版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • AI 大模型手册
  • 公众号手册
  • 系统手册
  • 运维手册
  • 前端手册 Vue 2.x
  • 前端手册 Vue 3.x
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • AI 大模型手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben(ant-design-vue) (opens new window)
  • Vue2 + element-ui (opens new window)
微服务版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读

    • 简介
    • 交流群
    • 视频教程
    • 功能列表
    • 快速启动(后端项目)
    • 快速启动(前端项目)
    • 接口文档
    • 技术选型
    • 项目结构
    • 代码热加载
    • 一键改包
    • 迁移模块(适合新项目)
    • 删除功能(以租户为例)
    • 表结构变更(版本升级)
    • 内网穿透
    • 达梦数据库专属
  • 后端手册

    • 新建模块
    • 代码生成【单表】(新增功能)
    • 代码生成【主子表】
    • 代码生成(树表)
    • 功能权限
    • 数据权限
    • 用户体系
    • 三方登录
    • OAuth 2.0(SSO 单点登录)
    • SaaS 多租户【字段隔离】
    • SaaS 多租户【数据库隔离】
    • WebSocket 实时通信
    • 异常处理(错误码)
    • 参数校验、时间传参
    • 分页实现
    • VO 对象转换、数据翻译
    • 文件存储(上传下载)
    • Excel 导入导出
    • 操作日志、访问日志、异常日志
    • MyBatis 数据库
    • MyBatis 联表&分页查询
    • 多数据源(读写分离)、事务
    • Redis 缓存
    • 本地缓存
    • 异步任务
    • 分布式锁
    • 幂等性(防重复提交)
    • 请求限流(RateLimiter)
    • HTTP 接口签名(防篡改)
    • 单元测试
    • 验证码
    • 工具类 Util
    • 配置管理
    • 数据库文档
  • 中间件手册

    • 定时任务
    • 消息队列(内存)
    • 消息队列(Redis)
    • 消息队列(RocketMQ)
    • 消息队列(RabbitMQ)
    • 消息队列(Kafka)
    • 限流熔断
  • 工作流手册

    • 工作流演示
    • 功能开启
    • 工作流(达梦适配)
    • 审批接入(流程表单)
    • 审批接入(业务表单)
    • 流程设计器(BPMN)
    • 流程设计器(钉钉、飞书)
    • 选择审批人、发起人自选
    • 会签、或签、依次审批
    • 流程发起、取消、重新发起
    • 审批通过、不通过、驳回
    • 审批加签、减签
    • 审批转办、委派、抄送
    • 执行监听器、任务监听器
    • 流程表达式
    • 流程审批通知
  • 大屏手册

    • 报表设计器
    • 大屏设计器
  • 支付手册

    • 功能开启
    • 支付宝支付接入
    • 微信公众号支付接入
    • 微信小程序支付接入
    • 支付宝、微信退款接入
  • 会员手册

    • 功能开启
    • 微信公众号登录
    • 微信小程序登录
    • 会员用户、标签、分组
    • 会员等级、积分、签到
  • 商城手册

    • 商城演示
    • 功能开启
    • 商城装修
    • 【商品】商品分类
    • 【商品】商品属性
    • 【商品】商品 SPU 与 SKU
    • 【商品】商品评价
    • 【交易】购物车
    • 【交易】交易订单
    • 【交易】售后退款
    • 【交易】快递发货
    • 【交易】门店自提
    • 【交易】分销返佣
    • 【营销】优惠劵
    • 【营销】拼团活动
    • 【营销】秒杀活动
    • 【营销】砍价活动
    • 【营销】满减送
    • 【营销】限时折扣
    • 【营销】内容管理
    • 【统计】会员、商品、交易统计
  • ERP手册

    • ERP 演示
    • 功能开启
    • 【产品】产品信息、分类、单位
    • 【库存】产品库存、库存明细
    • 【库存】其它入库、其它出库
    • 【库存】库存调拨、库存盘点
    • 【采购】采购订单、入库、退货
    • 【销售】销售订单、出库、退货
    • 【财务】采购付款、销售收款
  • CRM手册

    • CRM 演示
    • 功能开启
    • 【线索】线索管理
    • 【客户】客户管理、公海客户
    • 【商机】商机管理、商机状态
    • 【合同】合同管理、合同提醒
    • 【回款】回款管理、回款计划
    • 【产品】产品管理、产品分类
    • 【通用】数据权限
    • 【通用】跟进记录、待办事项
  • AI大模型手册

    • AI 大模型演示
    • 功能开启
    • AI 对话
    • AI 绘画
      • 1. API 秘钥表
      • 2. 绘画记录表
        • 2.1 表结构
        • 2.2 管理后台
    • 【模型接入】OpenAI
    • 【模型接入】通义千问
    • 【模型接入】LLAMA
    • 【模型接入】文心一言
    • 【模型接入】谷歌 Gemini
    • 【模型接入】讯飞星火
    • 【模型接入】Stable Diffusion
  • 公众号手册

    • 功能开启
    • 公众号接入
    • 公众号粉丝
    • 公众号标签
    • 公众号消息
    • 自动回复
    • 公众号菜单
    • 公众号素材
    • 公众号图文
    • 公众号统计
  • 系统手册

    • 短信配置
    • 邮件配置
    • 站内信配置
    • 数据脱敏
    • 敏感词
    • 地区 & IP 库
  • 运维手册

    • 开发环境
    • Linux 部署
    • Docker 部署
    • Jenkins 部署
    • HTTPS 证书
    • 服务监控
  • 前端手册 Vue 3.x

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
    • CRUD 组件
    • 国际化
    • IDE 调试
    • 代码格式化
  • 前端手册 Vue 2.x

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
  • 更新日志

    • 【v2.2.0】开发中
    • 【v2.1.0】2024-05-05
    • 【v2.0.1】2024-03-01
    • 【v2.0.0】2024-01-26
  • 开发指南
  • AI大模型手册
芋道源码
2024-06-02
目录

AI 绘画

AI 绘画,基于 LLM 大模型,实现使用文本生成图片的功能。目前接入的是:

  • OpenAI 的 DALL 模型:开发完成,已经可以体验
  • StabilityAI 的 Stable Diffusion 模型:开发中,预计 06-09 可以体验
  • Midjourney 的 Midjourney 模型:后端开发完成,前端开发中,预计 06-16 可以体验

AI 绘画

整个功能,涉及到 2 个表:

  • 【配置】ai_api_key:API 秘钥表
  • 【绘画】ai_image:绘画记录表

下面,我们逐个表进行介绍,这个过程中也会讲讲对应的功能。

省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段

补充说明:

AI 绘画只是 AI 在 Image 图片中的一种场景,实际还有图片解析(识别)、图片合并等等,后续根据情况接入。

不过有一点比较尴尬,项目所使用的 Spring AI 库,目前只支持“文本生成图片”的功能,其它功能貌似没有计划,这样导致后续需要自己逐个集成!

# 1. API 秘钥表

在 《AI 对话》 中,我们已经介绍了 API 秘钥表,这里就不再赘述了。

你想使用哪个模型绘画,可以参考对应的文档,进行配置:

  • OpenAI 的 DALL 模型:《【模型接入】OpenAI》
  • StabilityAI 的 Stable Diffusion 模型:《【模型接入】Stable Diffusion》
  • Midjourney 的 Midjourney 模型:《【模型接入】Midjourney》

另外,通义千问、文心一言、星火等模型,也可以用来绘画,后续会看情况接入!

# 2. 绘画记录表

绘画记录表,用户每发起一次“文本生成图片”,都会记录一条记录。

# 2.1 表结构

CREATE TABLE `ai_image` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `user_id` bigint NOT NULL COMMENT '用户编号',
  `public_status` bit(1) NOT NULL COMMENT '是否发布',

  `platform` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台',
  `model` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模型',
  
  `prompt` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '提示词',
  `width` int NOT NULL COMMENT '图片宽度',
  `height` int NOT NULL COMMENT '图片高度',
  `options` json DEFAULT NULL COMMENT '绘制参数',
  
  `status` tinyint NOT NULL COMMENT '绘画状态',
  `pic_url` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '图片地址',
  `error_message` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '错误信息',
  
  `job_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=131 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='AI 绘画表';

① user_id 字段:对应 system_users 表的 id 字段,表示哪个用户生成的图片。

public_status 字段:表示是否发布,默认为 false 不发布(不公开)。管理员可以在后台操作,设置某个图片为发布(公开)。

② platform 字段:表示平台,对应 AiPlatformEnum 枚举,目前支持多个 AI 大模型。

model 字段:表示模型标识,对应不同的平台的模型标识,例如说 OpenAI 的 dall-e-3、dall-e-2,StabilityAI 的 stable-diffusion-v1-6 等等。

③ prompt 字段:表示提示词,用户输入的文本。

width、height 字段:表示图片的宽度、高度。

options 字段:表示绘制参数,JSON 格式,因为不同平台有不同的参数。例如说:OpenAI 的 OpenAiImageOptions、StabilityAI 的 StabilityAiImageOptions 拓展参数。

④ status 字段:表示绘画状态,对应 AiImageStatusEnum 枚举,目前有 10 进行中、20 生成成功、30 生成失败。因为绘图比较耗时,所以它的整体流程是:

  • 用户发起绘画请求,先插入一条状态为 10 进行中的 ai_image 记录
  • 后端异步调用 AI 大模型,生成图片。生成成功后,更新状态为 20 生成成功
  • 前端轮询查询,如果状态为 20 生成成功,就显示图片

pic_url 字段:表示图片地址,生成成功后,会把图片地址存储在这里。

error_message 字段:表示错误信息,生成失败后,会把错误信息存储在这里。

⑤ job_id 字段:TODO 特殊,和 Midjourney 相关

# 2.2 管理后台

① 前端对应 [AI 大模型 -> AI 对话] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/ai/image TODO 目录,提供给普通用户使用,生成图片。

聊天角色

它的后端 HTTP 接口,由 yudao-module-ai 模块的 image 包的 AiImageController 实现。

最最最关键的代码!!!大家可以重点看看!!!

AiImageController 提供的 #drawImage(...) 生成图片接口。

它的内部,调用 Spring AI 的 ImageClient 来实现大模型的调用。

② 前端对应 [AI 大模型 -> 控制台 -> 绘画记录] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/ai/image/mananger 目录,提供给管理员使用,查看绘画记录。

TODO 还在开发中 = =

AI 对话
【模型接入】OpenAI

← AI 对话 【模型接入】OpenAI→

Theme by Vdoing | Copyright © 2019-2024 芋道源码 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×