生成式UI 动态化SDK的研发--开篇

news2024/11/30 8:35:52

这里写目录标题

  • 1. 背景
  • 2.名词解释
    • 2.1 DSL
    • 2.2 AI大模型
    • 2.3 生成式UI
  • 3. 前言
  • 4.未来展望

1. 背景

随着AI大模型技术的兴起,UI界面的开发和交互必定会发生巨大的改变。在大模型技术出现之前,软件的界面是通过UI设计师和交互设计师先定义好软件的UI界面,由交互设计师去定义好交互。最后给到程序员开发成程序给到用户使用。但是最近的情况可能大家也感觉到了,AI大模型的出现,取代了很多设计师的工作。通过AI大模型,可以生成很多精美的界面,然后给到程序员开发实现。那既然AI大模型能取代设计师的工作,有没有可能取代程序员的工作呢,答案是可能的。这就是生成式UI,生成式UI可以自动生成界面元素,如按钮、文本框、菜单等,节省设计师的时间和精力‌,而且根据用户的偏好和使用习惯提供个性化的界面设计方案,降低了设计成本。

在目前生成式UI在业界有很多方案,比较常见的有:使用大模型生成react-native代码,或者生成HTML+CSS代码等。本系列文章提供了另外一套方案,即提供一套DSL,训练大模型能生成我们定义的DSL,然后下发到端侧容器渲染。本系列文章主要就是做端侧容器SDK的实现,因为我不会大模型的相关技术,所以想把我设计的DSL和端侧容器的代码分享出来,供大家一起交流完善,直到最后有足够多的DSL模板数据能够给到大模型训练,最终能根据用户的query生成精美的界面.

2.名词解释

2.1 DSL

DSL(Domain Specific Language)即特定领域语言,是一种为特定任务设计的计算机语言。它专注于某个特定问题领域,通常比通用编程语言更为简洁和高效。

2.2 AI大模型

AI大模型‌是指拥有超大规模参数(通常在十亿个以上)和复杂计算结构的机器学习模型。这些模型通过海量数据的训练,能够捕捉到更为丰富的特征,从而在‌图像识别、‌自然语言处理、语音识别等领域表现出色。大模型具有参数规模巨大、结构复杂、训练时间较长等特点,通常需要大量计算资源,但在特定任务上表现出色。

2.3 生成式UI

‌生成式UI(Generative UI)‌是一种利用人工智能技术自动创建和优化用户界面的方法。它通过分析客户需求和设计规范,快速生成适应不同平台和设备的界面布局,旨在提升用户体验和开发效率‌1。

3. 前言

本系列文章会从0到1介绍一个生成式UI动态化SDK的实现,采用Kotlin语言开发,参考阿里开源的GaiaX动态化跨端框架,布局引擎,表达式引擎使用GaiaX中已经写好的。 GaiaX,仓库地址:GaiaX git仓库地址 ,GaiaX从开发到渲染到移动端设备上的过程如下图所示。
在这里插入图片描述
经过验证,目前GaiaX SDK可以实现生成式UI的大部分场景下的界面开发需求,不直接使用GaiaX的原因主要是作为大模型生成的代码,应该越简洁越好,GaiaX不适合的原因。主要体现在以下几点:

1. 组件类型少: 目前仅支持Text,Image, 列表,容器,例如常用的checkbox,选择框,编辑框不支持
2. 样式属性支持的种类少: GaiaX 使用CSS的方式来描述组件的样式,经过验证发现有些CSS样式的属性在移动设备上根本不支持
3.SDK目前的缓存策略不完善: 只有一级缓存,缺乏网络缓存和文件缓存
4. 开发工具的支持: 目前GaiaX SDK 界面dsl开发主要依赖GaiaX Studio,但是GaiaX Studio的源码没有开源,虽然官方文档说可以使用插件,但是目前给出的官方文档中,无法验证是否可以开发扩展的UI组件插件,使其支持拖拽生成DSL的功能。而且GaiaX Studio的使用文档也不完善,虽然有个教学视频,但是讲的都很浅,当开发出一个dsl模板后,导出到 Android项目中后,需要改下模板的内容。事件的绑定缺乏例子。在GaiaX中不知道如何去设置,缺乏最佳实践的案例
5. DSL功能函数的支持少: 目前GaiaX SDK 仅支持size()和env()两个函数,一些例如网络请求,数据持久化等操作还不支持。无法支撑一些例如下单,登录等需要网络和持久化的需求场景。

