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

用易语言对接本地大模型做个简易物联网控制小工具

2026-10-19 / 0 评论 / 7 阅读

用易语言对接本地大模型做个简易物联网控制小工具

昨天蹲在工位摸鱼的时候突然想,为啥每次开书房的智能插座还要摸手机,能不能整个电脑上点一下就触发的小工具,还能让本地AI自动识别我输的自然语言转指令?翻了半天之前存的易语言模块,居然半小时就搓出来了,步骤记一下免得下次重装系统忘了。

先把前置依赖凑齐

  • 首先本地要跑着支持OpenAI格式接口的大模型,我这边用Ollama部署的Qwen2-7B 4bit量化版,默认开127.0.0.1:11434的接口,不用额外改配置就能用,模型大小看自己设备选就行
  • 易语言这边装个精易模块就行,版本不用追新,能发POST请求、能解析JSON就够,之前试过好几年前的老版本也没报错
  • 要控制的物联网设备得支持Webhook触发,我用的是自己刷了ESP8266固件的插座,本身留了POST触发地址;如果是米家、涂鸦系的设备,可以搭个HomeAssistant做中转,我这边暂时没接HA,就先测插座开关功能

核心逻辑对应的代码

说白了逻辑特别简单,就是把用户输入的文字发给本地大模型,强制要求它返回固定的设备指令,再把指令POST给对应设备就行,核心代码直接抄:

.版本 2
.支持库 spec

.子程序 _触发按钮_被单击
.局部变量 提交数据, 文本型
.局部变量 返回文本, 文本型
.局部变量 解析结果, 类_json
.局部变量 AI识别结果, 文本型

' 拼接请求本地大模型的参数,提示词一定要写死输出规则
提交数据 = "{\"model\":\"qwen2:7b\",\"messages\":[{\"role\":\"system\",\"content\":\"你只能返回两种结果:用户要开插座返回ON,关插座返回OFF,不准有其他任何多余内容\"},{\"role\":\"user\",\"content\":\"" + 输入框.内容 + "\"}],\"temperature\":0}"
返回文本 = 网页_访问_对象 ("http://127.0.0.1:11434/v1/chat/completions", 1, 提交数据, , , "Content-Type: application/json", )
' 解析大模型返回的JSON,拿最终指令
解析结果.解析 (返回文本)
AI识别结果 = 解析结果.取属性 ("choices[0].message.content").取数据文本 ()
调试输出 ("识别到指令:" + AI识别结果)
' 把指令发给对应物联网设备
.如果真 (AI识别结果 = "ON")
    网页_访问_对象 ("http://192.168.3.23/device/on", 0)
.如果真结束
.如果真 (AI识别结果 = "OFF")
    网页_访问_对象 ("http://192.168.3.23/device/off", 0)
.如果真结束

几个踩过的小坑

  • 给大模型的system提示词一定要把规则写死,temperature参数设成0,别让它自由发挥,不然你输“我有点冷”它可能扯一堆没用的,不返回固定指令,这个我还没细测要不要加结果校验,目前提示词写死了用着还挺稳
  • 本地模型别选太大参数的,不然响应慢,选个适配自己设备的量化版就行,我这边老办公本跑7B 4bit的版本响应大概一两秒,完全够用
  • 物联网设备的局域网地址最好在路由器里绑静态IP,不然路由重启后IP飘了,指令发过去根本找不到设备,我之前就因为这个白折腾了十几分钟

对了,要是想加控制灯、空调的功能,多给system提示词加几个对应的输出规则就行,我这两天打算给这个小工具加个全局热键和语音输入,搓完了再记。

评论一下?

OωO
取消