【DigiKey“智造万物,快乐不停”创意大赛】wifi语音识别灯控之技术规划篇
[复制链接]
本帖最后由 JohnMatthrew 于 2023-11-30 22:55 编辑
技术栈
后端: springboot+springdata+netty+grpc
前端:微信小程序
agent: promptulate框架
后端具体路线
先使用springboot搭建基本的restful交互,外挂emax broker进行通讯,使用hook进行emgx与后端平台进行交互,使用简单的物模型模板来对灯的状态进行建模,具体而言就是无类型的物模型。简单而言就是实现一个中台和一个小程序客户端(to c),中台可以自由配置产品以实现完整的生态链,控制它的发布和生命周期。
前端具体路线
使用微信官方前端设计语言设计出用户端,分为控制部分与数据部分。控制部分主要是通过服务器将开关灯以及颜色转换操作传到Arduino nano IOT 33中对等待进行控制;数据部分主要作为用户日志,将用户对灯带控制的数据记录并显示在小程序界面中。
agent具体路线
使用flask复用目前的pne框架,pne框架目前包含了必须的iot模块以及人类反馈模块,只需要提供相应的接口就可以连接后端。
Langchain是LLM开发中值得关注的框架之一。它提供了一种将外部工具与LLM结合的思路,并利用嵌入和向量数据库来克服上下文有限的问题。然而,Langchain本身存在一些问题,例如代码冗余,这对编程体验产生了负面影响。此外,Langchain并没有内置物联网(IoT)工具,这对于物联网开发者来说并不友好。与此相比,Promptlulate是由CWL社区和Promptlulate AI社区联合开发的LLM框架,它内置了IoT工具。这使得我们可以使用Promptlulate进行一些硬件实验,来感受自主智能体的魅力。Promptlulate提供了更好的编程体验,避免了冗余代码的问题,并为物联网开发者提供了方便和友好的环境。
在Promptlulate框架的思想下,要使用LLM控制你的IoT设备,首先需要创建相应的工具模块。由于MQTT协议是IoT设备最常用的协议,因此我选择使用Paho库来快速创建一个API封装器,用于发布设备控制指令。在这里,物联网的控制主要是开关量和数字量的控制,而数字量的实现相对较为复杂,因此本次提案暂时只包括了开关量的控制。
开关量的工具模块主要分为三部分。首先是通信模块,即API封装器。它的构造非常简单,使用Paho库来进行MQTT信息的发布
第二部分就是映射表和描述,将该工具的作用描述清楚给llm,并将自然语言映射到操作指令。但显然自然语言表达多种多样,单靠传统的条件判断和传统算法难以进行有效判断用于意图,但是借助大语言模型,这样的判断就变得非常简单,这就需要第三部分构建合适的prompt进行判断。
第三部分自然就是prompt构建,使用了角色扮演和格式化输出的技巧,使得大语言模型判断用户的意图并返回对应的序号,这部分借助promptulate的格式化字符串生成组件,开发起来非常简便。
到现在我们已经拥有了完整的iot开关量控制工具,可以根据用户的意图进行相应的电器控制,但是这还远远不够,我们需要的是llm能有根据环境自主决策,比如说根据现在的环境来给我自主选择合适的智能设备。
ReAct是Reasoning和Acting的缩写。
这个框架的基本思路是给一个Prompt,这个Prompt将Question拆解成几个步骤。分别是:
Tought: 思考自己应该采取的下一步动作。
Action:执行某个动作,并决定自己使用什么工具。
Finish[answer] 它将使用答案完成当前任务。
Observation:观察到的外部工具给到的结果,将作为新的提示输入给 ChatGPT。
技术指标
后端:实现物模型和产品模板,可以对智能灯进行物模型抽象化,获取灯的各种状态,事件以及报警信息。实现iwt鉴权等安全措施确保安全。引入agent智能化能力,通过humanfeedback 工具实现人在回路的智能体控制,当弱网或者没有网络的时候可以通过本地模块的语音模块进行控制。
前端:用户端用于手动控制灯带开关与颜色控制,同时收集并显示用户对灯的操作数据。
|