# mem1 0.0.4 记忆效果评测报告

**测试时间**: 2026-01-05 15:15 - 15:23  
**mem1 版本**: 0.0.4  
**测试脚本**: test_memory_evaluation.py  
**ES 索引**: mem1_test1

## 测试结果总览

| 指标 | 数值 |
|------|------|
| 总测试场景 | 10 |
| 平均得分 | **1.50/5** |
| 最高分 | 3/5 |
| 最低分 | 1/5 |

### 得分分布

| 分数 | 数量 | 占比 |
|------|------|------|
| 5分 | 0 | 0% |
| 4分 | 0 | 0% |
| 3分 | 2 | 20% |
| 2分 | 1 | 10% |
| 1分 | 7 | **70%** |

## 核心问题诊断

### 问题1：LLM 幻觉/编造（最严重）

**现象**：AI 回答中包含大量用户从未提供的信息，完全编造了事件细节。

**典型案例 - 场景1 天价麻花**：

| 用户实际输入 | AI 编造的内容 |
|-------------|--------------|
| 广东江门景区 | 某景区（未提地点） |
| 60元一根 | 15元一根，150元一袋 |
| 不构成价格欺诈 | 违反价格法，处以罚款 |
| 服务态度问题 | 标价不规范 |

**根因分析**：
- 用户画像中只记录了"天价麻花事件"这个标签，没有保留具体细节
- LLM 在回答时根据"天价麻花"关键词自行脑补了一个完整故事
- `get_context` 返回的画像信息不足以支撑准确回答

---

### 问题2：数字数据完全丢失

**现象**：所有涉及具体数字的场景得分都是1分。

**典型案例 - 场景4 月度数据统计**：

| 用户输入的数据 | AI 回答的数据 |
|---------------|--------------|
| 舆情97起 | 47起 |
| 重大11起 | 6起 |
| 第二周31起最忙 | 第二周15起 |
| 投诉83件 | 未提及 |

**典型案例 - 场景9 清朗行动**：

| 用户输入的数据 | AI 回答的数据 |
|---------------|--------------|
| 17家平台 | 12家 |
| 457个问题账号 | 347个 |
| 处置365个 | 未正确汇总 |
| 永久封禁23个 | 89个（错误） |

**根因分析**：
- 用户画像模板没有专门的"关键数字"字段
- 数字信息被淹没在时间线描述中，LLM 无法准确提取
- 多次累加的数据没有被正确汇总

---

### 问题3：人名/机构名丢失

**现象**：具体的人名、公司名、账号名等实体信息大量丢失。

**典型案例 - 场景5 自来水谣言**：

| 关键实体 | 是否记住 |
|---------|---------|
| @本地爆料王 | ❌ 变成了"XX快讯" |
| 5000+转发 | ❌ 丢失 |
| 水务局 | ❌ 变成"水务集团" |
| 禁言7天 | ❌ 丢失 |
| 辟谣12万阅读 | ❌ 丢失 |

**典型案例 - 场景10 协调会**：

| 关键人物 | 是否记住 |
|---------|---------|
| 张队长（公安） | ❌ 只记住了单位 |
| 李处长（市场监管） | ❌ 只记住了单位 |
| 王科长（教育局） | ❌ 只记住了单位 |

**根因分析**：
- 用户画像更新时，LLM 倾向于提取"概念"而非"具体实体"
- 人名、账号名等被认为是"细节"而被省略

---

### 问题4：任务状态追踪不准确

**现象**：待办事项的状态更新不准确，进度信息丢失。

**典型案例 - 场景3 张女士投诉**：

| 实际进度 | AI 记忆 |
|---------|--------|
| 原投诉3000元 | ❌ 变成5000元 |
| 已退2000元 | ❌ 丢失 |
| 剩余1000元待核实 | ❌ 丢失 |

**根因分析**：
- 待办事项只记录了"跟进"，没有记录具体进度
- 状态更新没有覆盖旧状态

---

## 用户画像分析

### 画像实际捕获的内容

用户画像成功记录了以下信息：

| 类别 | 捕获情况 | 示例 |
|------|---------|------|
| 基本身份 | ✅ 完整 | 李明/李科，市网信办舆情监测科 |
| 沟通偏好 | ✅ 完整 | 500字以内、表格形式、简洁高效 |
| 周期任务 | ✅ 完整 | 周一周报、周五计划 |
| 事件标签 | ✅ 有记录 | 天价麻花、自来水谣言、教育乱收费等 |
| 待办事项 | ⚠️ 部分 | 记录了事项存在，但缺少具体数值 |
| 反馈记录 | ⚠️ 部分 | 记录了正负反馈，但细节不足 |

### 画像丢失的关键信息

| 类别 | 丢失内容 | 影响 |
|------|---------|------|
| 具体数字 | 舆情97起、重大11起、3980元、5000转发等 | 无法准确回答数据统计问题 |
| 人名实体 | 张队长、李处长、王科长、@本地爆料王 | 无法回答"谁参加了会议" |
| 事件细节 | 广东江门、60元、禁言7天、已退150人 | 事件回顾时只能给出模糊描述 |
| 进度状态 | 已退2000元/剩余1000元 | 无法准确追踪任务进度 |

### 画像模板问题

当前 ProfileTemplate 的结构：

```
## 基本信息
## 偏好习惯
## 任务时间线
## 待办事项
## 待澄清事项
## 用户反馈
## 注意事项
```

