feat(memory_tools): 优化多角度查询生成策略,精简查询内容,去除冗余信息

This commit is contained in:
Windpicker-owo
2025-11-12 00:39:24 +08:00
parent 1fc8d5091c
commit e12114c797

View File

@@ -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}}
]
}}
```
**注意**:查询已精简,结合上下文聚焦到核心话题。
---