fix:修复好感prompt没启用

This commit is contained in:
SengokuCola
2025-06-05 13:25:56 +08:00
parent ea8c9fe443
commit 16a0717c6e
9 changed files with 37 additions and 52 deletions

View File

@@ -29,7 +29,7 @@ def init_prompt():
现在请你根据现有的信息,总结你和群里的人的关系 现在请你根据现有的信息,总结你和群里的人的关系
1. 当聊天记录中提到你时,请输出你和这个人之间的关系 1. 当聊天记录中提到你时,请输出你和这个人之间的关系
2. 当聊天记录中提到其他人时,请输出你和这个人之间的关系 2. 当聊天记录中提到其他人时,请输出你和这个人之间的关系
3. 如果没有特别需要提及的关系,请输出“没有特别在意的人” 3. 如果没有特别需要提及的关系,就不用输出这个人
输出内容平淡一些,说中文。 输出内容平淡一些,说中文。
请注意不要输出多余内容(包括前后缀,括号()表情包at或 @等 )。只输出关系内容,记得明确说明这是你的关系。 请注意不要输出多余内容(包括前后缀,括号()表情包at或 @等 )。只输出关系内容,记得明确说明这是你的关系。
@@ -93,18 +93,6 @@ class RelationshipProcessor(BaseProcessor):
tuple: (current_mind, past_mind, prompt) 当前想法、过去的想法列表和使用的prompt tuple: (current_mind, past_mind, prompt) 当前想法、过去的想法列表和使用的prompt
""" """
for observation in observations:
if isinstance(observation, ChattingObservation):
is_group_chat = observation.is_group_chat
chat_target_info = observation.chat_target_info
chat_target_name = "对方" # 私聊默认名称
person_list = observation.person_list
relation_prompt = ""
for person in person_list:
if len(person) >= 3 and person[0] and person[1]:
relation_prompt += await relationship_manager.build_relationship_info(person, is_id=True)
if observations is None: if observations is None:
observations = [] observations = []
for observation in observations: for observation in observations:
@@ -131,9 +119,11 @@ class RelationshipProcessor(BaseProcessor):
relation_prompt_init = "你对群聊里的人的印象是:\n" relation_prompt_init = "你对群聊里的人的印象是:\n"
else: else:
relation_prompt_init = "你对对方的印象是:\n" relation_prompt_init = "你对对方的印象是:\n"
relation_prompt = ""
for person in person_list: for person in person_list:
relation_prompt += await relationship_manager.build_relationship_info(person, is_id=True) relation_prompt += f"{await relationship_manager.build_relationship_info(person, is_id=True)}\n"
if relation_prompt: if relation_prompt:
relation_prompt = relation_prompt_init + relation_prompt relation_prompt = relation_prompt_init + relation_prompt
else: else:
@@ -162,7 +152,7 @@ class RelationshipProcessor(BaseProcessor):
if content == "None": if content == "None":
content = "" content = ""
# 记录初步思考结果 # 记录初步思考结果
logger.debug(f"{self.log_prefix} 关系识别prompt: \n{prompt}\n") logger.info(f"{self.log_prefix} 关系识别prompt: \n{prompt}\n")
logger.info(f"{self.log_prefix} 关系识别: {content}") logger.info(f"{self.log_prefix} 关系识别: {content}")
return content return content

View File

@@ -104,12 +104,6 @@ class SelfProcessor(BaseProcessor):
chat_target_name = "对方" # 私聊默认名称 chat_target_name = "对方" # 私聊默认名称
person_list = observation.person_list person_list = observation.person_list
relation_prompt = ""
for person in person_list:
if len(person) >= 3 and person[0] and person[1]:
relation_prompt += await relationship_manager.build_relationship_info(person, is_id=True)
if observations is None: if observations is None:
observations = [] observations = []
for observation in observations: for observation in observations:

View File

@@ -128,15 +128,6 @@ class ToolProcessor(BaseProcessor):
for running_memory in running_memorys: for running_memory in running_memorys:
memory_str += f"{running_memory['topic']}: {running_memory['content']}\n" memory_str += f"{running_memory['topic']}: {running_memory['content']}\n"
# 构建关系信息
relation_prompt = "【关系信息】\n"
for person in person_list:
relation_prompt += await relationship_manager.build_relationship_info(person, is_id=True)
# 获取个性信息
# prompt_personality = individuality.get_prompt(x_person=2, level=2)
# 获取时间信息 # 获取时间信息
time_now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) time_now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

