From d6a9ffba4655ab38a0f4e645d3e6f1c3ab44fe32 Mon Sep 17 00:00:00 2001 From: zihanjian Date: Tue, 28 Oct 2025 14:37:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8A=80=E6=9C=AF=E5=80=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ai_providers/ai_perplexity.py | 113 ++++++++++------------------------ commands/ai_functions.py | 2 +- config.yaml.template | 4 -- 3 files changed, 34 insertions(+), 85 deletions(-) diff --git a/ai_providers/ai_perplexity.py b/ai_providers/ai_perplexity.py index 6702e2a..06078ca 100644 --- a/ai_providers/ai_perplexity.py +++ b/ai_providers/ai_perplexity.py @@ -311,13 +311,6 @@ class Perplexity: self.model_reasoning = None self.has_reasoning_model = bool(self.model_reasoning) - # 权限控制 - 允许使用Perplexity的群聊和个人ID - self.allowed_groups = config.get('allowed_groups', []) - self.allowed_users = config.get('allowed_users', []) - - # 可选的全局白名单模式 - 如果为True,则允许所有群聊和用户使用Perplexity - self.allow_all = config.get('allow_all', False) - # 设置编码环境变量,确保处理Unicode字符 os.environ["PYTHONIOENCODING"] = "utf-8" @@ -340,40 +333,11 @@ class Perplexity: self.LOG.info("Perplexity 客户端已初始化") - # 记录权限配置信息 - if self.allow_all: - self.LOG.info("Perplexity配置为允许所有群聊和用户访问") - else: - self.LOG.info(f"Perplexity允许的群聊: {len(self.allowed_groups)}个") - self.LOG.info(f"Perplexity允许的用户: {len(self.allowed_users)}个") - except Exception as e: self.LOG.error(f"初始化Perplexity客户端失败: {str(e)}") else: self.LOG.warning("未配置Perplexity API密钥") - def is_allowed(self, chat_id, sender, from_group): - """检查是否允许使用Perplexity功能 - - Args: - chat_id: 聊天ID(群ID或用户ID) - sender: 发送者ID - from_group: 是否来自群聊 - - Returns: - bool: 是否允许使用Perplexity - """ - # 全局白名单模式 - if self.allow_all: - return True - - # 群聊消息 - if from_group: - return chat_id in self.allowed_groups - # 私聊消息 - else: - return sender in self.allowed_users - @staticmethod def value_check(args: dict) -> bool: if args: @@ -447,54 +411,43 @@ class Perplexity: - bool: 是否已处理该消息 - Optional[str]: 无权限时的备选prompt,其他情况为None """ - # 检查是否包含触发词 - if content.startswith(self.trigger_keyword): - # 检查权限 - if not self.is_allowed(chat_id, sender, from_group): - # 不在允许列表中,返回False让普通AI处理请求 - # 但同时返回备选 prompt - self.LOG.info(f"用户/群聊 {chat_id} 无Perplexity权限,将使用 fallback_prompt 转由普通AI处理") - # 获取实际要问的问题内容 - prompt = content[len(self.trigger_keyword):].strip() - if prompt: # 确保确实有提问内容 - return False, self.fallback_prompt # 返回 False 表示未处理,并带上备选 prompt - else: - # 如果只有触发词没有问题,还是按原逻辑处理(发送提示消息) - send_text_func( - f"请在{self.trigger_keyword}后面添加您的问题", - at_list=sender if from_group else "", - record_message=False - ) - return True, None # 已处理(发送了错误提示) - - prompt = content[len(self.trigger_keyword):].strip() - if prompt: - # 确定接收者和@用户 - receiver = roomid if from_group else sender - at_user = sender if from_group else None - - # 启动请求处理 - request_started = self.thread_manager.start_request( - perplexity_instance=self, - prompt=prompt, - chat_id=chat_id, - send_text_func=send_text_func, - receiver=receiver, - at_user=at_user, - enable_full_research=enable_full_research - ) - return request_started, None # 返回启动结果,无备选prompt - else: - # 触发词后没有内容 + prompt = (content or "").strip() + if not prompt: + return False, None + + stripped_by_keyword = False + + trigger = (self.trigger_keyword or "").strip() + if trigger: + lowered_prompt = prompt.lower() + lowered_trigger = trigger.lower() + if lowered_prompt.startswith(lowered_trigger): + stripped_by_keyword = True + prompt = prompt[len(trigger):].strip() + + if not prompt: + if stripped_by_keyword: send_text_func( - f"请在{self.trigger_keyword}后面添加您的问题", + "请告诉我你想搜索什么内容", at_list=sender if from_group else "", record_message=False ) - return True, None # 已处理(发送了错误提示) - - # 不包含触发词 - return False, None # 未处理,无备选prompt + return True, None + return False, None + + receiver = roomid if from_group else sender + at_user = sender if from_group else None + + request_started = self.thread_manager.start_request( + perplexity_instance=self, + prompt=prompt, + chat_id=chat_id, + send_text_func=send_text_func, + receiver=receiver, + at_user=at_user, + enable_full_research=enable_full_research + ) + return request_started, None def cleanup(self): """清理所有资源""" diff --git a/commands/ai_functions.py b/commands/ai_functions.py index 0ff25b8..cf79df1 100644 --- a/commands/ai_functions.py +++ b/commands/ai_functions.py @@ -116,7 +116,7 @@ def ai_handle_perplexity(ctx: MessageContext, params: str) -> bool: return True # 调用Perplexity处理 - content_for_perplexity = f"ask {query}" + content_for_perplexity = query chat_id = ctx.get_receiver() sender_wxid = ctx.msg.sender room_id = ctx.msg.roomid if ctx.is_group else None diff --git a/config.yaml.template b/config.yaml.template index 86f5ef5..e53665b 100644 --- a/config.yaml.template +++ b/config.yaml.template @@ -142,10 +142,6 @@ perplexity: # -----perplexity配置这行不填----- model_flash: mixtral-8x7b-instruct # 快速回复模型(可选) model_reasoning: mixtral-8x7b-instruct # 深度思考模型(可选) prompt: 你是Perplexity AI助手,请用专业、准确、有帮助的方式回答问题 # 角色设定 - trigger_keyword: ask # 触发Perplexity服务的前置词 - allow_all: false # 是否允许所有群聊和用户使用Perplexity,设为true时忽略下面的白名单配置 - allowed_groups: [] # 允许使用Perplexity的群聊ID列表,例如:["123456789@chatroom", "123456789@chatroom"] - allowed_users: [] # 允许使用Perplexity的用户ID列表,例如:["wxid_123456789", "filehelper"] ai_router: # -----AI路由器配置----- enable: true # 是否启用AI路由功能