v0.2.5 提升了性能

修复了一个弱智bug,现在修改了数据库消息的存储结构,可能会报错,属于正常情况
This commit is contained in:
SengokuCola
2025-03-01 11:30:19 +08:00
parent 8411bb13dd
commit 154026f640
5 changed files with 58 additions and 20 deletions

View File

@@ -42,6 +42,7 @@ class CQCode:
def translate(self):
"""根据CQ码类型进行相应的翻译处理"""
print(f"\033[1;34m[调试信息]\033[0m 开始翻译CQ{self.params}码: {self.type}")
if self.type == 'text':
self.translated_plain_text = self.params.get('text', '')
elif self.type == 'image':
@@ -318,6 +319,7 @@ class CQCode:
# 创建Message对象
from .message import Message
if self.reply_message == None:
print(f"\033[1;31m[错误]\033[0m 回复消息为空")
return '[回复某人消息]'
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}]"
else:
print(f"\033[1;31m[错误]\033[0m 回复消息的sender.user_id为空")
return '[回复某人消息]'
@staticmethod

View File

@@ -42,6 +42,7 @@ class Message:
message_segments: List[Dict] = None # 存储解析后的消息片段
processed_plain_text: str = None # 用于存储处理后的plain_text
detailed_plain_text: str = None # 用于存储详细可读文本
time: float = None
@@ -70,6 +71,11 @@ class Message:
seg.translated_plain_text
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:
@@ -93,6 +99,7 @@ class Message:
- cq_code_list:分割出的聊天对象包括文本和CQ码
- trans_list:翻译后的对象列表
"""
print(f"\033[1;34m[调试信息]\033[0m 正在处理消息: {message}")
cq_code_dict_list = []
trans_list = []
@@ -143,21 +150,8 @@ class Message:
#翻译作为字典的CQ码
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)
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())
trans_list.append(message_obj)
return trans_list
class Message_Thinking:

View File

@@ -3,7 +3,7 @@ import random
from dotenv import load_dotenv
from ..schedule.schedule_generator import bot_schedule
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 .config import global_config
@@ -64,14 +64,12 @@ class PromptBuilder:
请你记住上面的[知识],之后可能会用到\n----------------------------------------------------\n'''
promt_info_prompt = '你有一些[知识],在上面可以参考。'
print(f"\033[1;34m[调试信息]\033[0m 正在构建聊天上下文")
chat_talking_prompt = ''
if group_id:
# 从数据库获取最近消息
message_objects = get_recent_group_messages(self.db, group_id, limit=global_config.MAX_CONTEXT_SIZE)
if message_objects:
chat_talking_prompt = combine_messages(message_objects)
# print(f"\033[1;34m[调试]\033[0m 已从数据库获取群 {group_id} 的最近{len(message_objects)}条消息记录")
chat_talking_prompt = get_recent_group_detailed_plain_text(self.db, group_id, limit=global_config.MAX_CONTEXT_SIZE,combine = True)
print(f"\033[1;34m[调试]\033[0m 已从数据库获取群 {group_id} 的消息记录:{chat_talking_prompt}")
#激活prompt构建
activate_prompt = ''

View File

@@ -25,6 +25,7 @@ class MessageStorage:
"user_nickname": message.user_nickname,
"group_name": message.group_name,
"topic": topic,
"detailed_plain_text": message.detailed_plain_text,
}
else:
message_data = {
@@ -38,6 +39,7 @@ class MessageStorage:
"user_nickname": message.user_nickname,
"group_name": message.group_name,
"topic": topic,
"detailed_plain_text": message.detailed_plain_text,
}
self.db.db.messages.insert_one(message_data)

View File

@@ -6,6 +6,7 @@ import requests
import numpy as np
from .config import llm_config, global_config
import re
from typing import Dict
def combine_messages(messages: List[Message]) -> str:
@@ -27,6 +28,16 @@ def combine_messages(messages: List[Message]) -> str:
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:
"""检查消息是否提到了机器人"""
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()
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]:
"""将文本分割成句子,但保持书名号中的内容完整
Args: