如何通过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())
关键优化点
system角色固定规则:一次性定义好模型的处理逻辑,避免每次重复描述要求,让模型明确自身定位。user角色整合数据与提问:将实时传感器数据和用户问题放在同一条user消息中,确保模型能正确关联上下文,不会混淆数据用途。- 结构化数据可选:如果传感器原始是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
相关产品推荐
相关产品推荐

