当前位置: 首页 > news >正文

基于AI的动态界面交互系统概念探索

基于AI的动态界面交互系统概念探索

场景预设

假如我有一个房间,房间中卧室,厨房,家具有有空调,洗衣机,灯泡....
写成结构化的形式就是:

{title="房间-家具表",rooms=[{name="卧室",id="bed_room",items=[{name="床头灯",id="bed_light"values=[{name="开关",id="open"type="bool"},{name="亮度",id="brightness",type="num",range=[0,100]}]},{name="空调",id="air_conditioner",....}]},{name="厨房",id="kitchen"items=[{name="抽油烟机",id="range_hood"values=[{name="模式",id="mode",type="enum",enum=["default","power","off","quiet"]},{name="强度",id="power",type="num",range=[0,5]}]},......]}......]
}

上述结构称为 "元数据",在代码中写作metaRoomData
而我们的目地是编写一个智能家居系统,通过网页软件实现对家中电器的控制
基于上述元数据定义,我们很容易想到组织api的方法:

set/room_id/furniture_id/value_id?value=${newValue}
get/room_id/furniture_id/value_id

通过上面这对get/set,我们可以实现对任意家具状态的控制
例如

http(`${serverIP}:8080/set/${bedroom}/${bedlight}/${open}?value=${isOpen?"true":"false"}`).request()

而在页面中,我们可以这样使用

<body><button id="bedLight" onClick="switchBedLight">switchLight</button>
</body>
<script>function updateText(){button.innerHtml=state?"trun off":"turn on";}function getBedLight(){return await request(`get/bed_room/bed_light/open`)}button = getElementById("bedLight")state = getBedLight();function switchBedLight(){await request(`set/bed_room/bed_light/open?value=${!state}`)state = getBedLight();updateText();}updateText();
</script>

对于大部分静态网页,以及程序生成的动态网页,这种方法已经够用了.

在运行时引入AI

问题

让我们尝试在运行时使用AI构建页面
工作方式为

1.前端--(用户请求)-->服务器
2.服务器--(接口清单,用户请求,系统提示词)-->LLM
3.LLM--(网页代码)-->服务器
4.服务器--(组装页面)-->前端
5.前端--(渲染呈现)-->用户

不同于在codex中让ai创建一个页面,在上述过程中,并没有程序员的介入
用户可以只能输入
"所有的灯"
然后上述链条工作,AI基于这个需求产出了页面

然后这个页面,就要在只经过了程序检查的情况下,直接渲染在浏览器中.
如果出现某个逻辑错误,用户显然不能自己打开f12修复bug.

这种需要直接与用户在运行时交互的特性
要求AI生成的网页具有尽可能高的可靠性

增加抽象层

要解决编码本身的问题,最好的方案无疑是增加抽象层.

一套抽象接口所能提供的功能几乎总是其底层的的子集
但设计良好的话,抽象接口也可以让特定的需求集合的实现变得极为简单可靠

看上述场景,我们可以发现,所有的value都遵循一定的模式,
int,bool,enum,三种类型基本可以覆盖90%的家具的状态
所以,针对床头灯的开关,以及其他什么家具的所有bool状态
我们这里可以封装一个 bool-button

<bool-button room="bed_room" item="bed_light" value="open"/>

bool-button的工作方式大概是:

<template><button id="button" onClick="switchBool">switchLight</button><script>var metaData=window.metaRoomData;var roomId="";var itemId="";var valueId="";function updateText(){button.innerHtml=state?"trun off":"turn on";}function getState(){return await request(`get/${roomId}/${itemId}/${valueId}`)}button = getElementById("button")state = getBedLight();function switchBool(){await request(`set/${roomId}/${itemId}/${valueId}?value=${!state}`)state = getState();updateText();}thisComponent.onInit=(){roomId=thisComponent.args.room;itmeId=thisComponent.args.item;valueId=thisComponent.args.value;if(!metaData.has(roomId,itmeId,valueId)){console.Error("err")};updateText();}</script>
</template>

我们还可以照此继续写出int-slider enum-select 等组件
他们封装了完整的业务逻辑,只需传入自己所绑定的数据ID就可以工作,并且能够检查ID是否真的存在,具有一定的纠错能力.

生成前后的工作

生成前

我们需要收集元数据,将其转换为自然语言表述,这很容易,但还是最好通过代码实现
之后我们就可以对LLM说,

