Files
abot/message_summary/message_summary_dify.py

95 lines
3.1 KiB
Python

import requests
import json
from message_summary.compress_chat_data import compress_chat_data
from message_summary.markdown_to_image import convert_md_str_to_image
def message_summary_dify(content, sender: str = None):
"""
使用Dify API生成群聊消息总结
Args:
content: 需要总结的群聊消息内容
Returns:
生成的总结内容和图片路径
"""
# Dify API配置
api_key = "app-McGLzBhBjeBCSEi7n83MtuTo" # 请替换为实际的API密钥
url = "http://192.168.2.240/v1/chat-messages"
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"请根据以下{sender}群聊记录生成一份精华总结:\n\n{content_compress}",
"response_mode": "blocking", # 使用阻塞模式,直接获取完整响应
"conversation_id": "",
"user": sender if sender is not None else "message_summary_bot",
"files": [] # 不包含文件
}
# 设置请求头
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
try:
# 发送POST请求
response = requests.post(url, headers=headers, json=data)
response.raise_for_status() # 检查请求是否成功
# 解析响应
response_data = response.json()
print(f"Dify API响应状态码: {response.status_code}")
print(f"响应数据: {json.dumps(response_data, ensure_ascii=False, indent=2)}")
# 提取回答内容
answer = response_data.get("answer", "")
spath = ""
# 提取token使用情况
metadata = response_data.get("metadata", {})
usage = metadata.get("usage", {})
if usage:
prompt_tokens = usage.get("prompt_tokens", 0)
completion_tokens = usage.get("completion_tokens", 0)
total_tokens = usage.get("total_tokens", 0)
# 添加token信息
tokens_info = f"\n\n【tokens】输入: {prompt_tokens} 生成: {completion_tokens} 总: {total_tokens}"
answer += tokens_info
try:
spath = convert_md_str_to_image(answer, "output.png")
except Exception as e:
print(f"生成image失败:{e}")
# 返回文本内容和图片路径
return answer, spath
except requests.exceptions.RequestException as e:
print(f"请求Dify API时出错: {e}")
return f"生成总结时出错: {str(e)}", None
except json.JSONDecodeError as e:
print(f"解析Dify API响应时出错: {e}")
return "解析API响应时出错", None
except Exception as e:
print(f"处理总结时出现未知错误: {e}")
return f"生成总结时出现未知错误: {str(e)}", None
if __name__ == '__main__':
content = """
2025-03-14 14:30:15,Jyunere,别这样啊。
"""
msg = compress_chat_data(content, 5)
print(f"{msg}\n {len(msg)},{len(content)}")