fix: 修复神秘none bug以及ruff
This commit is contained in:
@@ -131,7 +131,11 @@ class ExpressionLearner:
|
|||||||
else:
|
else:
|
||||||
raise ValueError(f"Invalid type: {type}")
|
raise ValueError(f"Invalid type: {type}")
|
||||||
# logger.info(f"开始学习{type_str}...")
|
# logger.info(f"开始学习{type_str}...")
|
||||||
learnt_expressions,chat_id = await self.learn_expression(type, num)
|
res = await self.learn_expression(type, num)
|
||||||
|
|
||||||
|
if res is None:
|
||||||
|
return []
|
||||||
|
learnt_expressions, chat_id = res
|
||||||
|
|
||||||
chat_stream = chat_manager.get_stream(chat_id)
|
chat_stream = chat_manager.get_stream(chat_id)
|
||||||
if chat_stream.group_info:
|
if chat_stream.group_info:
|
||||||
@@ -140,7 +144,6 @@ class ExpressionLearner:
|
|||||||
group_name = f"{chat_stream.user_info.user_nickname}的私聊"
|
group_name = f"{chat_stream.user_info.user_nickname}的私聊"
|
||||||
learnt_expressions_str = ""
|
learnt_expressions_str = ""
|
||||||
for _chat_id, situation, style in learnt_expressions:
|
for _chat_id, situation, style in learnt_expressions:
|
||||||
|
|
||||||
learnt_expressions_str += f"{situation}->{style}\n"
|
learnt_expressions_str += f"{situation}->{style}\n"
|
||||||
logger.info(f"在 {group_name} 学习到{type_str}:\n{learnt_expressions_str}")
|
logger.info(f"在 {group_name} 学习到{type_str}:\n{learnt_expressions_str}")
|
||||||
# learnt_expressions: List[(chat_id, situation, style)]
|
# learnt_expressions: List[(chat_id, situation, style)]
|
||||||
|
|||||||
@@ -5,13 +5,11 @@ from src.config.config import global_config
|
|||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
from src.individuality.individuality import individuality
|
|
||||||
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
|
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
|
||||||
from src.chat.message_receive.chat_stream import chat_manager
|
from src.chat.message_receive.chat_stream import chat_manager
|
||||||
from src.person_info.relationship_manager import relationship_manager
|
from src.person_info.relationship_manager import relationship_manager
|
||||||
from .base_processor import BaseProcessor
|
from .base_processor import BaseProcessor
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
from src.chat.heart_flow.observation.hfcloop_observation import HFCloopObservation
|
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from src.chat.focus_chat.info.info_base import InfoBase
|
from src.chat.focus_chat.info.info_base import InfoBase
|
||||||
from src.chat.focus_chat.info.relation_info import RelationInfo
|
from src.chat.focus_chat.info.relation_info import RelationInfo
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from src.common.logger_manager import get_logger
|
|||||||
from src.chat.heart_flow.utils_chat import get_chat_type_and_target_info
|
from src.chat.heart_flow.utils_chat import get_chat_type_and_target_info
|
||||||
from src.manager.mood_manager import mood_manager
|
from src.manager.mood_manager import mood_manager
|
||||||
from src.chat.message_receive.chat_stream import ChatStream, chat_manager
|
from src.chat.message_receive.chat_stream import ChatStream, chat_manager
|
||||||
from src.person_info.relationship_manager import relationship_manager
|
|
||||||
from src.chat.utils.info_catcher import info_catcher_manager
|
from src.chat.utils.info_catcher import info_catcher_manager
|
||||||
from src.chat.utils.timer_calculator import Timer
|
from src.chat.utils.timer_calculator import Timer
|
||||||
from src.chat.utils.prompt_builder import global_prompt_manager
|
from src.chat.utils.prompt_builder import global_prompt_manager
|
||||||
|
|||||||
@@ -335,7 +335,6 @@ def initialize_database():
|
|||||||
检查所有定义的表是否存在,如果不存在则创建它们。
|
检查所有定义的表是否存在,如果不存在则创建它们。
|
||||||
检查所有表的所有字段是否存在,如果缺失则自动添加。
|
检查所有表的所有字段是否存在,如果缺失则自动添加。
|
||||||
"""
|
"""
|
||||||
import sys
|
|
||||||
|
|
||||||
models = [
|
models = [
|
||||||
ChatStreams,
|
ChatStreams,
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ from .manager.async_task_manager import async_task_manager
|
|||||||
from .chat.utils.statistic import OnlineTimeRecordTask, StatisticOutputTask
|
from .chat.utils.statistic import OnlineTimeRecordTask, StatisticOutputTask
|
||||||
from .manager.mood_manager import MoodPrintTask, MoodUpdateTask
|
from .manager.mood_manager import MoodPrintTask, MoodUpdateTask
|
||||||
from .chat.emoji_system.emoji_manager import emoji_manager
|
from .chat.emoji_system.emoji_manager import emoji_manager
|
||||||
from .person_info.person_info import person_info_manager
|
|
||||||
from .chat.normal_chat.willing.willing_manager import willing_manager
|
from .chat.normal_chat.willing.willing_manager import willing_manager
|
||||||
from .chat.message_receive.chat_stream import chat_manager
|
from .chat.message_receive.chat_stream import chat_manager
|
||||||
from src.chat.heart_flow.heartflow import heartflow
|
from src.chat.heart_flow.heartflow import heartflow
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
from src.manager.async_task_manager import AsyncTask
|
from src.manager.async_task_manager import AsyncTask
|
||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
from src.person_info.relationship_manager import relationship_manager
|
from src.person_info.relationship_manager import relationship_manager
|
||||||
from src.chat.message_receive.chat_stream import ChatStream
|
|
||||||
from src.chat.utils.chat_message_builder import get_raw_msg_by_timestamp_with_chat_users
|
|
||||||
from src.chat.utils.chat_message_builder import get_raw_msg_by_timestamp
|
from src.chat.utils.chat_message_builder import get_raw_msg_by_timestamp
|
||||||
from src.config.config import global_config
|
from src.config.config import global_config
|
||||||
from src.person_info.person_info import person_info_manager
|
from src.person_info.person_info import person_info_manager
|
||||||
@@ -13,12 +11,13 @@ from collections import defaultdict
|
|||||||
|
|
||||||
logger = get_logger("relation")
|
logger = get_logger("relation")
|
||||||
|
|
||||||
|
|
||||||
class ImpressionUpdateTask(AsyncTask):
|
class ImpressionUpdateTask(AsyncTask):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
task_name="impression_update",
|
task_name="impression_update",
|
||||||
wait_before_start=10, # 启动后等待10秒
|
wait_before_start=10, # 启动后等待10秒
|
||||||
run_interval=600 # 每1分钟运行一次
|
run_interval=600, # 每1分钟运行一次
|
||||||
)
|
)
|
||||||
|
|
||||||
async def run(self):
|
async def run(self):
|
||||||
@@ -28,11 +27,7 @@ class ImpressionUpdateTask(AsyncTask):
|
|||||||
start_time = current_time - 600 # 10分钟前
|
start_time = current_time - 600 # 10分钟前
|
||||||
|
|
||||||
# 获取所有消息
|
# 获取所有消息
|
||||||
messages = get_raw_msg_by_timestamp(
|
messages = get_raw_msg_by_timestamp(timestamp_start=start_time, timestamp_end=current_time, limit=150)
|
||||||
timestamp_start=start_time,
|
|
||||||
timestamp_end=current_time,
|
|
||||||
limit=150
|
|
||||||
)
|
|
||||||
|
|
||||||
if not messages:
|
if not messages:
|
||||||
# logger.info("没有找到需要处理的消息")
|
# logger.info("没有找到需要处理的消息")
|
||||||
@@ -107,7 +102,7 @@ class ImpressionUpdateTask(AsyncTask):
|
|||||||
user_weights[person_id]["messages"].append(msg)
|
user_weights[person_id]["messages"].append(msg)
|
||||||
|
|
||||||
# 计算每个用户的中间时间
|
# 计算每个用户的中间时间
|
||||||
for person_id, data in user_weights.items():
|
for _, data in user_weights.items():
|
||||||
if data["messages"]:
|
if data["messages"]:
|
||||||
sorted_messages = sorted(data["messages"], key=lambda x: x["time"])
|
sorted_messages = sorted(data["messages"], key=lambda x: x["time"])
|
||||||
middle_index = len(sorted_messages) // 2
|
middle_index = len(sorted_messages) // 2
|
||||||
@@ -115,39 +110,34 @@ class ImpressionUpdateTask(AsyncTask):
|
|||||||
logger.debug(f"用户 {sorted_messages[0]['user_nickname']} 中间时间: {data['middle_time']}")
|
logger.debug(f"用户 {sorted_messages[0]['user_nickname']} 中间时间: {data['middle_time']}")
|
||||||
|
|
||||||
# 按权重排序
|
# 按权重排序
|
||||||
sorted_users = sorted(
|
sorted_users = sorted(user_weights.items(), key=lambda x: x[1]["weight"], reverse=True)
|
||||||
user_weights.items(),
|
|
||||||
key=lambda x: x[1]["weight"],
|
|
||||||
reverse=True
|
|
||||||
)
|
|
||||||
|
|
||||||
logger.debug(f"用户权重排序: {[(msg[1]['messages'][0]['user_nickname'], msg[1]['weight']) for msg in sorted_users]}")
|
logger.debug(
|
||||||
|
f"用户权重排序: {[(msg[1]['messages'][0]['user_nickname'], msg[1]['weight']) for msg in sorted_users]}"
|
||||||
|
)
|
||||||
|
|
||||||
# 随机选择三个用户
|
# 随机选择三个用户
|
||||||
selected_users = []
|
selected_users = []
|
||||||
if len(sorted_users) > 3:
|
if len(sorted_users) > 3:
|
||||||
# 使用权重作为概率进行随机选择
|
# 使用权重作为概率进行随机选择
|
||||||
weights = [user[1]["weight"] for user in sorted_users]
|
weights = [user[1]["weight"] for user in sorted_users]
|
||||||
selected_indices = random.choices(
|
selected_indices = random.choices(range(len(sorted_users)), weights=weights, k=3)
|
||||||
range(len(sorted_users)),
|
|
||||||
weights=weights,
|
|
||||||
k=3
|
|
||||||
)
|
|
||||||
selected_users = [sorted_users[i] for i in selected_indices]
|
selected_users = [sorted_users[i] for i in selected_indices]
|
||||||
logger.info(f"开始进一步了解这些用户: {[msg[1]['messages'][0]['user_nickname'] for msg in selected_users]}")
|
logger.info(
|
||||||
|
f"开始进一步了解这些用户: {[msg[1]['messages'][0]['user_nickname'] for msg in selected_users]}"
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
selected_users = sorted_users
|
selected_users = sorted_users
|
||||||
logger.info(f"开始进一步了解用户: {[msg[1]['messages'][0]['user_nickname'] for msg in selected_users]}")
|
logger.info(
|
||||||
|
f"开始进一步了解用户: {[msg[1]['messages'][0]['user_nickname'] for msg in selected_users]}"
|
||||||
|
)
|
||||||
|
|
||||||
# 更新选中用户的印象
|
# 更新选中用户的印象
|
||||||
for person_id, data in selected_users:
|
for person_id, data in selected_users:
|
||||||
user_nickname = data["messages"][0]["user_nickname"]
|
user_nickname = data["messages"][0]["user_nickname"]
|
||||||
logger.info(f"开始更新用户 {user_nickname} 的印象")
|
logger.info(f"开始更新用户 {user_nickname} 的印象")
|
||||||
await relationship_manager.update_person_impression(
|
await relationship_manager.update_person_impression(
|
||||||
person_id=person_id,
|
person_id=person_id, chat_id=chat_id, reason="", timestamp=data["middle_time"]
|
||||||
chat_id=chat_id,
|
|
||||||
reason="",
|
|
||||||
timestamp=data["middle_time"]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
logger.debug("印象更新任务执行完成")
|
logger.debug("印象更新任务执行完成")
|
||||||
@@ -155,5 +145,6 @@ class ImpressionUpdateTask(AsyncTask):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(f"更新印象任务失败: {str(e)}")
|
logger.exception(f"更新印象任务失败: {str(e)}")
|
||||||
|
|
||||||
|
|
||||||
# 创建任务实例
|
# 创建任务实例
|
||||||
impression_update_task = ImpressionUpdateTask()
|
impression_update_task = ImpressionUpdateTask()
|
||||||
@@ -15,6 +15,7 @@ import re
|
|||||||
|
|
||||||
logger = get_logger("relation")
|
logger = get_logger("relation")
|
||||||
|
|
||||||
|
|
||||||
class RelationshipManager:
|
class RelationshipManager:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.positive_feedback_value = 0 # 正反馈系统
|
self.positive_feedback_value = 0 # 正反馈系统
|
||||||
@@ -280,7 +281,6 @@ class RelationshipManager:
|
|||||||
level_num = 5 if relationship_value > 1000 else 0
|
level_num = 5 if relationship_value > 1000 else 0
|
||||||
return level_num
|
return level_num
|
||||||
|
|
||||||
|
|
||||||
async def update_person_impression(self, person_id, chat_id, reason, timestamp):
|
async def update_person_impression(self, person_id, chat_id, reason, timestamp):
|
||||||
"""更新用户印象
|
"""更新用户印象
|
||||||
|
|
||||||
@@ -294,7 +294,7 @@ class RelationshipManager:
|
|||||||
person_name = await person_info_manager.get_value(person_id, "person_name")
|
person_name = await person_info_manager.get_value(person_id, "person_name")
|
||||||
nickname = await person_info_manager.get_value(person_id, "nickname")
|
nickname = await person_info_manager.get_value(person_id, "nickname")
|
||||||
old_impression = await person_info_manager.get_value(person_id, "person_impression")
|
old_impression = await person_info_manager.get_value(person_id, "person_impression")
|
||||||
user_id = await person_info_manager.get_value(person_id, "user_id")
|
# user_id = await person_info_manager.get_value(person_id, "user_id")
|
||||||
|
|
||||||
# logger.debug(f"更新印象的person_id: {person_id}, chat_id: {chat_id}, reason: {reason}, timestamp: {timestamp}, user_id: {user_id}")
|
# logger.debug(f"更新印象的person_id: {person_id}, chat_id: {chat_id}, reason: {reason}, timestamp: {timestamp}, user_id: {user_id}")
|
||||||
|
|
||||||
@@ -323,7 +323,7 @@ class RelationshipManager:
|
|||||||
timestamp_end=timestamp,
|
timestamp_end=timestamp,
|
||||||
# person_ids=[user_id],
|
# person_ids=[user_id],
|
||||||
limit=100,
|
limit=100,
|
||||||
limit_mode="latest"
|
limit_mode="latest",
|
||||||
)
|
)
|
||||||
|
|
||||||
messages_after = get_raw_msg_by_timestamp_with_chat(
|
messages_after = get_raw_msg_by_timestamp_with_chat(
|
||||||
@@ -332,7 +332,7 @@ class RelationshipManager:
|
|||||||
timestamp_end=timestamp + 6000, # 后10分钟
|
timestamp_end=timestamp + 6000, # 后10分钟
|
||||||
# person_ids=[user_id],
|
# person_ids=[user_id],
|
||||||
limit=100,
|
limit=100,
|
||||||
limit_mode="earliest"
|
limit_mode="earliest",
|
||||||
)
|
)
|
||||||
|
|
||||||
# 合并消息并按时间排序
|
# 合并消息并按时间排序
|
||||||
@@ -344,12 +344,8 @@ class RelationshipManager:
|
|||||||
# 构建可读消息
|
# 构建可读消息
|
||||||
|
|
||||||
if user_messages:
|
if user_messages:
|
||||||
|
|
||||||
readable_messages = await build_readable_messages(
|
readable_messages = await build_readable_messages(
|
||||||
messages=user_messages,
|
messages=user_messages, replace_bot_name=True, timestamp_mode="relative", truncate=False
|
||||||
replace_bot_name=True,
|
|
||||||
timestamp_mode="relative",
|
|
||||||
truncate=False
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# 使用LLM总结印象
|
# 使用LLM总结印象
|
||||||
@@ -357,7 +353,6 @@ class RelationshipManager:
|
|||||||
for alias in global_config.bot.alias_names:
|
for alias in global_config.bot.alias_names:
|
||||||
alias_str += f"{alias}, "
|
alias_str += f"{alias}, "
|
||||||
|
|
||||||
|
|
||||||
personality_block = individuality.get_personality_prompt(x_person=2, level=2)
|
personality_block = individuality.get_personality_prompt(x_person=2, level=2)
|
||||||
identity_block = individuality.get_identity_prompt(x_person=2, level=2)
|
identity_block = individuality.get_identity_prompt(x_person=2, level=2)
|
||||||
|
|
||||||
@@ -369,7 +364,7 @@ class RelationshipManager:
|
|||||||
{identity_block}
|
{identity_block}
|
||||||
|
|
||||||
基于以下信息,总结对{person_name}(昵称:{nickname})的印象:
|
基于以下信息,总结对{person_name}(昵称:{nickname})的印象:
|
||||||
历史印象:{old_impression if old_impression else '无'}
|
历史印象:{old_impression if old_impression else "无"}
|
||||||
最近发言:
|
最近发言:
|
||||||
|
|
||||||
{readable_messages}
|
{readable_messages}
|
||||||
@@ -381,8 +376,6 @@ class RelationshipManager:
|
|||||||
|
|
||||||
new_impression, _ = await self.relationship_llm.generate_response_async(prompt=prompt)
|
new_impression, _ = await self.relationship_llm.generate_response_async(prompt=prompt)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 合并新旧印象
|
# 合并新旧印象
|
||||||
if old_impression:
|
if old_impression:
|
||||||
merge_prompt = f"""
|
merge_prompt = f"""
|
||||||
@@ -413,20 +406,19 @@ class RelationshipManager:
|
|||||||
if match:
|
if match:
|
||||||
final_impression = match.group(1).strip()
|
final_impression = match.group(1).strip()
|
||||||
|
|
||||||
|
|
||||||
logger.debug(f"新印象prompt:{prompt}")
|
logger.debug(f"新印象prompt:{prompt}")
|
||||||
logger.debug(f"合并印象prompt:{merge_prompt}")
|
logger.debug(f"合并印象prompt:{merge_prompt}")
|
||||||
|
|
||||||
logger.info(f"麦麦了解到{person_name}(昵称:{nickname}):{new_impression}\n印象变为了:{final_impression}")
|
logger.info(
|
||||||
|
f"麦麦了解到{person_name}(昵称:{nickname}):{new_impression}\n印象变为了:{final_impression}"
|
||||||
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
logger.debug(f"新印象prompt:{prompt}")
|
logger.debug(f"新印象prompt:{prompt}")
|
||||||
logger.info(f"麦麦了解到{person_name}(昵称:{nickname}):{new_impression}")
|
logger.info(f"麦麦了解到{person_name}(昵称:{nickname}):{new_impression}")
|
||||||
|
|
||||||
|
|
||||||
final_impression = new_impression
|
final_impression = new_impression
|
||||||
|
|
||||||
|
|
||||||
# 更新到数据库
|
# 更新到数据库
|
||||||
await person_info_manager.update_one_field(person_id, "person_impression", final_impression)
|
await person_info_manager.update_one_field(person_id, "person_impression", final_impression)
|
||||||
|
|
||||||
@@ -437,5 +429,4 @@ class RelationshipManager:
|
|||||||
return old_impression
|
return old_impression
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
relationship_manager = RelationshipManager()
|
relationship_manager = RelationshipManager()
|
||||||
|
|||||||
Reference in New Issue
Block a user