refactor(profile,llm): 提高用户资料的准确性和系统的稳健性。本次提交引入了多项针对用户资料管理和大语言模型交互的优化,目标是实现更高的准确性、更严格的数据验证以及提升系统可靠性。
- **用户资料管理(`user_profile_tool.py`):** - `UserProfileTool` 的描述进行了大幅更新,明确定义了严格的使用场景和绝对禁止的行为,防止误用。 - 对 `preference_keywords` 和 `key_info` 的值实施了更严格的过滤,确保只记录具体、客观的事实和真实兴趣。 - 减少了用于上下文的最近聊天消息数量,以更关注相关性更高的近期交互。 - 修改了好感度计算逻辑,使其更加保守,不容易因日常小互动而改变,需要更有意义的交流才会产生变化。 - 印象生成提示已更新,严格禁止猜测。 并强调记录事实观察到的特征。- **关系信息显示(`relationship_fetcher.py`):** - 通过过滤掉一般交互术语来增强用户偏好显示,仅展示真实的爱好和兴趣。- 暂时注释了“关键事实”的显示,以防呈现潜在不准确或推测性的信息。- **大型语言模型交互稳定性(`base_action.py`):** - 在 `should_activate` 方法中引入了 7 秒超时的 LLM 判断调用。- 如果 LLM 判断超时,动作现在默认为“激活”,以防止系统阻塞并确保持续运行。
This commit is contained in:
@@ -173,24 +173,34 @@ class RelationshipFetcher:
|
||||
if impression:
|
||||
relation_parts.append(f"\n你对{person_name}的印象:\n{impression}")
|
||||
|
||||
# 5. 用户偏好关键词
|
||||
# 5. 用户偏好关键词(仅显示真实兴趣爱好)
|
||||
if rel_data.get("preference_keywords"):
|
||||
keywords_list = [kw.strip() for kw in rel_data["preference_keywords"].split(",") if kw.strip()]
|
||||
if keywords_list:
|
||||
keywords_str = "、".join(keywords_list)
|
||||
relation_parts.append(f"\n{person_name}的偏好和兴趣:{keywords_str}")
|
||||
# 过滤掉明显不是兴趣爱好的词
|
||||
filtered_keywords = []
|
||||
for kw in keywords_list:
|
||||
kw_lower = kw.lower()
|
||||
# 排除聊天互动、情感需求等不是真实兴趣的词汇
|
||||
if not any(excluded in kw_lower for excluded in [
|
||||
'亲亲', '撒娇', '被宠', '被夸', '聊天', '互动', '关心', '专注', '需要'
|
||||
]):
|
||||
filtered_keywords.append(kw)
|
||||
|
||||
if filtered_keywords:
|
||||
keywords_str = "、".join(filtered_keywords)
|
||||
relation_parts.append(f"\n{person_name}的兴趣爱好:{keywords_str}")
|
||||
|
||||
# 6. 关键信息
|
||||
if rel_data.get("key_facts"):
|
||||
try:
|
||||
import orjson
|
||||
facts = orjson.loads(rel_data["key_facts"])
|
||||
if facts and isinstance(facts, list):
|
||||
facts_lines = self._format_key_facts(facts, person_name)
|
||||
if facts_lines:
|
||||
relation_parts.append(f"\n你记住的关于{person_name}的重要信息:\n{facts_lines}")
|
||||
except Exception:
|
||||
pass
|
||||
# 6. 关键信息 - 暂时隐藏,防止显示不准确的推测信息
|
||||
# if rel_data.get("key_facts"):
|
||||
# try:
|
||||
# import orjson
|
||||
# facts = orjson.loads(rel_data["key_facts"])
|
||||
# if facts and isinstance(facts, list):
|
||||
# facts_lines = self._format_key_facts(facts, person_name)
|
||||
# if facts_lines:
|
||||
# relation_parts.append(f"\n你记住的关于{person_name}的重要信息:\n{facts_lines}")
|
||||
# except Exception:
|
||||
# pass
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"查询UserRelationships表失败: {e}")
|
||||
|
||||
Reference in New Issue
Block a user