其中最主要的原因是,描述复杂界面需要多个模板嵌套,出问题的风险大,并且增加了网络传输的带宽,比如完成下列的购物车界面就需要三个模板嵌套,总共需要9个文件共同配合才能实现,如果界面的复杂性再高点,需要的嵌套子模版会更多。比如描述一个购物车的DSL:


在这里插入图片描述
代码如下:

在这里插入图片描述
特别不合理,所以需要新版的DSL语法。新版的DSL会采用XML的方式实现,让界面更简单和更具有描述性。

本系列文章只介绍Android端的SDK实现,IOS,HarmonyOS的文章会在Android系列的文章更新差不多了后看情况再出。文章会介绍的内容有,DSL语法,DSL的解析渲染,基础文字组件,图片组件,容器组件,列表组件,动画,进度条,表达式引擎,布局引擎,事件引擎,通过DSL构建的页面等。最终的效果是在Android端提供的容器里面展示我们的使用自定义DSL编写的页面。定义好DSL的语法规则后,就可以作为大模型的训练素材了。

当生成式UI的SDK开发的差不多的时候,我们需要提供开发套件,比如开发DSL的Studio,这个Studio必须能让开发的人员可以实时预览自己修改DSL后界面的变化。并且能够校验DSL模板是否正确,可以拖拽设计界面,是否有语法错误。以及渲染出来的效果是否符合预期。比如后面可能会有通过设计图直接生成可交互界面的情况,大模型生成好界面的代码后需要放到Studio软件中校验是否和输入的设计图符合等。这里会参考AndroidStudio的实时预览实现。

4.未来展望

如果开发的顺利的话,我们可以加入3D界面的渲染展示,通过XML定义3D渲染需要的资源,并能清晰的表示界面间的层级关系以及空间位置关系,比如在3D场景中,我们可以在XML的节点属性中添加当前节点的空间位置,纹理贴图的资源路径等属性,在SDK中实现OpenGL或者是其他3D渲染引擎即可。添加后台模板管理系统,异常监控,埋点上报等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2226940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在手机上解压7z格式文件?最佳软件推荐与使用指南

在当今数字化时代,手机已经成为我们生活中不可或缺的工具。随着文件数量的不断增加,文件管理变得尤为重要。 而在手机上解压 7z 文件具有重大的意义。 首先,7z 文件格式以其高压缩率而闻名。这意味着可以在有限的存储空间内存储更多的文件。…

Pseudo Multi-Camera Editing 数据集:通过常规视频生成的伪标记多摄像机推荐数据集,显著提升模型在未知领域的准确性。

2024-10-19,由伊利诺伊大学厄巴纳-香槟分校和香港城市大学的研究团队提出了一种创新方法,通过将常规视频转换成伪标记的多摄像机视角推荐数据集,有效解决了在未知领域中模型泛化能力差的问题。数据集的创建,为电影、电视和其他媒体…

每日OJ题_牛客_DP23不相邻取数_打家劫舍dp_C++_Java

目录 牛客_DP23不相邻取数_打家劫舍dp 题目解析 C代码 Java代码 牛客_DP23不相邻取数_打家劫舍dp 不相邻取数_牛客题霸_牛客网 (nowcoder.com) 描述: 小红拿到了一个数组。她想取一些不相邻的数,使得取出来的数之和尽可能大。你能帮帮她吗&#x…

飞腾X100 NPU Benchmark使用说明

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

Kafka消费者故障,出现活锁问题如何解决?

大家好,我是锋哥。今天分享关于【Kafka消费者故障,出现活锁问题如何解决?】面试题?希望对大家有帮助; Kafka消费者故障,出现活锁问题如何解决? 1000道 互联网大厂Java工程师 精选面试题-Java资…

Objective-C 音频爬虫:实时接收数据的 didReceiveData_ 方法

在互联网技术领域,数据的获取和处理是至关重要的。尤其是对于音频内容的获取,实时性和效率是衡量一个爬虫性能的重要指标。本文将深入探讨在Objective-C中实现音频爬虫时,如何高效地使用didReceiveData:方法来实时接收数据,并通过…

Spring Boot 3项目创建与示例(Web+JPA)

