refactor nickname

This commit is contained in:
bridge
2025-11-26 15:22:48 +08:00
parent 37b51b7650
commit bb8614407d
8 changed files with 147 additions and 19 deletions

View File

@@ -13,6 +13,8 @@ from src.utils.config import CONFIG
from src.utils.llm import call_llm_with_template, LLMMode
from src.run.log import get_logger
from src.classes.nickname_data import Nickname
logger = get_logger().logger
@@ -50,7 +52,7 @@ def can_get_nickname(avatar: "Avatar") -> bool:
return major_count >= major_threshold and minor_count >= minor_threshold
async def generate_nickname(avatar: "Avatar") -> Optional[str]:
async def generate_nickname(avatar: "Avatar") -> Optional[dict]:
"""
为角色生成绰号
@@ -60,7 +62,7 @@ async def generate_nickname(avatar: "Avatar") -> Optional[str]:
avatar: 要生成绰号的角色
Returns:
生成的绰号失败则返回None
包含 nickname 和 reason 的字典失败则返回None
"""
try:
# 获取 expanded_info包含详细信息和事件历史
@@ -77,15 +79,19 @@ async def generate_nickname(avatar: "Avatar") -> Optional[str]:
nickname = response_data.get("nickname", "").strip()
thinking = response_data.get("thinking", "")
reason = response_data.get("reason", "").strip()
if not nickname:
logger.warning(f"为角色 {avatar.name} 生成绰号失败:返回空绰号")
return None
logger.info(f"为角色 {avatar.name} 生成绰号:{nickname}")
logger.info(f"为角色 {avatar.name} 生成绰号:{nickname} (原因:{reason})")
logger.debug(f"绰号生成思考过程:{thinking}")
return nickname
return {
"nickname": nickname,
"reason": reason
}
except Exception as e:
logger.error(f"生成绰号时出错:{e}")
@@ -107,15 +113,19 @@ async def process_avatar_nickname(avatar: "Avatar") -> Optional[Event]:
if not can_get_nickname(avatar):
return None
nickname = await generate_nickname(avatar)
if not nickname:
result = await generate_nickname(avatar)
if not result:
return None
avatar.nickname = nickname
nickname_str = result["nickname"]
reason = result["reason"]
avatar.nickname = Nickname(value=nickname_str, reason=reason)
# 生成事件:角色获得绰号
event = Event(
avatar.world.month_stamp,
f"{avatar.name}在修仙界中闯出名号,被人称为「{nickname}」。",
f"{avatar.name}在修仙界中闯出名号,被人称为「{nickname_str}」。",
related_avatars=[avatar.id],
is_major=True
)