利用预测大模型完成办公室饮水机剩余热水量

背景

在每天上班的时候,很多同事都有喝热水的习惯,但是饮水机内的热水量总是比较少的,如何避免等待,高效的接到热水是我接下来要做的事情的动机。

理论基础

  • 在大量真实数据的情况下,可以分析出用水紧张的时间段和用水不紧张的时间段。在用水不紧张的时间去接热水,有热水的可能性比较大。

实现思路与理论基础

  • 每天倒水的时候记录下,当前时间对应的剩余热水量
  • 把历史数据提交给大模型,通过提示词让大模型来总结并预测结果

依赖服务

  • 大模型服务

实现效果

记录数据页面
预测结果页面

实现代码

后台代码
from flask import Flask, render_template, request, redirect, url_for, jsonify
import sqlite3
from datetime import datetime
import requests
app = Flask(__name__)# 连接到 SQLite 数据库
def connect_db():conn = sqlite3.connect('test_data.db')return conn# 创建数据表
def create_table():conn = connect_db()cursor = conn.cursor()cursor.execute('''CREATE TABLE IF NOT EXISTS test_data (id INTEGER PRIMARY KEY,test_date TEXT,test_datetime TEXT,water_level INTEGER,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)''')conn.commit()conn.close()# 插入测试数据
def insert_data(test_date, test_datetime, water_level):conn = connect_db()cursor = conn.cursor()cursor.execute('''INSERT INTO test_data (test_date, test_datetime, water_level)VALUES (?, ?, ?)''', (test_date, test_datetime, water_level))conn.commit()conn.close()# 提交测试数据
@app.route('/submit', methods=['POST'])
def submit():test_date = request.form['test_date']test_datetime = f"{test_date} {request.form['test_time']}"water_level = request.form['water_level']insert_data(test_date, test_datetime, water_level)return redirect(url_for('index'))# 删除测试数据
@app.route('/delete/<int:id>', methods=['POST'])
def delete(id):delete_data(id)return redirect(url_for('index'))# 删除测试数据
def delete_data(id):conn = connect_db()cursor = conn.cursor()cursor.execute('''DELETE FROM test_data WHERE id = ?''', (id,))conn.commit()conn.close()# 获取测试数据并按创建时间降序排序
def get_data_by_date_range(start_date, end_date, page, per_page):conn = connect_db()cursor = conn.cursor()offset = (page - 1) * per_pagecursor.execute('''SELECT * FROM test_data WHERE test_date BETWEEN ? AND ? ORDER BY created_at DESC LIMIT ? OFFSET ?''',(start_date, end_date, per_page, offset))data = cursor.fetchall()cursor.execute('''SELECT COUNT(*) FROM test_data WHERE test_date BETWEEN ? AND ?''', (start_date, end_date))total = cursor.fetchone()[0]conn.close()return data, total# 获取最新的100条test_datetime和water_level数据
def get_latest_100_data():conn = connect_db()cursor = conn.cursor()cursor.execute('''SELECT test_datetime, water_level FROM test_data ORDER BY created_at DESC LIMIT 100''')data = cursor.fetchall()conn.close()return data# 首页,显示所有测试数据
@app.route('/')
def index():today = datetime.today().strftime('%Y-%m-%d')current_time = datetime.now().strftime('%H:%M')start_date = request.args.get('start_date', today)end_date = request.args.get('end_date', today)page = int(request.args.get('page', 1))per_page = 5  # 每页显示5条记录data, total = get_data_by_date_range(start_date, end_date, page, per_page)total_pages = (total + per_page - 1) // per_page# 增加序号字段data_with_index = [(i + 1 + (page - 1) * per_page, *row) for i, row in enumerate(data)]return render_template('index.html', title="饮水机数据记录", data=data_with_index, today=today, current_time=current_time, start_date=start_date, end_date=end_date, page=page, total_pages=total_pages)# 数据预测页面
@app.route('/predict')
def predict():return render_template('predict.html', title="猜一猜")# 数据预测结果处理
@app.route('/predict_result', methods=['POST'])
def predict_result():# 获取最新的100条数据作为提示词latest_data = get_latest_100_data()prompt = "以下是最近期办公室饮水机时间和剩余热水水量的数据:---\n "for entry in latest_data:prompt += f"时间: {entry[0]}, 热水水量: {entry[1]}%\n"prompt += " 请总结规律并帮我预测时间是:"+datetime.now().strftime("%Y-%m-%d %H:%M") \+ "的热水水量是多少?你需要严格按照 '预测结果是:当前水量是XXX' 的格式回答,千万不要做任何解释"# 定义要发送的 JSON 数据data = {"model": "llama3-chinese:8b","messages": [{"role": "system","content": "你是一个高冷的规律总结大师,可以根据提供的数据进行预测结果,不需要做成任何解释"},{"role": "user","content": prompt}],"options": {"temperature": 0.5},"stream": False}# 定义目标 URLurl = "http://192.168.10.70:11434/api/chat"print("prompt:"+prompt)# 发送 POST 请求,并将 JSON 数据作为请求体发送response = requests.post(url, json=data)return render_template('predict.html', title="猜一猜", prediction=response.json()['message']['content'])if __name__ == '__main__':create_table()app.run(debug=True)
前台代码
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>{{ title }}</title><link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet"><style>.form-section, .list-section {padding: 20px;border-radius: 8px;}.form-section {background-color: #f8f9fa;border: 1px solid #e9ecef;}.list-section {background-color: #ffffff;border: 1px solid #dee2e6;}.navbar {margin-bottom: 20px;}</style>
</head>
<body><nav class="navbar navbar-expand-lg navbar-light bg-light"><a class="navbar-brand" href="/">饮水机数据记录</a><button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarNav"><ul class="navbar-nav"><li class="nav-item"><a class="nav-link" href="/">首页</a></li><li class="nav-item"><a class="nav-link" href="/predict">猜一猜</a></li></ul></div></nav><div class="container mt-5"><div class="row"><div class="col-md-4"><div class="form-section"><h2 class="mb-4">记录数据</h2><form action="/submit" method="post"><div class="form-group"><label for="test_date">日期:</label><input type="date" id="test_date" name="test_date" class="form-control" value="{{ today }}" required></div><div class="form-group"><label for="test_time">时间:</label><input type="time" id="test_time" name="test_time" class="form-control" value="{{ current_time }}" required></div><div class="form-group"><label for="water_level">储水量百分比:</label><select id="water_level" name="water_level" class="form-control" required><option value="0">0%</option><option value="20">20%</option><option value="40">40%</option><option value="60">60%</option><option value="80">80%</option><option value="100">100%</option></select></div><button type="submit" class="btn btn-primary btn-block">提交</button></form></div></div><div class="col-md-8"><div class="list-section"><h2 class="mb-4">已记录数据</h2><form method="get" action="/" class="mb-4"><div class="form-row"><div class="col"><label for="start_date">开始日期:</label><input type="date" id="start_date" name="start_date" class="form-control" value="{{ start_date }}" required></div><div class="col"><label for="end_date">结束日期:</label><input type="date" id="end_date" name="end_date" class="form-control" value="{{ end_date }}" required></div><div class="col align-self-end"><button type="submit" class="btn btn-secondary btn-block">筛选</button></div></div></form><table class="table table-bordered"><thead class="thead-light"><tr><th>序号</th><th>日期</th><th>时间</th><th>储水量百分比</th><th>操作</th></tr></thead><tbody>{% for row in data %}<tr><td>{{ row[0] }}</td> <!-- 这里使用序号 --><td>{{ row[2] }}</td><td>{{ row[3] }}</td><td>{{ row[4] }}%</td><td><form action="/delete/{{ row[1] }}" method="post"><button type="submit" class="btn btn-danger btn-sm">删除</button></form></td></tr>{% endfor %}</tbody></table><nav aria-label="Page navigation"><ul class="pagination justify-content-center">{% if page > 1 %}<li class="page-item"><a class="page-link" href="/?start_date={{ start_date }}&end_date={{ end_date }}&page={{ page - 1 }}">上一页</a></li>{% endif %}{% if page < total_pages %}<li class="page-item"><a class="page-link" href="/?start_date={{ start_date }}&end_date={{ end_date }}&page={{ page + 1 }}">下一页</a></li>{% endif %}</ul></nav></div></div></div></div><script src="{{ url_for('static', filename='js/jquery-3.7.1.min.js') }}"></script><script src="{{ url_for('static', filename='js/bootstrap.js') }}"></script>
</body>
</html>
总结

