AI家居咨询配置:从零搭建可对话的智能家居助手
想自己搭一个能回答家居设备问题的 AI 助手,核心是把大模型接口、家居设备信息和对话逻辑串起来。
本文以一台普通云服务器为例,演示从零完成 AI家居咨询配置 的完整流程,适合零基础用户按步骤操作。
先确认你的使用场景和准备条件
这套配置适合以下场景:你有一台能联网的 Linux 服务器,希望用自然语言查询设备状态或获取操作建议,比如“客厅灯怎么调色温”“空调滤网多久清洗”。
不需要购买额外硬件,但需要准备三样东西:
- 一台 2 核 4G 以上的云服务器,系统建议 Ubuntu 22.04 或 Debian 12
- 一个大模型 API Key,例如 OpenAI 兼容接口或国内可用的模型服务
- 家居设备的控制接口文档,或者一份设备清单表格(设备名、房间、可控操作)
登录服务器后先确认基础环境:
cat /etc/os-release
python3 --version
pip3 --version
如果 Python 版本低于 3.10,先升级;
没有 pip 的用 apt install python3-pip 安装。
安装依赖并准备项目目录
在 /opt 下创建项目目录,避免和系统文件混在一起:
mkdir -p /opt/ai-home-assistant
cd /opt/ai-home-assistant
python3 -m venv venv
source venv/bin/activate
pip install fastapi uvicorn openai python-dotenv
这里用 FastAPI 提供 HTTP 接口,openai 库兼容大多数大模型服务。
安装完成后用 pip list 确认包已存在。
接着创建环境变量文件,存放 API Key 和模型地址:
cat > .env <<'EOF'
API_KEY=你的密钥
BASE_URL=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini
EOF
把 BASE_URL 换成你实际使用的服务地址,模型名也按服务商文档填写。
不要把这个文件提交到公开仓库。
编写家居咨询对话配置
新建 main.py,核心是把设备清单作为系统提示词的一部分,让模型在回答时参考真实设备信息:
import os
from fastapi import FastAPI
from pydantic import BaseModel
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.getenv("API_KEY"), base_url=os.getenv("BASE_URL"))
app = FastAPI()
DEVICE_INFO = """
客厅:吸顶灯(支持开关、亮度、色温),空调(支持开关、温度、模式)
卧室:床头灯(支持开关、亮度),窗帘(支持开合百分比)
"""
class Query(BaseModel):
question: str
@app.post("/ask")
def ask(q: Query):
resp = client.chat.completions.create(
model=os.getenv("MODEL_NAME"),
messages=[
{"role": "system", "content": f"你是家居咨询助手,根据以下设备清单回答:{DEVICE_INFO}"},
{"role": "user", "content": q.question}
]
)
return {"answer": resp.choices[0].message.content}
保存后用 uvicorn main:app --host 0.0.0.0 --port 8000 启动。
如果提示端口占用,把 8000 改成 8001 或其他空闲端口。
避坑:配置中最容易出错的三个地方
API Key 读取为空:用 python3 -c "from dotenv import load_dotenv; load_dotenv(); import os; print(os.getenv('API_KEY'))" 检查是否能打印出密钥。
如果为空,确认 .env 和 main.py 在同一目录。
模型返回超时或连接失败:先 curl 测试服务地址是否可达:
curl -I https://你的服务地址/v1/models
如果返回 401,说明密钥无效;
返回超时,检查服务器出网和 DNS。
中文回答乱码或截断:在请求参数中加上 max_tokens=500 和 temperature=0.3,避免回答过长被截断,同时降低随机性。
验证配置是否生效
服务启动后,用 curl 发一条测试问题:
curl -X POST http://127.0.0.1:8000/ask \
-H "Content-Type: application/json" \
-d '{"question":"客厅灯怎么调暗"}'
预期返回一段包含“亮度”或“调光”的 JSON 文本。
如果返回 500,查看终端日志,重点看 API Key 和模型名是否正确。
再换一个设备问题,比如“卧室窗帘能开一半吗”,确认助手能引用设备清单中的能力,而不是泛泛回答。
两次回答都正常,说明 AI家居咨询配置 的基础链路已经跑通。
常见疑问
没有公网 IP 可以吗? 可以,先在服务器本地用 127.0.0.1 测试,确认逻辑正常后再考虑用 Nginx 反向代理或内网穿透暴露服务。
设备清单要写多细? 至少写清设备名、所在房间和可控操作。
越具体,模型回答越准确,但不要写入密码或敏感信息。
能不能接入真实设备控制? 本文只做咨询问答,不直接下发控制指令。
如果要控制设备,需要额外对接厂商 API 或本地网关,并增加权限校验。
完成以上步骤后,你已经有一个能回答家居设备问题的本地助手。
后续可以按房间拆分提示词、增加历史对话记录,或把接口接到网页表单上,逐步完善自己的 AI家居咨询配置。