0、项目背景
其实之前写过IoT的代码,7、8年前,利用了温湿度传感器+红外线来控制空调,
当然我也知道这其实就是一个典型的PID算法即使就是用豆包这样的AI,
结合传感器和空调控制器的代码,也就是一个下午肯定能编写出来满意的程序,
但我就是有点想实验一下,在不编程的情况下,仅凭CALL AI本身,能否完成我想要的东西,
当然,这个程序本身,除了LLM以外其实和python的程序都是类似的,只是你懂得,
这样的程序的难度相当低,因为引擎的核心是一段中文的需求描述,而非晦涩的PID算法
正常的人也能看懂其余的部分,
无非就是
1、定时调用获取环境参数以及记录当中的历史温度、空调当前状态信息;
2、将决策用参数交给LLM
3、将LLM的决策最终交给程序执行,我的空调是美的,有两种方法可以去执行
a、网上找到的美的的局域网控制;
b、之前购买过的几乎是万能的可录制红外线信号的外设
1和3部分,本文不再累述,将放在别的文章里记录。
本文只记录使用R1思维连以及V3推理的过程,且结构化输出的技巧等,也不在本文讨论范围
还有诸如定时、重试、空调的状态获取等工程问题,均省略,后续实际实现时考量1、启动项目
uv init air_conditon_deepseek2、增加依赖
uv add openai3、vscode初始化

