v0.2.5 提升了性能
修复了一个弱智bug,现在修改了数据库消息的存储结构,可能会报错,属于正常情况
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 = ''
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user