以上代码并不是完整的代码,可以到 gitee仓库下载。也可以到资源中下载。如果你觉得我的文章对你有帮助,请点赞关注。有任何问题都可以留言给我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/17775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【css3】01-css3新特性样式篇

目录 1 背景 1.1 设置背景图片的定位 1.2 背景裁切-规定背景的绘制区域 1.3 设置背景图片尺寸 2 边框 2.1 盒子阴影box-shadow 2.2 边框图片border-image 3 文本 -文字阴影text-shadow 1 背景 1.1 设置背景图片的定位 background-origin&#xff1a;规定背景图片的定位…

科技守护,河流水文监测保障水资源安全!

中小河流是城乡水资源的补给&#xff0c;又是不可或缺的排放渠道&#xff0c;维系着城乡水资源的平衡与生态的健康。然而&#xff0c;随着工业化、城市化的快速推进&#xff0c;河流生态环境面临着越来越大的压力。为了有效保护和合理利用河流资源&#xff0c;河流水文监测成为…

2024年新算法-红嘴蓝鹊优化器(RBMO)优化BP神经网络回归预测

2024年新算法-红嘴蓝鹊优化器(RBMO)优化BP神经网络回归预测 亮点&#xff1a; 输出多个评价指标&#xff1a;R2&#xff0c;RMSE&#xff0c;MSE&#xff0c;MAPE和MAE 满足需求&#xff0c;分开运行和对比的都有对应的主函数&#xff1a;main_BP, main_RBMO, main_BPvsBP_R…

