优化了群总结prompt,减少了总结相关内容的有效性。
This commit is contained in:
@@ -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__":
|
||||
|
||||
@@ -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:00(153条/小时)
|
||||
- 表情包冠军:🐻熊本熊(贡献23个美食表情)
|
||||
- 聊天时段:18:30 - 22:00
|
||||
|
||||
🌌 话题总结:
|
||||
1️⃣ 【暗黑料理实验室】⭐️⭐️⭐️⭐️⭐️
|
||||
🔍 从“香菜月饼”到“螺蛳粉蛋糕”,群友脑洞大开,表情包大战也同步上线。
|
||||
🏅 热点人物:@美食探险家 @甜品恶魔
|
||||
💬 精彩语录:"建议把折耳根榨汁做鸡尾酒"——@料理鬼才
|
||||
|
||||
2️⃣ 【办公室偷吃指南】⭐️⭐️⭐️⭐️
|
||||
🔍 提供了12种拆包装技巧,@咖啡小妹贡献的“键盘抽屉收纳法”引发热议
|
||||
📌 实用内容:无声咀嚼口香糖推荐清单...
|
||||
|
||||
🎖️ 今日荣誉榜:
|
||||
- 🏆 群聊MVP:@零食特工
|
||||
👑 获奖理由:
|
||||
- 发起3个受欢迎话题
|
||||
- 贡献15个表情包
|
||||
- 发明了“薯片袋静音开封法”已申请专利
|
||||
|
||||
✨ 潜力新人:@养生青年(首度分享“枸杞拿铁”配方)
|
||||
|
||||
🔮 明日预告:
|
||||
"基于今日的暗黑料理趋势,明天可能会出现《泡面的一百种吃法》新企划!"
|
||||
|
||||
### 调节参数说明
|
||||
- 严谨度调节:通过增减评分维度权重,调整总结风格的专业度和趣味性。
|
||||
- 敏感词过滤:自动屏蔽政治/广告等违规内容,确保内容健康。
|
||||
- 个性化适配:根据群成员特点,生成个性化头衔和角色。
|
||||
"""
|
||||
|
||||
prompt = ('你是一个聊天记录总结助手,请使用如下格式进行聊天记录整理(如果存在多个主题则每个主题分开显示相关的参与者时间点,内容摘要):'
|
||||
'[聊天主题] ☆☆☆'
|
||||
'参与者:[列出参与者名字]'
|
||||
'时间点:[开始时间] - [结束时间]'
|
||||
'内容摘要: [简要总结讨论的内容,包括讨论的主题、观点、信息等。]'
|
||||
'☑ 点评: [对讨论内容的简要评价,结合实际情况分析其意义或影响。]'
|
||||
'· 趣味互动'
|
||||
'[列出群成员之间互动的有趣部分,例如个人经验、笑点或特别的观点分享等。]'
|
||||
'· 待跟进事项'
|
||||
'[列出具体的行动项或下一步的讨论计划,包括需要落实的具体任务。]'
|
||||
'· 结语'
|
||||
'[总结今日讨论的主题和氛围,简要表达对未来讨论的期待。鼓励群成员继续参与。]'
|
||||
'注: [对本次讨论的特殊情况进行说明,例如讨论话题较简单或较复杂等。]')
|
||||
# 设置请求的payload
|
||||
data = {
|
||||
# "stream": True,
|
||||
"model": "windsurf/gpt4o",
|
||||
|
||||
Reference in New Issue
Block a user