- # -*- coding: UTF-8 -*-
-
- # MindPlus
- # Python
- import sys
- import time
- from unihiker import GUI
- import openai
- import json
- from pinpong.board import Board
- from pinpong.libs.dfrobot_max30102 import DFRobot_BloodOxygen_S
- import xlwt
- import math
- from pathlib import Path
- sys.path.append("/root/mindplus/.lib/thirdExtension/mengchangfeng-kimi-thirdex")
-
- Board().begin()
- u_gui=GUI()
- p_max30102 = DFRobot_BloodOxygen_S()
- while (False == p_max30102.begin()):
- print("init fail!")
- time.sleep(1)
-
- 标题=u_gui.draw_text(text="心率血氧测量仪",x=20,y=5,font_size=20, color="#FF0000")
- 心率=u_gui.draw_text(text="",x=10,y=55,font_size=20, color="#0000FF")
- 血氧=u_gui.draw_text(text="",x=10,y=85,font_size=20, color="#0000FF")
- 分析=u_gui.draw_text(text="",x=2,y=120,font_size=14, color="#00FF00")
- XinLv = -1
- XueYang = -1
-
- client = openai.OpenAI(api_key="sk-IEnRsel06IHN26r4biNUBJYtRVUS1dQyi2WbuFjmg6lwboJ0", base_url="https://api.moonshot.cn/v1")
- messages = [
- {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文对话。你的回答形成一句话,字数控制在80个字以内。"},
- ]
- def chat(input: str) -> str:
- """
- chat 函数支持多轮对话,每次调用 chat 函数与 Kimi 大模型对话时,Kimi 大模型都会”看到“此前已经
- 产生的历史对话消息,换句话说,Kimi 大模型拥有了记忆。
- """
-
- global messages
-
- # 我们将用户最新的问题构造成一个 message(role=user),并添加到 messages 的尾部
- messages.append({
- "role": "user",
- "content": input,
- })
-
- # 携带 messages 与 Kimi 大模型对话
- completion = client.chat.completions.create(
- model="kimi-k2-0711-preview",
- messages=messages,
- temperature=0.6,
- )
-
- # 通过 API 我们获得了 Kimi 大模型给予我们的回复消息(role=assistant)
- assistant_message = completion.choices[0].message
-
- # 为了让 Kimi 大模型拥有完整的记忆,我们必须将 Kimi 大模型返回给我们的消息也添加到 messages 中
- messages.append(assistant_message)
-
- return assistant_message.content
- def wrap_text(text, line_length):
- """
- 将文本按照指定的字符个数换行。
-
- :param text: 要处理的文本
- :param line_length: 每行的字符个数
- :return: 换行后的文本
- """
- wrapped_text = ""
- current_line_length = 0
-
- for char in text:
- if current_line_length >= line_length:
- wrapped_text += "\n"
- current_line_length = 0
- wrapped_text += char
- current_line_length += 1
-
- return wrapped_text
- YunXingShiJian = time.time()
- BiaoShi = 0
- CeShiShiJian = time.time()
- XuHao = 0
- WenJianJiLuShiJian = time.time()
- WenJianJiLuBiaoShi = 0
- WenJianXuHao = 1
- while True:
- if (WenJianJiLuBiaoShi == 0):
- WenJianJiLuBiaoShi = 1
- fp = xlwt.Workbook(encoding="ascii")
- table = fp.add_sheet(sheetname="心率血氧值记录表", cell_overwrite_ok=True)
- timeStyle = xlwt.easyxf(strg_to_parse="font: name Times New Roman, color-index red, bold on", num_format_str="dd/mm/yyyy")
- xhStyle = xlwt.easyxf(strg_to_parse="font: name Times New Roman, color-index red, bold on", num_format_str="0")
- numStyle = xlwt.easyxf(strg_to_parse="font: name Times New Roman, color-index red, bold on", num_format_str="0.00")
- mindFont = xlwt.Font()
- mindFont.name = "微软雅黑"
- titleStyle = xlwt.XFStyle()
- titleStyle.font = mindFont
- table.write(0, 0, "序号", style=titleStyle)
- table.write(0, 1, "心率值", style=titleStyle)
- table.write(0, 2, "血氧值", style=titleStyle)
- table.write(0, 3, "记录时间", style=titleStyle)
- p_max30102.sensor_start_collect()
- XinLv = p_max30102.get_heartbeat()
- XueYang = p_max30102.get_spo2()
- if (not (XinLv == -1)):
- if (BiaoShi == 0):
- YunXingShiJian = time.time()
- BiaoShi = 1
- 心率.config(text=(str("心率:") + str(XinLv)))
- if (not (XueYang == -1)):
- if (BiaoShi == 0):
- YunXingShiJian = time.time()
- BiaoShi = 1
- 血氧.config(text=(str("血氧:") + str(XueYang)))
- if (BiaoShi == 1):
- if ((time.time() - YunXingShiJian) > 25):
- if XinLv==-1 or XueYang==-1:
- continue
- YunXingShiJian = time.time()
- original_text=chat(str("我现在的") + str("心率值是") + str(XinLv)+ str("、血氧值是") + str(XueYang) + str(",请为帮我分析一下。"))
- print(original_text)
- wrapped_text = wrap_text(original_text, 12)
- 分析.config(color="#000000")
- 分析.config(text=wrapped_text)
- if ((not (XinLv == -1)) and (not (XueYang == -1))):
- XuHao = (XuHao + 1)
- table.write((int(XuHao)), 0, (int(XuHao)), style=xhStyle)
- table.write((int(XuHao)), 1, XinLv, style=numStyle)
- table.write((int(XuHao)), 2, XueYang, style=numStyle)
- table.write((int(XuHao)), 3, time.strftime("%Y/%m/%d %H:%M:%S"), style=timeStyle)
- else:
- continue
- if ((time.time() - WenJianJiLuShiJian) > 60):
- YunXingShiJian = time.time()
- WenJianJiLuShiJian = time.time()
- WenJianJiLuBiaoShi = 0
- fp.save((str("心率血氧值记录表") + str((str((int(WenJianXuHao))) + str(".xls")))))
- file_path = Path("心率血氧值记录表1.xls")
- file_object = client.files.create(file=file_path, purpose="file-extract")
- file_content = client.files.content(file_id=file_object.id).text
- messages=[{
- "role": "system",
- "content": file_content
- }]
- WenJianXuHao = (WenJianXuHao + 1)
- original_text=chat("帮我分析一下,我的心率血氧值记录数据,并给出建议,字数控制在80字")
- print(original_text)
- wrapped_text = wrap_text(original_text, 12)
- 分析.config(color="#00FF00")
- 分析.config(text=wrapped_text)
- time.sleep(1)
复制代码