View File

@@ -7,7 +7,6 @@ from src.config.config import global_config
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.obs_info import ObsInfo from src.chat.focus_chat.info.obs_info import ObsInfo
from src.chat.focus_chat.info.cycle_info import CycleInfo from src.chat.focus_chat.info.cycle_info import CycleInfo
from src.chat.focus_chat.info.mind_info import MindInfo
from src.chat.focus_chat.info.action_info import ActionInfo from src.chat.focus_chat.info.action_info import ActionInfo
from src.chat.focus_chat.info.structured_info import StructuredInfo from src.chat.focus_chat.info.structured_info import StructuredInfo
from src.chat.focus_chat.info.self_info import SelfInfo from src.chat.focus_chat.info.self_info import SelfInfo
@@ -129,8 +128,6 @@ class ActionPlanner(BasePlanner):
observed_messages_str = info.get_talking_message_str_truncate() observed_messages_str = info.get_talking_message_str_truncate()
chat_type = info.get_chat_type() chat_type = info.get_chat_type()
is_group_chat = chat_type == "group" is_group_chat = chat_type == "group"
elif isinstance(info, MindInfo):
current_mind = info.get_current_mind()
elif isinstance(info, CycleInfo): elif isinstance(info, CycleInfo):
cycle_info = info.get_observe_info() cycle_info = info.get_observe_info()
elif isinstance(info, SelfInfo): elif isinstance(info, SelfInfo):
@@ -171,7 +168,6 @@ class ActionPlanner(BasePlanner):
is_group_chat=is_group_chat, # <-- Pass HFC state is_group_chat=is_group_chat, # <-- Pass HFC state
chat_target_info=None, chat_target_info=None,
observed_messages_str=observed_messages_str, # <-- Pass local variable observed_messages_str=observed_messages_str, # <-- Pass local variable
current_mind=current_mind, # <-- Pass argument
structured_info=structured_info, # <-- Pass SubMind info structured_info=structured_info, # <-- Pass SubMind info
current_available_actions=current_available_actions, # <-- Pass determined actions current_available_actions=current_available_actions, # <-- Pass determined actions
cycle_info=cycle_info, # <-- Pass cycle info cycle_info=cycle_info, # <-- Pass cycle info
@@ -284,7 +280,6 @@ class ActionPlanner(BasePlanner):
is_group_chat: bool, # Now passed as argument is_group_chat: bool, # Now passed as argument
chat_target_info: Optional[dict], # Now passed as argument chat_target_info: Optional[dict], # Now passed as argument
observed_messages_str: str, observed_messages_str: str,
current_mind: Optional[str],
structured_info: Optional[str], structured_info: Optional[str],
current_available_actions: Dict[str, ActionInfo], current_available_actions: Dict[str, ActionInfo],
cycle_info: Optional[str], cycle_info: Optional[str],

View File

