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

背景

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

理论基础

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

实现思路与理论基础

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

依赖服务

  • 大模型服务

实现效果

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

实现代码

后台代码
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.rhkb.cn/news/334349.html

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

相关文章

扔掉 MacBook,挑战带OrangePi出差!

背景 由于工作需要&#xff0c;博主经常会到各大企业的自建机房中私有化部署公司的软件产品。 在某些企业自建机房中&#xff0c;有时给到全新的机器&#xff0c;没有基础环境&#xff0c;甚至有的还无法互联网&#xff0c;而且因为近几年CentOS的停止更新&#xff0c;服务器…

【UE C++】 虚幻引擎C++开发需要掌握的C++和U++的基础知识有哪些?

目录 0 引言1 关键的 C 知识2 Unreal Engine 相关知识3 学习建议 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&#x1f4a5; 标题&#xff1a;【UE C】 虚幻引擎C开发需要掌握的C和U的基础知识有哪些&#xff1f;❣️ 寄语&…

01 一文理解,Prometheus详细介绍

01 一文理解&#xff0c;Prometheus详细介绍 介绍 大家好&#xff0c;我是秋意零。 Prometheus 是一个开源的系统监控和报警工具包&#xff0c;最初由SoundCloud开发&#xff0c;并在2012年作为开源项目发布。Prometheus 目前由Cloud Native Computing Foundation&#xff08…

58. UE5 RPG AI行为树的装饰器

书接56. UE5 RPG 给敌人添加AI实现跟随玩家&#xff0c;我们实现了AI一些基础设置&#xff0c;并实现了获取敌人附近的玩家实现了跟随功能 接下来&#xff0c;我们将实现区分职业&#xff0c;并根据职业不同设置不同的攻击距离&#xff0c;并且根据职业实现不同的技能施放。 …

VSCODE中F12无法跳转,快捷键设置F12和insert混淆了

异常现象 最近用新电脑&#xff08;华为&#xff09;的时候&#xff0c;发现VSCODE经常按F12无法跳转&#xff0c;在快捷键设置当中&#xff0c;也是设置成功的&#xff1b; 此时重新去快捷键设置&#xff0c;会发现按 F12变为了Insert 解决方法 华为笔记本的Fx按键&#x…

Euler 欧拉系统介绍

Euler 欧拉系统介绍 1 简介重要节点与版本EulerOS 特色EulerOS 与 openEuler 区别联系Euler 与 HarmonyOS 区别联系 2 openEuler特色支持 ARM&#xff0c;x86&#xff0c;RISC-V 等全部主流通用计算架构融入 AI 生态嵌入式实时能力提升引入 OpenHarmony 一些突出功能 参考 1 简…

23-LINUX--TCP连接状态

一.TCP服务的特点 传输层协议主要有两个&#xff1a;TCP 协议和 UDP协议。TCP 协议相对于UDP协议的特点是&#xff1a;面向连接、字节流和可靠传输。 使用TCP协议通信的双方必须先建立连接&#xff0c;然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源&a…

OpenHarmony 适配HDMI接口声卡

高清多媒体接口&#xff08;High Definition Multimedia Interface&#xff0c;HDMI &#xff09;是一种全数字化视频和声音发送接口&#xff0c;可以发送未压缩的音频及视频信号。HDMI可用于机顶盒、DVD播放机、个人计算机、电视、游戏主机、综合扩大机、数字音响与电视机等设…

windows中每日定时执行python脚本,解决问题

由于需要一个每天定时执行的任务&#xff0c;所以需要定时启动&#xff0c;网上看了很多方法&#xff0c;感觉不能在python脚本种写个while true 定时执行&#xff0c;占资源不说还不可靠。 最后考虑通过系统工具定时启动&#xff0c;发现linux中有crontab&#xff0c;windows…

OpenHarmony实战开发——宿舍全屋智能开发指南

项目说明 基于OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;、数字管家开发宿舍全屋智能&#xff0c;实现碰一碰开门、碰一碰开灯、碰一碰开风扇以及烟感检测。因为各项目开发流程大体相似&#xff0c;本文主要以碰一碰开门为例介绍如何在现有OpenHar…

