基于LLM训练实现智能家居聊天机器人的函数执行能力
基于LLM实现智能家居动作执行聊天机器人方案
核心思路
不需要从头训练大模型,通过Prompt工程+动作解析层就能快速实现需求——让LLM识别用户的设备控制指令,输出自然语言回复的同时,标记可被程序解析的动作指令,再由后端脚本触发API/代码执行。如果Prompt效果达不到预期,再用Ollama做轻量微调优化。
具体实现步骤
1. 用System Message定义助手行为
给模型明确规则,让它知道何时输出动作标记:
你是智能家居助手,当用户提出设备控制需求(如开关灯、调节家电等)时,先回复自然语言确认操作,同时在回复末尾用
[[ACTION:动作类型,设备名称]]格式标记动作指令;非控制类问题直接正常回答。
比如用户输入“打开客厅的灯”,模型应输出:我将打开客厅的灯 [[ACTION:turn_on,living_room_light]]
2. 搭建动作解析与执行层
在Ollama输出后,用脚本(以Python为例)监听并解析动作标记,触发对应API/代码:
import ollama import re # 调用Ollama模型 def get_llm_response(user_prompt): system_prompt = "你是智能家居助手,当用户提出设备控制需求(如开关灯、调节家电等)时,先回复自然语言确认操作,同时在回复末尾用`[[ACTION:动作类型,设备名称]]`格式标记动作指令;非控制类问题直接正常回答。" response = ollama.chat( model="llama3", # 替换成你用的Ollama模型 messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt} ] ) return response["message"]["content"] # 执行设备控制动作 def run_device_action(action_type, device_name): # 替换为你的实际API调用或设备控制代码 if action_type == "turn_on": print(f"触发API:打开{device_name}") # 示例:requests.post("http://your-smart-home-api/control", json={"action": "on", "device": device_name}) elif action_type == "turn_off": print(f"触发API:关闭{device_name}") # 处理用户输入的完整流程 def handle_user_input(user_input): llm_reply = get_llm_response(user_input) print("助手回复:", llm_reply) # 提取动作标记 action_pattern = re.search(r"\[\[ACTION:(.*?),(.*?)\]\]", llm_reply) if action_pattern: action = action_pattern.group(1) device = action_pattern.group(2) run_device_action(action, device) # 测试示例 handle_user_input("打开客厅的灯")
3. 可选:用Ollama轻量微调优化
如果Prompt工程的指令识别准确率不够,可以用Ollama微调模型:
- 准备训练数据(JSONL格式),每一行对应一组输入输出:
{"prompt": "打开客厅的灯", "response": "我将打开客厅的灯`[[ACTION:turn_on,living_room_light]]`"} {"prompt": "关闭卧室空调", "response": "我将关闭卧室空调`[[ACTION:turn_off,bedroom_ac]]`"} {"prompt": "现在室温多少?", "response": "当前室温为25摄氏度"} - 创建Modelfile:
FROM llama3 # 基础模型 ADAPTER ./smart_home_data.jsonl # 训练数据路径 PARAMETER temperature 0.1 # 降低随机性,提升指令一致性 - 执行微调命令:
ollama create smart-home-assistant -f Modelfile
之后就可以用ollama run smart-home-assistant调用微调后的模型。
学习资源参考
- Ollama官方Modelfile教程:重点掌握适配器微调、参数配置的用法
- LLM工具调用核心逻辑:学习如何通过Prompt引导模型输出可解析的结构化指令
- 本地智能家居助手示例:参考同类项目的Prompt设计与动作触发流程
内容的提问来源于stack exchange,提问作者Leon B
相关产品推荐
相关产品推荐