@@ -278,8 +278,9 @@ class ChattingObservation(Observation):
show_actions=True, show_actions=True,
) )
# print(f"构建中self.talking_message_str_truncate: {self.talking_message_str_truncate}") # print(f"构建中self.talking_message_str_truncate: {self.talking_message_str_truncate}")
self.person_list = await get_person_id_list(self.talking_message) self.person_list = await get_person_id_list(self.talking_message)
# print(f"构建中self.person_list: {self.person_list}") # print(f"构建中self.person_list: {self.person_list}")
logger.trace( logger.trace(

View File

@@ -114,8 +114,7 @@ class PromptBuilder:
relation_prompt = "" relation_prompt = ""
for person in who_chat_in_group: for person in who_chat_in_group:
if len(person) >= 3 and person[0] and person[1]: relation_prompt += await relationship_manager.build_relationship_info(person)
relation_prompt += await relationship_manager.build_relationship_info(person)
mood_prompt = mood_manager.get_mood_prompt() mood_prompt = mood_manager.get_mood_prompt()

View File

@@ -673,9 +673,8 @@ async def get_person_id_list(messages: List[Dict[str, Any]]) -> List[str]:
person_ids_set = set() # 使用集合来自动去重 person_ids_set = set() # 使用集合来自动去重
for msg in messages: for msg in messages:
user_info = msg.get("user_info", {}) platform = msg.get("user_platform")
platform = user_info.get("platform") user_id = msg.get("user_id")
user_id = user_info.get("user_id")
# 检查必要信息是否存在 且 不是机器人自己 # 检查必要信息是否存在 且 不是机器人自己
if not all([platform, user_id]) or user_id == global_config.bot.qq_account: if not all([platform, user_id]) or user_id == global_config.bot.qq_account:

View File

@@ -22,9 +22,19 @@ class ImpressionUpdateTask(AsyncTask):
async def run(self): async def run(self):
try: try:
# 获取最近10分钟的消息 if random.random() < 0.5:
current_time = int(time.time()) # 获取最近10分钟的消息
start_time = current_time - 6000 # 10分钟前 current_time = int(time.time())
start_time = current_time - 6000 # 10分钟前
# 取一个月内任意一个小时的时间段
else:
now = int(time.time())
# 30天前的时间戳
month_ago = now - 30 * 24 * 60 * 60
# 随机选择一个小时的起点
random_start = random.randint(month_ago, now - 3600)
start_time = random_start
current_time = random_start + 3600 # 一个小时后
# 获取所有消息 # 获取所有消息
messages = get_raw_msg_by_timestamp(timestamp_start=start_time, timestamp_end=current_time, limit=100) messages = get_raw_msg_by_timestamp(timestamp_start=start_time, timestamp_end=current_time, limit=100)

View File

@@ -133,6 +133,7 @@ class RelationshipManager:
gender_list = json.loads(gender) gender_list = json.loads(gender)
gender = random.choice(gender_list) gender = random.choice(gender_list)
except json.JSONDecodeError: except json.JSONDecodeError:
logger.error(f"性别解析错误: {gender}")
pass pass
if gender and "" in gender: if gender and "" in gender:
@@ -146,34 +147,39 @@ class RelationshipManager:
nickname_str = await person_info_manager.get_value(person_id, "nickname") nickname_str = await person_info_manager.get_value(person_id, "nickname")
platform = await person_info_manager.get_value(person_id, "platform") platform = await person_info_manager.get_value(person_id, "platform")
relation_prompt = f"你认识 {person_name} {gender_prompt}{platform}上的昵称是{nickname_str}你对{gender_prompt}的印象是" relation_prompt = f"'{person_name}' {gender_prompt}{platform}上的昵称是{nickname_str}"
# person_impression = await person_info_manager.get_value(person_id, "person_impression") # person_impression = await person_info_manager.get_value(person_id, "person_impression")
# if person_impression: # if person_impression:
# relation_prompt += f"你对ta的印象是{person_impression}。" # relation_prompt += f"你对ta的印象是{person_impression}。"
traits = await person_info_manager.get_value(person_id, "traits") traits = await person_info_manager.get_value(person_id, "traits")
gender = await person_info_manager.get_value(person_id, "gender")
relation = await person_info_manager.get_value(person_id, "relation")
identity = await person_info_manager.get_value(person_id, "identity")
meme = await person_info_manager.get_value(person_id, "meme")
if traits or gender or relation or identity or meme:
relation_prompt += f"你对{gender_prompt}的印象是:"
if traits: if traits:
relation_prompt += f"{gender_prompt}的性格特征是:{traits}" relation_prompt += f"{gender_prompt}的性格特征是:{traits}"
gender = await person_info_manager.get_value(person_id, "gender")
if gender: if gender:
relation_prompt += f"{gender_prompt}的性别是:{gender}" relation_prompt += f"{gender_prompt}的性别是:{gender}"
relation = await person_info_manager.get_value(person_id, "relation")
if relation: if relation:
relation_prompt += f"你与{gender_prompt}的关系是:{relation}" relation_prompt += f"你与{gender_prompt}的关系是:{relation}"
identity = await person_info_manager.get_value(person_id, "identity")
if identity: if identity:
relation_prompt += f"{gender_prompt}的身份是:{identity}" relation_prompt += f"{gender_prompt}的身份是:{identity}"
meme = await person_info_manager.get_value(person_id, "meme")
if meme: if meme:
relation_prompt += f"你与{gender_prompt}之间的梗是:{meme}" relation_prompt += f"你与{gender_prompt}之间的梗是:{meme}"
print(f"relation_prompt: {relation_prompt}") # print(f"relation_prompt: {relation_prompt}")
return relation_prompt return relation_prompt
async def update_person_impression(self, person_id, chat_id, reason, timestamp): async def update_person_impression(self, person_id, chat_id, reason, timestamp):