以下是一个Spring Boot 3.3.4整合JPA的示例,它展示了如何在Spring Boot应用程序中使用JPA进行数据持久化。 版本与环境 Spring Boot 3.3.4数据库: MySQL 8.0.40, MySQL的安装使用可以参考: MySQL 8 下载与安装攻略JDK 17Maven 3.6项目创建 可以使用Spring Initializr 初始…

深度学习:SGD的缺点

首先看下述函数: 最小值为x0,y0处 先了解下它的梯度特征。了理解其梯度特征,我们需要计算其梯度向量。 梯度向量 ∇f 是函数 f 在每个变量方向上的偏导数组成的向量。具体来说: ∇f(∂f/∂x,∂f∂/y) 首先,我们计算 f …

时间序列预测(十五)——有关Python项目框架的实例分析

#1024程序员节|征文# 在之前的学习中,已经对时间序列预测的相关内容有了大致的了解。为了进一步加深理解,并能够将所学知识应用于实际中,我决定找一个完整的Python框架来进行深入学习。经过寻找,我终于找到了一篇非常具…

电脑技巧:如何进行磁盘测速?

磁盘测速是指通过专业工具或系统自带功能,测量硬盘的读写速度。这一过程能够帮助用户了解磁盘的性能瓶颈,并为硬件升级或系统优化提供数据依据。特别是在处理大量数据或运行高负载应用时,磁盘速度是决定系统性能的关键因素。 影响磁盘速度的因…

Web 核心指标优化之 INP 篇

这篇文章是我在公司做 INP 优化经验分享的演讲稿。 大家好,今天我要做的分享是关于 INP 的一些优化经验。 概念 首先,什么叫 INP 呢。 INP 的全称叫 Interaction to Next Pain ,翻译过来就是从交互到下一次绘制的延迟。这是 Google 提出来的…

C#与C++互操作时的数据类型对应

C#和C在互操作时,会涉及到数据类型对应的问题,如果数据类型用得不对,就会得不到想要的结果,严重的情况下,可能还会导致程序崩溃。这里做一下相关知识点的总结。 说明: 1. 表格第一列是Visual C中的数据类型…

【Docker大揭秘】

Docker 调试一天的血与泪的教训:设备条件:对应的build preparation相应的报错以及修改 作为记录 构建FASTLIO2启动docker获取镜像列出镜像运行containerdocker中实现宿主机与container中的文件互传 调试一天的血与泪的教训: 在DOCKER中跑通F…

numpy——数学运算

一、标量——矢量 import numpy as npa 3.14 b np.array([[9, 5], [2, 7]])print(a) print(b)# ---------- 四则运算 ---------- print(a b) # np.add print(a - b) # np.subtract print(a * b) # np.multiply print(a / b) # np.divide 二、矢量——矢量 import nump…

Claude Financial Data Analyst:基于Claude的金融数据分析工具!免费开源!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

MPC模型预测控制与RL强化学习的差异性

模型预测控制(Model Predict Control,MPC) 模型预测控制与强化学习的差异性调研 概述 MPC 是一种使用数学模型在有限时间内实时优化控制系统的技术,自二十世纪六七十年代问世以来,已广泛应用于化学工程、炼油、先进…

Java:String类(超详解!)

一.常用方法 🥏1.字符串构造 字符串构造有三种方法: 📌注意: 1. String是引用类型,内部并不存储字符串本身 如果String是一个引用那么s1和s3应该指向同一个内容,s1和s2是相等的,应该输出两…

《深度学习》模型的部署、web框架 服务端及客户端案例

目录 一、模型的部署 1、模型部署的定义与目的 1)定义 2)目的 2、模型部署的步骤 1)导出模型 2) 部署模型 3)测试模型 4)监控模型 3、模型部署的方式 1)云端部署 2)嵌入…

autMan奥特曼机器人-对接Docker版本NTQQ详细教程

准备 1、准备一台服务器,amd64/arm64都可以,配置最好还是2核保底吧。 2、准备一个VNC软件。1Remote:点此下载 3、准备手机登陆机器人QQ号,扫码 NTQQ相关 NTQQ一键脚本(适用于小白支持autMan/无界) 复制以…

linux标准 I/O

FILE 指针标准输入、标准输出和标准错误检查或复位状态I/O 缓冲控制文件 I/O 内核缓冲的标志直接 I/O:绕过内核缓冲stdio 缓冲 FILE 指针 FILE 是一个结构体数据类型,它包含了标准 I/O 库函数为管理文件所需要的所有信息,包括用于实际I/O 的…