优化技术债

This commit is contained in:
zihanjian
2025-10-28 14:37:47 +08:00
parent aeb5282193
commit d6a9ffba46
3 changed files with 34 additions and 85 deletions

View File

@@ -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):
"""清理所有资源"""

View File

@@ -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

View File

@@ -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路由功能