**问题**：
1. 没有"关键数字"或"重要数据"字段
2. 没有"关键人物"或"联系人"字段
3. "任务时间线"只记录事件名称，不记录具体数值
4. 待办事项格式过于简单，无法承载复杂状态

---

## 可复现测试数据

### 最小复现场景：数字记忆测试

```python
# 测试数字记忆能力
conversations = [
    {"user": "第一周处理舆情23起，重大2起", "assistant": "已记录"},
    {"user": "第二周处理舆情31起，重大5起", "assistant": "已记录"},
    {"user": "第三周处理舆情18起，重大1起", "assistant": "已记录"},
    {"user": "第四周处理舆情25起，重大3起", "assistant": "已记录"},
]

# 测试问题
question = "这个月舆情总数多少？重大舆情多少起？"

# 期望答案
expected = "舆情97起（23+31+18+25），重大11起（2+5+1+3）"

# 实际结果：AI 回答 47起、6起（完全错误）
```

### 最小复现场景：人名记忆测试

```python
# 测试人名记忆能力
conversations = [
    {"user": "参会人员：公安网安支队张队长、市场监管局李处长、教育局王科长", "assistant": "已记录"},
]

# 测试问题
question = "协调会都有谁参加？"

# 期望答案
expected = "张队长（公安）、李处长（市场监管）、王科长（教育局）"

# 实际结果：AI 只回答了单位名称，人名全部丢失
```

### 最小复现场景：事件细节测试

```python
# 测试事件细节记忆
conversations = [
    {"user": "广东江门景区麻花60元一根，游客投诉", "assistant": "已记录"},
    {"user": "市场监管局调查结论：不构成价格欺诈，但有服务态度问题", "assistant": "已记录"},
]

# 测试问题
question = "天价麻花事件的地点、价格和结论是什么？"

# 期望答案
expected = "广东江门，60元，不构成价格欺诈但有服务态度问题"

# 实际结果：AI 编造了完全不同的故事（15元/根、违反价格法、处以罚款）
```

---

## 改进建议

### 建议1：扩展 ProfileTemplate 结构

```markdown
## 关键数据
（用户提到的重要数字，格式：[类别] 数值 - 来源）
- [舆情统计] 本月97起（第一周23+第二周31+第三周18+第四周25）
- [投诉统计] 本月83件（第三周45+第四周38）
- [清朗行动] 问题账号457个，已处置365个

## 关键人物
（用户提到的人名和角色）
- 张队长 - 公安局网安支队
- 李处长 - 市场监管局
- 王科长 - 教育局
- 张女士 - 投诉人（手机尾号8856）

## 事件档案
（重要事件的结构化记录）
### 天价麻花事件
- 地点：广东江门
- 价格：60元/根
- 结论：不构成价格欺诈，存在服务态度问题
- 状态：已结案
```

### 建议2：改进 LLM 提取 Prompt

当前问题：LLM 在更新画像时倾向于"概括"而非"保留细节"。

建议修改画像更新 Prompt：

```
重要规则：
1. 必须保留所有具体数字（金额、数量、百分比等）
2. 必须保留所有人名、公司名、账号名
3. 必须保留所有地点信息
4. 对于累加数据，需要计算并记录总数
5. 不要用"某"、"相关"等模糊词替代具体信息
```

### 建议3：增加数据校验机制

在 `update_profile` 时增加校验：

```python
def validate_profile_update(old_profile, new_profile, recent_conversations):
    """检查画像更新是否丢失关键信息"""
    
    # 提取对话中的数字
    numbers_in_conv = extract_numbers(recent_conversations)
    numbers_in_profile = extract_numbers(new_profile)
    
    # 检查数字是否被保留
    for num in numbers_in_conv:
        if num not in numbers_in_profile:
            logging.warning(f"数字 {num} 可能丢失")
    
    # 提取对话中的人名
    names_in_conv = extract_names(recent_conversations)
    names_in_profile = extract_names(new_profile)
    
    # 检查人名是否被保留
    for name in names_in_conv:
        if name not in names_in_profile:
            logging.warning(f"人名 {name} 可能丢失")
```

### 建议4：分层存储策略

| 信息类型 | 存储位置 | 保留策略 |
|---------|---------|---------|
| 身份偏好 | 用户画像 | 永久保留 |
| 关键数字 | 用户画像 + 原始对话 | 画像保留摘要，原始对话保留完整数据 |
| 人名实体 | 用户画像 | 永久保留 |
| 事件细节 | 原始对话 | 按需检索 |

### 建议5：智能检索增强

当用户询问具体数字或细节时，自动触发原始对话检索：

```python
def get_context(self, query):
    # 检测是否需要精确数据
    needs_precise_data = self._detect_data_query(query)
    
    if needs_precise_data:
        # 检索原始对话
        relevant_convs = self._search_conversations(query)
        # 将原始对话片段加入上下文
        context['precise_data'] = relevant_convs
```

---

## 总结

mem1 0.0.4 的核心问题是**信息压缩过度**：

1. 用户画像只保留了"概念"，丢失了"细节"
2. LLM 在更新画像时倾向于概括，而非保留原始数据
3. 缺少对关键信息（数字、人名、实体）的专门处理

**优先修复顺序**：
1. 🔴 数字数据丢失（影响7个场景）
2. 🔴 LLM 幻觉问题（影响3个场景）
3. 🟡 人名实体丢失（影响2个场景）
4. 🟡 任务状态追踪（影响1个场景）

---

*报告生成时间: 2026-01-05 15:30*
*测试环境: mem1 0.0.4, ES 索引 mem1_test1*
