侧边栏壁纸
  • 累计撰写 68 篇文章
  • 累计收到 2 条评论

易语言对接本地AI做简易物联网中控的实操随记

2026-10-21 / 0 评论 / 2 阅读

易语言对接本地AI做简易物联网中控的实操随记

昨晚翻抽屉翻出来之前吃灰的ESP8266模块,突然想不用第三方云平台,用易语言写个小中控,对接本地跑的大模型来控制家里的插座,折腾俩小时居然跑通了,记下来免得下次忘。

前期准备的东西

  • 本地已经能正常跑的大模型API服务,我这边用的是ollama拉的qwen2:7b,开在默认11434端口就行,之前试过其他兼容OpenAI接口格式的本地模型也能用
  • 易语言5.9版本就够,不用装花里胡哨的第三方支持库,就勾选自带的互联网支持库、正则表达式支持库就行
  • 局域网内可通过HTTP请求触发的物联网终端,我这边用的是刷了ESPHOME的智能插座,这个我还没细测其他固件,反正只要能响应GET/POST请求的设备基本通用

核心代码部分,直接抄就能改

逻辑其实特别简单:接收用户的文本/语音输入,扔给本地大模型做意图识别,让模型返回固定格式的设备控制指令,再发HTTP请求给对应的物联网设备就行。提示词一定要写死约束,别让模型自由发挥扯废话。

.版本 2
.支持库 internet
.支持库 RegEx

' 调用本地AI识别控制意图
子程序 调用本地AI, 文本型, , 返回结构化控制指令
参数 用户输入文本, 文本型
局部变量 请求地址, 文本型
局部变量 提交数据, 文本型
局部变量 返回结果, 文本型
局部变量 正则, 正则表达式
局部变量 搜索结果, 搜索结果, , "0"

请求地址 = “http://127.0.0.1:11434/v1/chat/completions”
' 严格约束输出格式,只允许返回指定结构的JSON
提交数据 = “{"model":"qwen2:7b","messages":[{"role":"system","content":"你是智能家居控制中枢,根据用户输入返回对应JSON,格式为{\"device\":\"设备名\",\"action\":\"on/off\"},设备仅包含客厅插座、卧室灯,不要返回任何额外解释文字"},{"role":"user","content":"” + 用户输入文本 + “"}],"temperature":0}”
返回结果 = 到文本 (HTTP读文件 (请求地址, 1, , , 提交数据, “Content-Type: application/json”))
' 正则直接匹配返回的JSON片段,省得找JSON解析支持库
正则.创建 ("\{.*?\}", )
搜索结果 = 正则.搜索全部 (返回结果)
.如果真 (取数组成员数 (搜索结果) > 0)
    返回 (搜索结果 [1].取匹配文本 (返回结果, ))
.如果真结束
返回 ("{}")
这里真没必要特意找易语言的JSON解析库,提示词把输出格式约束死之后,用正则抠内容足够用,我之前试过加多层校验反而容易卡响应,够用就行。

调设备的时候踩的几个小坑

  • 给局域网物联网设备发控制请求的时候别加多余的请求头,我这边刷ESPHOME的设备,带了自定义UA头反而会被拒接,直接拼好GET请求地址访问就成,比如开客厅插座就是访问对应设备的/switch/客厅插座/turn_on路径
  • 调用大模型的时候temperature参数一定要设成0,不然偶尔模型会抽风返回一堆无关内容,控个灯还给你扯半小时用电小贴士,纯纯多余
  • 这套东西就放局域网玩就行,别把接口随便暴露到公网,安全相关的逻辑我还没细测,自己家里折腾着玩没毛病

哦对了,我后面打算加个离线语音输入的模块,现在还是得敲字发指令,等折腾顺了再补记录。反正整个程序编译完也就几百KB量级,比那些占资源的商业中控轻量多了,玩呗。

评论一下?

OωO
取消