Update app.py
Browse files
app.py
CHANGED
@@ -42,44 +42,67 @@ pipe = pipeline(
|
|
42 |
|
43 |
from ask_api import ask_with_sensor # 引入调用函数
|
44 |
|
45 |
-
def
|
46 |
-
if not user_input.strip():
|
47 |
-
return "暂无传感器数据", "请输入植物相关的问题 😊"
|
48 |
-
|
49 |
-
# 获取 Render 实时传感器数据
|
50 |
try:
|
51 |
sensor_response = requests.get("https://arduino-realtime.onrender.com/api/data", timeout=5)
|
52 |
sensor_data = sensor_response.json().get("sensorData", None)
|
53 |
sensor_display = json.dumps(sensor_data, ensure_ascii=False, indent=2) if sensor_data else "暂无传感器数据"
|
54 |
except Exception as e:
|
55 |
sensor_display = "⚠️ 获取失败:" + str(e)
|
56 |
-
|
57 |
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
|
|
|
|
63 |
|
64 |
-
|
65 |
try:
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
result = pipe(prompt)
|
67 |
-
|
|
|
68 |
except Exception as e:
|
69 |
answer = f"生成建议时出错:{str(e)}"
|
70 |
|
71 |
return sensor_display, answer
|
72 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
# Gradio 界面
|
74 |
-
gr.
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
|
|
|
|
|
|
84 |
|
85 |
|
|
|
42 |
|
43 |
from ask_api import ask_with_sensor # 引入调用函数
|
44 |
|
45 |
+
def get_sensor_data():
|
|
|
|
|
|
|
|
|
46 |
try:
|
47 |
sensor_response = requests.get("https://arduino-realtime.onrender.com/api/data", timeout=5)
|
48 |
sensor_data = sensor_response.json().get("sensorData", None)
|
49 |
sensor_display = json.dumps(sensor_data, ensure_ascii=False, indent=2) if sensor_data else "暂无传感器数据"
|
50 |
except Exception as e:
|
51 |
sensor_display = "⚠️ 获取失败:" + str(e)
|
52 |
+
return sensor_display
|
53 |
|
54 |
+
def show_sensor_data(_=None):
|
55 |
+
return get_sensor_data()
|
56 |
+
|
57 |
+
def respond(user_input):
|
58 |
+
sensor_display = get_sensor_data()
|
59 |
+
if not user_input.strip():
|
60 |
+
return sensor_display, "请输入植物相关的问题 😊"
|
61 |
|
62 |
+
prompt = f"用户提问:{user_input}\n"
|
63 |
try:
|
64 |
+
sensor_response = requests.get("https://arduino-realtime.onrender.com/api/data", timeout=5)
|
65 |
+
sensor_data = sensor_response.json().get("sensorData", None)
|
66 |
+
if sensor_data:
|
67 |
+
prompt += f"当前传感器数据:{json.dumps(sensor_data, ensure_ascii=False)}\n"
|
68 |
+
prompt += "请用更人性化的语言生成建议,并推荐相关植物文献或资料。\n回答:"
|
69 |
+
|
70 |
result = pipe(prompt)
|
71 |
+
full_output = result[0]["generated_text"]
|
72 |
+
answer = full_output.replace(prompt, "").strip()
|
73 |
except Exception as e:
|
74 |
answer = f"生成建议时出错:{str(e)}"
|
75 |
|
76 |
return sensor_display, answer
|
77 |
|
78 |
+
# 构建提示词
|
79 |
+
prompt = f"用户提问:{user_input}\n"
|
80 |
+
if sensor_data:
|
81 |
+
prompt += f"当前传感器数据:{json.dumps(sensor_data, ensure_ascii=False)}\n"
|
82 |
+
prompt += "请用更人性化的语言生成建议,并推荐相关植物文献或资料。\n回答:"
|
83 |
+
|
84 |
+
# 模型生成
|
85 |
+
try:
|
86 |
+
result = pipe(prompt)
|
87 |
+
full_output = result[0]["generated_text"]
|
88 |
+
# 删除重复的提问部分,只保留回答段
|
89 |
+
answer = full_output.replace(prompt, "").strip()
|
90 |
+
except Exception as e:
|
91 |
+
answer = f"生成建议时出错:{str(e)}"
|
92 |
+
|
93 |
# Gradio 界面
|
94 |
+
with gr.Blocks() as demo:
|
95 |
+
with gr.Row():
|
96 |
+
sensor_box = gr.Textbox(label="🧪 当前传感器数据", lines=6, interactive=False)
|
97 |
+
question_box = gr.Textbox(label="🌿 植物问题", lines=4)
|
98 |
+
answer_box = gr.Textbox(label="🤖 回答建议", lines=8, interactive=False)
|
99 |
+
|
100 |
+
# 实时轮询,每 2 秒自动更新
|
101 |
+
sensor_box.change(fn=show_sensor_data, inputs=None, outputs=sensor_box).every(2)
|
102 |
+
|
103 |
+
# 用户提问后,更新传感器 + 回答
|
104 |
+
question_box.submit(fn=respond, inputs=question_box, outputs=[sensor_box, answer_box])
|
105 |
+
|
106 |
+
demo.launch()
|
107 |
|
108 |
|