feat: 重构聊天系统的内存处理与格式化功能
- 更新了DefaultReplyer,采用新的内存格式化工具以提供更优质的内存描述。 - 已移除 Config 类中已弃用的内存配置。 - 在主系统中增强内存系统初始化检查,确保配置正确。 - 优化了MemoryManager,使其可直接使用全局配置进行内存设置。 - 新增了一个内存格式化工具,用于将内存对象转换为自然语言描述。 - 更新了内存工具,提供了更清晰的内存创建与管理指南。 - 精炼插件工具与使用提示,提升用户交互体验与记忆准确性。 - 根据内存系统结构的变化调整了机器人配置模板。
This commit is contained in:
@@ -73,83 +73,92 @@ class MemoryTools:
|
||||
"""
|
||||
return {
|
||||
"name": "create_memory",
|
||||
"description": """创建一个新的记忆节点。
|
||||
"description": """创建一个新的记忆节点,记录对话中有价值的信息。
|
||||
|
||||
⚠️ 记忆创建原则(必须遵守):
|
||||
1. **价值判断**:只创建具有长期价值的关键信息,避免记录日常闲聊、礼貌用语、重复信息
|
||||
2. **细粒度原则**:每条记忆只包含一个明确的事实/事件/观点,避免泛化
|
||||
3. **原子性**:如果一句话包含多个重要信息点,拆分成多条独立记忆
|
||||
4. **具体性**:记录具体的人、事、物、时间、地点,避免模糊描述
|
||||
🎯 **核心原则**:主动记录、积极构建、丰富细节
|
||||
|
||||
❌ 不应创建记忆的情况:
|
||||
- 普通问候、感谢、确认等礼貌性对话
|
||||
- 已存在的重复信息
|
||||
- 临时性、一次性的琐碎信息
|
||||
- 纯粹的功能操作指令(如"帮我查一下")
|
||||
- 缺乏上下文的碎片化信息
|
||||
✅ **优先创建记忆的场景**(鼓励记录):
|
||||
1. **个人信息**:姓名、昵称、年龄、职业、身份、所在地、联系方式等
|
||||
2. **兴趣爱好**:喜欢/不喜欢的事物、娱乐偏好、运动爱好、饮食口味等
|
||||
3. **生活状态**:工作学习状态、生活习惯、作息时间、日常安排等
|
||||
4. **经历事件**:正在做的事、完成的任务、参与的活动、遇到的问题等
|
||||
5. **观点态度**:对事物的看法、价值观、情绪表达、评价意见等
|
||||
6. **计划目标**:未来打算、学习计划、工作目标、待办事项等
|
||||
7. **人际关系**:提到的朋友、家人、同事、认识的人等
|
||||
8. **技能知识**:掌握的技能、学习的知识、专业领域、使用的工具等
|
||||
9. **物品资源**:拥有的物品、使用的设备、喜欢的品牌等
|
||||
10. **时间地点**:重要时间节点、常去的地点、活动场所等
|
||||
|
||||
✅ 应该创建记忆的情况:
|
||||
- 用户的个人信息(姓名、职业、兴趣、联系方式等)
|
||||
- 重要事件(项目进展、重大决定、关键行动等)
|
||||
- 长期偏好/观点(喜好、价值观、习惯等)
|
||||
- 人际关系变化(新朋友、合作关系等)
|
||||
- 具体计划/目标(明确的待办事项、长期目标等)
|
||||
⚠️ **暂不创建的情况**(仅限以下):
|
||||
- 纯粹的招呼语(单纯的"你好"、"再见")
|
||||
- 完全无意义的语气词(单纯的"哦"、"嗯")
|
||||
- 明确的系统指令(如"切换模式"、"重启")
|
||||
|
||||
📝 拆分示例:
|
||||
- ❌ "用户喜欢编程,最近在学Python和机器学习" → 过于泛化
|
||||
- ✅ 拆分为3条:
|
||||
1. "用户喜欢编程"(观点)
|
||||
2. "用户正在学习Python"(事件)
|
||||
3. "用户正在学习机器学习"(事件)
|
||||
<EFBFBD> **记忆拆分建议**:
|
||||
- 一句话包含多个信息点 → 拆成多条记忆(更利于后续检索)
|
||||
- 例如:"我最近在学Python和机器学习,想找工作"
|
||||
→ 拆成3条:
|
||||
1. "用户正在学习Python"(事件)
|
||||
2. "用户正在学习机器学习"(事件)
|
||||
3. "用户想找工作"(事件/目标)
|
||||
|
||||
记忆结构:主体 + 类型 + 主题 + 客体(可选)+ 属性""",
|
||||
📌 **记忆质量建议**:
|
||||
- 记录时尽量补充时间("今天"、"最近"、"昨天"等)
|
||||
- 包含具体细节(越具体越好)
|
||||
- 主体明确(优先使用"用户"或具体人名,避免"我")
|
||||
|
||||
记忆结构:主体 + 类型 + 主题 + 客体(可选)+ 属性(越详细越好)""",
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"subject": {
|
||||
"type": "string",
|
||||
"description": "记忆的主体,通常是'用户'或具体的人名(避免使用'我')",
|
||||
"description": "记忆的主体(谁的信息):\n- 对话中的用户统一使用'用户'\n- 提到的具体人物使用其名字(如'小明'、'张三')\n- 避免使用'我'、'他'等代词",
|
||||
},
|
||||
"memory_type": {
|
||||
"type": "string",
|
||||
"enum": ["事件", "事实", "关系", "观点"],
|
||||
"description": "记忆类型:\n- 事件:时间绑定的具体动作(如'完成项目'、'学习课程')\n- 事实:稳定的客观状态(如'职业是工程师'、'住在北京')\n- 关系:人际关系(如'认识了朋友'、'同事关系')\n- 观点:主观评价/偏好(如'喜欢Python'、'认为AI很重要')",
|
||||
"description": "选择最合适的记忆类型:\n\n【事件】时间相关的动作或发生的事(用'正在'、'完成了'、'参加'等动词)\n 例:正在学习Python、完成了项目、参加会议、去旅行\n\n【事实】相对稳定的客观信息(用'是'、'有'、'在'等描述状态)\n 例:职业是工程师、住在北京、有一只猫、会说英语\n\n【观点】主观看法、喜好、态度(用'喜欢'、'认为'、'觉得'等)\n 例:喜欢Python、认为AI很重要、觉得累、讨厌加班\n\n【关系】人与人之间的关系\n 例:认识了朋友、是同事、家人关系",
|
||||
},
|
||||
"topic": {
|
||||
"type": "string",
|
||||
"description": "记忆的核心主题,必须具体且明确(如'学习PyTorch框架'而非'学习编程')",
|
||||
"description": "记忆的核心内容(做什么/是什么/关于什么):\n- 尽量具体明确('学习Python编程' 优于 '学习')\n- 包含关键动词或核心概念\n- 可以包含时间状态('正在学习'、'已完成'、'计划做')",
|
||||
},
|
||||
"object": {
|
||||
"type": "string",
|
||||
"description": "记忆的客体/对象,作为主题的补充说明(如主题是'学习',客体可以是'PyTorch框架')",
|
||||
"description": "可选:记忆涉及的对象或目标:\n- 事件的对象(学习的是什么、购买的是什么)\n- 观点的对象(喜欢的是什么、讨厌的是什么)\n- 可以留空(如果topic已经足够完整)",
|
||||
},
|
||||
"attributes": {
|
||||
"type": "object",
|
||||
"description": "记忆的具体属性(尽量填写以增加记忆的信息密度)",
|
||||
"description": "记忆的详细属性(建议尽量填写,越详细越好):",
|
||||
"properties": {
|
||||
"时间": {
|
||||
"type": "string",
|
||||
"description": "具体时间表达式,如'2025-11-05'、'今天下午'、'最近一周'、'3天前'",
|
||||
"description": "时间信息(强烈建议填写):\n- 具体日期:'2025-11-05'、'2025年11月'\n- 相对时间:'今天'、'昨天'、'上周'、'最近'、'3天前'\n- 时间段:'今天下午'、'上个月'、'这学期'",
|
||||
},
|
||||
"地点": {
|
||||
"type": "string",
|
||||
"description": "具体地点(如果相关)"
|
||||
"description": "地点信息(如涉及):\n- 具体地址、城市名、国家\n- 场所类型:'在家'、'公司'、'学校'、'咖啡店'"
|
||||
},
|
||||
"原因": {
|
||||
"type": "string",
|
||||
"description": "事件发生的原因或动机(如果明确)"
|
||||
"description": "为什么这样做/这样想(如明确提到)"
|
||||
},
|
||||
"方式": {
|
||||
"type": "string",
|
||||
"description": "完成的方式或途径(如果相关)"
|
||||
"description": "怎么做的/通过什么方式(如明确提到)"
|
||||
},
|
||||
"结果": {
|
||||
"type": "string",
|
||||
"description": "事件的结果或影响(如果已知)"
|
||||
"description": "结果如何/产生什么影响(如明确提到)"
|
||||
},
|
||||
"状态": {
|
||||
"type": "string",
|
||||
"description": "当前状态(如'进行中'、'已完成'、'计划中')"
|
||||
"description": "当前进展:'进行中'、'已完成'、'计划中'、'暂停'等"
|
||||
},
|
||||
"程度": {
|
||||
"type": "string",
|
||||
"description": "程度描述(如'非常'、'比较'、'有点'、'不太')"
|
||||
},
|
||||
},
|
||||
"additionalProperties": True,
|
||||
@@ -158,7 +167,7 @@ class MemoryTools:
|
||||
"type": "number",
|
||||
"minimum": 0.0,
|
||||
"maximum": 1.0,
|
||||
"description": "记忆的重要性评分(0.0-1.0):\n- 0.3-0.4: 次要信息\n- 0.5-0.6: 一般信息\n- 0.7-0.8: 重要信息(用户明确表达的偏好、重要事件)\n- 0.9-1.0: 关键信息(核心个人信息、重大决定、强烈偏好)\n默认0.5",
|
||||
"description": "重要性评分(默认0.5,日常对话建议0.5-0.7):\n\n0.3-0.4: 次要细节(偶然提及的琐事)\n0.5-0.6: 日常信息(一般性的分享、普通爱好)← 推荐默认值\n0.7-0.8: 重要信息(明确的偏好、重要计划、核心爱好)\n0.9-1.0: 关键信息(身份信息、重大决定、强烈情感)\n\n💡 建议:日常对话中大部分记忆使用0.5-0.6,除非用户特别强调",
|
||||
},
|
||||
},
|
||||
"required": ["subject", "memory_type", "topic"],
|
||||
|
||||
Reference in New Issue
Block a user