diff --git a/src/memory_graph/tools/memory_tools.py b/src/memory_graph/tools/memory_tools.py index f329b6575..f18b951c1 100644 --- a/src/memory_graph/tools/memory_tools.py +++ b/src/memory_graph/tools/memory_tools.py @@ -966,19 +966,28 @@ class MemoryTools: ## 第二步:生成多角度查询 +### ⚠️ 核心原则:精简查询,只保留核心查询内容 + +**重要**:生成的查询必须尽可能精简,去除冗余信息,只保留核心查询对象。 + +- ✅ 正确示例:"小王询问小明小刚是谁" → 查询"小刚" 或 "小刚是谁"(只查询被问的对象,忽略询问者小王和被询问者小明) +- ❌ 错误示例:"小王询问小明小刚是谁" → 查询"小王询问小明小刚是谁"(包含了无关的询问者信息) +- ✅ 正确示例:"告诉我张三的配置" → 查询"张三配置"(去除"告诉我"等冗余) +- ❌ 错误示例:"告诉我张三的配置" → 查询"告诉我张三的配置"(保留了无关的动作词) + ### 分析原则 -1. **上下文理解**:根据聊天历史理解查询的真实意图 +1. **核心提取优先**:识别查询的核心对象(被查询的实体/概念),忽略询问者、动作词等修饰成分 2. **指代消解**:识别并代换"他"、"她"、"它"、"那个"等指代词为具体实体名 -3. **话题关联**:结合最近讨论的话题生成更精准的查询 -4. **查询分解**:对复杂查询分解为多个子查询 -5. **实体提取**:显式提取查询中的关键实体(人名、项目名、组织名等) +3. **上下文理解**:根据聊天历史理解查询的真实意图 +4. **去除冗余**:删除"告诉我"、"我想知道"、"请问"、"谁问"等无关动作词和修饰词 +5. **实体聚焦**:对于复合查询,只保留被查询的核心实体(不包括询问者) ### 生成策略(按顺序) -1. **完整查询**(权重1.0):结合上下文的完整查询,包含指代消解后的实体名 -2. **关键实体查询**(权重0.9):只包含核心实体,去除修饰词(如"xxx的"→"xxx") -3. **同义表达查询**(权重0.8):用不同表达方式重述查询意图 -4. **话题扩展查询**(权重0.7):基于最近聊天话题的相关查询 -5. **时间范围查询**(权重0.6,如适用):如果涉及时间,生成具体时间范围 +1. **核心查询**(权重1.0):只包含被查询的核心实体/概念,已去除所有冗余信息 +2. **关键实体查询**(权重0.9):核心实体的简化形式(如"小刚是谁"→"小刚") +3. **同义表达查询**(权重0.8):用不同表达方式重述核心查询意图 +4. **话题扩展查询**(权重0.7):基于最近聊天话题的相关查询(可选) +5. **时间范围查询**(权重0.6,如适用):如果涉及时间,生成具体时间范围(可选) --- @@ -988,22 +997,23 @@ class MemoryTools: {{ "prefer_node_types": ["REFERENCE", "ATTRIBUTE"], "queries": [ - {{"text": "完整查询(已消解指代)", "weight": 1.0}}, - {{"text": "核心实体查询", "weight": 0.9}}, - {{"text": "同义表达查询", "weight": 0.8}} + {{"text": "核心查询(已精简,去除冗余)", "weight": 1.0}}, + {{"text": "核心实体", "weight": 0.9}}, + {{"text": "同义表达", "weight": 0.8}} ] }} ``` **字段说明**: - `prefer_node_types`: 偏好的节点类型数组,可选值:`REFERENCE`、`ATTRIBUTE`、`ENTITY`、`RELATION`、`EVENT`,如无明确特征则为空数组`[]` -- `queries`: 查询数组,每个查询包含`text`(查询文本)和`weight`(权重0.5-1.0) +- `queries`: 查询数组,每个查询包含`text`(查询文本,必须精简)和`weight`(权重0.5-1.0) +- **重要**:`text`字段必须只包含核心查询对象,不得包含询问者、动作词等冗余信息 --- ## 示例 -### 示例1:查询文档地址 +### 示例1:查询文档地址(精简查询) **输入**: - 查询:"你知道MoFox-Bot的文档地址吗?" - 聊天历史:无 @@ -1014,32 +1024,33 @@ class MemoryTools: "prefer_node_types": ["REFERENCE"], "queries": [ {{"text": "MoFox-Bot文档地址", "weight": 1.0}}, - {{"text": "MoFox-Bot", "weight": 0.9}}, - {{"text": "MoFox-Bot官方文档URL", "weight": 0.8}} + {{"text": "MoFox-Bot文档", "weight": 0.9}}, + {{"text": "MoFox-Bot官方文档", "weight": 0.8}} ] }} ``` -### 示例2:查询人物关系 +### 示例2:查询人物(精简查询,去除询问者) **输入**: -- 查询:"拾风是谁?" -- 聊天历史:提到过"拾风和杰瑞喵" +- 查询:"小王问小明小刚是谁?" +- 聊天历史:无 **输出**: ```json {{ - "prefer_node_types": ["ENTITY", "RELATION"], + "prefer_node_types": ["ENTITY"], "queries": [ - {{"text": "拾风身份信息", "weight": 1.0}}, - {{"text": "拾风", "weight": 0.9}}, - {{"text": "拾风和杰瑞喵的关系", "weight": 0.8}} + {{"text": "小刚是谁", "weight": 1.0}}, + {{"text": "小刚", "weight": 0.9}}, + {{"text": "小刚身份", "weight": 0.8}} ] }} ``` +**注意**:只查询核心对象"小刚",去除了询问者"小王"和被询问者"小明"。 -### 示例3:查询配置参数 +### 示例3:查询配置参数(去除动作词) **输入**: -- 查询:"Python版本是多少?" +- 查询:"告诉我Python版本是多少?" - 聊天历史:讨论过"项目环境配置" **输出**: @@ -1047,14 +1058,15 @@ class MemoryTools: {{ "prefer_node_types": ["ATTRIBUTE"], "queries": [ - {{"text": "Python版本号", "weight": 1.0}}, - {{"text": "Python配置", "weight": 0.9}}, - {{"text": "项目Python环境版本", "weight": 0.8}} + {{"text": "Python版本", "weight": 1.0}}, + {{"text": "Python", "weight": 0.9}}, + {{"text": "项目Python版本", "weight": 0.8}} ] }} ``` +**注意**:去除了"告诉我"这类无关动作词,只保留核心查询对象。 -### 示例4:回忆对话(无明确类型) +### 示例4:回忆对话(结合上下文精简) **输入**: - 查询:"我们上次聊了什么?" - 聊天历史:最近讨论"记忆系统优化" @@ -1064,12 +1076,13 @@ class MemoryTools: {{ "prefer_node_types": ["EVENT"], "queries": [ - {{"text": "最近对话内容", "weight": 1.0}}, - {{"text": "记忆系统优化讨论", "weight": 0.9}}, - {{"text": "上次聊天记录", "weight": 0.8}} + {{"text": "最近对话", "weight": 1.0}}, + {{"text": "记忆系统优化", "weight": 0.9}}, + {{"text": "上次聊天", "weight": 0.8}} ] }} ``` +**注意**:查询已精简,结合上下文聚焦到核心话题。 ---