亡羊补牢,一文讲清各种场景下GIT如何回退

系列文章目录 手把手教你安装Git&#xff0c;萌新迈向专业的必备一步 GIT命令只会抄却不理解&#xff1f;看完原理才能事半功倍&#xff01; 常用GIT命令详解&#xff0c;手把手让你登堂入室 GIT实战篇&#xff0c;教你如何使用GIT可视化工具 GIT使用需知&#xff0c;哪些操作…

区块链的运行原理与演示

目录 前言 具体演示 1、在浏览器中输入区块链演示网址&#xff1a; 2、创建新区块 3、篡改区块信息使其无效 4、新增P2P 网络节点。 5、节点连接。 6、区块信息同步 总结 前言 区块链系统是由一系列分布在全球各地的分布式节点组成的。这些节点互不隶属&#xff0c;通过…

Mesa GL Dispatch分发分析与理解

Mesa GL Dispatch分发分析与理解 引言 这篇博客的核心是从OpenGL应用程序的典型api入手&#xff0c;分析gl api 调用到用户态驱动后端的过程&#xff0c;进而总结出一个典型的调用栈。理解了这个典型调用栈&#xff0c;对后续任何一个API的调用过程分析&#xff0c;都是a piec…

文本匹配.grep与Select-String用法对比

Linux Shell与PowerShell上匹配字符串 grep与Select-String用法对比 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article…

家居厨房安全无小事:可燃气体报警器探头校准检测重要性解析

家居厨房作为日常生活中烹饪美食的重要场所&#xff0c;其安全问题不容忽视。 近年来&#xff0c;随着家庭用气设备的普及&#xff0c;煤气泄露事件时有发生&#xff0c;给人们的生命财产安全带来了严重威胁。 因此&#xff0c;安装可燃气体报警器探头&#xff0c;及时检测并…

Python Orange3库:数据挖掘与机器学习的终极利器

更多Python学习内容&#xff1a;ipengtao.com Orange3是一个开源的数据挖掘和机器学习库&#xff0c;提供了丰富的工具和算法来处理和分析数据。Orange3的图形用户界面使得非编程用户也能轻松进行数据分析&#xff0c;而其Python API则为编程用户提供了强大的灵活性。本文将详细…

如何在线转换图片的格式?一键修改图片格式的方法

图片是日常生活和工作中的一种常用的内容展示类型&#xff0c;在使用图片的时候不同用途需要使用的图片格式也是不同的&#xff0c;比如我们手中有一张jpg格式图片&#xff0c;但是平台上传要求格式是png&#xff0c;那么怎样才能将jpg转png格式呢&#xff1f;下面将教大家图片…

模拟量4~20mA电流传感器接线方式

