🤖 自动格式化代码 [skip ci]
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
import math
|
||||
import random
|
||||
import time
|
||||
import asyncio
|
||||
|
||||
from src.chat.message_receive.message import MessageRecv
|
||||
from src.llm_models.utils_model import LLMRequest
|
||||
@@ -10,8 +9,10 @@ from src.chat.utils.chat_message_builder import build_readable_messages, get_raw
|
||||
from src.config.config import global_config
|
||||
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
|
||||
from src.manager.async_task_manager import AsyncTask, async_task_manager
|
||||
|
||||
logger = get_logger("mood")
|
||||
|
||||
|
||||
def init_prompt():
|
||||
Prompt(
|
||||
"""
|
||||
@@ -40,26 +41,27 @@ def init_prompt():
|
||||
"regress_mood_prompt",
|
||||
)
|
||||
|
||||
|
||||
class ChatMood:
|
||||
def __init__(self,chat_id:str):
|
||||
self.chat_id:str = chat_id
|
||||
self.mood_state:str = "感觉很平静"
|
||||
|
||||
self.regression_count:int = 0
|
||||
|
||||
def __init__(self, chat_id: str):
|
||||
self.chat_id: str = chat_id
|
||||
self.mood_state: str = "感觉很平静"
|
||||
|
||||
self.regression_count: int = 0
|
||||
|
||||
self.mood_model = LLMRequest(
|
||||
model=global_config.model.emotion,
|
||||
temperature=0.7,
|
||||
request_type="mood",
|
||||
)
|
||||
|
||||
|
||||
self.last_change_time = 0
|
||||
|
||||
async def update_mood_by_message(self,message:MessageRecv,interested_rate:float):
|
||||
|
||||
async def update_mood_by_message(self, message: MessageRecv, interested_rate: float):
|
||||
self.regression_count = 0
|
||||
|
||||
|
||||
during_last_time = message.message_info.time - self.last_change_time
|
||||
|
||||
|
||||
base_probability = 0.05
|
||||
time_multiplier = 4 * (1 - math.exp(-0.01 * during_last_time))
|
||||
|
||||
@@ -67,15 +69,15 @@ class ChatMood:
|
||||
interest_multiplier = 0
|
||||
else:
|
||||
interest_multiplier = 3 * math.pow(interested_rate, 0.25)
|
||||
|
||||
logger.info(f"base_probability: {base_probability}, time_multiplier: {time_multiplier}, interest_multiplier: {interest_multiplier}")
|
||||
|
||||
logger.info(
|
||||
f"base_probability: {base_probability}, time_multiplier: {time_multiplier}, interest_multiplier: {interest_multiplier}"
|
||||
)
|
||||
update_probability = min(1.0, base_probability * time_multiplier * interest_multiplier)
|
||||
|
||||
if random.random() > update_probability:
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
message_time = message.message_info.time
|
||||
message_list_before_now = get_raw_msg_by_timestamp_with_chat_inclusive(
|
||||
chat_id=self.chat_id,
|
||||
@@ -93,8 +95,7 @@ class ChatMood:
|
||||
truncate=True,
|
||||
show_actions=True,
|
||||
)
|
||||
|
||||
|
||||
|
||||
bot_name = global_config.bot.nickname
|
||||
if global_config.bot.alias_names:
|
||||
bot_nickname = f",也有人叫你{','.join(global_config.bot.alias_names)}"
|
||||
@@ -103,27 +104,24 @@ class ChatMood:
|
||||
|
||||
prompt_personality = global_config.personality.personality_core
|
||||
indentify_block = f"你的名字是{bot_name}{bot_nickname},你{prompt_personality}:"
|
||||
|
||||
|
||||
prompt = await global_prompt_manager.format_prompt(
|
||||
"change_mood_prompt",
|
||||
chat_talking_prompt=chat_talking_prompt,
|
||||
indentify_block=indentify_block,
|
||||
mood_state=self.mood_state,
|
||||
)
|
||||
|
||||
|
||||
logger.info(f"prompt: {prompt}")
|
||||
response, (reasoning_content, model_name) = await self.mood_model.generate_response_async(prompt=prompt)
|
||||
logger.info(f"response: {response}")
|
||||
logger.info(f"reasoning_content: {reasoning_content}")
|
||||
|
||||
|
||||
|
||||
self.mood_state = response
|
||||
|
||||
|
||||
|
||||
self.last_change_time = message_time
|
||||
|
||||
|
||||
async def regress_mood(self):
|
||||
|
||||
message_time = time.time()
|
||||
message_list_before_now = get_raw_msg_by_timestamp_with_chat_inclusive(
|
||||
chat_id=self.chat_id,
|
||||
@@ -141,8 +139,7 @@ class ChatMood:
|
||||
truncate=True,
|
||||
show_actions=True,
|
||||
)
|
||||
|
||||
|
||||
|
||||
bot_name = global_config.bot.nickname
|
||||
if global_config.bot.alias_names:
|
||||
bot_nickname = f",也有人叫你{','.join(global_config.bot.alias_names)}"
|
||||
@@ -151,27 +148,26 @@ class ChatMood:
|
||||
|
||||
prompt_personality = global_config.personality.personality_core
|
||||
indentify_block = f"你的名字是{bot_name}{bot_nickname},你{prompt_personality}:"
|
||||
|
||||
|
||||
prompt = await global_prompt_manager.format_prompt(
|
||||
"regress_mood_prompt",
|
||||
chat_talking_prompt=chat_talking_prompt,
|
||||
indentify_block=indentify_block,
|
||||
mood_state=self.mood_state,
|
||||
)
|
||||
|
||||
|
||||
logger.info(f"prompt: {prompt}")
|
||||
response, (reasoning_content, model_name) = await self.mood_model.generate_response_async(prompt=prompt)
|
||||
logger.info(f"response: {response}")
|
||||
logger.info(f"reasoning_content: {reasoning_content}")
|
||||
|
||||
|
||||
|
||||
self.mood_state = response
|
||||
|
||||
|
||||
|
||||
self.regression_count += 1
|
||||
|
||||
|
||||
|
||||
class MoodRegressionTask(AsyncTask):
|
||||
def __init__(self, mood_manager: 'MoodManager'):
|
||||
def __init__(self, mood_manager: "MoodManager"):
|
||||
super().__init__(task_name="MoodRegressionTask", run_interval=30)
|
||||
self.mood_manager = mood_manager
|
||||
|
||||
@@ -179,24 +175,20 @@ class MoodRegressionTask(AsyncTask):
|
||||
logger.debug("Running mood regression task...")
|
||||
now = time.time()
|
||||
for mood in self.mood_manager.mood_list:
|
||||
|
||||
if mood.last_change_time == 0:
|
||||
continue
|
||||
|
||||
|
||||
|
||||
if now - mood.last_change_time > 180:
|
||||
|
||||
if mood.regression_count >= 3:
|
||||
continue
|
||||
|
||||
|
||||
logger.info(f"chat {mood.chat_id} 开始情绪回归, 这是第 {mood.regression_count+1} 次")
|
||||
|
||||
logger.info(f"chat {mood.chat_id} 开始情绪回归, 这是第 {mood.regression_count + 1} 次")
|
||||
await mood.regress_mood()
|
||||
|
||||
class MoodManager:
|
||||
|
||||
class MoodManager:
|
||||
def __init__(self):
|
||||
self.mood_list:list[ChatMood] = []
|
||||
self.mood_list: list[ChatMood] = []
|
||||
"""当前情绪状态"""
|
||||
self.task_started: bool = False
|
||||
|
||||
@@ -204,23 +196,23 @@ class MoodManager:
|
||||
"""启动情绪回归后台任务"""
|
||||
if self.task_started:
|
||||
return
|
||||
|
||||
|
||||
logger.info("启动情绪回归任务...")
|
||||
task = MoodRegressionTask(self)
|
||||
await async_task_manager.add_task(task)
|
||||
self.task_started = True
|
||||
logger.info("情绪回归任务已启动")
|
||||
|
||||
def get_mood_by_chat_id(self, chat_id:str) -> ChatMood:
|
||||
def get_mood_by_chat_id(self, chat_id: str) -> ChatMood:
|
||||
for mood in self.mood_list:
|
||||
if mood.chat_id == chat_id:
|
||||
return mood
|
||||
|
||||
|
||||
new_mood = ChatMood(chat_id)
|
||||
self.mood_list.append(new_mood)
|
||||
return new_mood
|
||||
|
||||
def reset_mood_by_chat_id(self, chat_id:str):
|
||||
|
||||
def reset_mood_by_chat_id(self, chat_id: str):
|
||||
for mood in self.mood_list:
|
||||
if mood.chat_id == chat_id:
|
||||
mood.mood_state = "感觉很平静"
|
||||
@@ -228,7 +220,6 @@ class MoodManager:
|
||||
return
|
||||
self.mood_list.append(ChatMood(chat_id))
|
||||
|
||||
|
||||
|
||||
init_prompt()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user