在卧室(bed_room),有家具:床头灯(bed_light),空调(air_conditioner)
在厨房(kitchen),有抽油烟机(range_hood)......

我们可以先要求AI选出用户需求所涉及的家具,输出他们的id.
然后程序再从元数据中取出那些家具的具体状态

那么下一轮的提示词就是

根据用户需求:...
生成一个页面,使用给定组件
组件有...
如何使用他们...
而相关的家具与状态有...
生成格式要求...
你需要准确填写id作为组件的参数

生成后

当我们将生成请求发送给了LLM,并获取到了返回的页面,就可以从回复中提取我们需要的页面代码
可以先检验其中id的有效性,并要求LLM仔细考虑无效的id,并修改页面.这样就可以无需将元数据直接暴露给页面
最后将页面返回给前端页面,渲染给用户使用

总结

本文章仅在抽象层面做讨论,上述代码均不是最终可用的系统实现
在实际开发中使用vue实现bool-button等组件或许会是更好的选择
而如果真的存在某个需要上述设想落地的需求场景,那么安全性问题,或许实际会消耗我们更多精力

http://www.rkmt.cn/news/1512997.html

相关文章:

  • 2026广州商标注册全指南|中英文/图形组合商标起名查重、高精度近似排查、恶意异议答辩、绝对/相对理由驳回复审、跨类目全类别品牌布局、合规风控代理服务机构甄选TOP3 - 资讯快报
  • 2026视频文案提取教程:高准确率工具合集,电脑手机在线都能用
  • 【篮球英语】09 防守技术:从盯人到协防
  • Google 推倒“巴别塔”:70+语言实时同传,边说边译,连语气都保留
  • MuleSoft如何实现企业级LLM编排与治理
  • 11个先进RAG策略组合,让你的系统准确率飙升94%!收藏必备
  • 企业网管实战:用MAC-VLAN给会议室加把‘锁’,防止外来电脑蹭网(华为交换机配置)
  • VGA 音乐游戏 FPGA 设计 Verilog Vivado
  • 寄存器组 register_bank FPGA 设计 VHDL Vivado
  • 文字提取神器!免费开源离线OCR工具!图片、PDF一键提取复制文字,支持批量识别!还能生成和解析二维码
  • 2026杭州考研机构拟人测评|像挑室友一样选机构!暑期集训/公共课/专业课真实扒皮 - 品牌鉴赏师
  • 【广州楼市研判系列57】2026置换认知重构|破除换房误区:置换从不只是搬家扩容,本质是家庭房产迭代升级 - 资讯快报
  • 通达信缠论插件:从手工分析到智能交易的5步蜕变指南
  • 2026年 印刷包装厂家推荐榜单:纸箱、彩盒、手提袋与精装盒源头工厂实力解析 - 品牌发掘
  • 【信息科学与工程学】【物理/化学和工程技术】第一百五十六篇 塑性力学01
  • ESP32实战:从ADC采样到DAC输出的完整信号链解析
  • 历年真题!【中药学】高频易错题汇总(卷号:06111014_01)
  • 【Springboot毕设全套源码+文档】基于SSM的网上花店销售系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 小白必看!大模型不一定先从语言开始:收藏这份多模态学习指南
  • 三分钟搞定微信投票,全套制作流程分享 - 资讯快报
  • idea的Maven控制台乱码解决方案
  • 别再只盯着H.264码流了!手把手教你用Python解析SPS/PPS里的关键信息(附完整代码)
  • MATLAB/Simulink环境下LQG算法驱动的主动悬架控制仿真工程包
  • Visual C++运行库一键修复:终极解决方案彻底解决Windows软件兼容性问题
  • 企业AI Agent部署4大误区+5步落地实操,小白程序员必收藏!
  • 腾讯地图「商户招工用工」功能上线,速领38元用工补贴
  • 如何用ChanlunX在3分钟内完成专业缠论分析:告别手工绘图的终极指南
  • 2026年6月泉州装修设计优选品牌:本土化服务标杆“三星装饰”凭什么让业主少花冤枉钱? - 资讯快报
  • 【信息科学与工程学】【物理/化学和工程技术】第一百五十九篇 材料力学-晶体力学02
  • 3分钟掌握WaveTools:解锁《鸣潮》120FPS的终极指南