You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过OpenAI ChatGPT API传入传感器数据以实现查询与计算?

正确传递实时传感器数据到ChatGPT API的方案

核心思路

不要把传感器数据放在assistant角色中(该角色用于模拟AI历史回复),而是通过**system角色定义规则** + user角色一次性传入传感器数据+用户提问的方式,让模型明确上下文和任务要求,同时适配实时数据的动态变化。

具体实现代码

import openai

# 配置API密钥
openai.api_key = "你的API密钥"

# 从MQTT获取并格式化后的实时传感器数据
sensor_data = """Temperature: 22.07 ºC
Humidity: 62.64 %RH
TVOC: 0 ppb
CO2: 400 ppm
PM1: 0 µg/m3
PM2.5: 0 µg/m3
PM10: 1 µg/m3"""

# 用户的自然语言提问(可动态替换)
user_question = "What is the temperature?"
# user_question = "What is the dew point?"

# 构造符合API要求的消息列表
messages = [
    {
        "role": "system",
        "content": "你是传感器数据专属助手,仅基于提供的实时传感器数据回答问题:\n1. 若询问温度,直接返回温度数值及单位;\n2. 若询问露点,用给定的温度和相对湿度计算后返回结果;\n3. 所有回答严格依赖提供的数据,不得生成无关内容。"
    },
    {
        "role": "user",
        "content": f"当前传感器实时数据:\n{sensor_data}\n\n请回答:{user_question}"
    }
]

# 调用ChatGPT API
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=messages,
    temperature=0  # 设为0让输出更稳定,避免随机性
)

# 提取并打印结果
print(response.choices[0].message.content.strip())

关键优化点

  1. system角色固定规则:一次性定义好模型的处理逻辑,避免每次重复描述要求,让模型明确自身定位。
  2. user角色整合数据与提问:将实时传感器数据和用户问题放在同一条user消息中,确保模型能正确关联上下文,不会混淆数据用途。
  3. 结构化数据可选:如果传感器原始是JSON格式,可直接传入字符串化的JSON,减少模型解析错误概率,示例:
sensor_data_json = {
    "Temperature": "22.07 ºC",
    "Humidity": "62.64 %RH",
    "TVOC": "0 ppb",
    "CO2": "400 ppm",
    "PM1": "0 µg/m3",
    "PM2.5": "0 µg/m3",
    "PM10": "1 µg/m3"
}

# 替换user角色内容
{
    "role": "user",
    "content": f"当前传感器实时数据:{str(sensor_data_json)}\n\n请回答:{user_question}"
}

常见误区修正

之前将传感器数据放在assistant角色的做法是错误的,该角色的设计初衷是存储模型的历史回复内容,模型会将其视为自身之前的输出,而非需要参考的上下文数据,因此无法正确基于这些数据回答问题。

内容的提问来源于stack exchange,提问作者Gotfredsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:45:59