feat: 重构聊天系统的内存处理与格式化功能

- 更新了DefaultReplyer,采用新的内存格式化工具以提供更优质的内存描述。
- 已移除 Config 类中已弃用的内存配置。
- 在主系统中增强内存系统初始化检查,确保配置正确。
- 优化了MemoryManager,使其可直接使用全局配置进行内存设置。
- 新增了一个内存格式化工具,用于将内存对象转换为自然语言描述。
- 更新了内存工具,提供了更清晰的内存创建与管理指南。
- 精炼插件工具与使用提示,提升用户交互体验与记忆准确性。
- 根据内存系统结构的变化调整了机器人配置模板。
This commit is contained in:
Windpicker-owo
2025-11-06 08:47:18 +08:00
parent 7bb0248ca2
commit b6a693895b
13 changed files with 691 additions and 118 deletions

View File

@@ -19,15 +19,47 @@ class CreateMemoryTool(BaseTool):
"""创建记忆工具"""
name = "create_memory"
description = "创建一个新的记忆。记忆由主体、类型、主题、客体(可选)和属性组成。用于记录重要的信息、事件、想法等"
description = """记录对话中有价值的信息,构建长期记忆
## 应该记录的内容类型:
### 高优先级记录importance 0.7-1.0
- 个人核心信息:姓名、年龄、职业、学历、联系方式
- 重要关系:家人、亲密朋友、恋人关系
- 核心目标:人生规划、职业目标、重要决定
- 关键事件:毕业、入职、搬家、重要成就
### 中等优先级importance 0.5-0.7
- 生活状态:工作内容、学习情况、日常习惯
- 兴趣偏好:喜欢/不喜欢的事物、消费偏好
- 观点态度:价值观、对事物的看法
- 技能知识:掌握的技能、专业领域
- 一般事件:日常活动、例行任务
### 低优先级importance 0.3-0.5
- 临时状态:今天心情、当前活动
- 一般评价:对产品/服务的简单评价
- 琐碎事件:买东西、看电影等常规活动
### ❌ 不应记录
- 单纯招呼语:"你好""再见""谢谢"
- 无意义语气词:"""""好的"
- 纯粹回复确认:没有信息量的回应
## 记忆拆分原则
一句话多个信息点 → 多次调用创建多条记忆
示例:"我最近在学Python想找数据分析的工作"
→ 调用1{{subject:"[从历史提取真实名字]", memory_type:"事实", topic:"学习", object:"Python", attributes:{{时间:"最近", 状态:"进行中"}}, importance:0.7}}
→ 调用2{{subject:"[从历史提取真实名字]", memory_type:"目标", topic:"求职", object:"数据分析岗位", attributes:{{状态:"计划中"}}, importance:0.8}}"""
parameters: ClassVar[list[tuple[str, ToolParamType, str, bool, list[str] | None]]] = [
("subject", ToolParamType.STRING, "记忆主体,通常是'''用户'或具体的人名", True, None),
("memory_type", ToolParamType.STRING, "记忆类型", True, ["事件", "事实", "关系", "观点"]),
("topic", ToolParamType.STRING, "记忆的主题,即发生的事情或状态", True, None),
("object", ToolParamType.STRING, "记忆的客体,即主题作用的对象(可选)", False, None),
("attributes", ToolParamType.STRING, "记忆的属性JSON格式字符串),如 {\"时间\":\"今天\",\"地点\":\"家里\"}", False, None),
("importance", ToolParamType.FLOAT, "记忆的重要性0.0-1.0),默认0.5", False, None),
("subject", ToolParamType.STRING, "记忆主体(重要!)。从对话历史中提取真实发送人名字。示例:如果看到'Prou(12345678): 我喜欢...'subject应填'Prou';如果看到'张三: 我在...'subject应填'张三'。❌禁止使用'用户'这种泛指,必须用具体名字!", True, None),
("memory_type", ToolParamType.STRING, "记忆类型。【事件】=有明确时间点的动作(昨天吃饭、明天开会)【事实】=稳定状态(职业是程序员、住在北京)【观点】=主观看法(喜欢/讨厌/认为)【关系】=人际关系(朋友、同事)", True, ["事件", "事实", "关系", "观点"]),
("topic", ToolParamType.STRING, "记忆的核心内容(做什么/是什么状态/什么关系)。必须明确、具体,包含关键动词或状态", True, None),
("object", ToolParamType.STRING, "记忆涉及的对象或目标。如果topic已经很完整可以不填如果有明确对象建议填写", False, None),
("attributes", ToolParamType.STRING, "详细属性JSON格式字符串。强烈建议包含:时间(具体到日期)、地点、状态、原因等上下文信息。例:{\"时间\":\"2025-11-06\",\"地点\":\"公司\",\"状态\":\"进行中\",\"原因\":\"项目需要\"}", False, None),
("importance", ToolParamType.FLOAT, "重要性评分 0.0-1.0。参考日常琐事0.3-0.4一般对话0.5-0.6重要信息0.7-0.8核心记忆0.9-1.0。不确定时用0.5", False, None),
]
available_for_llm = True