fix: 懒加载单例以修复环境变量加载问题

This commit is contained in:
春河晴
2025-06-11 17:22:43 +09:00
parent 6d1f5be4e1
commit 6767bd6715
45 changed files with 243 additions and 155 deletions

View File

@@ -1,14 +1,15 @@
from src.manager.async_task_manager import AsyncTask
from src.common.logger import get_logger
from src.person_info.person_info import PersonInfoManager
from src.person_info.relationship_manager import relationship_manager
from src.chat.utils.chat_message_builder import get_raw_msg_by_timestamp
from src.config.config import global_config
from src.chat.message_receive.chat_stream import chat_manager
from src.chat.message_receive.chat_stream import get_chat_manager
import time
import random
from collections import defaultdict
from src.person_info.relationship_manager import get_relationship_manager
logger = get_logger("relation")
@@ -50,7 +51,7 @@ class ImpressionUpdateTask(AsyncTask):
logger.info(f"聊天组 {chat_id} 消息数小于30跳过处理")
continue
chat_stream = chat_manager.get_stream(chat_id)
chat_stream = get_chat_manager().get_stream(chat_id)
if not chat_stream:
logger.warning(f"未找到聊天组 {chat_id} 的chat_stream跳过处理")
continue
@@ -149,7 +150,7 @@ class ImpressionUpdateTask(AsyncTask):
logger.info(
f"开始进一步了解用户: {[msg[1]['messages'][0]['user_nickname'] for msg in selected_users]}"
)
relationship_manager = get_relationship_manager()
# 更新选中用户的印象
for person_id, data in selected_users:
user_nickname = data["messages"][0]["user_nickname"]

View File

@@ -277,7 +277,7 @@ class PersonInfoManager:
current_name_set = set(self.person_name_list.values())
while current_try < max_retries:
# prompt_personality = individuality.get_prompt(x_person=2, level=1)
# prompt_personality =get_individuality().get_prompt(x_person=2, level=1)
bot_name = global_config.bot.nickname
qv_name_prompt = f"你是{bot_name}一个伪装成人类的AI你不能让别人发现这一点"
@@ -601,4 +601,11 @@ class PersonInfoManager:
return None
person_info_manager = PersonInfoManager()
person_info_manager = None
def get_person_info_manager():
global person_info_manager
if person_info_manager is None:
person_info_manager = PersonInfoManager()
return person_info_manager

View File

@@ -1,6 +1,6 @@
from src.common.logger import get_logger
import math
from src.person_info.person_info import person_info_manager, PersonInfoManager
from src.person_info.person_info import PersonInfoManager, get_person_info_manager
import time
import random
from src.llm_models.utils_model import LLMRequest
@@ -16,6 +16,7 @@ import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
logger = get_logger("relation")
@@ -85,6 +86,7 @@ class RelationshipManager:
@staticmethod
async def is_known_some_one(platform, user_id):
"""判断是否认识某人"""
person_info_manager = get_person_info_manager()
is_known = await person_info_manager.is_person_known(platform, user_id)
return is_known
@@ -93,6 +95,7 @@ class RelationshipManager:
"""判断是否认识某人"""
person_id = PersonInfoManager.get_person_id(platform, user_id)
# 生成唯一的 person_name
person_info_manager = get_person_info_manager()
unique_nickname = await person_info_manager._generate_unique_person_name(user_nickname)
data = {
"platform": platform,
@@ -117,7 +120,7 @@ class RelationshipManager:
person_id = person
else:
person_id = PersonInfoManager.get_person_id(person[0], person[1])
person_info_manager = get_person_info_manager()
person_name = await person_info_manager.get_value(person_id, "person_name")
if not person_name or person_name == "none":
return ""
@@ -157,6 +160,7 @@ class RelationshipManager:
field_name: 字段名称
new_items: 新的项目列表
"""
person_info_manager = get_person_info_manager()
old_items = await person_info_manager.get_value(person_id, field_name) or []
updated_items = list(set(old_items + [item for item in new_items if isinstance(item, str) and item]))
await person_info_manager.update_one_field(person_id, field_name, updated_items)
@@ -171,12 +175,13 @@ class RelationshipManager:
timestamp: 时间戳 (用于记录交互时间)
bot_engaged_messages: bot参与的消息列表
"""
person_info_manager = get_person_info_manager()
person_name = await person_info_manager.get_value(person_id, "person_name")
nickname = await person_info_manager.get_value(person_id, "nickname")
alias_str = ", ".join(global_config.bot.alias_names)
# personality_block = individuality.get_personality_prompt(x_person=2, level=2)
# identity_block = individuality.get_identity_prompt(x_person=2, level=2)
# personality_block =get_individuality().get_personality_prompt(x_person=2, level=2)
# identity_block =get_individuality().get_identity_prompt(x_person=2, level=2)
user_messages = bot_engaged_messages
@@ -602,4 +607,11 @@ class RelationshipManager:
return tfidf_sim > tfidf_threshold or seq_sim > seq_threshold
relationship_manager = RelationshipManager()
relationship_manager = None
def get_relationship_manager():
global relationship_manager
if relationship_manager is None:
relationship_manager = RelationshipManager()
return relationship_manager