update video link
openInula 开源项目贡献赛 「开发基于 LLM 的创新应用,让 AI 赋能 openInula 框架」赛题参赛作品。
The UI 是一个基于 AI 的 UI 的工具,开发者指定数据结构后,The UI 就可以为最终用户动态生成收集数据与展示数据的 UI,是为「直接解决用户需求」而设计的 AI UI。
演示视频
在参考赛题中,我们看到了「赛题二:openInula AI 代码生成器(基于图片生成代码)」。
在对应的 Issue 中,链接了之前比赛的一个获奖项目。从该项目的 system prompt 来看,作者应该也是参考了我之前实现的一个 AI UI 项目的思路(相同的 system prompt)。
这一思路比较流行的商业化产品包括 Vercel 的 v0.dev、wandb 的 OpenUI、Claude 内置的 Artifacts 功能等,实现大同小异,具体实现的详细解析在我的博客中进行了记录,不再这里展开。
但再一次准备开发一个 AI UI 项目时,我希望不只是在已有思路上应用更强的模型、优化 prompt、完善交互体验,而是希望从使用流程上真正进入「下一代」。
因此 The UI 的设计从面向的使用者就与之前项目有所不同。我们可以将 AI UI 工具的使用者分为三类:
The UI 希望为第三类使用者服务,作为非前端工程师,可能为用户的业务需求开发了几个 API。此时不再需要设计师和前端工程师配合,使用 The UI 就可以直接在运行时为 API 生成 UI,收集用户输入,调用 API,将结果反馈至用户。
整体交互逻辑如下:
generate-form
Form
generate-chatbox-prompt
Chatbox Prompt
Chatbox
parse-user-input
format-error
error message
generate-display
Display
@shadcn/ui
+-------------------+ | init | +--------+----------+ | v +------------------------+ | generateInputForm | +--------+----------------+ | v +------------------------+ | waitingForInput | | | | +-------------------+ | | | loadingPrompt | | | +---------+---------+ | | | | | v | | +-------------------+ | | | idle | | | +---------+---------+ | | | | | USER_INPUT | SUBMIT_FORM| | v | +------------+------------+ | v +------------------------+ | parsingUserInput | +--------+----------------+ | v +------------------------+ | validatingFormData | +--------+----------------+ | v +------------------------+ | callingAPI | +--------+----------------+ | v +------------------------+ | handlingAPIResponse | +--------+----------------+ | v +------------------------+ | generateOutputDisplay | +--------+----------------+ | v +------------------------+ | displayingResult (final)| +--------------------------+ +------------------------+ | errorHandling | +------------------------+ | RETRY | +------------------------+
由于 OpenInula 与 React 兼容,所以 React 生态中的绝大部分方案都可以直接使用。在 The UI 中,仅对 React.useId API 进行了额外处理,其余均由 OpenInula 直接兼容,在 Vite 配置中将 React 动态替换为 OpenInula。
React.useId
在 RenderGeneratedComponent.tsx 中实现,通过 babel 转移后执行代码。此处也可以实现为一个后端 API,在服务端完成相关工作。
首先创建 .env 文件,填入以下内容:
.env
VITE_LLM_API_KEY=$API_KEY VITE_LLM_MODEL=gpt-4o-mini
$API_KEY 为 OpenAI 的 API key。
之后运行 yarn 安装依赖。
yarn
最终运行 yarn dev 启动本地开发环境。
yarn dev
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
The UI
The UI 是一个基于 AI 的 UI 的工具,开发者指定数据结构后,The UI 就可以为最终用户动态生成收集数据与展示数据的 UI,是为「直接解决用户需求」而设计的 AI UI。
演示视频
与已有项目的对比
在参考赛题中,我们看到了「赛题二:openInula AI 代码生成器(基于图片生成代码)」。
在对应的 Issue 中,链接了之前比赛的一个获奖项目。从该项目的 system prompt 来看,作者应该也是参考了我之前实现的一个 AI UI 项目的思路(相同的 system prompt)。
这一思路比较流行的商业化产品包括 Vercel 的 v0.dev、wandb 的 OpenUI、Claude 内置的 Artifacts 功能等,实现大同小异,具体实现的详细解析在我的博客中进行了记录,不再这里展开。
但再一次准备开发一个 AI UI 项目时,我希望不只是在已有思路上应用更强的模型、优化 prompt、完善交互体验,而是希望从使用流程上真正进入「下一代」。
因此 The UI 的设计从面向的使用者就与之前项目有所不同。我们可以将 AI UI 工具的使用者分为三类:
The UI 希望为第三类使用者服务,作为非前端工程师,可能为用户的业务需求开发了几个 API。此时不再需要设计师和前端工程师配合,使用 The UI 就可以直接在运行时为 API 生成 UI,收集用户输入,调用 API,将结果反馈至用户。
设计
The UI 界面示意图
整体交互逻辑如下:
generate-form
LLM 生成阶段。根据 input schema 和 The UI 中的 UI 生成最佳实践,为用户生成示意图中的绿色Form
区域,用于收集用户填写的数据。generate-chatbox-prompt
LLM 生成阶段。根据 input schema、当前用户在表单中已经填入的值,分析还有哪些未填入的字段,并给出填写建议,输出在示意图中的灰色Chatbox Prompt
区域,用于帮助用户更好的填写表单。Form
区域通过生成的精细表单控件填入数据,也可以在黄色的Chatbox
区域通过自然语言描述自己想要填写的内容。在Chatbox
输入自然语言之后点击识别,通过parse-user-input
LLM 生成阶段,会提取自然语言中与 input schema 相关的信息,填入表单中。自然语言输入和表单控件输入灵活结合,最大化用户输入效率。format-error
LLM 生成阶段,将程序化的错误信息优化为用户可读的自然语言,反馈在示意图中的红色error message
区域。generate-display
LLM 生成阶段,在示意图中的蓝色Display
区域生成一个符合 output schema 和 The UI 中的 UI 生成最佳实践的展示 UI,并将 API response 输入其中,给用户进行展示。src 文件目录结构
@shadcn/ui
,business 是 TheUI 业务逻辑相关的组件。状态机
OpenInula 优势
由于 OpenInula 与 React 兼容,所以 React 生态中的绝大部分方案都可以直接使用。在 The UI 中,仅对
React.useId
API 进行了额外处理,其余均由 OpenInula 直接兼容,在 Vite 配置中将 React 动态替换为 OpenInula。运行时动态渲染 React JSX string
在 RenderGeneratedComponent.tsx 中实现,通过 babel 转移后执行代码。此处也可以实现为一个后端 API,在服务端完成相关工作。
本地运行
首先创建
.env
文件,填入以下内容:$API_KEY 为 OpenAI 的 API key。
之后运行
yarn
安装依赖。最终运行
yarn dev
启动本地开发环境。迭代 Roadmap