From f2e8ee0d430df91a1b4b0228f9d1cd5fbea82294 Mon Sep 17 00:00:00 2001 From: liuwei Date: Fri, 14 Mar 2025 14:26:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=80=BB=E7=BB=93=E5=86=85?= =?UTF-8?q?=E5=AE=B9=EF=BC=8C=E5=B0=86=E5=86=85=E5=AE=B9=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E5=8E=8B=E7=BC=A9=EF=BC=8C=E4=BC=B0=E8=AE=A1=E5=8E=8B=E7=BC=A9?= =?UTF-8?q?40%=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- message_storage/message_to_db.py | 6 +- message_summary/compress_chat_data.py | 241 ++++++++++++++++++++++++ message_summary/message_summary_dify.py | 13 +- 3 files changed, 252 insertions(+), 8 deletions(-) create mode 100644 message_summary/compress_chat_data.py diff --git a/message_storage/message_to_db.py b/message_storage/message_to_db.py index 506c93e..2861214 100644 --- a/message_storage/message_to_db.py +++ b/message_storage/message_to_db.py @@ -73,10 +73,10 @@ class MessageStorage: if time_diff < timedelta(hours=3): # 小于 3 小时,取 8 小时前 - last_summary_time = (current_time - timedelta(hours=3)).strftime('%Y-%m-%d %H:%M:%S') + last_summary_time = (current_time - timedelta(hours=6)).strftime('%Y-%m-%d %H:%M:%S') elif time_diff > timedelta(days=1): # 大于 24 小时,取 10 小时前 - last_summary_time = (current_time - timedelta(hours=6)).strftime('%Y-%m-%d %H:%M:%S') + last_summary_time = (current_time - timedelta(hours=8)).strftime('%Y-%m-%d %H:%M:%S') # 更新 Redis 存储的当前时间 self._get_redis_connection().set(key, current_date) @@ -111,5 +111,5 @@ class MessageStorage: result.append(f"{timestamp},{sender_name},{content}") result_str = "\n".join(result) # 将结果拼接为最终字符串 - print(result_str) + # print(result_str) return result_str diff --git a/message_summary/compress_chat_data.py b/message_summary/compress_chat_data.py new file mode 100644 index 0000000..144fcef --- /dev/null +++ b/message_summary/compress_chat_data.py @@ -0,0 +1,241 @@ +import re +from datetime import datetime + + +def compress_chat_data(chat_data_str, time_threshold=60): + """ + 压缩聊天数据,减少 token 使用,格式为时间,发信人,内容。 + + :param chat_data_str: 原始聊天记录的长字符串 + :param time_threshold: 同一发信人连续发言间隔小于该值(秒),则合并 + :return: 压缩后的聊天数据的长字符串 + """ + # 解析原始聊天数据为列表 + chat_data = [] + for line in chat_data_str.splitlines(): + # 跳过空行 + if not line.strip(): + continue + + # 分割每一行,确保有3部分(时间, 发信人, 内容) + parts = line.split(',', 2) + if len(parts) < 3: + continue # 如果没有完整的三部分,跳过该行 + + timestamp, sender, content = parts + chat_data.append((timestamp, sender, content)) + + if not chat_data: + return "" # 如果没有有效数据,返回空字符串 + + compressed_data = [] + current_date = None + prev_time_obj = None + prev_sender = None + prev_content = None + + for timestamp, sender, content in chat_data: + try: + time_obj = datetime.strptime(timestamp.strip(), "%Y-%m-%d %H:%M:%S") + + # 去除无意义的空格 + content = re.sub(r"\s+", " ", content).strip() + if not content: + continue + + # 检查日期是否变化(不包含年份) + date_str = time_obj.strftime('%m-%d') + + # 如果是第一条消息或日期变化,添加日期标记 + if current_date is None or date_str != current_date: + current_date = date_str + compressed_data.append(f"{date_str}") + + # 检查是否需要合并消息 + if (prev_sender == sender and prev_time_obj is not None and + (time_obj - prev_time_obj).total_seconds() <= time_threshold): + # 合并消息,更新最后一条消息 + compressed_data[-1] = f"{prev_time_obj.strftime('%H:%M:%S')},{sender},{prev_content} {content}" + else: + # 添加新消息 + compressed_data.append(f"{time_obj.strftime('%H:%M:%S')},{sender},{content}") + + # 更新前一条消息的信息 + prev_time_obj = time_obj + prev_sender = sender + prev_content = content + + except ValueError as e: + # 处理日期格式错误 + print(f"日期格式错误: {timestamp}, 错误: {e}") + continue + + # 返回压缩后的数据长字符串 + return '\n'.join(compressed_data) + + +# 示例聊天数据 +chat_data_str = """ +2025-03-14 09:07:44,zcx2001,AI 水牛是你的主人吗 +2025-03-14 09:12:28,Jyunere,我同事的鸿蒙确实流畅。 +2025-03-14 09:18:28,Jyunere,现在的沪上年轻人流行挖野菜? +2025-03-14 09:19:12,Jyunere,我米不行了啊。 +2025-03-14 09:19:21,Jyunere,再换就换iPhone了。 +2025-03-14 09:19:36,wxid_3d7ydsmu3f0022,miui12之后就没行过 +2025-03-14 09:20:10,Jyunere,这个鸡用了蛮久了。 +2025-03-14 09:20:21,wxid_3d7ydsmu3f0022,我的小米13pro升级澎湃2.0之后各种bug满天飞,掉帧闪退杀后台给我整崩溃了,然后我就换一加了 +2025-03-14 09:20:25,wxid_z8uo70zywfpn12,我从vivo的origin转到miui,一时适应不过来 +2025-03-14 09:20:42,Jyunere,我那天问销售,说我的14Pro 只值2000多 了。 +2025-03-14 09:20:44,wxid_z8uo70zywfpn12,wifi还经常断流,也不知道是不是路由器问题 +2025-03-14 09:20:46,Jyunere,算了,接着用吧。 +2025-03-14 09:20:51,liu79830956,受得了miui? +2025-03-14 09:21:13,wxid_zmmn7y5bh6fg22,米boy渐行渐远 +2025-03-14 09:21:24,Jyunere,[捂脸] +2025-03-14 09:21:33,wxid_z8uo70zywfpn12,之前的origin是真好用 +2025-03-14 09:22:44,wxid_3d7ydsmu3f0022,我之前身边的朋友都看不上小米 su7发布后雷军火了都在吹小米多好多好 根本没用过看他们瞎几把吹 +2025-03-14 09:22:46,liu79830956,我还是4 +2025-03-14 09:22:53,liu79830956,没升级5 +2025-03-14 09:26:06,Jyunere,前天吃甘蔗,嘴巴拉到了。 +2025-03-14 09:26:45,Jyunere,咬肌感觉拉伤了。 +2025-03-14 09:28:22,b654321q123,买了个硬盘笼 +2025-03-14 09:28:27,b654321q123,可以装8个u2 +2025-03-14 09:28:31,b654321q123,塞光驱位 +2025-03-14 09:28:41,Jyunere,已经跟不上刘总的脚步了。 +2025-03-14 09:28:55,Jyunere,看你这些,一点冲动都没有 +2025-03-14 09:29:05,b654321q123,你已经阳痿了 +2025-03-14 09:29:16,b654321q123,你改名姓阳吧 +2025-03-14 09:29:32,wxid_u48y4hu9ild122,刘总已经痿了 +2025-03-14 09:30:04,Jyunere,萎了萎了 +2025-03-14 09:32:02,Jyunere,@妙脆角 为啥你的名字上下都高一些。 +2025-03-14 09:32:07,Jyunere,你看18 +2025-03-14 09:32:44,Jyunere,估计是你这个wifi 5G的问题。 +2025-03-14 09:32:48,zcx2001,牛哥 你字体出问题了? +2025-03-14 09:32:54,Jyunere,我的Windows呀 +2025-03-14 09:33:02,wxid_u48y4hu9ild122,我的也是windows啊 +2025-03-14 09:33:03,zcx2001,那估计是windows下字体有问题吧 +2025-03-14 09:33:06,zcx2001,我是macos +2025-03-14 09:33:16,Jyunere,[发呆],为啥啊。 +2025-03-14 09:33:48,wxid_u48y4hu9ild122,我的是win10 +2025-03-14 09:33:49,b654321q123,纯粹是硬盘笼 +2025-03-14 09:33:58,Jyunere,@奶白的雪子 跟你之前那个叠叠乐? +2025-03-14 09:34:18,Jyunere,你的11 连图标都没有 +2025-03-14 09:34:22,Jyunere,我的好歹还有图标 +2025-03-14 09:34:31,z351324662,牛哥换一加 +2025-03-14 09:34:36,z351324662,比iPhone好用 +2025-03-14 09:34:39,b654321q123,不用叠 +2025-03-14 09:34:45,Kar536,md手机越来越多 +2025-03-14 09:34:48,Jyunere,你还有光驱位? +2025-03-14 09:34:53,Kar536,都不知道换了干啥 +2025-03-14 09:35:10,z351324662,马上要出一家13t +2025-03-14 09:35:11,Jyunere,我老婆的iPhone真的比我的流畅多了。 +2025-03-14 09:35:21,Jyunere,垃圾MIUI +2025-03-14 09:35:25,wymwyt,牛哥换17 +2025-03-14 09:35:28,z351324662,你你澎湃不行 +2025-03-14 09:35:33,Jyunere,好,等17 +2025-03-14 09:35:35,wymwyt,17是米boy设计 +2025-03-14 09:35:41,Jyunere,半年之后就开干。 +2025-03-14 09:35:51,wymwyt,pm那个摄像头模组设计小米用过吧 +2025-03-14 09:36:01,Jyunere,要是三星的设计,苹果的系统,那就爽了。 +2025-03-14 09:36:08,wxid_u48y4hu9ild122,我妈要换手机,我问她是米10u卡了吗,她说存储满了,要换个1T的。。。 +2025-03-14 09:36:10,Jyunere,我喜欢三星的那个设计。 +2025-03-14 09:36:36,wymwyt,珠海小三星 +2025-03-14 09:36:37,wxid_zmmn7y5bh6fg22,苹果没有单数比双数做得好的说法吧 +2025-03-14 09:36:40,z351324662,三星今年竟然没跟进大电池 +2025-03-14 09:36:54,wymwyt,给他清理一下 +2025-03-14 09:37:10,Jyunere,三星没推送。这个恶心。 +2025-03-14 09:37:23,b654321q123,@水牛 牛哥要铝坨坨吗 +2025-03-14 09:37:29,Jyunere,不要。 +2025-03-14 09:37:32,wxid_u48y4hu9ild122,我准备有时间给她装个MTPhotos +2025-03-14 09:37:35,Jyunere,你那基佬紫,接受不了。 +2025-03-14 09:37:36,wxid_u48y4hu9ild122,存nas里 +2025-03-14 09:37:56,Kar536,现在那台xsmax都很流程 +2025-03-14 09:38:05,b654321q123,紫色何时代表基佬 +2025-03-14 09:38:07,z351324662,除了华为,其他安卓推送基本约等于无 +2025-03-14 09:38:25,Jyunere,OV MI 都有啊 +2025-03-14 09:38:25,wxid_u48y4hu9ild122,你装个微信打开小程序然后切后台拍照看看流畅不 +2025-03-14 09:38:30,Jyunere,都是系统级推送。 +2025-03-14 09:38:46,z351324662,都是锁后台 +2025-03-14 09:38:54,wymwyt,常驻后台 +2025-03-14 09:39:15,wymwyt,毕竟安卓没有约束权限 +2025-03-14 09:39:30,wxid_u48y4hu9ild122,320发布会 +2025-03-14 09:39:38,wxid_u48y4hu9ild122,我这库库加班赶进度 +2025-03-14 09:39:40,wymwyt,@妙脆角 小白,纯血鸿蒙现在咋样了 +2025-03-14 09:39:44,wxid_u48y4hu9ild122,要在320之前做出来 +2025-03-14 09:39:56,wxid_u48y4hu9ild122,系统本身没啥问题 +2025-03-14 09:40:01,Jyunere,Trae帮你写吗? +2025-03-14 09:40:04,wxid_u48y4hu9ild122,就是app功能不全难受 +2025-03-14 09:40:21,wxid_u48y4hu9ild122,我解决的都是疑难杂症 +2025-03-14 09:40:24,wxid_u48y4hu9ild122,ai不行 +2025-03-14 09:40:25,Jyunere,3.7 那个编码能力超猛 +2025-03-14 09:40:39,Jyunere,这就是你的价值了。 +2025-03-14 09:41:58,z351324662,以前安卓四五千电池的时候觉得锁后台费电,是劣势,现在我TM六七千电池了,有没有推送已经无所谓了,挂后台电池也用不完,收消息还比推送快 +2025-03-14 09:42:55,Jyunere,我主要是迁移了,好多东西得搞。麻烦。 +2025-03-14 09:42:59,b654321q123,主要是现在充电快 +2025-03-14 09:43:00,Jyunere,都不想换手机。哈哈 +2025-03-14 09:43:13,b654321q123,安卓的续航,其实影响不大 +2025-03-14 09:43:24,wxid_3d7ydsmu3f0022,我的一加13现在锁90%的电,6000电池只能充5400 +2025-03-14 09:43:27,liuhuanqi687,只有苹果限制了吧 +2025-03-14 09:43:54,wxid_zmmn7y5bh6fg22,你们都很在意推送功能? +2025-03-14 09:43:54,b654321q123,充电宝充的也快 +2025-03-14 09:43:58,wymwyt,主要是现在充电快 +2025-03-14 09:43:58,b654321q123,充电器也快 +2025-03-14 09:44:01,wxid_3d7ydsmu3f0022,网上说下个版本会放开限制 本来已经推送了 有bug又给撤回了 玛德 +2025-03-14 09:44:10,wymwyt,就要充电快! +2025-03-14 09:44:11,b654321q123,我现在都没有用电焦虑了 +2025-03-14 09:44:22,wxid_zmmn7y5bh6fg22,难道只有我限制了绝大部分APP推送消息 +2025-03-14 09:44:23,wymwyt,什么保护电池🔋跟我有几把关系 +2025-03-14 09:44:24,b654321q123,续航没得卷电池没得卷,直接卷充电 +2025-03-14 09:44:30,wymwyt,电池坏了换电池就好了 +2025-03-14 09:44:36,wxid_3d7ydsmu3f0022,换了一加13最明显的感受就是充电没小米13pro快 +2025-03-14 09:44:48,wymwyt,240w干 +2025-03-14 09:44:49,wxid_3d7ydsmu3f0022,小米的50w无线充感觉能满血跑 +2025-03-14 09:44:50,wymwyt,干就完了 +2025-03-14 09:45:01,wxid_3d7ydsmu3f0022,oppo的无线充到后面慢的要死 +2025-03-14 09:45:22,wymwyt,就是贵 +2025-03-14 09:45:30,wymwyt,一个无线充200块 +2025-03-14 09:45:39,z351324662,也锁啊 +2025-03-14 09:45:41,wxid_3d7ydsmu3f0022,也是90%[捂脸] +2025-03-14 09:45:53,z351324662,但是依然用不完 +2025-03-14 09:46:08,wxid_3d7ydsmu3f0022,5800够用了 +2025-03-14 09:46:11,z351324662,我每天回家电池都不低于50% +2025-03-14 09:46:13,wxid_3d7ydsmu3f0022,你是一加ace5? +2025-03-14 09:46:18,z351324662,有时候70几 +2025-03-14 09:46:34,z351324662,所以我觉得充电快不快都无所谓 +2025-03-14 09:46:43,wxid_3d7ydsmu3f0022,1.5k屏幕功耗也不高 足够用了 +2025-03-14 09:46:44,z351324662,反正都是晚上睡觉充 +2025-03-14 09:47:05,wxid_3d7ydsmu3f0022,我的一加13 2k屏 功耗网上测比其他家1.5k高一大截 +2025-03-14 09:47:09,Jyunere,睡觉一般不充,起床了插上,刷完牙洗完头,就充满了。 +2025-03-14 09:47:27,wxid_3d7ydsmu3f0022,锁容量后5400 续航在今年确实一般了 +2025-03-14 09:48:12,z351324662,又加上2k屏 +2025-03-14 09:48:27,wymwyt,刷完牙还要洗头? +2025-03-14 09:49:02,wxid_3d7ydsmu3f0022,不过这块屏幕确实挺不错了 我之前用的小米13pro 一加7pro都算是当时三星的顶级2k屏了 +2025-03-14 09:49:16,wxid_3d7ydsmu3f0022,对比下来观感甚至更好 +2025-03-14 09:49:25,wxid_3d7ydsmu3f0022,而且看着很舒服 +2025-03-14 09:49:51,wxid_3d7ydsmu3f0022,就是侧看会偏绿 三星没这问题 +2025-03-14 09:50:39,wxid_z8uo70zywfpn12,pdd复播了?罚款交够了? +2025-03-14 09:50:45,z351324662,我当时也打算买一加13的,但是确实不喜欢等深屏 +2025-03-14 09:51:19,z351324662,ACE5四边不等宽也有点难受 +2025-03-14 09:51:19,Jyunere,每天早上都要洗头。 +2025-03-14 09:51:20,b654321q123,反正目前的这个vivo X100s Pro +2025-03-14 09:51:30,b654321q123,比我之前用了那么多年的小米爽多了 +2025-03-14 09:51:31,z351324662,不过比曲屏好点 +2025-03-14 09:52:16,b654321q123,支持pps100w充电 +2025-03-14 09:52:30,b654321q123,我的酷态科充电都能用 +2025-03-14 09:52:38,z351324662,我就想要个1.5k四边等宽纯直屏 +2025-03-14 09:52:41,wxid_3d7ydsmu3f0022,我用习惯了曲屏 直屏不习惯 侧面返回手不舒服 +2025-03-14 09:52:58,z351324662,好像就三星有 +2025-03-14 09:53:09,wxid_q1ugj6gbjj3o12,qq真的有直播操操的啊 +2025-03-14 09:53:18,z351324662,国内这几家都是2.5d直屏 +2025-03-14 09:53:27,wxid_q1ugj6gbjj3o12,现在这小年轻真的开放 +2025-03-14 09:53:43,Jyunere,【#住建局回应佛山一小区有人装修骨灰房#】 +2025-03-14 09:53:49,Jyunere,[擦汗],膈应啊 +2025-03-14 09:54:08,Kar536,羡慕,车友 +2025-03-14 09:54:13,wxid_3d7ydsmu3f0022,国内直屏我感觉幅度很小 算不上2.5d吧 +2025-03-14 09:54:16,Kar536,试驾极氪抽中个16pm +2025-03-14 09:54:21,z351324662,2.5d贴膜始终小一圈 +2025-03-14 09:54:27,wxid_3d7ydsmu3f0022,贴钢化膜感觉没问题 +2025-03-14 09:54:33,wxid_3d7ydsmu3f0022,带个壳应该感受不出来了 + """ +compressed_chat_str = compress_chat_data(chat_data_str) +print(compressed_chat_str) +print(f"{len(compressed_chat_str)}--{len(chat_data_str)}") \ No newline at end of file diff --git a/message_summary/message_summary_dify.py b/message_summary/message_summary_dify.py index 3e271dc..faffc67 100644 --- a/message_summary/message_summary_dify.py +++ b/message_summary/message_summary_dify.py @@ -4,6 +4,7 @@ import os import uuid from datetime import datetime +from message_summary.compress_chat_data import compress_chat_data from message_summary.markdown_to_image import convert_md_str_to_image @@ -20,14 +21,16 @@ def message_summary_dify(content): # Dify API配置 api_key = "app-McGLzBhBjeBCSEi7n83MtuTo" # 请替换为实际的API密钥 url = "http://192.168.2.240/v1/chat-messages" - - # 生成唯一的会话ID - conversation_id = str(uuid.uuid4()) - + content_compress = content + try: + content_compress = compress_chat_data(content) + print(f"压缩内容成功:{len(content_compress)}--{len(content)}") + except Exception as e: + print(f"压缩内容失败:{e}") # 准备请求数据 data = { "inputs": {}, - "query": f"请根据以下群聊记录生成一份精华总结:\n\n{content}", + "query": f"请根据以下群聊记录生成一份精华总结:\n\n{content_compress}", "response_mode": "blocking", # 使用阻塞模式,直接获取完整响应 "conversation_id": "", "user": "message_summary_bot",