智能家居Agentic AI系统:提示工程架构师的优化方法
Agentic AI的本质是具备目标导向的自主智能体,其核心运行逻辑遵循感知-决策-行动循环(Perception-Action Cycle, PAC)graph TDA[感知:收集多源数据] --> B[理解:上下文建模与意图识别]B --> C[决策:目标规划与冲突解决]C --> D[行动:设备控制与用户交互]D --> E[反馈:收集结果与用户评价]E --> A[更新感知模型]感知层。
智能家居Agentic AI系统:提示工程架构师的优化方法
一、引言:从“规则盒子”到“智能伙伴”的智能家居革命
清晨7点,你揉着眼睛坐起来——窗帘已经自动拉开30%(不是全敞,因为窗外正飘着小雨),床头柜上的咖啡杯里装着70℃的热拿铁(你上周说过“凉咖啡会让胃难受”),恒温器悄悄把温度调到了24℃(昨天你感冒时嘟囔“房间有点冷”)。这时手机弹出提示:“今天有小雨,我帮你把阳台的衣服收好了,玄关的伞已经放在显眼位置~”
这不是科幻电影里的场景,而是Agentic AI智能家居系统的日常。与传统“if-else规则引擎”驱动的智能家居不同(比如“早上7点拉窗帘”“温度低于20℃开暖气”),Agentic AI系统中的“智能体(Agent)”具备自主感知、上下文理解、目标规划能力——它不是“执行指令的工具”,而是“理解你的伙伴”。
而让这些Agent真正“懂你”的核心技术,正是提示工程(Prompt Engineering)。作为提示工程架构师,你需要为Agent的“大脑”(大语言模型,LLM)设计精准的“思考框架”,让它能在复杂场景中做出符合用户需求的决策。
二、基础认知:Agentic AI与智能家居的底层逻辑
在深入优化方法前,我们需要先明确两个关键概念:Agentic AI的核心架构,以及它与传统智能家居的本质区别。
2.1 Agentic AI的定义与“感知-决策-行动”循环
Agentic AI的本质是具备目标导向的自主智能体,其核心运行逻辑遵循感知-决策-行动循环(Perception-Action Cycle, PAC):
graph TD
A[感知:收集多源数据] --> B[理解:上下文建模与意图识别]
B --> C[决策:目标规划与冲突解决]
C --> D[行动:设备控制与用户交互]
D --> E[反馈:收集结果与用户评价]
E --> A[更新感知模型]
具体到智能家居场景:
- 感知层:收集环境数据(温度、湿度、天气)、设备状态(窗帘位置、咖啡机开关)、用户数据(健康状态、行为习惯、语音指令);
- 理解层:用LLM解析上下文(比如“我冷了”不仅是开暖气,还要结合“下雨”“感冒”等信息);
- 决策层:规划行动路径(比如“先关窗户→再开暖气→再调至24℃”);
- 行动层:调用Home Assistant/米家等平台的API控制设备;
- 反馈层:收集用户反馈(比如“温度太高了”),迭代优化模型。
2.2 传统智能家居的3大痛点与Agentic AI的解决方案
传统智能家居的核心是“规则驱动”,依赖工程师预先编写的if-else
逻辑,无法应对复杂场景:
传统痛点 | Agentic AI解决方案 |
---|---|
规则僵硬(比如“下雨仍拉窗帘”) | 上下文理解(结合天气、用户习惯动态调整) |
缺乏记忆(比如“忘记你喜欢热咖啡”) | 长期记忆(向量数据库存储用户习惯) |
协同差(比如“开空调时忘关窗户”) | 多Agent协同(主Agent协调温控/通风Agent) |
2.3 提示工程的角色:Agent的“思考规则书”
Agent的“大脑”是LLM(比如GPT-4、LLaMA 3、Qwen),但LLM本身是“通用模型”——它需要**提示(Prompt)**来明确“角色、目标、约束”。
举个例子:如果直接问LLM“我冷了怎么办?”,它可能回答“多穿衣服”;但如果给它一个场景化Prompt:
你是智能家居的温控Agent,当前场景:早上7点,室外下雨(15℃),用户昨天感冒,习惯起床时温度22℃。你的目标是让用户舒适,约束是不能超过用户设定的最高温度(25℃)。请输出温控指令。
LLM会给出更精准的结果:“将温度调至24℃(比习惯高2℃,符合感冒需求),并关闭客厅窗户(防止冷风吹入)。”
提示工程的本质,就是为LLM设计“思考框架”,让通用模型适配智能家居的特定场景。
三、核心优化方法:提示工程架构师的“六脉神剑”
作为提示工程架构师,你需要从场景适配、上下文管理、多Agent协同、反馈迭代、安全合规、性能优化六大维度优化Prompt。以下是具体方法和实战案例。
3.1 方法1:场景化Prompt设计——让Agent“懂场景”
智能家居的核心是“场景”(比如起床、睡眠、访客、节能),每个场景有不同的“角色、目标、约束”。场景化Prompt的设计要点是:将场景参数、角色设定、决策边界结构化。
3.1.1 场景化Prompt的“3要素”
一个有效的场景化Prompt必须包含:
- 角色定位:明确Agent的身份(比如“智能家居主Agent”“温控Agent”);
- 场景上下文:时间、天气、设备状态、用户状态等关键参数;
- 决策规则:目标(比如“优化舒适体验”)、约束(比如“不能更改用户核心设置”)。
3.1.2 实战案例:起床场景的Prompt设计
假设我们要设计“起床场景”的主Agent Prompt,完整模板如下:
# 角色定位
你是智能家居的「起床场景主Agent」,负责协调窗帘、咖啡机、温控器的协同工作。
# 场景上下文
当前时间:{current_time}(格式:HH:mm)
室外天气:{weather}(温度:{outside_temp}℃,是否下雨:{is_rain})
用户状态:{user_state}(比如“感冒”“熬夜”)
用户习惯:{user_habits}(比如“喜欢早上喝70℃咖啡”“起床时窗帘半开”)
# 决策规则
1. 目标:优先保证用户健康与舒适,其次遵循用户习惯;
2. 约束:
- 不能擅自修改用户设定的起床时间;
- 咖啡机只能在起床前10分钟启动(避免咖啡变凉);
- 温控器调整范围不能超过用户设定的「舒适区间」({min_temp}℃~{max_temp}℃);
3. 输出要求:
- 列出具体的设备控制指令(比如“窗帘开30%”“咖啡机启动”“温控调至24℃”);
- 给出1条用户提示(比如“今天下雨,我帮你把伞放在玄关了~”)。
3.1.3 代码实现:动态注入场景参数
我们可以用LangChain
的PromptTemplate
动态生成场景化Prompt:
from langchain.prompts import PromptTemplate
# 定义Prompt模板
wakeup_prompt_template = PromptTemplate(
input_variables=[
"current_time", "weather", "outside_temp", "is_rain",
"user_state", "user_habits", "min_temp", "max_temp"
],
template="""
# 角色定位
你是智能家居的「起床场景主Agent」,负责协调窗帘、咖啡机、温控器的协同工作。
# 场景上下文
当前时间:{current_time}
室外天气:{weather}(温度:{outside_temp}℃,是否下雨:{is_rain})
用户状态:{user_state}
用户习惯:{user_habits}
# 决策规则
1. 目标:优先保证用户健康与舒适,其次遵循用户习惯;
2. 约束:
- 不能擅自修改用户设定的起床时间;
- 咖啡机只能在起床前10分钟启动;
- 温控器调整范围不能超过{min_temp}℃~{max_temp}℃;
3. 输出要求:
- 列出具体的设备控制指令;
- 给出1条用户提示。
"""
)
# 动态注入场景参数
scene_params = {
"current_time": "07:00",
"weather": "小雨",
"outside_temp": 15,
"is_rain": "是",
"user_state": "感冒",
"user_habits": "喜欢早上喝70℃咖啡,起床时窗帘半开",
"min_temp": 18,
"max_temp": 25
}
# 生成最终Prompt
final_prompt = wakeup_prompt_template.format(**scene_params)
print(final_prompt)
3.2 方法2:上下文管理与记忆优化——让Agent“记得你”
传统智能家居的致命缺陷是“没有记忆”:它不知道你上周说过“咖啡要热一点”,也不记得你冬天喜欢把温度调至23℃。Agentic AI的优势在于**长期记忆(Long-Term Memory)和短期场景记忆(Short-Term Context)**的结合——而提示工程需要解决的是:如何高效地将记忆注入Prompt。
3.2.1 记忆管理的“双库模式”
我们用**向量数据库(Vector DB)存储长期记忆(用户习惯、偏好),用会话缓存(Session Cache)**存储短期场景记忆(比如“客人来了”“正在煮咖啡”)。
具体流程:
- 存储:将用户习惯(比如“喜欢热咖啡”)转换为向量,存入Chroma/Weaviate等向量数据库;
- 检索:当触发场景时(比如“起床”),用场景参数(比如“早上7点,感冒”)作为查询词,从向量数据库中检索相关记忆;
- 注入:将检索到的记忆片段动态插入Prompt。
3.2.2 实战案例:用向量数据库优化记忆检索
以下是用LangChain + Chroma
实现用户习惯检索的代码:
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
# 1. 准备用户习惯数据(示例)
user_habits = [
"用户喜欢早上喝70℃的热咖啡,不要加糖",
"用户感冒时,喜欢将温度调至24℃",
"用户起床时,窗帘要开30%(避免强光刺眼)",
"用户周末喜欢晚起1小时(08:00起床)"
]
# 2. 初始化向量数据库
embeddings = OpenAIEmbeddings() # 也可以用本地嵌入模型(比如BERT)
text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=0)
split_habits = text_splitter.split_documents(user_habits)
# 3. 将用户习惯存入Chroma
vector_db = Chroma.from_documents(
documents=split_habits,
embedding=embeddings,
persist_directory="./user_habits_db" # 持久化存储
)
vector_db.persist()
# 4. 检索相关记忆(比如“起床场景,感冒”)
query = "起床场景,用户感冒"
retrieved_habits = vector_db.similarity_search(query, k=2) # 取最相关的2条
# 5. 将记忆转换为文本,注入Prompt
habit_text = "\n".join([doc.page_content for doc in retrieved_habits])
print(f"检索到的用户习惯:{habit_text}")
输出结果:
检索到的用户习惯:
用户感冒时,喜欢将温度调至24℃
用户起床时,窗帘要开30%(避免强光刺眼)
3.2.3 关键优化点:避免“Prompt膨胀”
LLM的上下文窗口是有限的(比如GPT-4是8k/32k tokens),如果注入过多无关记忆,会导致LLM“注意力分散”。解决方法是:
- 相关性过滤:用向量检索的“相似度分数”过滤低相关记忆(比如只取分数≥0.8的片段);
- 摘要压缩:用LLM将长记忆摘要为短句(比如“用户喜欢热咖啡”代替“用户上周三说咖啡凉了不好喝,周五又提醒要热一点”)。
3.3 方法3:多Agent协同的Prompt编排——让Agent“会合作”
智能家居是多Agent系统:比如温控Agent、窗帘Agent、安防Agent、咖啡机Agent。这些Agent需要协同工作(比如“开空调时要关窗户”),而提示工程的任务是设计“协同规则”,让Agent之间不会“打架”。
3.3.1 多Agent协同的“主-从架构”
我们通常采用主Agent + 从Agent的架构:
- 主Agent:负责全局协调(比如解决冲突、分配任务);
- 从Agent:负责具体设备控制(比如温控、窗帘)。
主Agent的Prompt需要包含协同规则,比如:
当温控Agent建议开暖气,而通风Agent建议开窗时,优先遵循“健康优先”原则——先关窗户,再开暖气。
3.3.2 实战案例:解决“温控与通风的冲突”
假设场景:用户感冒,温控Agent建议“调至24℃”,而通风Agent建议“开窗(室内湿度80%)”。主Agent的Prompt设计如下:
# 角色定位
你是智能家居的「协同主Agent」,负责解决从Agent之间的冲突。
# 当前冲突
温控Agent指令:将温度调至24℃(理由:用户感冒,需要保暖)
通风Agent指令:打开客厅窗户(理由:室内湿度80%,容易滋生霉菌)
# 协同规则
1. 优先级:用户健康 > 环境舒适 > 节能;
2. 约束:
- 开暖气时不能开窗(避免热量流失);
- 湿度超过70%时必须通风(防止霉菌);
3. 输出要求:
- 协调后的最终指令;
- 解释决策理由。
LLM的输出结果可能是:
最终指令:1. 关闭客厅窗户;2. 将温度调至24℃;3. 启动空气净化器(降低湿度)。
理由:用户感冒优先,先关窗户保证保暖;用空气净化器替代开窗通风,解决湿度问题。
3.3.3 代码实现:多Agent的Prompt调用
我们可以用LangChain
的Agent
框架实现主-从协同:
from langchain.agents import AgentType, initialize_agent, Tool
from langchain.llms import Ollama
# 1. 定义从Agent工具(温控、通风)
def control_thermostat(temp: int) -> str:
"""控制温控器,输入整数温度"""
return f"温控器已调至{temp}℃"
def control_ventilation(state: str) -> str:
"""控制通风系统,输入'open'或'close'"""
return f"通风系统已{state}"
# 2. 初始化工具列表
tools = [
Tool(
name="ControlThermostat",
func=control_thermostat,
description="控制温控器温度,输入整数"
),
Tool(
name="ControlVentilation",
func=control_ventilation,
description="控制通风系统开关,输入'open'或'close'"
)
]
# 3. 初始化LLM(本地运行LLaMA 3)
llm = Ollama(model="llama3", temperature=0.1)
# 4. 设计主Agent的协同Prompt
collab_prompt = """
你是智能家居的协同主Agent,负责解决从Agent的冲突。
当前冲突:
温控Agent要求调至24℃(用户感冒),通风Agent要求开窗(湿度80%)。
协同规则:
1. 健康优先:先保证用户保暖;
2. 替代方案:用空气净化器解决湿度问题。
请调用工具输出最终指令。
"""
# 5. 初始化主Agent
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
# 6. 运行协同决策
response = agent.run(collab_prompt)
print(response)
输出结果(LLM的思考过程):
我现在需要解决温控和通风的冲突。首先,用户感冒,健康优先,所以要先关窗户(通风系统close),然后调温控到24℃。湿度问题用空气净化器解决,但工具里没有空气净化器,所以只执行前两步。调用ControlVentilation(close),再调用ControlThermostat(24)。
最终指令:
1. 通风系统已close
2. 温控器已调至24℃
3.4 方法4:反馈循环与Prompt迭代——让Agent“越用越懂你”
提示工程不是“一锤子买卖”——你需要收集用户反馈,持续优化Prompt。这本质是一个“强化学习(RL)”过程:用户反馈是“奖励信号”,Prompt迭代是“策略优化”。
3.4.1 反馈循环的“3步流程”
- 收集反馈:通过APP/语音询问用户对Agent决策的评价(比如“温度合适吗?”“咖啡温度对吗?”);
- 标注数据:将反馈分为“正向(≥4分)”“负向(≤2分)”“中性(3分)”;
- 迭代Prompt:保留正向反馈对应的Prompt结构,修改负向反馈对应的Prompt(比如增加“优先考虑用户健康”的约束)。
3.4.2 实战案例:用反馈优化温控Prompt
假设我们收集了以下用户反馈:
Prompt内容 | 决策结果 | 用户评分 | 反馈理由 |
---|---|---|---|
温控Agent,场景:感冒,调至24℃ | 调至24℃ | 5分 | 温度刚好,很舒服 |
温控Agent,场景:感冒,调至22℃ | 调至22℃ | 2分 | 太冷了,感冒更严重了 |
温控Agent,场景:夏天,调至26℃ | 调至26℃ | 4分 | 很凉快,不费电 |
我们可以从正向反馈中提取“感冒时调至24℃”的规则,优化Prompt模板:
from langchain.prompts import PromptTemplate
import pandas as pd
# 1. 加载反馈数据
feedback_df = pd.DataFrame({
"prompt": [
"温控Agent,场景:感冒,调至24℃",
"温控Agent,场景:感冒,调至22℃",
"温控Agent,场景:夏天,调至26℃"
],
"decision": ["24℃", "22℃", "26℃"],
"rating": [5, 2, 4],
"reason": [
"温度刚好",
"太冷了",
"很凉快"
]
})
# 2. 筛选正向反馈(rating≥4)
positive_feedback = feedback_df[feedback_df["rating"] >= 4]
# 3. 提取共同规则:“感冒时调至24℃”“夏天调至26℃”
positive_rules = positive_feedback["prompt"].apply(lambda x: x.split(":")[-1])
# 4. 优化Prompt模板
optimized_prompt = PromptTemplate(
input_variables=["scene"],
template=f"""
你是温控Agent,当前场景:{scene}。
已知有效规则:{', '.join(positive_rules)}。
请输出温控指令。
"""
)
# 测试优化后的Prompt
print(optimized_prompt.format(scene="感冒"))
输出结果:
你是温控Agent,当前场景:感冒。
已知有效规则:调至24℃, 调至26℃。
请输出温控指令。
3.4.3 关键工具:Prompt优化的自动化平台
为了提高效率,你可以使用以下工具自动化反馈循环:
- LangSmith:LangChain的调试平台,可跟踪Agent的思考过程和用户反馈;
- PromptLayer:记录Prompt的调用历史和反馈,支持A/B测试;
- Evidently AI:监控Prompt的性能(比如决策准确率、用户满意度)。
3.5 方法5:安全与合规的Prompt约束——让Agent“不闯祸”
智能家居涉及用户隐私(摄像头、健康数据)和安全(电器控制),提示工程必须加入“禁止规则”,避免Agent做出危险或违规行为。
3.5.1 安全Prompt的“4类约束”
- 隐私保护:禁止泄露用户的摄像头数据、健康记录;
- 安全操作:禁止擅自开启危险设备(比如燃气热水器);
- 合规性:遵循当地法规(比如欧盟GDPR、中国《个人信息保护法》);
- 用户授权:必须得到用户允许才能执行敏感操作(比如远程开锁)。
3.5.2 实战案例:安防Agent的安全Prompt
以下是安防Agent的Prompt设计,包含严格的隐私约束:
# 角色定位
你是智能家居的「安防Agent」,负责处理摄像头和门锁数据。
# 安全规则(必须严格遵守)
1. 隐私保护:
- 绝对不能将摄像头数据分享给任何第三方(包括厂商);
- 不能存储超过7天的摄像头录像;
2. 安全操作:
- 只有当检测到“陌生人”(未在用户通讯录中)时,才能向主人发送警报;
- 远程开锁必须验证主人的指纹或语音指令;
3. 合规性:
- 遵循《个人信息保护法》,所有数据存储在本地设备(不上传云端)。
# 当前场景
摄像头检测到:穿红色衣服的人在门口(已匹配用户通讯录中的“朋友张三”)。
请输出行动指令。
LLM的输出结果:
行动指令:1. 不发送警报(张三是用户朋友);2. 向主人发送提示:“朋友张三在门口”;3. 不存储此次摄像头录像(因为是熟人)。
3.5.3 代码实现:安全约束的硬编码
为了确保安全规则不被LLM忽略,我们可以在代码中硬编码禁止行为:
def control_lock(action: str) -> str:
"""控制门锁,action可选'open'或'close'"""
# 安全约束:远程开锁必须验证主人身份
if action == "open" and not verify_user_identity():
return "无法开锁,请先验证身份(指纹/语音)"
# 执行开锁操作
return f"门锁已{action}"
def verify_user_identity() -> bool:
"""验证主人身份(示例:检查当前用户是否是主人)"""
current_user = get_current_user() # 从APP获取当前用户
return current_user == "主人"
3.6 方法6:性能优化——让Agent“反应快”
智能家居对响应速度要求很高(比如“说‘我冷了’,1秒内开暖气”),而LLM的推理速度往往较慢(尤其是大模型)。提示工程的性能优化要点是:减少Prompt长度,降低LLM的思考负担。
3.6.1 性能优化的“3个技巧”
- Prompt缩写:将长规则缩写为短句(比如“健康优先”代替“优先考虑用户的健康状况,比如感冒、发烧”);
- 工具优先:将简单决策交给工具(比如“温度低于18℃开暖气”),复杂决策交给LLM;
- 本地推理:使用本地LLM(比如LLaMA 3、Qwen)替代云端模型(比如GPT-4),减少网络延迟。
3.6.2 实战案例:用本地LLM提升响应速度
以下是用Ollama
运行本地LLaMA 3的代码,响应速度可提升至1秒内:
from langchain.llms import Ollama
# 初始化本地LLM(LLaMA 3,7B参数)
llm = Ollama(model="llama3", temperature=0.1)
# 测试响应速度
import time
start_time = time.time()
response = llm.predict("温控Agent,场景:感冒,调至24℃")
end_time = time.time()
print(f"响应时间:{end_time - start_time:.2f}秒")
print(f"响应结果:{response}")
输出结果:
响应时间:0.87秒
响应结果:将温控器调至24℃(符合用户感冒时的保暖需求)。
四、项目实战:构建“起床场景”Agentic系统
我们用LangChain + Home Assistant + Ollama构建一个完整的“起床场景”Agentic系统,涵盖从环境搭建到Prompt优化的全流程。
4.1 开发环境搭建
- 安装Home Assistant:智能家居设备控制平台(https://www.home-assistant.io/);
- 安装Ollama:本地LLM运行工具(https://ollama.com/),并下载LLaMA 3模型(
ollama pull llama3
); - 安装LangChain:
pip install langchain
; - 安装Home Assistant API客户端:
pip install homeassistant-api
。
4.2 系统架构
graph TD
A[Home Assistant:收集设备/环境数据] --> B[Chroma:存储用户习惯]
B --> C[LangChain Agent:加载Prompt与LLM]
C --> D[Ollama:运行本地LLaMA 3]
D --> E[Home Assistant:执行设备控制]
E --> F[用户反馈:收集评价]
F --> B[更新用户习惯]
4.3 代码实现:完整的起床场景Agent
from langchain.agents import AgentType, initialize_agent, Tool
from langchain.llms import Ollama
from langchain.prompts import PromptTemplate
from homeassistant_api import Client
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
import time
# 1. 初始化Home Assistant客户端
HA_URL = "http://homeassistant.local:8123"
HA_TOKEN = "YOUR_HA_TOKEN" # 从Home Assistant获取
ha_client = Client(url=HA_URL, token=HA_TOKEN)
# 2. 定义设备控制工具
def control_curtain(position: int) -> str:
"""控制窗帘位置(0%~100%)"""
service = ha_client.get_domain("cover")
service.call("set_cover_position", entity_id="cover.living_room_curtain", position=position)
return f"窗帘已调整至{position}%"
def control_coffee_maker(state: str) -> str:
"""控制咖啡机开关(on/off)"""
service = ha_client.get_domain("switch")
service.call(f"turn_{state}", entity_id="switch.coffee_maker")
return f"咖啡机已{state}"
def control_thermostat(temp: int) -> str:
"""控制温控器温度"""
service = ha_client.get_domain("climate")
service.call("set_temperature", entity_id="climate.living_room_thermostat", temperature=temp)
return f"温度已设置为{temp}℃"
# 3. 初始化工具列表
tools = [
Tool(name="ControlCurtain", func=control_curtain, description="控制窗帘位置,输入0~100的整数"),
Tool(name="ControlCoffeeMaker", func=control_coffee_maker, description="控制咖啡机开关,输入'on'或'off'"),
Tool(name="ControlThermostat", func=control_thermostat, description="控制温控器温度,输入整数")
]
# 4. 初始化向量数据库(用户习惯)
embeddings = OpenAIEmbeddings()
vector_db = Chroma(persist_directory="./user_habits_db", embedding_function=embeddings)
# 5. 设计起床场景Prompt模板
wakeup_prompt = PromptTemplate(
input_variables=["scene", "user_habits"],
template="""
你是智能家居的「起床场景主Agent」,负责协调窗帘、咖啡机、温控器。
当前场景:{scene}
用户习惯:{user_habits}
决策规则:
1. 咖啡机在起床前10分钟启动;
2. 窗帘开30%(避免强光);
3. 感冒时温度调至24℃;
请调用工具输出指令。
"""
)
# 6. 初始化LLM与Agent
llm = Ollama(model="llama3", temperature=0.1)
agent = initialize_agent(
tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, prompt=wakeup_prompt, verbose=True
)
# 7. 运行Agent(示例场景)
def run_wakeup_agent():
# 获取当前场景参数(从Home Assistant获取)
current_time = time.strftime("%H:%M")
weather = ha_client.get_entity("weather.home").state["state"]
outside_temp = ha_client.get_entity("sensor.outside_temperature").state
is_rain = "是" if ha_client.get_entity("binary_sensor.rain_sensor").state == "on" else "否"
user_state = "感冒" # 从用户健康APP获取
# 检索用户习惯
query = f"起床场景,{user_state}"
retrieved_habits = vector_db.similarity_search(query, k=2)
user_habits = "\n".join([doc.page_content for doc in retrieved_habits])
# 构造场景文本
scene = f"当前时间:{current_time},天气:{weather}({outside_temp}℃),是否下雨:{is_rain},用户状态:{user_state}"
# 运行Agent
response = agent.run(f"scene: {scene}, user_habits: {user_habits}")
print("最终结果:", response)
# 执行Agent
run_wakeup_agent()
4.4 运行结果
Agent的思考过程(verbose模式):
我现在需要处理起床场景。首先,当前时间是07:00,用户状态是感冒。用户习惯里有“感冒时调至24℃”和“起床时窗帘开30%”。咖啡机需要在起床前10分钟启动,也就是06:50,但现在已经07:00了,所以应该立即启动咖啡机。然后,窗帘开30%,温控调至24℃。调用ControlCoffeeMaker(on),ControlCurtain(30),ControlThermostat(24)。
最终结果:
咖啡机已on
窗帘已调整至30%
温度已设置为24℃
五、实际应用场景与优化要点
不同的智能家居场景有不同的Prompt优化重点,以下是常见场景的优化指南:
5.1 睡眠场景
- 核心需求:安静、黑暗、适宜的温度;
- Prompt优化:加入“晚上10点后关闭所有灯光”“空调调至20℃”“禁止推送通知”的规则;
- 示例Prompt:
你是睡眠场景Agent,当前时间22:30,用户准备睡觉。规则:关闭所有灯光,空调调至20℃,禁止推送任何通知。请输出指令。
5.2 访客场景
- 核心需求:安全、便捷、尊重隐私;
- Prompt优化:加入“陌生人来访时发送警报”“客人使用的设备权限限制(比如不能控制温控)”的规则;
- 示例Prompt:
你是访客场景Agent,当前检测到陌生人在门口。规则:发送警报给主人,禁止陌生人控制温控器。请输出指令。
5.3 节能场景
- 核心需求:降低能耗、优先使用可再生能源;
- Prompt优化:加入“白天使用太阳能发电”“无人时关闭非必要设备”的规则;
- 示例Prompt:
你是节能场景Agent,当前时间14:00,太阳能发电量充足,家里无人。规则:关闭客厅灯光,空调调至26℃(节能模式)。请输出指令。
六、工具与资源推荐
6.1 开发工具
- Agent框架:LangChain(灵活)、AutoGPT(自动规划)、BabyAGI(任务管理);
- LLM运行:Ollama(本地)、vLLM(高性能)、TGI(Hugging Face);
- 向量数据库:Chroma(轻量)、Weaviate(企业级)、Pinecone(云端);
- 智能家居平台:Home Assistant(开源)、米家(国内常用)、Apple HomeKit(生态完善)。
6.2 学习资源
- 书籍:《Prompt Engineering for LLMs》(权威指南)、《Agentic AI》(架构设计);
- 课程:DeepLearning.AI的《Prompt Engineering》(Andrew Ng主讲)、LangChain的《Agent开发实战》;
- 社区:Reddit的r/PromptEngineering、LangChain中文社区、Home Assistant论坛。
七、未来发展趋势与挑战
7.1 未来趋势
- 多模态Agent:结合视觉(摄像头)、语音(智能音箱)、传感器(温度/湿度)数据,实现更全面的感知;
- 个性化Prompt:根据用户的行为习惯动态生成Prompt(比如“用户喜欢熬夜,睡眠场景的Prompt调整为23:30关闭灯光”);
- 边缘Agent:在本地设备(比如智能音箱、路由器)运行Agent,减少网络延迟,保护隐私;
- Auto-Prompting:用LLM自动生成和优化Prompt(比如“根据用户反馈,自动调整Prompt的约束规则”)。
7.2 核心挑战
- Prompt复杂度:随着场景增加,Prompt的规则会越来越多,容易导致LLM“混乱”;
- 多Agent协同:当Agent数量超过10个时,冲突解决的难度呈指数级上升;
- 用户隐私:Agent需要收集大量用户数据(健康、行为),如何平衡“智能”与“隐私”是关键;
- LLM的不确定性:LLM可能生成错误的决策(比如“把温度调至30℃”),需要加入“安全校验”机制。
八、结语:提示工程是Agent的“灵魂”
智能家居的未来,是“以人为中心”的智能——不是“设备控制人”,而是“人控制设备”,更准确地说,是“设备理解人”。而提示工程,正是让设备“理解人”的关键技术。
作为提示工程架构师,你的任务不是“写Prompt”,而是“设计Agent的思考方式”——你需要将用户的需求、场景的约束、安全的规则,转化为LLM能理解的“语言”,让Agent成为真正的“智能伙伴”。
最后,送给所有提示工程架构师一句话:“好的Prompt,不是让LLM更聪明,而是让LLM更懂用户。”
参考资料:
- LangChain官方文档:https://python.langchain.com/
- Home Assistant API文档:https://developers.home-assistant.io/
- Ollama官方文档:https://ollama.com/docs
- 《Prompt Engineering for LLMs》(作者:Davide Esposito)
更多推荐
所有评论(0)