v0.2.5 提升了性能
修复了一个弱智bug,现在修改了数据库消息的存储结构,可能会报错,属于正常情况
This commit is contained in:
@@ -42,6 +42,7 @@ class CQCode:
|
|||||||
|
|
||||||
def translate(self):
|
def translate(self):
|
||||||
"""根据CQ码类型进行相应的翻译处理"""
|
"""根据CQ码类型进行相应的翻译处理"""
|
||||||
|
print(f"\033[1;34m[调试信息]\033[0m 开始翻译CQ{self.params}码: {self.type}")
|
||||||
if self.type == 'text':
|
if self.type == 'text':
|
||||||
self.translated_plain_text = self.params.get('text', '')
|
self.translated_plain_text = self.params.get('text', '')
|
||||||
elif self.type == 'image':
|
elif self.type == 'image':
|
||||||
@@ -318,6 +319,7 @@ class CQCode:
|
|||||||
# 创建Message对象
|
# 创建Message对象
|
||||||
from .message import Message
|
from .message import Message
|
||||||
if self.reply_message == None:
|
if self.reply_message == None:
|
||||||
|
print(f"\033[1;31m[错误]\033[0m 回复消息为空")
|
||||||
return '[回复某人消息]'
|
return '[回复某人消息]'
|
||||||
|
|
||||||
if self.reply_message.sender.user_id:
|
if self.reply_message.sender.user_id:
|
||||||
@@ -333,6 +335,7 @@ class CQCode:
|
|||||||
return f"[回复 {self.reply_message.sender.nickname} 的消息: {message_obj.processed_plain_text}]"
|
return f"[回复 {self.reply_message.sender.nickname} 的消息: {message_obj.processed_plain_text}]"
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
print(f"\033[1;31m[错误]\033[0m 回复消息的sender.user_id为空")
|
||||||
return '[回复某人消息]'
|
return '[回复某人消息]'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ class Message:
|
|||||||
|
|
||||||
message_segments: List[Dict] = None # 存储解析后的消息片段
|
message_segments: List[Dict] = None # 存储解析后的消息片段
|
||||||
processed_plain_text: str = None # 用于存储处理后的plain_text
|
processed_plain_text: str = None # 用于存储处理后的plain_text
|
||||||
|
detailed_plain_text: str = None # 用于存储详细可读文本
|
||||||
|
|
||||||
time: float = None
|
time: float = None
|
||||||
|
|
||||||
@@ -70,6 +71,11 @@ class Message:
|
|||||||
seg.translated_plain_text
|
seg.translated_plain_text
|
||||||
for seg in self.message_segments
|
for seg in self.message_segments
|
||||||
)
|
)
|
||||||
|
#将详细翻译为详细可读文本
|
||||||
|
time_str = time.strftime("%m-%d %H:%M:%S", time.localtime(self.time))
|
||||||
|
name = self.user_nickname or f"用户{self.user_id}"
|
||||||
|
content = self.processed_plain_text
|
||||||
|
self.detailed_plain_text = f"[{time_str}] {name}: {content}\n"
|
||||||
|
|
||||||
|
|
||||||
def get_groupname(self, group_id: int) -> str:
|
def get_groupname(self, group_id: int) -> str:
|
||||||
@@ -93,6 +99,7 @@ class Message:
|
|||||||
- cq_code_list:分割出的聊天对象,包括文本和CQ码
|
- cq_code_list:分割出的聊天对象,包括文本和CQ码
|
||||||
- trans_list:翻译后的对象列表
|
- trans_list:翻译后的对象列表
|
||||||
"""
|
"""
|
||||||
|
print(f"\033[1;34m[调试信息]\033[0m 正在处理消息: {message}")
|
||||||
cq_code_dict_list = []
|
cq_code_dict_list = []
|
||||||
trans_list = []
|
trans_list = []
|
||||||
|
|
||||||
@@ -143,21 +150,8 @@ class Message:
|
|||||||
|
|
||||||
#翻译作为字典的CQ码
|
#翻译作为字典的CQ码
|
||||||
for _code_item in cq_code_dict_list:
|
for _code_item in cq_code_dict_list:
|
||||||
#一个一个CQ码处理
|
|
||||||
message_obj = cq_code_tool.cq_from_dict_to_class(_code_item,reply = self.reply_message)
|
message_obj = cq_code_tool.cq_from_dict_to_class(_code_item,reply = self.reply_message)
|
||||||
trans_list.append(message_obj)
|
trans_list.append(message_obj)
|
||||||
# except Exception as e:
|
|
||||||
# import traceback
|
|
||||||
# print(f"\033[1;31m[错误]\033[0m 处理CQ码失败: {str(e)}")
|
|
||||||
# print(f"CQ码内容: {cq_code}")
|
|
||||||
# print(f"当前消息属性:")
|
|
||||||
# print(f"- group_id: {self.group_id}")
|
|
||||||
# print(f"- user_id: {self.user_id}")
|
|
||||||
# print(f"- user_nickname: {self.user_nickname}")
|
|
||||||
# print(f"- group_name: {self.group_name}")
|
|
||||||
# print("详细错误信息:")
|
|
||||||
# print(traceback.format_exc())
|
|
||||||
|
|
||||||
return trans_list
|
return trans_list
|
||||||
|
|
||||||
class Message_Thinking:
|
class Message_Thinking:
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import random
|
|||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from ..schedule.schedule_generator import bot_schedule
|
from ..schedule.schedule_generator import bot_schedule
|
||||||
import os
|
import os
|
||||||
from .utils import get_embedding, combine_messages, get_recent_group_messages
|
from .utils import get_embedding, combine_messages, get_recent_group_detailed_plain_text
|
||||||
from ...common.database import Database
|
from ...common.database import Database
|
||||||
from .config import global_config
|
from .config import global_config
|
||||||
|
|
||||||
@@ -64,14 +64,12 @@ class PromptBuilder:
|
|||||||
请你记住上面的[知识],之后可能会用到\n----------------------------------------------------\n'''
|
请你记住上面的[知识],之后可能会用到\n----------------------------------------------------\n'''
|
||||||
promt_info_prompt = '你有一些[知识],在上面可以参考。'
|
promt_info_prompt = '你有一些[知识],在上面可以参考。'
|
||||||
|
|
||||||
|
print(f"\033[1;34m[调试信息]\033[0m 正在构建聊天上下文")
|
||||||
|
|
||||||
chat_talking_prompt = ''
|
chat_talking_prompt = ''
|
||||||
if group_id:
|
if group_id:
|
||||||
# 从数据库获取最近消息
|
chat_talking_prompt = get_recent_group_detailed_plain_text(self.db, group_id, limit=global_config.MAX_CONTEXT_SIZE,combine = True)
|
||||||
message_objects = get_recent_group_messages(self.db, group_id, limit=global_config.MAX_CONTEXT_SIZE)
|
print(f"\033[1;34m[调试]\033[0m 已从数据库获取群 {group_id} 的消息记录:{chat_talking_prompt}")
|
||||||
if message_objects:
|
|
||||||
chat_talking_prompt = combine_messages(message_objects)
|
|
||||||
# print(f"\033[1;34m[调试]\033[0m 已从数据库获取群 {group_id} 的最近{len(message_objects)}条消息记录")
|
|
||||||
|
|
||||||
#激活prompt构建
|
#激活prompt构建
|
||||||
activate_prompt = ''
|
activate_prompt = ''
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ class MessageStorage:
|
|||||||
"user_nickname": message.user_nickname,
|
"user_nickname": message.user_nickname,
|
||||||
"group_name": message.group_name,
|
"group_name": message.group_name,
|
||||||
"topic": topic,
|
"topic": topic,
|
||||||
|
"detailed_plain_text": message.detailed_plain_text,
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
message_data = {
|
message_data = {
|
||||||
@@ -38,6 +39,7 @@ class MessageStorage:
|
|||||||
"user_nickname": message.user_nickname,
|
"user_nickname": message.user_nickname,
|
||||||
"group_name": message.group_name,
|
"group_name": message.group_name,
|
||||||
"topic": topic,
|
"topic": topic,
|
||||||
|
"detailed_plain_text": message.detailed_plain_text,
|
||||||
}
|
}
|
||||||
|
|
||||||
self.db.db.messages.insert_one(message_data)
|
self.db.db.messages.insert_one(message_data)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import requests
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
from .config import llm_config, global_config
|
from .config import llm_config, global_config
|
||||||
import re
|
import re
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
|
|
||||||
def combine_messages(messages: List[Message]) -> str:
|
def combine_messages(messages: List[Message]) -> str:
|
||||||
@@ -27,6 +28,16 @@ def combine_messages(messages: List[Message]) -> str:
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def db_message_to_str (message_dict: Dict) -> str:
|
||||||
|
print(f"message_dict: {message_dict}")
|
||||||
|
time_str = time.strftime("%m-%d %H:%M:%S", time.localtime(message_dict["time"]))
|
||||||
|
name = message_dict.get("user_nickname", "") or f"用户{message_dict['user_id']}"
|
||||||
|
content = message_dict.get("processed_plain_text", "")
|
||||||
|
result = f"[{time_str}] {name}: {content}\n"
|
||||||
|
print(f"result: {result}")
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def is_mentioned_bot_in_message(message: Message) -> bool:
|
def is_mentioned_bot_in_message(message: Message) -> bool:
|
||||||
"""检查消息是否提到了机器人"""
|
"""检查消息是否提到了机器人"""
|
||||||
keywords = [global_config.BOT_NICKNAME]
|
keywords = [global_config.BOT_NICKNAME]
|
||||||
@@ -117,6 +128,36 @@ def get_recent_group_messages(db, group_id: int, limit: int = 12) -> list:
|
|||||||
message_objects.reverse()
|
message_objects.reverse()
|
||||||
return message_objects
|
return message_objects
|
||||||
|
|
||||||
|
def get_recent_group_detailed_plain_text(db, group_id: int, limit: int = 12,combine = False):
|
||||||
|
recent_messages = list(db.db.messages.find(
|
||||||
|
{"group_id": group_id},
|
||||||
|
{
|
||||||
|
"time": 1, # 返回时间字段
|
||||||
|
"user_id": 1, # 返回用户ID字段
|
||||||
|
"user_nickname": 1, # 返回用户昵称字段
|
||||||
|
"message_id": 1, # 返回消息ID字段
|
||||||
|
"detailed_plain_text": 1 # 返回处理后的文本字段
|
||||||
|
}
|
||||||
|
).sort("time", -1).limit(limit))
|
||||||
|
|
||||||
|
if not recent_messages:
|
||||||
|
return []
|
||||||
|
|
||||||
|
message_detailed_plain_text = ''
|
||||||
|
message_detailed_plain_text_list = []
|
||||||
|
|
||||||
|
|
||||||
|
if combine:
|
||||||
|
for msg_db_data in recent_messages:
|
||||||
|
message_detailed_plain_text+=str(msg_db_data["detailed_plain_text"])
|
||||||
|
return message_detailed_plain_text
|
||||||
|
else:
|
||||||
|
for msg_db_data in recent_messages:
|
||||||
|
message_detailed_plain_text_list.append(msg_db_data["detailed_plain_text"])
|
||||||
|
return message_detailed_plain_text_list
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def split_into_sentences_w_remove_punctuation(text: str) -> List[str]:
|
def split_into_sentences_w_remove_punctuation(text: str) -> List[str]:
|
||||||
"""将文本分割成句子,但保持书名号中的内容完整
|
"""将文本分割成句子,但保持书名号中的内容完整
|
||||||
Args:
|
Args:
|
||||||
|
|||||||
Reference in New Issue
Block a user