feat:为normal加入了关系的构建和使用

This commit is contained in:
SengokuCola
2025-06-14 21:17:35 +08:00
parent 733f76b280
commit 751a46da7b
4 changed files with 303 additions and 20 deletions

View File

@@ -124,31 +124,14 @@ class RelationshipManager:
person_name = await person_info_manager.get_value(person_id, "person_name")
if not person_name or person_name == "none":
return ""
# impression = await person_info_manager.get_value(person_id, "impression")
points = await person_info_manager.get_value(person_id, "points") or []
if isinstance(points, str):
try:
points = ast.literal_eval(points)
except (SyntaxError, ValueError):
points = []
random_points = random.sample(points, min(5, len(points))) if points else []
short_impression = await person_info_manager.get_value(person_id, "short_impression")
nickname_str = await person_info_manager.get_value(person_id, "nickname")
platform = await person_info_manager.get_value(person_id, "platform")
relation_prompt = f"'{person_name}' ta在{platform}上的昵称是{nickname_str}"
# if impression:
# relation_prompt += f"你对ta的印象是{impression}。"
if random_points:
for point in random_points:
# print(f"point: {point}")
# print(f"point[2]: {point[2]}")
# print(f"point[0]: {point[0]}")
point_str = f"时间:{point[2]}。内容:{point[0]}"
relation_prompt += f"你记得{person_name}最近的点是:{point_str}"
if short_impression:
relation_prompt += f"你对ta的印象是{short_impression}"
return relation_prompt
@@ -448,6 +431,35 @@ class RelationshipManager:
await person_info_manager.update_one_field(person_id, "impression", compressed_summary)
compress_short_prompt = f"""
你的名字是{global_config.bot.nickname}{global_config.bot.nickname}的别名是{alias_str}
请不要混淆你自己和{global_config.bot.nickname}{person_name}
你对{person_name}的了解是:
{compressed_summary}
请你用一句话概括你对{person_name}的了解。突出:
1.对{person_name}的直观印象
2.{global_config.bot.nickname}{person_name}的关系
3.{person_name}的关键信息
请输出一段平文本,以陈诉自白的语气,输出你对{person_name}的概括,不要输出任何其他内容。
"""
compressed_short_summary, _ = await self.relationship_llm.generate_response_async(prompt=compress_short_prompt)
# current_time = datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M:%S")
# compressed_short_summary = f"截至{current_time},你对{person_name}的了解:{compressed_short_summary}"
await person_info_manager.update_one_field(person_id, "short_impression", compressed_short_summary)
forgotten_points = []
# 这句代码的作用是:将更新后的 forgotten_points遗忘的记忆点列表序列化为 JSON 字符串后,写回到数据库中的 forgotten_points 字段