
功能开发、AIGC架构设计及LORA微调模型 ---第七周
这样一来,可视化数据板层充当了“翻译官”的角色,Deepseek写的故事Stable Diffusion看不懂,可视化数据板层作为翻译官把故事转成“画面描述”。DeepSeek API调用成功,并尝试了对于Stable Diffusion进行LORA微调,对于app实现单词生成图片,故事生成四格漫画进行了初步的架构设计、技术学习与尝试。: 在所有的安卓架构基本都是固定的,包含的要素就是:导航栏(或
本周我们团队基础功能开发完成,拓展功能进行了一定的架构设计与初步开发。DeepSeek API调用成功,并尝试了对于Stable Diffusion进行LORA微调,对于app实现单词生成图片,故事生成四格漫画进行了初步的架构设计、技术学习与尝试。
一、功能开发
1.导航主页的开发:详细技术要点见VocabVerse背单词应用导航主页开发-CSDN博客
在主页,我们有两个区域:
topBar区: 在所有的安卓架构基本都是固定的,包含的要素就是:导航栏(或者返回键,本质也是一种导航),标题等。
mainBox区:由于初步开发界面,我们可以整点简单的:放图片或者logo、把导航放在桌面、整个通用组件。
我们把这两个区域封装在HomeContent里进行复用,content代码的设计结构如下:
HomeContent
├── Column (全屏)
│ ├── TopBar()
│ └── Box (居中)
│ └── Column
│ ├── Spacer (占位)
│ ├── Image (动态图片)
│ ├── HomeActionButtons (导航按钮)
│ └── CalendarExample (日历通用组件)
主页界面解析:
(1) 整体布局
使用 Column 作为根布局,填充整个屏幕(fillMaxSize)。
通过 Modifier.background 设置背景色。
通过 windowInsetsPadding 避免内容被系统状态栏/导航栏遮挡。
(2)子组件
TopBar:顶部导航栏(就是顶端栏)。
动态图片显示:
用 Image 组件显示图片,并占满父容器的 3.5 份权重(weight(3.5f))。
HomeActionButtons:封装的动作按钮组,接收 navigateTo 回调以实现导航功能。
CalendarExample:日历组件(通用组件)。
(3)导航逻辑
通过 navigateTo: (String) -> Unit 回调函数,将导航控制权交给父组件(如 NavHost)。
点击 HomeActionButtons 中的按钮时,会触发 navigateTo 跳转到其他页面。
界面内Box设计:
│ ├── Image (动态图片)
│ ├── HomeActionButtons (导航按钮)
│ └── CalendarExample (日历通用组件)
关键设计亮点:
导航解耦:通过 navigateTo: (String) -> Unit 回调将导航逻辑交给父组件(如 NavController),符合单一职责原则。
动态配置:修改 buttonItems 列表即可增减按钮,无需改动 UI 逻辑。
无障碍支持:Icon 的 contentDescription 设置为按钮标签,方便屏幕阅读器识别。
样式统一:按钮尺寸、间距、字体样式均通过 Modifier 和 MaterialTheme 统一控制。
最终效果:
2.学习功能开发:
本周主要是对于单词列表、单词学习、单选练习、单词默写练习等功能的开发。详细技术要点见Vocabverse单词学习功能开发--第七周-CSDN博客
(1)设计架构如下所示:
(2)创新点设计:
状态驱动UI:根据是否最后一题、是否答对动态改变按钮功能和图标。
val lastOne = (uiState.current + 1) == uiState.totalNum
val rightActionInfo = if (uiState.learned && lastOne) {
R.drawable.ic_start_24dp to { navigateToChoice() } // 完成学习
} else {
R.drawable.ic_double_arrow_right_24dp to getNextWord // 下一题
}
协程动画控制:平滑处理分页切换,统一视觉风格,并通过底部操作栏设计便于用户使用。
InputButtonRow(
leftButtonIconId = R.drawable.ic_submit_24dp, // 提交/重置按钮
rightButtonIconId = R.drawable.ic_double_arrow_right_24dp, // 下一题/完成按钮
playPron = { playPron(word.pronName) } // 发音按钮
)
设置缓存机制
sequenceDiagram
ViewModel->>Repository: getWordList(start=0, size=10, BEGINNER)
alt 缓存命中
Repository-->>ViewModel: 返回缓存数据
else 缓存未命中
Repository->>DAO: 查询数据库
DAO-->>Repository: 返回数据
Repository->>Repository: 更新缓存
Repository-->>ViewModel: 返回数据
end
分页同步控制:触发时机:点击"下一题"时自动返回学习页(第0页)。
scope.launch {
pagerState.animateScrollToPage(0) // 切换到学习页
}
(3)部分页面展示:
3.帮助功能开发:
帮助功能模块设计,详细技术要点见VocabVerse背单词软件功能-帮助模块设计-CSDN博客
(1)主要架构:
数据层(ROOM数据框架+Repository):
HelpDAO-与数据库关联并与数据库中的数据进行交互
HelpRepository-获取帮助项
View层(相关UI):
HelpScreen-调用 HelpContent 渲染帮助页面
HelpContent-根据 UI 状态(加载中、成功、错误)渲染视图
HelpSection-渲染每个帮助分类下的帮助项
ViewModel 层(状态管理):
HelpViewModel通过 Repository 加载数据,并管理 UI 状态
(2)功能实现与实现方式:
二、AIGC架构设计
1.设计思路:
将单独的一层负责把故事变成镜头语言。可以在领域层和表示层之间加一层“可视化故事板层”,专门处理语义理解到视觉语境的转换,即Story → Prompt。这一层将负责调用Deepseek接口,拆分故事为四个分镜描述,并将描述转换为供Stable Diffusion使用的prompt。这样一来,可视化数据板层充当了“翻译官”的角色,Deepseek写的故事Stable Diffusion看不懂,可视化数据板层作为翻译官把故事转成“画面描述”。
2.完整架构:
三、LoRA训练与推理模型搭建
1.训练模型:
(1)载入训练数据:使用数据添加器载入训练数据,支持不同分辨率。
(2)载入模型并初始化:载入Flux模型,设置统一桶分辨率,并在StringConstantMultiline模块中设置prompt。
(3)训练:使用LoRA模型迭代训练,并在每500次迭代完后预览图像。
(4)完整工作流:(2000次迭代)
2.模型推理:
只需要在标准工作流(详情见山东大学创新项目实训(2)本地部署Stable Diffusion模型-CSDN博客)的加载层和CLIP层之间添加一层LoRA层:
更多推荐
所有评论(0)