优化了群总结prompt,减少了总结相关内容的有效性。

This commit is contained in:
liuwei
2025-02-20 15:41:08 +08:00
parent b926cc0c99
commit ac89540599
2 changed files with 137 additions and 44 deletions

View File

@@ -42,51 +42,58 @@ def archive_message(group_id, timestamp_str, sender, content, message_type, atta
def get_messages(group_id, all_contacts: dict):
# 连接到数据库
connection = pymysql.connect(**db_config)
try:
# 获取redis 中的上次总结时间本次从上次开始算弱没有则从8小时之前开始计算
# 生成Redis key
with pymysql.connect(**db_config) as connection:
# 获取 redis 中的上次总结时间,本次从上次开始算,若没有,则从 8 小时之前开始计算
key = f"{group_id}:summary_time"
last_summary_time = r.get(key)
# 如果 Redis 返回值为字节类型,转换为字符串
if last_summary_time:
last_summary_time = last_summary_time.decode('utf-8')
current_time = datetime.now()
current_date = current_time.strftime('%Y-%m-%d %H:%M:%S')
if last_summary_time is None:
# 获取当前时间并计算8小时前的时间
if not last_summary_time:
# 获取当前时间并计算 8 小时前的时间
eight_hours_ago = current_time - timedelta(hours=8)
# 转换为数据库中存储的时间格式 (假设timestamp是DATETIME类型)
last_summary_time = eight_hours_ago.strftime('%Y-%m-%d %H:%M:%S')
r.set(key, current_date)
with connection.cursor() as cursor:
else:
# 检查 redis 中的时间与当前时间差是否小于 3 小时
last_summary_time_obj = datetime.strptime(last_summary_time, '%Y-%m-%d %H:%M:%S')
time_diff = current_time - last_summary_time_obj
# 执行查询获取最近8小时的消息
if time_diff < timedelta(hours=3):
# 如果小于 3 小时,取当天的内容
last_summary_time = current_time.replace(hour=0, minute=0, second=0, microsecond=0).strftime(
'%Y-%m-%d %H:%M:%S')
elif time_diff > timedelta(days=1):
# 如果超过 24 小时,将时间设置为当天 0 点
last_summary_time = current_time.replace(hour=0, minute=0, second=0, microsecond=0).strftime(
'%Y-%m-%d %H:%M:%S')
# 更新 Redis 存储的当前时间
r.set(key, current_date)
with connection.cursor() as cursor:
# 执行查询,获取最近 8 小时的消息
query = """
SELECT group_id, timestamp, sender, content
FROM messages
WHERE timestamp >= %s AND message_type =1 and group_id = %s
"""
SELECT timestamp, sender, content
FROM messages
WHERE timestamp >= %s AND message_type = 1 AND group_id = %s
"""
cursor.execute(query, (last_summary_time, group_id))
# 提取结果并组成带逗号的字符串
# 构建最终的结果字符串
result = []
if cursor.rowcount > 0:
result.append(f"聊天记录总行数:{cursor.rowcount}")
for row in cursor.fetchall():
group_id = row[0]
timestamp = row[1]
sender = row[2]
content = row[3]
result.append(f"{group_id},{timestamp},{all_contacts.get(sender, sender)},{content}")
timestamp, sender, content = row
sender_name = all_contacts.get(sender, sender) # 获取发送者的名字,若找不到则使用原 ID
result.append(f"{timestamp},{sender_name},{content}")
# 将列表中的字符串连接成一个最终的结果
result_str = "\n".join(result)
# print(result_str) # 输出带逗号的字符串
result_str = "\n".join(result) # 将结果拼接为最终字符串
return result_str
finally:
connection.close() # 关闭数据库连接
# 示例用法
if __name__ == "__main__":

View File

@@ -18,21 +18,107 @@ def message_summary(content):
# 设置Authorization和URL
authorization = "46a5674a-e978-491b-a810-5d54605f2c36" # 请替换为真实的Authorization token
url = 'http://127.0.0.1:8080/v1/chat/completions'
# 群聊精华总结生成指令
prompt = """
【基础要求】
总结风格采用轻松幽默的口吻加入适量的网络流行语和emoji如👍/🎉等),让总结更有趣。
时间范围:[自动识别日期]的群聊记录。
【结构要求】:
⭐ 创意标题10字内带emoji
📊 数据看板(消息总数/最活跃时段/表情包冠军)
🕒 聊天时段(开始时间 - 结束时间)
🗂️ 话题星系分类3-5个核心话题
🏆 今日MVP最具贡献成员+获奖理由)
【话题分析细则】:
分类逻辑:根据聊天主题相关性自动聚类。
过滤无效内容:过滤广告/刷屏等无效内容。
识别延伸话题树:自动识别主话题及相关子话题。
质量评分维度:
🎯 参与度(参与人数/消息密度)
💡 信息量(实用知识/资源分享)
🎭 娱乐值(段子/梗图/神回复)
⚡ 热议指数(讨论持续时间)
评分方式根据话题参与人数动态生成星级评分1-5颗星
贡献者识别:
标记每个话题的"话题发起者""气氛担当"
统计优质内容产出者(表情包/段子/资源等)。
自动生成趣味头衔(如“段子王”、“知识达人”、“活跃分子”等)。
【输出模板】
「[群名]-[日期]群聊总结」
📊 今日数据快报:
- 共诞生[消息数]条信息
- 最活跃时段:[时段][消息数]条/小时)
- 表情包冠军:[用户](贡献[数量]个搞笑表情)
- 聊天时段:[开始时间] - [结束时间]
🌌 话题总结:
1⃣ 【[话题1]】⭐️⭐️⭐️⭐️⭐️
🔍 [3句话简要回顾]
🏅 热点人物:[@用户A] [@用户B]
💬 精彩语录:"[精选金句]"...
2⃣ 【[话题2]】⭐️⭐️⭐️⭐️
🔍 [3句话高能回顾]
🏅 知识分享:[@用户C]
📌 实用内容:[资源链接/知识点总结]...
🎖️ 今日荣誉榜:
- 🏆 群聊MVP[@用户D]
👑 获奖理由:
- 发起[话题数]个热门话题
- 贡献[数量]个表情包/段子
- 分享了[亮点内容]
✨ 潜力新人:[@用户E](首次贡献[亮点内容]
🔮 明日预告:
"[根据今日话题生成的趣味预测]"
【示例输出】
「吃货联盟-5.20群聊总结」
📊 今日数据快报:
- 共诞生428条信息
- 最活跃时段20:00-21:00153条/小时)
- 表情包冠军🐻熊本熊贡献23个美食表情
- 聊天时段18:30 - 22:00
🌌 话题总结:
1⃣ 【暗黑料理实验室】⭐️⭐️⭐️⭐️⭐️
🔍 从“香菜月饼”到“螺蛳粉蛋糕”,群友脑洞大开,表情包大战也同步上线。
🏅 热点人物:@美食探险家 @甜品恶魔
💬 精彩语录:"建议把折耳根榨汁做鸡尾酒"——@料理鬼才
2⃣ 【办公室偷吃指南】⭐️⭐️⭐️⭐️
🔍 提供了12种拆包装技巧@咖啡小妹贡献的“键盘抽屉收纳法”引发热议
📌 实用内容:无声咀嚼口香糖推荐清单...
🎖️ 今日荣誉榜:
- 🏆 群聊MVP@零食特工
👑 获奖理由:
- 发起3个受欢迎话题
- 贡献15个表情包
- 发明了“薯片袋静音开封法”已申请专利
✨ 潜力新人:@养生青年(首度分享“枸杞拿铁”配方)
🔮 明日预告:
"基于今日的暗黑料理趋势,明天可能会出现《泡面的一百种吃法》新企划!"
### 调节参数说明
- 严谨度调节:通过增减评分维度权重,调整总结风格的专业度和趣味性。
- 敏感词过滤:自动屏蔽政治/广告等违规内容,确保内容健康。
- 个性化适配:根据群成员特点,生成个性化头衔和角色。
"""
prompt = ('你是一个聊天记录总结助手,请使用如下格式进行聊天记录整理(如果存在多个主题则每个主题分开显示相关的参与者时间点,内容摘要):'
'[聊天主题] ☆☆☆'
'参与者:[列出参与者名字]'
'时间点:[开始时间] - [结束时间]'
'内容摘要: [简要总结讨论的内容,包括讨论的主题、观点、信息等。]'
'☑ 点评: [对讨论内容的简要评价,结合实际情况分析其意义或影响。]'
'· 趣味互动'
'[列出群成员之间互动的有趣部分,例如个人经验、笑点或特别的观点分享等。]'
'· 待跟进事项'
'[列出具体的行动项或下一步的讨论计划,包括需要落实的具体任务。]'
'· 结语'
'[总结今日讨论的主题和氛围,简要表达对未来讨论的期待。鼓励群成员继续参与。]'
'注: [对本次讨论的特殊情况进行说明,例如讨论话题较简单或较复杂等。]')
# 设置请求的payload
data = {
# "stream": True,
"model": "windsurf/gpt4o",