From b382bd8d4a7f9934855249d4c92601e79ea35977 Mon Sep 17 00:00:00 2001 From: liuwei Date: Tue, 15 Apr 2025 17:28:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E5=B9=BF=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/dify/main.py | 12 ++++++++---- plugins/message_summary/main.py | 16 ++++++++++------ utils/string_utils.py | 15 +++++++++++++++ 3 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 utils/string_utils.py diff --git a/plugins/dify/main.py b/plugins/dify/main.py index 8f2da75..b112e02 100644 --- a/plugins/dify/main.py +++ b/plugins/dify/main.py @@ -14,6 +14,7 @@ from utils.decorator.plugin_decorators import plugin_stats_decorator from utils.robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager from utils.decorator.points_decorator import plugin_points_cost from utils.media_downloader import MediaDownloader +from utils.string_utils import remove_trailing_content class DifyPlugin(MessagePluginInterface): @@ -104,7 +105,7 @@ class DifyPlugin(MessagePluginInterface): return command in self._commands @plugin_stats_decorator(plugin_name="Dify聊天") - @plugin_points_cost(2, "AI聊天消耗积分",Feature.AI_CAPABILITY) + @plugin_points_cost(2, "AI聊天消耗积分", Feature.AI_CAPABILITY) def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]: """处理消息""" content = str(message.get("content", "")).strip() @@ -126,7 +127,8 @@ class DifyPlugin(MessagePluginInterface): if roomid and gbm.get_group_permission(roomid, Feature.AI_CAPABILITY) == PermissionStatus.DISABLED: return False, "没有权限" - self.message_util.send_text_msg("⏳AI 正在加油,请稍候… 😊", (roomid if roomid else sender), sender if roomid else "") + self.message_util.send_text_msg("⏳AI 正在加油,请稍候… 😊", (roomid if roomid else sender), + sender if roomid else "") # 获取查询内容 query = parts[1].strip() @@ -139,7 +141,8 @@ class DifyPlugin(MessagePluginInterface): try: # 调用Dify API获取回复 response = self._chat_with_dify(session_id, user_id, query) - + # 去除广告内容 + response = remove_trailing_content(response) # 发送回复 if response: # 判断是否为本地文件路径 @@ -159,6 +162,7 @@ class DifyPlugin(MessagePluginInterface): wcf.send_text(f"❌请求出错:{str(e)}", (roomid if roomid else sender), sender if roomid else "") return True, f"处理出错: {e}" + def _chat_with_dify(self, session_id: str, user_id: str, query: str) -> Optional[str]: """ 与Dify API交互获取回复 @@ -235,7 +239,7 @@ class DifyPlugin(MessagePluginInterface): try: # 使用普通请求(非流式) - response = requests.post(url, headers=headers, json=data, proxies=proxies,timeout=20) + response = requests.post(url, headers=headers, json=data, proxies=proxies, timeout=20) if response.status_code != 200: self.LOG.error(f"Dify API请求失败: {response.status_code} {response.text}") diff --git a/plugins/message_summary/main.py b/plugins/message_summary/main.py index bc2a276..b4eaea7 100644 --- a/plugins/message_summary/main.py +++ b/plugins/message_summary/main.py @@ -5,6 +5,7 @@ from typing import Dict, Any, Tuple, Optional, List import requests +from utils.string_utils import remove_trailing_content from utils.wechat.message_to_db import MessageStorage from utils.compress_chat_data import compress_chat_data from plugin_common.message_plugin_interface import MessagePluginInterface @@ -75,7 +76,7 @@ class MessageSummaryPlugin(MessagePluginInterface): return True @plugin_stats_decorator(plugin_name="群聊总结") - @plugin_points_cost(10, "群聊总结消耗积分",Feature.SUMMARY_CAPABILITY) + @plugin_points_cost(10, "群聊总结消耗积分", Feature.SUMMARY_CAPABILITY) def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]: """处理消息""" try: @@ -111,7 +112,7 @@ class MessageSummaryPlugin(MessagePluginInterface): group_name = self._sanitize_group_name(group_name) if wcf: wcf.send_text("⏳群消息总结中… 😊", group_id) - + # 创建线程异步处理总结生成和发送 summary_thread = threading.Thread( target=self._async_generate_and_send_summary, @@ -119,19 +120,20 @@ class MessageSummaryPlugin(MessagePluginInterface): ) summary_thread.daemon = True # 设置为守护线程,主程序退出时线程也会退出 summary_thread.start() - + return True, "异步总结已启动" except Exception as e: self.LOG.error(f"处理消息总结命令失败: {e}") return False, None - - def _async_generate_and_send_summary(self, chat_content: str, group_name: str, group_id: str, message: Dict[str, Any]): + + def _async_generate_and_send_summary(self, chat_content: str, group_name: str, group_id: str, + message: Dict[str, Any]): """异步生成并发送总结""" try: # 生成总结 summary, image_path = self._generate_summary(chat_content, group_name) - + # 发送总结结果 wcf = message.get("wcf") if wcf: @@ -199,6 +201,8 @@ class MessageSummaryPlugin(MessagePluginInterface): # 提取回答内容 answer = response_data.get("answer", "") + # 去除广告内容pollinations.ai 的广告 + answer = remove_trailing_content(answer) spath = "" # 提取token使用情况 metadata = response_data.get("metadata", {}) diff --git a/utils/string_utils.py b/utils/string_utils.py new file mode 100644 index 0000000..92b11ef --- /dev/null +++ b/utils/string_utils.py @@ -0,0 +1,15 @@ +def remove_trailing_content(text, delimiter='---'): + """ + 剔除文本中最后一个指定分隔符及其后面的内容。 + + 参数: + text (str): 输入的文本 + delimiter (str): 要查找的分隔符,默认为 '---' + + 返回: + str: 剔除分隔符及其后面内容后的文本 + """ + index = text.rfind(delimiter) + if index != -1: + return text[:index].strip() + return text