切记需要让右下角的虚拟环境被激活了
4、跑第一个示例代码
4.1 配置API的KEY
# -----------------------------------------------------------------------------
# 使用 PowerShell
# 打开 PowerShell(在 “开始” 菜单中搜索 “PowerShell” 并打开)。
# 要为当前用户设置环境变量,可以使用
# $env:SILICONFLOW_API_KEY = "your_api_key"
# 命令。
# 同样,将"your_api_key"替换为实际的 API 密钥。不过,这种方式设置的环境变量只在当前 PowerShell 会话中有效。
# 要永久设置环境变量(对于当前用户),可以使用
# [Environment]::SetEnvironmentVariable("SILICONFLOW_API_KEY","your_api_key","User")。
# 如果要设置系统级别的环境变量(需要管理员权限),可以将最后一个参数改为"Machine",
# 例如
# [Environment]::SetEnvironmentVariable("SILICONFLOW_API_KEY","your_api_key","Machine")。
# Set up SILICONFLOW API key
# 记得使用以上方法后,需要关闭vscode后重启vscode,之后点击F5运行python脚本的时候才能生效
SILICONFLOW_API_KEY = os.getenv('SILICONFLOW_API_KEY')配置完成之后,记得重启vscode,否则不会生效
4.2 编码
from openai import OpenAI
import os
# -----------------------------------------------------------------------------
# 使用 PowerShell
# 打开 PowerShell(在 “开始” 菜单中搜索 “PowerShell” 并打开)。
# 要为当前用户设置环境变量,可以使用
# $env:SILICONFLOW_API_KEY = "your_api_key"
# 命令。
# 同样,将"your_api_key"替换为实际的 API 密钥。不过,这种方式设置的环境变量只在当前 PowerShell 会话中有效。
# 要永久设置环境变量(对于当前用户),可以使用
# [Environment]::SetEnvironmentVariable("SILICONFLOW_API_KEY","your_api_key","User")。
# 如果要设置系统级别的环境变量(需要管理员权限),可以将最后一个参数改为"Machine",
# 例如
# [Environment]::SetEnvironmentVariable("SILICONFLOW_API_KEY","your_api_key","Machine")。
# Set up SILICONFLOW API key
# 记得使用以上方法后,需要关闭vscode后重启vscode,之后点击F5运行python脚本的时候才能生效
SILICONFLOW_API_KEY = os.getenv('SILICONFLOW_API_KEY')
if not SILICONFLOW_API_KEY:
raise ValueError("SILICONFLOW API key is not set. Please set the SILICONFLOW_API_KEY environment variable.")
client = OpenAI(api_key=SILICONFLOW_API_KEY,base_url="https://api.siliconflow.cn/v1")
stream = client.chat.completions.create(
messages=[
{
"role": "user",
"content": "你好啊",
}
],
model="deepseek-ai/DeepSeek-V3",
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")
5、接着是提示词本身
该提示词其实就是用R1的聊天界面聊出来的,然后使用V3来推理,这样即快,又省钱,不需要LLM每次都进行思维链式的推理了;
系统提示词:
system_prompt = '''
你现在需要成为一个我室内的空调控制的决策者;我会将历史温度(每半个小时的室温)告诉你、当前空调的运行状态(开/关)告知你,
你来为我决策是否需要打开空调(空调打开后会自动设定为26度、制热状态,并持续30分钟后自动关闭,通常这样的运行,
能带来2摄氏度左右的室温上升,这样设置的原因在于我希望尽可能的省电),但我又不希望室温长时间的保持在23.5度以下,
因为我个人的舒适温度正好是24度,你听明白了我的意思了么?
好的,我完全理解您的需求。您的核心诉求是:
1. 舒适底线:室温不要长时间低于23.5℃(理想24℃)
2. 节能策略:当需要升温时,空调开30分钟制热26℃(预计升温2℃)
3. 运行逻辑:空调开启后必须满30分钟才能再次判断,避免频繁启停
请提供以下信息:
1. 当前时间
2. 当前空调状态(开/关)
3. 过去4小时内每半小时的温度记录(共8个数据点)
4. 当前实时温度(如可获得)
我将根据温度变化趋势、空调运行时长、以及您设定的阈值进行智能判断,在保证基本舒适的前提下最大限度节省能耗。
示例回答结构:
【空调状态建议】保持关闭
【决策依据】过去3小时温度稳定在24.2-24.5℃之间,当前温度24.3℃,高于舒适阈值无需制热
'''用户的示例输入:
input = '''
1、当前时间:14:25;
2、当前空调状态:关;
3、历史温度(时间顺序列出):26、25、25、25、24、23、25、24;
4、当前实时温度:24摄氏度;
'''运行后的输出:

结果是,非常好
from openai import OpenAI
import os
# -----------------------------------------------------------------------------
# 使用 PowerShell
# 打开 PowerShell(在 “开始” 菜单中搜索 “PowerShell” 并打开)。
# 要为当前用户设置环境变量,可以使用
# $env:SILICONFLOW_API_KEY = "your_api_key"
# 命令。
# 同样,将"your_api_key"替换为实际的 API 密钥。不过,这种方式设置的环境变量只在当前 PowerShell 会话中有效。
# 要永久设置环境变量(对于当前用户),可以使用
# [Environment]::SetEnvironmentVariable("SILICONFLOW_API_KEY","your_api_key","User")。
# 如果要设置系统级别的环境变量(需要管理员权限),可以将最后一个参数改为"Machine",
# 例如
# [Environment]::SetEnvironmentVariable("SILICONFLOW_API_KEY","your_api_key","Machine")。
# Set up SILICONFLOW API key
# 记得使用以上方法后,需要关闭vscode后重启vscode,之后点击F5运行python脚本的时候才能生效
SILICONFLOW_API_KEY = os.getenv('SILICONFLOW_API_KEY')
if not SILICONFLOW_API_KEY:
raise ValueError("SILICONFLOW API key is not set. Please set the SILICONFLOW_API_KEY environment variable.")
client = OpenAI(api_key=SILICONFLOW_API_KEY,base_url="https://api.siliconflow.cn/v1")
system_prompt = '''
你现在需要成为一个我室内的空调控制的决策者;我会将历史温度(每半个小时的室温)告诉你、当前空调的运行状态(开/关)告知你,
你来为我决策是否需要打开空调(空调打开后会自动设定为26度、制热状态,并持续30分钟后自动关闭,通常这样的运行,
能带来2摄氏度左右的室温上升,这样设置的原因在于我希望尽可能的省电),但我又不希望室温长时间的保持在23.5度以下,
因为我个人的舒适温度正好是24度,你听明白了我的意思了么?
好的,我完全理解您的需求。您的核心诉求是:
1. 舒适底线:室温不要长时间低于23.5℃(理想24℃)
2. 节能策略:当需要升温时,空调开30分钟制热26℃(预计升温2℃)
3. 运行逻辑:空调开启后必须满30分钟才能再次判断,避免频繁启停
请提供以下信息:
1. 当前时间
2. 当前空调状态(开/关)
3. 过去4小时内每半小时的温度记录(共8个数据点)
4. 当前实时温度(如可获得)
我将根据温度变化趋势、空调运行时长、以及您设定的阈值进行智能判断,在保证基本舒适的前提下最大限度节省能耗。
示例回答结构:
【空调状态建议】保持关闭
【决策依据】过去3小时温度稳定在24.2-24.5℃之间,当前温度24.3℃,高于舒适阈值无需制热
'''
input = '''
1、当前时间:14:25;
2、当前空调状态:关;
3、历史温度(时间顺序列出):26、25、25、25、24、23、25、24;
4、当前实时温度:24摄氏度;
'''
stream = client.chat.completions.create(
messages=[
{"role": "system", "content": system_prompt},
{
"role": "user",
"content": input,
}
],
model="deepseek-ai/DeepSeek-V3",
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")