海信集团携纷享销客启动LTC数字化落地 推动ToB业务再升级

日前&#xff0c;海信集团携手连接型CRM纷享销客正式启动LTC&#xff08;Leads to Cash&#xff09;数字化平台实施落地项目。作为海信集团数字化的重要里程碑&#xff0c;该项目将通过统一规划、统一投资、统一平台、资源共享和数据赋能&#xff0c;构建ToB业务数字化经营管理…

Python代码:十八、生成数字列表

1、描述 牛牛在牛客网系统录入了一连串数字&#xff0c;数字之间依靠逗号隔开&#xff0c;你能帮助他将这些数字存储在列表中吗&#xff0c;列表元素以int的形式。 输入描述&#xff1a; 输入一行整数&#xff0c;数字之间以空格间隔。 输出描述&#xff1a; 输出这些数字…

【基础篇-Day8:JAVA字符串的学习】

目录 1、常用API2、String类2.1 String类的特点2.2 String类的常见构造方法2.3 String类的常见面试题&#xff1a;2.3.1 面试题一&#xff1a;2.3.2 面试题二&#xff1a;2.3.3 面试题三&#xff1a;2.3.4 面试题四&#xff1a; 2.4 String类字符串用于比较的方法2.5 String类字…

5.28_Java语法_运算符,接收键盘数据

1、运算符 具体应用同我C语言操作符详解博客相同,另有补充会直接写 1.1、基本的算术运算符、符号做连接符 CSDN 具体应用同我C语言操作符详解博客相同 符号做连接符&#xff1a; ""符号与字符串运算连用的时候是用作连接符的&#xff0c;其结果依然是一个字符串…

【Java】类和对象

类和类的实例化 类就是一类对象的统称。对象就是这一类具体化的一个实例。 声明一个类就是创建一个新的数据类型&#xff0c;而类在 Java 中属于 引用类型 &#xff0c; Java 使用关键字 class 来声明类。我们来 看以下简单的声明一个类。 基本语法&#xff1a; class &…

3步骤找回丢失文件!EasyRecovery让你轻松应对数据灾难!

EasyRecovery&#xff1a;数据丢失的终结者&#xff0c;您的数字世界守护神 在数字化时代&#xff0c;数据已经成为我们生活的一部分。无论是个人照片、重要文件还是企业资料&#xff0c;数据都扮演着重要的角色。然而&#xff0c;意外删除、格式化、系统崩溃或病毒攻击等原因导…

OrangePi AIpro测评:智能与创新的完美结合

OrangePi AIpro上手指南 简介 香橙派与华为合作发布的香橙派AiPro为Ai主力&#xff0c;为边缘设备的Ai计算提供了可能。 集成图形处理器&#xff0c;拥有8GB/16GB LPDDR4X&#xff08;我这个是8G内存版本的&#xff09;&#xff0c;可以外接32GB/64GB/128GB/256GB eMMC模块&a…

python自动化-自动化网络配置工具v2(可巡检,可批量配置)

在日常工作中遇到需要配置相同配置的场景&#xff0c;网络工程师一个个去登陆配置会让工作效率显得没那么高效。 但是随着科技发展&#xff0c;人们不断的学习&#xff0c;我们似乎可以使用一些软件或者脚本来帮助我们实现巡检任务或者配置任务。 今天我想给大家分享一款我自己…

攻击同学网络,让同学断网

技术介绍&#xff1a;ARP欺骗 ARP欺骗&#xff08;ARP spoofing&#xff09;是一种网络攻击技术&#xff0c;它通过伪造ARP&#xff08;地址解析协议&#xff09;响应包来欺骗目标设备&#xff0c;使其将网络流量发送到攻击者指定的位置。具体操作步骤如下&#xff1a; 攻击者…

Spark SQL 中DataFrame DSL的使用

在上一篇文章中已经大致说明了DataFrame APi,下面我们具体介绍DataFrame DSL的使用。DataFrame DSL是一种命令式编写Spark SQL的方式&#xff0c;使用的是一种类sql的风格语法。 文章链接&#xff1a; 一、单词统计案例引入 import org.apache.spark.sql.{DataFrame, SaveMod…