一、模拟量4~20mA电流传感器接线方式 无源双线制是常见的电流型传感器接线方式&#xff0c;它具有简单、经济的特点。其接线方式如下&#xff1a; 传感器的“”接到数据采集器的电源“”上&#xff0c; 传感器的“-”端子连接到数据采集器的“AI”端子上&#xff0c; 数据采集器…

无人机+EasyDSS互联网视频平台:构建秸秆焚烧监控的“天眼”系统

一、方案背景 在每年的夏收时节&#xff0c;秸秆禁烧成为各地政府面临的一项重要任务。随着夏收季节的结束&#xff0c;大量农作物秸秆的处理问题逐渐凸显。一方面农作物种植面积辽阔&#xff0c;禁烧区域面积较大&#xff0c;监管巡逻人员的数量有限&#xff0c;无法全面顾及…

使用 ASM 修改字段类型,解决闪退问题

问题 我的问题是什么&#xff1f; 在桥接类 UnityBridgeActivity 中处理不同 unity 版本调用 mUnityPlayer.destroy(); 闪退问题。 闪退日志如&#xff1a; 闪退日志说在 UnityBridgeActivity中找不到类型为 UnityPlayer 的属性 mUnityPlayer。 我们知道&#xff0c;Android…

【鸟叔的Linux私房菜】2-主机规划与磁盘分区

文章目录 2.1 Linux与硬件的搭配各硬件设备在Linux的文件名使用虚拟机学习 2.2 磁盘分区磁盘连接方式和设备文件名的关系MBR(MS-DOS)与GPT磁盘分区表MBR(MS-DOS)GPT磁盘分区表 启动流程的BIOS与UEFI启动检测程序BIOS搭配MBR/GPT的启动流程UEFI BIOS搭配 GPT启动的流程 Linux安装…

RGB 平均值统计

任务&#xff1a;有一一对应的图片多组如下&#xff0c;希望统计灰色部分原有grb平均值&#xff0c;彩色部分rgb平均值。 方法&#xff1a;由下图对各个像素分析&#xff0c;分为3类&#xff0c;并记录坐标&#xff0c;根据坐标统计上图的rgb平均值&#xff0c;结果放在一张Exc…

linux开发之设备树基本语法二

设备树特殊节点,对节点定义别名,chosen节点用来uboot给内核传参 上面的mmc0就是sdmmc0节点的别名 device_type属性 只对cpu节点和memory节点进行描述 自定义属性 这部分自定义,比如定义管脚标号,初始数值等 为什么我们可以在设备树上自己定义属性呢?设备树文件描述的是硬…

JD3-40/23漏电继电器 AC220V 50-500mA 0.1s 导轨安装

系列型号&#xff1a; JD3-40/13漏电继电器JD3-40/23漏电继电器JD3-40/33漏电继电器JD3-40/43漏电继电器 JD3-70/13漏电继电器JD3-70/23漏电继电器JD3-70/33漏电继电器JD3-70/43漏电继电器 JD3-100/23漏电继电器JD3-100/43漏电继电器JD3-100/33漏电继电器JD3-100/13漏电继电…

260 基于matlab的工业乙醇发酵GUI仿真

基于matlab的工业乙醇发酵GUI仿真。首先对经典的流加半经验半理论模型进行动态和稳态仿真&#xff0c;考虑实际情况密&#xff0c;逐步将温度&#xff0c;气体排放等因素考虑到模型中去&#xff0c;进行综合性仿真。结合GUI技术&#xff0c;以动力学模型为核心&#xff0c;制作…

svg画简单的立方体

开发背景 要开发一个拖拽的大屏项目&#xff0c;其中涉及到一个装饰组件&#xff0c;是一个立方体cube&#xff0c;要求颜色可以修改&#xff0c;大小可以拖拽改变。 效果如下 分析 经过我一番奇思妙想&#xff0c;决定用svg实现&#xff0c;因为对svg比较熟悉。那就先来在草…

柯桥成人职场英语/Excuse me 是 “不好意思”,那 Excuse you呢?

口语中&#xff0c;excuse me的使用频率非常高 甚至已经成为大家的口头禅 用在一些表示歉意或者打扰对方的场合 本来excuse me的用法就已经够丰富了 没想到竟然还有excuse you&#xff1f; 哈哈哈&#xff0c;别蒙圈 这篇就给大家捋捋excuse的那些表达 快和小编一起来学学…