v0.2修改了一些东西

使概率配置生效
将一些模块解耦合
将组信息管理器合并到关系管理器,添加了可以全局调用的接口
精简了llm生成器的代码
精简了message代码
重写了回复后处理
This commit is contained in:
SengokuCola
2025-02-28 00:28:34 +08:00
parent 6938a97941
commit 870be0a426
14 changed files with 333 additions and 653 deletions

View File

@@ -6,7 +6,6 @@ from .llm_generator import LLMResponseGenerator
from .message_stream import MessageStream, MessageStreamContainer
from .topic_identifier import topic_identifier
from random import random
from .group_info_manager import GroupInfoManager # 导入群信息管理器
from .emoji_manager import emoji_manager # 导入表情包管理器
import time
import os
@@ -15,14 +14,13 @@ from .message_send_control import message_sender # 导入消息发送控制器
from .message import Message_Thinking # 导入 Message_Thinking 类
from .relationship_manager import relationship_manager
from .willing_manager import willing_manager # 导入意愿管理器
from .utils import is_mentioned_bot_in_txt, calculate_typing_time
class ChatBot:
def __init__(self, config: BotConfig):
self.config = config
self.storage = MessageStorage()
self.gpt = LLMResponseGenerator(config)
self.group_info_manager = GroupInfoManager() # 初始化群信息管理器
self.bot = None # bot 实例引用
self._started = False
@@ -79,26 +77,19 @@ class ChatBot:
# print(f"- original_message: {event.reply.original_message}")
'''
# 获取群组信息,发送消息的用户信息,并对数据库内容做一次更新
group_info = await bot.get_group_info(group_id=event.group_id)
await self.group_info_manager.update_group_info(
group_id=event.group_id,
group_name=group_info['group_name'],
member_count=group_info['member_count']
)
sender_info = await bot.get_group_member_info(group_id=event.group_id, user_id=event.user_id, no_cache=True)
# print(f"\033[1;32m[关系管理]\033[0m 更新关系: {sender_info}")
await relationship_manager.update_relationship(user_id = event.user_id, data = sender_info)
await relationship_manager.update_relationship_value(user_id = event.user_id, relationship_value = 0.5)
print(f"\033[1;32m[关系管理]\033[0m 更新关系值: {relationship_manager.get_relationship(event.user_id).relationship_value}")
message = Message(
group_id=event.group_id,
user_id=event.user_id,
@@ -113,13 +104,12 @@ class ChatBot:
topic = topic_identifier.identify_topic_jieba(message.processed_plain_text)
print(f"\033[1;32m[主题识别]\033[0m 主题: {topic}")
await self.storage.store_message(message, topic[0] if topic else None)
current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(message.time))
print(f"\033[1;34m[调试]\033[0m 当前消息是否是表情包: {message.is_emoji}")
is_mentioned = self.is_mentioned_bot(message)
is_mentioned = is_mentioned_bot_in_txt(message.processed_plain_text)
reply_probability = willing_manager.change_reply_willing_received(
event.group_id,
topic[0] if topic else None,
@@ -133,60 +123,47 @@ class ChatBot:
print(f"\033[1;32m[{current_time}][{message.group_name}]{message.user_nickname}:\033[0m {message.processed_plain_text}\033[1;36m[回复意愿:{current_willing:.2f}][概率:{reply_probability:.1f}]\033[0m")
response = ""
# 创建思考消息
if random() < reply_probability:
tinking_time_point = round(time.time(), 2)
think_id = 'mt' + str(tinking_time_point)
thinking_message = Message_Thinking(message=message,message_id=think_id)
message_sender.send_temp_container.add_message(thinking_message)
willing_manager.change_reply_willing_sent(thinking_message.group_id)
# 生成回复
response, emotion = await self.gpt.generate_response(message)
# 如果生成了回复,发送并记录
if response:
message_set = MessageSet(event.group_id, self.config.BOT_QQ, think_id)
if isinstance(response, list):
# 将多条消息合并成一条
for msg in response:
# print(f"\033[1;34m[调试]\033[0m 载入消息消息: {msg}")
# bot_response_time = round(time.time(), 2)
timepoint = tinking_time_point-0.3
bot_message = Message(
group_id=event.group_id,
user_id=self.config.BOT_QQ,
message_id=think_id,
message_based_id=event.message_id,
raw_message=msg,
plain_text=msg,
processed_plain_text=msg,
user_nickname="麦麦",
group_name=message.group_name,
time=timepoint
)
# print(f"\033[1;34m[调试]\033[0m 添加消息到消息组: {bot_message}")
message_set.add_message(bot_message)
# print(f"\033[1;34m[调试]\033[0m 输入消息组: {message_set}")
message_sender.send_temp_container.update_thinking_message(message_set)
else:
# bot_response_time = round(time.time(), 2)
accu_typing_time = 0
for msg in response:
print(f"当前消息: {msg}")
typing_time = calculate_typing_time(msg)
accu_typing_time += typing_time
timepoint = tinking_time_point+accu_typing_time
# print(f"\033[1;32m[调试]\033[0m 消息: {msg},添加!, 累计打字时间: {accu_typing_time:.2f}秒")
bot_message = Message(
group_id=event.group_id,
user_id=self.config.BOT_QQ,
message_id=think_id,
message_based_id=event.message_id,
raw_message=response,
plain_text=response,
processed_plain_text=response,
raw_message=msg,
plain_text=msg,
processed_plain_text=msg,
user_nickname="麦麦",
group_name=message.group_name,
time=tinking_time_point
time=timepoint
)
# print(f"\033[1;34m[调试]\033[0m 更新单条消息: {bot_message}")
message_sender.send_temp_container.update_thinking_message(bot_message)
message_set.add_message(bot_message)
message_sender.send_temp_container.update_thinking_message(message_set)
bot_response_time = tinking_time_point
@@ -197,8 +174,8 @@ class ChatBot:
if random() < 0.5:
bot_response_time = tinking_time_point - 1
# else:
# bot_response_time = bot_response_time + 1
else:
bot_response_time = bot_response_time + 1
bot_message = Message(
group_id=event.group_id,