低代码平台精髓:大语言模型在低代码中的实践

530 阅读5分钟

本文介绍了一种使用大语言模型生成低代码前后端的实践方案,并尝试探索在整个低代码中的应用。

生成低代码应用

我们基于"通意千问" 和 阿里的 lowcode engine 实现,整个方案基于“模板+低代码后端设计器”,单表能达到预期效果,多表还没来得及落地。

在做这套方案之前,我看到过一个非常离谱的方案,他们基于大模型,把用户页面操作变成了大模型输入,假设需要新建一个“红色的标题”,他们是这么做的:

  • 用户在对话框输入“拖拽一个文本组件”;
  • 用户继续输入“设置文本组件的内容为'标题'”;
  • 用户再输入“设置文本颜色为红色”。

用户使用 AI 主要是想节省时间,并且一次性解决前后端所有问题。这种做法很离谱,设计一个页面不知道要搞到猴年马月,还不如拖拽来得方便,还有他们没有给出后端的方案。我们进行一系列思路分析,并且给出实现路线。

前端

产品设计是高度收敛的,都有 AI 了,还要从组件、属性一步步构建,粒度太小了,可以更大一些,页面的展示形式就那么几种(比如:表格页、表单页、统计页等等),我们可以基于 AI 生成页面,然后基于用户输入的信息微调(比如:用户先输入“帮我生成一个用户管理页” 得到页面,然后输入“隐藏表格中的身份证信息”修改页面),这样做使用就更加方便了。

怎么做呢?常见的页面展示形式就那些,我们只要内置一些模板,用户输入信息后,基于这些模板,替换占位信息生成页面就行了。微调的话需要基于组件配置信息、用户手册等文档,使用 RAG 技术调用大模型找到要修改的位置,生成 JSON Patch,然后执行修改就行了。前端方案就是 “通过模版生成页面,然后用提示词微调”

后端

前面提到了前端的展示形式是高度收敛的,同类产品后端的逻辑也是高度类似的(比如:CRUD),不过后端要复杂一些,类似的应用可能有大量额外逻辑(比如:工作流),我们可以设计一个后端服务,它能:

  • 根据传入的信息生成数据库表、常用接口;
  • 它能根据传入的代码(或者 DSL ),生成定制的接口,这部分有一定难度,我们可以使用大模型生成;

整个流程

流程就变成了这样:

  • 读取组件配置文档、用户操作手册、后端 DSL 文档等,经过分块处理、向量化、存储到向量数据库;
  • 用户输入“帮我生成一个用户管理页”,BFF 层调用大模型,然后:
    • 大模型解析出用户属性(name、birthday、gender、idCardNo、mobile)以及字段长度;
    • BFF 层 调用后端接口,生成用户表(name:VARCHAR(200),birthday:DATE,gender:VARCHAR(1)、idCardNo:VARCHAR(20),mobile:VARCHAR(20) );
    • 大模型解析出页面类型是“管理页面”;
    • BFF 层查找模板,生成后端接口,同时生成前端页面,并且把占位字符替换成新的接口信息;
  • 用户输入“隐藏表格中的身份证信息”,BFF 层调用大模型:
    • 大模型基于前面的数据库,解析出需要从表格配置的 columns 删除一,返回一个JSON Patch;
    • BFF 层基于 JSON Patch,修改产物;

多表:

单表很好做,多表如何处理呢?我们在解析解析数据库字段时,多加一些流程,比如:

  • ...解析实体对象字段;
  • 解析实体关系,生成新的对象;
  • 生成 ER 图,供用户修改(这是兜底逻辑,防止解析出错,我们还能把用户修改后的数据保存起来,方便后续增强学习);

AI 还能做什么?

生成高代码

需求频繁变更,低代码无法覆盖到所有角落,所以低代码平台离不开高代码,除非只做某个领域的,这个领域所有功能都是确定的。为了兜底,我们需要允许用户编写代码,实现前后端功能,用户编写的不一定是 javascriptjavago 这些语言的代码,可能是一种 DSL,这个时候我们可以借助代码生成功能生成代码。

这部分目前我没有更好的方案,只能基于 RAG和大语言模型内置的代码生成器生成代码。

根据设计稿生成页面

这是一个很老的课题,但是很有价值,如果能直接把页面转换成可以二次编辑的产物,能节省很多时间,大大提升效率。很早之前就有人开始基于 Figma 做生成 html 的实际,后面社区也出了 react、antd 的解决方案,但是这些方案生成的产物很不好用。一些厂商干脆给低代码平台赋能,让 UI 直接基于这个平台设计,我看了好几个厂商,这些产品有以下缺点:

  • 远远不如 figma、sketch 好用;
  • UI 难以接受,他们也有顾虑“使用 figma、sketch 以后能找到工作,用你们开发的,出去都不敢说”;

我现在没有探索的想法,但是我觉得可以往这些方向发力:

  • 组件库有为 UI 工具提供插件,看看能不能基于这些插件转换为代码;
  • 开发一个新的工具替代 figma、sketch,如果有想做开源软件的可以努力一下;
  • 基于开源的模型,自己训练一个更加精确的设计稿转代码的模型;