基于LLM的IoT设备Skill控制系统
是一个基于大语言模型(LLM)的物联网设备控制系统,通过自然语言指令控制各种硬件设备。系统采用模块化的SKILL架构,支持多种通信协议,并提供智能的技能匹配和按需加载机制。
·
–CQMCU 2026.1.29
一个超实用的 “物联网设备语音控制工具”,用大白话翻译下来就是:用日常中文说话,就能控制灯、风扇、水泵这些硬件设备,核心是靠大语言模型(LLM)帮你 “听懂” 指令,再调动对应的控制模块干活。
上视频演示
基于LLM的IoT设备Skill控制系统
项目概述
SKILL_SERVER 是一个基于大语言模型(LLM)的物联网设备控制系统,通过自然语言指令控制各种硬件设备。系统采用模块化的SKILL架构,支持多种通信协议,并提供智能的技能匹配和按需加载机制。
功能特性
- 自然语言控制:使用中文指令控制硬件设备
- 多SKILL支持:模块化设计,支持多个SKILL独立运行
- LLM意图识别:通过大语言模型分析输入,智能选择最合适的SKILL
- 按需加载:实时加载和执行SKILL,提高系统效率
- 多种通信协议:支持串口(USART)和MQTT通信
- 统一控制接口:所有SKILL提供统一的控制接口
- 配置驱动:从SKILL.md文件读取技能配置信息
系统架构
核心组件
SKILL_SERVER/
├── main.py # 主程序入口
├── llm_controller.py # LLM指令解析控制器
├── config.py # 全局配置文件
└── mySKILL/
├── UsartSkill/ # LED控制 + 串口通信
├── MqttSkill/ # 风扇控制 + MQTT通信
└── WaterPumpSkill/ # 水泵控制 + 串口通信
硬件要求
- Arduino开发板(已烧录相应固件)
- USB数据线连接Arduino到电脑
- 相应的硬件模块(LED、风扇、水泵等)
软件依赖
- Python 3.7+
- pyserial >= 3.5
- paho-mqtt >= 1.6.0
- openai >= 1.0.0
使用方法
启动程序
python main.py
交互指令
直接输入自然语言指令,系统会通过LLM进行意图识别并匹配相应的SKILL:
LED控制:
- 打开灯 / 点亮LED / 开灯 / 打开LED
- 关闭灯 / 熄灭LED / 关灯 / 关闭LED
风扇控制:
- 打开风扇 / 启动风扇 / 开风扇 / 开启风扇
- 关闭风扇 / 停止风扇 / 关风扇 / 停止风扇
水泵控制:
- 打开水泵 / 启动水泵 / 开泵 / 开启水泵
- 关闭水泵 / 停止水泵 / 关泵 / 停止水泵
通用指令:
- exit → 退出程序
执行流程
- 意图识别:系统通过LLM分析用户输入,识别出最合适的SKILL
- 参数提取:根据选择的SKILL和用户输入,从LLM获取执行参数
- 技能执行:加载并执行选中的SKILL,通过相应的通信协议控制硬件设备
- 结果返回:返回执行结果给用户
SKILL开发指南
创建新SKILL
- 创建目录结构
mySKILL/YourSkill/
├── SKILL.md # SKILL文档和配置
├── scripts/
│ └── your_comm.py # 通信控制类
└── resources/
├── skill_config.py # SKILL配置
└── requirements.txt # 依赖包
- 配置SKILL.md文件(想自己加功能)
在 SKILL.md 文件中添加基本配置信息:
name: YourSkill
description: 你的SKILL描述
protocol: usart # 或 mqtt
module_name: your_comm
# YourSkill
## 描述
详细描述你的SKILL功能...
## 支持的指令
- 指令1
- 指令2
## Resources
- scripts/your_comm.py: 通信控制模块
- resources/skill_config.py: 技能配置文件
- resources/requirements.txt: 依赖包管理文件
- 实现通信控制类
在 scripts/your_comm.py 中实现通信控制类,必须包含 control() 方法:
class ArduinoSkill:
def __init__(self):
# 初始化代码
def control(self, status):
"""
统一的控制方法
:param status: "ON" 或 "OFF"
:return: 执行结果(字符串)
"""
# 实现控制逻辑
return "执行结果"
def close(self):
# 关闭连接代码
配置说明
全局配置 (config.py)
# LLM配置
LLM_API_KEY = "your_api_key"
LLM_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
LLM_MODEL = "qwen-plus"
SKILL配置 (SKILL.md)
每个SKILL的配置信息都存储在其对应的 SKILL.md 文件中,包括:
- name: SKILL名称
- description: SKILL描述
- protocol: 通信协议(usart或mqtt)
- module_name: 通信模块名称
- 支持的指令: SKILL支持的自然语言指令列表
业务流程(以灯控程序为例)

关键程序代码
def main():
skills = get_available_skills()
if not skills:
print("错误:未找到任何SKILL")
return
print("===== 可用的SKILL列表 =====")
for i, skill in enumerate(skills, 1):
print(f"{i}. {skill}")
print("系统将根据输入通过LLM进行意图识别,并按需加载SKILL")
print("输入exit退出程序\n")
try:
while True:
user_input = input("请输入指令:")
if user_input.lower() == "exit":
break
print(f"\n[尝试] 使用意图识别路由...")
target_skill = execute_with_intent_routing(user_input, skills)
if not target_skill:
print("所有SKILL均无法解析该指令")
# 直接从LLM获取反馈
llm_controller = LLMHardwareController(
arduino_skill=None,
llm_api_key=config.LLM_API_KEY,
base_url=config.LLM_BASE_URL,
model=config.LLM_MODEL,
skill_type="IntentRouter",
llm_prompt=user_input,
ui_messages=None
)
llm_response = llm_controller.parse_llm_instruction(user_input)
print(f"LLM反馈: {llm_response}")
print("\n程序已退出")
except KeyboardInterrupt:
print("\n程序已中断")
except Exception as e:
print(f"发生错误:{e}")
更多推荐



所有评论(0)