Just A Rather Very Intelligent System:基于LLM的多智能体智能家居控制系统架构设计
Just A Rather Very Intelligent System:基于LLM的多智能体智能家居控制系统架构设计
一个创新的智能家居控制系统,利用大语言模型(LLM)和多智能体架构,实现自然语言控制、上下文感知和智能决策。
? 项目愿景
想象一下,你回到家,只需说一句"我回来了",系统就能智能地:
- ✅ 开启客厅灯光和空调
- ✅ 播放你喜欢的音乐
- ✅ 检查是否有待处理事项
- ✅ 根据时间和天气调整环境
这就是 Just A Rather Very Intelligent System (JARVIS) 的核心理念——让智能家居真正"理解"你的意图,而不仅仅是执行命令。
?️ 系统架构概览
整体架构图
┌─────────────────────────────────────────────────────────────┐
│ 用户交互层 (API Layer) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ HTTP API │ │ 语音入口 │ │ Webhook │ │
│ │ (Express) │ │ (可选) │ │ (米家场景) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 协调器 (Orchestrator) - 系统大脑 │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 单例模式,负责编排所有智能体和服务 │ │
│ │ • 流程控制 │ │
│ │ • 错误处理 │ │
│ │ • 统计监控 │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌───────────────────┼───────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 意图识别智能体│ │ 状态感知智能体│ │ 行为规划智能体│
│ IntentAgent │ │ ContextAgent │ │ PlannerAgent │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ LLM 服务 │ │ HA 服务 │ │ 缓存服务 │
│ (OpenAI) │ │ (设备控制) │ │ (性能优化) │
└──────────────┘ └──────────────┘ └──────────────┘
核心设计理念
多智能体协作架构:系统不是单一的AI,而是由多个专业智能体组成的团队,每个智能体负责特定职责,通过协调器进行协作。
? 智能体系统设计
1. 意图识别智能体 (IntentAgent)
职责:从自然语言中提取用户真实意图
工作流程:
typescript
// 规则匹配 → LLM精确识别 → 兜底策略
async execute(input: UserInput): Promise<Intent> {
// 1. 规则快速匹配 (优化响应速度)
const ruleBased = this.ruleMatch(input.message);
if (ruleBased && ruleBased.confidence > 0.8) {
return ruleBased;
}
// 2. LLM 精确识别
try {
return await this.llm.recognizeIntent(input.message);
} catch (error) {
// 3. 失败兜底
return ruleBased || {
intent: IntentType.GET_STATUS,
confidence: 0.5,
rawInput: input.message
};
}
}
支持意图类型:
BATH_PREPARE: 洗澡准备(开启热水器、浴霸、浴室灯)SLEEP: 睡觉模式(关闭灯光、调节空调、安防布防)GO_OUT: 出门模式(关闭所有设备、启动安防)GO_HOME: 回家模式(开启灯光、空调、播放音乐)ADJUST_TEMP: 温度调节(根据季节和时间智能调节)GET_STATUS: 状态查询(汇报当前家庭状态)
2. 状态感知智能体 (ContextAgent)
职责:实时获取和理解家庭环境状态
上下文信息提取:
typescript
async execute(): Promise<ContextState> {
const allDevices = await this.ha.getStates();
return {
timestamp: new Date().toISOString(),
timeOfDay: this.getTimeOfDay(), // morning/afternoon/evening/night
presence: this.detectPresence(allDevices), // 是否有人在家
temperature: this.extractTemperature(allDevices),
humidity: this.extractHumidity(allDevices),
devices: this.filterRelevantDevices(allDevices) // 筛选相关设备
};
}
智能设备筛选:不是所有设备都重要,系统会根据时间和场景筛选相关设备,减少LLM输入token。
3. 行为规划智能体 (PlannerAgent)
职责:结合意图和状态,生成可执行的行动计划
核心算法:
typescript
async execute(intent: Intent, context: ContextState) {
// 1. 尝试缓存命中
if (this.cache) {
const cached = this.cache.query(intent, context);
if (cached.hit) return { plan: cached.entry.plan, cacheHit: true };
}
// 2. 查找相似历史计划
const similarPlans = this.findSimilarPlans(intent, context);
// 3. LLM生成新计划
const plan = await this.generateNewPlan(intent, context, similarPlans);
// 4. 验证和优化
const validatedPlan = await this.validateAndRefinePlan(plan, context);
// 5. 存入缓存
if (this.cache && validatedPlan.cacheable) {
this.cache.store(intent, validatedPlan, context);
}
return { plan: validatedPlan, cacheHit: false };
}
计划生成示例:
json
{
"planId": "bath_evening_20251230",
"cacheable": true,
"steps": [
{
"service": "switch.turn_on",
"entityId": "switch.water_heater",
"targetName": "燃气热水器",
"description": "开启燃气热水器预热"
},
{
"service": "switch.turn_on",
"entityId": "switch.bathroom_heater",
"targetName": "浴霸",
"description": "打开浴霸预热"
},
{
"service": "light.turn_on",
"entityId": "light.bathroom",
"targetName": "浴室灯",
"description": "打开浴室灯",
"data": { "brightness": 255 }
}
]
}
? 核心服务层
1. LLM 服务 (LLMService)
功能:
- 意图识别:自然语言 → 结构化意图
- 计划生成:意图+状态 → 执行计划
- 计划验证:检查计划可行性
Prompt设计:
typescript
private INTENT_PROMPT = new ChatPromptTemplate([
new SystemMessage(`你是一个智能家居意图识别专家。请分析用户输入,返回JSON格式:
{
"intent": "bath_prepare|sleep|go_out|go_home|adjust_temperature|get_status",
"confidence": 0.0-1.0,
"timeHint": "optional"
}`),
new MessagesPlaceholder("messages")
]);
2. Home Assistant 服务 (HomeAssistantService)
API封装:
typescript
// 获取设备状态
async getStates(): Promise<DeviceState[]>
// 调用服务控制设备
async callService(service: string, entityId: string, data?: any)
// 批量执行计划
async executePlan(plan: Plan): Promise<ExecutionResult>
安全机制:
- 白名单设备控制
- 高风险操作确认
- 所有操作可追溯
3. 缓存服务 (CacheService)
性能优化核心:
- 上下文感知缓存:基于时间、设备状态的智能缓存
- 模糊匹配:微小差异场景下复用缓存
- 智能淘汰:基于使用频率和成功率的清理策略
性能提升:
- 响应时间:2.5s → 0.3s (88%提升)
- LLM调用:减少70%
- 缓存命中率:>60%
? 完整工作流程
用户输入到执行的完整链路
用户输入: "我要洗澡了"
│
▼
┌─────────────────────────────────────────────┐
│ 协调器 processUserIntent() │
└─────────────────────────────────────────────┘
│
├─► 1. 意图识别 (IntentAgent)
│ └─► "bath_prepare" (置信度: 0.95)
│
├─► 2. 状态感知 (ContextAgent)
│ └─► { time: "evening", temp: 24°C, devices: [...] }
│
├─► 3. 计划生成 (PlannerAgent)
│ ├─► 缓存查询 → 未命中
│ ├─► LLM生成计划
│ ├─► 验证优化
│ └─► 存入缓存
│
└─► 4. 计划执行 (Orchestrator)
├─► 调用HA服务
├─► 记录执行结果
└─► 更新缓存成功率
错误处理和降级策略
typescript
// 每个环节都有降级策略
try {
// 主流程
} catch (error) {
// LLM失败 → 规则匹配兜底
// HA失败 → 返回模拟数据
// 缓存失败 → 继续执行,不影响主流程
}
? 技术栈选择
核心技术
- 语言: TypeScript (类型安全、现代化)
- 框架: Express (轻量、稳定)
- LLM框架: LangChain + LangGraph (智能体编排)
- HTTP客户端: Axios (可靠、功能丰富)
- 验证: Zod (运行时类型验证)
为什么选择这些技术?
- TypeScript: 大型AI系统需要严格的类型安全
- LangChain: 成熟的LLM应用框架,支持智能体模式
- Express: 稳定的Web框架,适合API服务
- 单例模式: 协调器使用单例,确保全局状态一致
? 系统状态监控
实时统计指标
typescript
interface SystemStatus {
components: {
llm: boolean; // LLM服务健康
ha: boolean; // HA服务健康
cache: boolean; // 缓存服务健康
};
stats: {
totalRequests: number; // 总请求数
successRate: number; // 成功率
cacheHits: number; // 缓存命中数
};
timestamp: string;
}
监控端点
GET /api/status: 系统状态检查GET /api/health: 健康检查GET /api/cache/stats: 缓存统计
? 安全设计
1. 输入验证
typescript
// Zod验证
const UserInputSchema = z.object({
message: z.string().min(1).max(200),
userId: z.string().optional(),
context: z.record(z.any()).optional()
});
2. 速率限制
typescript
// 生产环境启用
if (process.env.NODE_ENV !== "development") {
app.use(rateLimitMiddleware(10, 60000)); // 1分钟10次
}
3. 设备白名单
- 只允许控制预定义的设备
- 高风险操作需要二次确认
- 所有操作记录日志
? 创新亮点
1. 多智能体协作
不同于传统的单体AI,JARVIS采用专业分工的智能体团队:
- 意图智能体:专注理解用户
- 状态智能体:专注环境感知
- 规划智能体:专注决策制定
2. 上下文感知缓存
传统缓存只看输入,JARVIS的缓存理解上下文:
typescript
// 相同意图,不同时间,不同缓存
"我要洗澡了" (晚上) → 缓存A
"我要洗澡了" (早上) → 缓存B
3. 混合策略
规则匹配 + LLM识别,兼顾速度和准确性:
- 简单场景:规则匹配(毫秒级)
- 复杂场景:LLM识别(准确)
- 失败降级:规则兜底(可靠)
4. Demo模式
无需真实HA环境即可测试:
bash
curl -X POST http://localhost:3000/api/demo \
-H "Content-Type: application/json" \
-d '{"message": "我要洗澡了"}'
? 性能优化
1. 响应速度优化
- 缓存命中: 0.3s
- 规则匹配: 0.5s
- 完整流程: 2-3s
2. 成本优化
- LLM调用减少70%
- Token使用优化(只传相关设备)
- 批量操作减少API调用
3. 资源优化
- 内存缓存,无外部依赖
- 智能淘汰,防止内存泄漏
- 按需加载设备状态
?️ 部署和配置
环境变量
bash
# 必需
OPENAI_API_KEY=sk-...
# 可选
HOME_ASSISTANT_URL=http://homeassistant.local:8123
HOME_ASSISTANT_TOKEN=your_token
PORT=3000
NODE_ENV=production
启动方式
bash
# 开发
pnpm dev
# 生产
pnpm build
pnpm start
Docker部署(推荐)
dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN pnpm install --prod
COPY dist ./dist
EXPOSE 3000
CMD ["node", "dist/app.js"]
? 扩展性设计
1. 多LLM支持
typescript
interface LLMConfig {
provider: "openai" | "anthropic" | "local";
model: string;
apiKey: string;
}
2. 多智能家居平台
typescript
// 抽象接口
interface SmartHomeService {
getStates(): Promise<DeviceState[]>;
callService(service: string, entityId: string, data?: any): Promise<any>;
}
// Home Assistant实现
class HomeAssistantService implements SmartHomeService { }
// 小米米家实现(未来)
class MiHomeService implements SmartHomeService { }
3. 语音入口集成
- 小爱音箱 → Webhook触发
- Siri/Google Assistant → 自定义快捷指令
- 麦克风 → WebSocket实时语音
? 使用示例
场景1:洗澡准备
bash
curl -X POST http://localhost:3000/api/intent \
-H "Content-Type: application/json" \
-d '{"message": "我要洗澡了"}'
# 响应
{
"success": true,
"data": {
"intent": "bath_prepare",
"context": { "timeOfDay": "evening", "temperature": 24, ... },
"plan": { "steps": [/* 3-5个设备操作 */] },
"execution": { "status": "success", "results": [...] },
"cacheHit": false
}
}
场景2:回家
bash
curl -X POST http://localhost:3000/api/intent \
-H "Content-Type: application/json" \
-d '{"message": "我回来了"}'
# 系统会根据时间自动调整:
# - 晚上:开灯、空调、音乐
# - 白天:只开空调、窗帘
场景3:状态查询
bash
curl -X POST http://localhost:3000/api/intent \
-H "Content-Type: application/json" \
-d '{"message": "现在家里怎么样"}'
# 系统会汇报:
# - 温度湿度
# - 设备状态
# - 异常告警
? 用户体验设计
自然语言理解
系统支持多种表达方式:
- "我要洗澡了" → bath_prepare
- "准备洗澡" → bath_prepare
- "洗个澡" → bath_prepare
- "浴室准备" → bath_prepare
上下文记忆
- 记住用户偏好(如空调温度)
- 学习生活习惯(如晚上自动调暗灯光)
- 适应季节变化(如冬季自动开启暖气)
智能反馈
- 执行成功:简短确认
- 执行失败:说明原因+建议
- 部分成功:列出成功和失败项
? 未来规划
Phase 1: MVP (已完成)
- ✅ 基础多智能体架构
- ✅ 意图识别 + 状态感知
- ✅ 计划生成 + 执行
- ✅ 缓存优化
- ✅ Demo模式
Phase 2: 智能化 (进行中)
- ⏳ 学习型偏好记忆
- ⏳ 多轮对话支持
- ⏳ 情感识别(语气分析)
- ⏳ 预测性控制(基于习惯)
Phase 3: 生态扩展
- ⏳ 更多智能家居平台(小米、涂鸦等)
- ⏳ 语音助手集成(小爱、Siri)
- ⏳ 移动App
- ⏳ 可视化配置界面
Phase 4: 高级功能
- ⏳ 多用户支持 + 权限管理
- ⏳ 场景自动化(IFTTT风格)
- ⏳ 能源优化(智能调度)
- ⏳ 故障自愈(设备异常处理)
? 设计哲学
1. 简单至上
- 清晰的代码结构
- 最小化配置
- 开箱即用
2. 安全第一
- 默认安全
- 可审计
- 可回滚
3. 性能优先
- 缓存为王
- 异步处理
- 资源优化
4. 可扩展性
- 模块化设计
- 标准化接口
- 插件化架构
? 贡献指南
欢迎贡献!你可以:
- 提交Issue讨论需求
- 提交PR改进代码
- 分享使用场景
- 完善文档
? 总结
JARVIS 不仅仅是一个智能家居控制系统,它代表了一种新的人机交互范式:
传统方式:用户 → 命令 → 设备
JARVIS方式:用户 → 意图 → 理解 → 决策 → 执行
通过LLM和多智能体架构,我们让系统真正"理解"用户,而不是简单地执行命令。这不仅提升了用户体验,也为智能家居的未来发展提供了新的思路。
项目地址: JustARatherVeryIntelligentSystem
技术栈: TypeScript + LangChain + Home Assistant
许可证: MIT
让科技真正理解生活,让智能家居更懂你。