feat(memory): 添加自动关联功能及相关配置支持

This commit is contained in:
Windpicker-owo
2025-11-05 22:15:47 +08:00
parent c5c70d3cf7
commit ae60eae6dc
5 changed files with 561 additions and 28 deletions

View File

@@ -73,38 +73,84 @@ class MemoryTools:
"""
return {
"name": "create_memory",
"description": "创建一个新的记忆。记忆由主体、类型、主题、客体(可选)和属性组成。",
"description": """创建一个新的记忆节点。
⚠️ 记忆创建原则(必须遵守):
1. **价值判断**:只创建具有长期价值的关键信息,避免记录日常闲聊、礼貌用语、重复信息
2. **细粒度原则**:每条记忆只包含一个明确的事实/事件/观点,避免泛化
3. **原子性**:如果一句话包含多个重要信息点,拆分成多条独立记忆
4. **具体性**:记录具体的人、事、物、时间、地点,避免模糊描述
❌ 不应创建记忆的情况:
- 普通问候、感谢、确认等礼貌性对话
- 已存在的重复信息
- 临时性、一次性的琐碎信息
- 纯粹的功能操作指令(如"帮我查一下"
- 缺乏上下文的碎片化信息
✅ 应该创建记忆的情况:
- 用户的个人信息(姓名、职业、兴趣、联系方式等)
- 重要事件(项目进展、重大决定、关键行动等)
- 长期偏好/观点(喜好、价值观、习惯等)
- 人际关系变化(新朋友、合作关系等)
- 具体计划/目标(明确的待办事项、长期目标等)
📝 拆分示例:
- ❌ "用户喜欢编程最近在学Python和机器学习" → 过于泛化
- ✅ 拆分为3条
1. "用户喜欢编程"(观点)
2. "用户正在学习Python"(事件)
3. "用户正在学习机器学习"(事件)
记忆结构:主体 + 类型 + 主题 + 客体(可选)+ 属性""",
"parameters": {
"type": "object",
"properties": {
"subject": {
"type": "string",
"description": "记忆的主体,通常是'''用户'或具体的人名",
"description": "记忆的主体,通常是'用户'或具体的人名(避免使用''",
},
"memory_type": {
"type": "string",
"enum": ["事件", "事实", "关系", "观点"],
"description": "记忆类型:事件时间绑定的动作)、事实稳定状态)、关系人际关系)、观点主观评价)",
"description": "记忆类型:\n- 事件时间绑定的具体动作(如'完成项目''学习课程'\n- 事实稳定的客观状态(如'职业是工程师''住在北京'\n- 关系人际关系(如'认识了朋友''同事关系'\n- 观点主观评价/偏好(如'喜欢Python''认为AI很重要'",
},
"topic": {
"type": "string",
"description": "记忆的主题,即发生的事情或状态",
"description": "记忆的核心主题,必须具体且明确(如'学习PyTorch框架'而非'学习编程'",
},
"object": {
"type": "string",
"description": "记忆的客体,即主题作用的对象(可选",
"description": "记忆的客体/对象,作为主题的补充说明(如主题是'学习',客体可以是'PyTorch框架'",
},
"attributes": {
"type": "object",
"description": "记忆的属性,如时间、地点、原因、方式等",
"description": "记忆的具体属性(尽量填写以增加记忆的信息密度)",
"properties": {
"时间": {
"type": "string",
"description": "时间表达式,如'今天''昨天''3天前''2025-11-05'",
"description": "具体时间表达式,如'2025-11-05''今天下午''最近一周''3天前'",
},
"地点": {
"type": "string",
"description": "具体地点(如果相关)"
},
"原因": {
"type": "string",
"description": "事件发生的原因或动机(如果明确)"
},
"方式": {
"type": "string",
"description": "完成的方式或途径(如果相关)"
},
"结果": {
"type": "string",
"description": "事件的结果或影响(如果已知)"
},
"状态": {
"type": "string",
"description": "当前状态(如'进行中''已完成''计划中'"
},
"地点": {"type": "string", "description": "地点"},
"原因": {"type": "string", "description": "原因"},
"方式": {"type": "string", "description": "方式"},
},
"additionalProperties": True,
},
@@ -112,7 +158,7 @@ class MemoryTools:
"type": "number",
"minimum": 0.0,
"maximum": 1.0,
"description": "记忆的重要性0-1之间的浮点数默认0.5",
"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",
},
},
"required": ["subject", "memory_type", "topic"],
@@ -129,27 +175,42 @@ class MemoryTools:
"""
return {
"name": "link_memories",
"description": "关联两个已存在的记忆,建立因果或引用关系。",
"description": """手动关联两个已存在的记忆
⚠️ 使用建议:
- 系统会自动发现记忆间的关联关系,通常不需要手动调用此工具
- 仅在以下情况使用:
1. 用户明确指出两个记忆之间的关系
2. 发现明显的因果关系但系统未自动关联
3. 需要建立特殊的引用关系
关系类型说明:
- 导致A事件/行为导致B事件/结果(因果关系)
- 引用A记忆引用/基于B记忆知识关联
- 相似A和B描述相似的内容主题相似
- 相反A和B表达相反的观点对比关系
- 关联A和B存在一般性关联其他关系""",
"parameters": {
"type": "object",
"properties": {
"source_memory_description": {
"type": "string",
"description": "源记忆的描述用于查找对应的记忆",
"description": "源记忆的关键描述用于搜索定位,需要足够具体)",
},
"target_memory_description": {
"type": "string",
"description": "目标记忆的描述用于查找对应的记忆",
"description": "目标记忆的关键描述用于搜索定位,需要足够具体)",
},
"relation_type": {
"type": "string",
"description": "关系类型,如'导致''''因为''所以''引用''基于'",
"enum": ["导致", "", "相似", "相反", "关联"],
"description": "关系类型从上述5种类型中选择最合适的",
},
"importance": {
"type": "number",
"minimum": 0.0,
"maximum": 1.0,
"description": "关系的重要性0-1之间的浮点数默认0.6",
"description": "关系的重要性0.0-1.0\n- 0.5-0.6: 一般关联\n- 0.7-0.8: 重要关联\n- 0.9-1.0: 关键关联\n默认0.6",
},
},
"required": [
@@ -170,13 +231,25 @@ class MemoryTools:
"""
return {
"name": "search_memories",
"description": "搜索相关的记忆。支持语义搜索、图遍历和时间过滤。",
"description": """搜索相关的记忆,用于回忆和查找历史信息。
使用场景:
- 用户询问之前的对话内容
- 需要回忆用户的个人信息、偏好、经历
- 查找相关的历史事件或观点
- 基于上下文补充信息
搜索特性:
- 语义搜索:基于内容相似度匹配
- 图遍历:自动扩展相关联的记忆
- 时间过滤:按时间范围筛选
- 类型过滤:按记忆类型筛选""",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "搜索查询,描述要查找的记忆内容",
"description": "搜索查询(用自然语言描述要查找的内容,如'用户的职业''最近的项目''Python相关的记忆'",
},
"memory_types": {
"type": "array",
@@ -184,33 +257,33 @@ class MemoryTools:
"type": "string",
"enum": ["事件", "事实", "关系", "观点"],
},
"description": "要搜索的记忆类型,可多选",
"description": "记忆类型过滤(可选,留空表示搜索所有类型)",
},
"time_range": {
"type": "object",
"properties": {
"start": {
"type": "string",
"description": "开始时间'3天前''2025-11-01'",
"description": "开始时间'3天前''上周''2025-11-01'",
},
"end": {
"type": "string",
"description": "结束时间'今天''2025-11-05'",
"description": "结束时间'今天''现在''2025-11-05'",
},
},
"description": "时间范围过滤(可选)",
"description": "时间范围(可选,用于查找特定时间段的记忆",
},
"top_k": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "返回结果数量默认10",
"description": "返回结果数量1-50默认10。根据需求调整\n- 快速查找3-5条\n- 一般搜索10条\n- 全面了解20-30条",
},
"expand_depth": {
"type": "integer",
"minimum": 0,
"maximum": 3,
"description": "遍历扩展深度0表示不扩展默认1",
"description": "图扩展深度0-3默认1\n- 0: 仅返回直接匹配的记忆\n- 1: 包含一度相关的记忆(推荐)\n- 2-3: 包含更多间接相关的记忆(用于深度探索)",
},
},
"required": ["query"],