fix:加try
This commit is contained in:
@@ -4,7 +4,7 @@ from typing import List, Dict, Optional, Any, Tuple
|
|||||||
from src.common.logger_manager import get_logger
|
from src.common.logger_manager import get_logger
|
||||||
from src.chat.models.utils_model import LLMRequest
|
from src.chat.models.utils_model import LLMRequest
|
||||||
from src.config.config import global_config
|
from src.config.config import global_config
|
||||||
from src.chat.utils.chat_message_builder import get_raw_msg_by_timestamp_random, build_readable_messages
|
from src.chat.utils.chat_message_builder import get_raw_msg_by_timestamp_random, build_readable_messages, build_anonymous_messages
|
||||||
from src.chat.focus_chat.heartflow_prompt_builder import Prompt, global_prompt_manager
|
from src.chat.focus_chat.heartflow_prompt_builder import Prompt, global_prompt_manager
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
@@ -225,14 +225,15 @@ class ExpressionLearner:
|
|||||||
return None
|
return None
|
||||||
# 转化成str
|
# 转化成str
|
||||||
chat_id: str = random_msg[0]["chat_id"]
|
chat_id: str = random_msg[0]["chat_id"]
|
||||||
random_msg_str: str = await build_readable_messages(random_msg, timestamp_mode="normal")
|
# random_msg_str: str = await build_readable_messages(random_msg, timestamp_mode="normal")
|
||||||
|
random_msg_str: str = await build_anonymous_messages(random_msg)
|
||||||
|
|
||||||
prompt: str = await global_prompt_manager.format_prompt(
|
prompt: str = await global_prompt_manager.format_prompt(
|
||||||
prompt,
|
prompt,
|
||||||
chat_str=random_msg_str,
|
chat_str=random_msg_str,
|
||||||
)
|
)
|
||||||
|
|
||||||
logger.debug(f"学习{type_str}的prompt: {prompt}")
|
logger.info(f"学习{type_str}的prompt: {prompt}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response, _ = await self.express_learn_model.generate_response_async(prompt)
|
response, _ = await self.express_learn_model.generate_response_async(prompt)
|
||||||
@@ -240,7 +241,7 @@ class ExpressionLearner:
|
|||||||
logger.error(f"学习{type_str}失败: {e}")
|
logger.error(f"学习{type_str}失败: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
logger.debug(f"学习{type_str}的response: {response}")
|
logger.info(f"学习{type_str}的response: {response}")
|
||||||
|
|
||||||
expressions: List[Tuple[str, str, str]] = self.parse_expression_response(response, chat_id)
|
expressions: List[Tuple[str, str, str]] = self.parse_expression_response(response, chat_id)
|
||||||
|
|
||||||
|
|||||||
@@ -907,15 +907,19 @@ class HeartFChatting:
|
|||||||
)
|
)
|
||||||
|
|
||||||
# --- 概率性忽略文本回复附带的表情 (逻辑保持不变) ---
|
# --- 概率性忽略文本回复附带的表情 (逻辑保持不变) ---
|
||||||
emoji = action_data.get("emojis")
|
try:
|
||||||
if action == "reply" and emoji:
|
emoji = action_data.get("emojis")
|
||||||
logger.debug(f"{self.log_prefix}[Planner] 大模型建议文字回复带表情: '{emoji}'")
|
if action == "reply" and emoji:
|
||||||
if random.random() > EMOJI_SEND_PRO:
|
logger.debug(f"{self.log_prefix}[Planner] 大模型建议文字回复带表情: '{emoji}'")
|
||||||
logger.info(f"{self.log_prefix}但是麦麦这次不想加表情 ({1 - EMOJI_SEND_PRO:.0%}),忽略表情 '{emoji}'")
|
if random.random() > EMOJI_SEND_PRO:
|
||||||
action_data["emojis"] = "" # 清空表情请求
|
logger.info(f"{self.log_prefix}但是麦麦这次不想加表情 ({1 - EMOJI_SEND_PRO:.0%}),忽略表情 '{emoji}'")
|
||||||
else:
|
action_data["emojis"] = "" # 清空表情请求
|
||||||
logger.info(f"{self.log_prefix}好吧,加上表情 '{emoji}'")
|
else:
|
||||||
# --- 结束概率性忽略 ---
|
logger.info(f"{self.log_prefix}好吧,加上表情 '{emoji}'")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"{self.log_prefix}[Planner] 概率性忽略表情时发生错误: {e}")
|
||||||
|
traceback.print_exc()
|
||||||
|
# --- 结束概率性忽略 ---
|
||||||
|
|
||||||
# 返回结果字典
|
# 返回结果字典
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -413,6 +413,53 @@ async def build_readable_messages(
|
|||||||
return read_mark_line.strip() # 如果前后都无消息,只返回标记行
|
return read_mark_line.strip() # 如果前后都无消息,只返回标记行
|
||||||
|
|
||||||
|
|
||||||
|
async def build_anonymous_messages(messages: List[Dict[str, Any]]) -> str:
|
||||||
|
"""
|
||||||
|
构建匿名可读消息,将不同人的名称转为唯一占位符(A、B、C...),bot自己用SELF。
|
||||||
|
"""
|
||||||
|
if not messages:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
# 分配占位符
|
||||||
|
person_map = {}
|
||||||
|
current_char = ord('A')
|
||||||
|
output_lines = []
|
||||||
|
|
||||||
|
for msg in messages:
|
||||||
|
user_info = msg.get("user_info", {})
|
||||||
|
platform = user_info.get("platform")
|
||||||
|
user_id = user_info.get("user_id")
|
||||||
|
timestamp = msg.get("time")
|
||||||
|
content = msg.get("processed_plain_text", "")
|
||||||
|
|
||||||
|
if not all([platform, user_id, timestamp is not None]):
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 判断是否为bot
|
||||||
|
if user_id == global_config.BOT_QQ:
|
||||||
|
anon_name = "SELF"
|
||||||
|
else:
|
||||||
|
person_id = person_info_manager.get_person_id(platform, user_id)
|
||||||
|
if person_id not in person_map:
|
||||||
|
person_map[person_id] = chr(current_char)
|
||||||
|
current_char += 1
|
||||||
|
anon_name = person_map[person_id]
|
||||||
|
|
||||||
|
# 格式化时间
|
||||||
|
readable_time = translate_timestamp_to_human_readable(timestamp, mode="relative")
|
||||||
|
header = f"{readable_time}{anon_name}说:"
|
||||||
|
output_lines.append(header)
|
||||||
|
stripped_line = content.strip()
|
||||||
|
if stripped_line:
|
||||||
|
if stripped_line.endswith("。"):
|
||||||
|
stripped_line = stripped_line[:-1]
|
||||||
|
output_lines.append(f"{stripped_line};")
|
||||||
|
output_lines.append("\n")
|
||||||
|
|
||||||
|
formatted_string = "".join(output_lines).strip()
|
||||||
|
return formatted_string
|
||||||
|
|
||||||
|
|
||||||
async def get_person_id_list(messages: List[Dict[str, Any]]) -> List[str]:
|
async def get_person_id_list(messages: List[Dict[str, Any]]) -> List[str]:
|
||||||
"""
|
"""
|
||||||
从消息列表中提取不重复的 person_id 列表 (忽略机器人自身)。
|
从消息列表中提取不重复的 person_id 列表 (忽略机器人自身)。
|
||||||
|
|||||||
Reference in New Issue
Block a user