MemTest Benchmark Database
收藏资源简介:
MemTest是一个用于评估AI记忆系统的基准数据库生成器,可以从任何文本语料库生成结构化的记忆和带真实答案的查询,支持6个评估维度(如精确检索、组合检索、时序推理等),数据集包含记忆ID、内容、人物列表、地点、时间、事件等信息,并提供了标准化的JSON格式输出。
MemTest is a benchmark database generator for evaluating AI memory systems. It can generate structured memory records and queries with ground-truth answers from any text corpus, and supports six evaluation dimensions including exact retrieval, compositional retrieval, temporal reasoning, and others. The dataset contains information such as memory IDs, content, person lists, locations, times, events and other relevant details, and provides standardized JSON-format output.
数据集概述:MemTest — 面向AI记忆系统的基准测试数据库生成器
核心功能:通过自动化流水线,将任意文本语料转化为结构化记忆库,并生成带有ID级答案的确定性查询,用于评估AI系统的记忆检索质量。
关键理念:评估检索而非生成。答案以记忆ID集合(而非文本)形式呈现,确保指标精确匹配、可重复、跨系统可比。
架构(v4)
项目由以下组件构成:
pipeline_v4.py:一键式流水线入口extractor.py:基于LLM的记忆提取(唯一使用LLM的步骤)relation_builder.py:纯规则构建别名组与推理链query_builder.py:基于模板从记忆属性生成查询alias_resolver.py:跨语料解析角色别名time_resolver.py:归一化时间表达runner.py:在记忆系统上运行评估quality_check.py:10项自动化数据质量检查schema.py:数据格式定义llm_interface.py:LLM抽象层(兼容DeepSeek/OpenAI)
输入语料位置:test_corpus*/目录下的.md文件(如《西游记》《三国演义》《红楼梦》《金庸》)
输出数据库位置:output/目录下的JSON文件
快速开始
-
安装与配置 bash git clone https://github.com/yubingz/memtest.git cd memtest cp .env.example .env
编辑.env,添加DEEPSEEK_API_KEY
-
一键运行 bash python pipeline_v4.py ./my_corpus/ -o test_db.json --name "My Test Database"
流程:
提取 → 构建关系 → 生成查询 → 组装 → 验证 -
自定义语料 创建目录,放入
.md或.txt文件即可。
评估维度(基于four_novels.json,131条记忆,4部小说)
| 维度 | 数量 | 说明 |
|---|---|---|
| 精确检索 | 303 | 人物、地点、时间、事件检索(5种查询类型) |
| 组合检索 | 267 | 多属性组合查询(人+地点、人+时间等) |
| 时序推理 | 157 | 前后时序推理链 |
| 负样本 | 195 | 无匹配记忆的查询(应返回空结果) |
| 跨版本/别名 | 146 | 别名等价查询(如“刘皇叔”=“刘备”=“玄德”) |
查询类型示例
| 类型 | 模板数 | 示例 |
|---|---|---|
| 人物检索 | 8 | "刘备的经历有哪些?" |
| 地点检索 | 6 | "在涿县发生了什么?" |
| 时间检索 | 6 | "早年有什么事件?" |
| 事件检索 | 7 | "关于玉的事件有哪些?" |
| 别名查询 | 5 | "刘皇叔是谁?" |
| 组合检索 | 12+ | "刘备在涿县的记录" |
| 组合推理 | 自动 | "...之前发生了什么?" |
数据格式
记忆条目示例: json { "memory_id": "MEM000001", "content": "刘备,字玄德,人称刘皇叔,是汉景帝之子中山靖王刘胜的后代。", "person_list": ["刘备", "字玄德", "玄德", "刘皇叔", "中山靖王刘胜", "汉景帝"], "location": {"city": "涿县", "place": "楼桑村"}, "time": {"relative": "早年"}, "event": {"type": "日常", "action": "出生"}, "source": "三国演义", "alias_evidence": [{"entity": "刘备", "alias": "刘皇叔", "evidence": "人称刘皇叔"}] }
查询示例: json { "query_id": "Q0001", "query_text": "刘备的经历有哪些?", "query_type": "人物检索", "test_dimension": "精确检索", "expected_memory_ids": ["MEM000001", "MEM000002", "MEM000005"], "is_negative": false, "difficulty": "困难" }
预构建数据库
| 数据库 | 记忆条数 | 查询数 | 来源 |
|---|---|---|---|
four_novels.json |
131 | 1157 | 三国演义 + 红楼梦 + 西游记 + 金庸5部 |
hongloumeng.json |
23 | 155 | 红楼梦 |
sgyy_full.json |
17 | 173 | 三国演义 |
设计原则
- 仅提取步骤使用LLM,查询生成采用纯模板×属性,确定可重复
- 基于ID的答案,消除文本相似度歧义,评估结果精确匹配
- 支持自定义语料,流水线自动提取事实并生成查询
- 记忆以原文形式存储,存储时不进行转换
- 覆盖6个评估维度:精确检索、组合检索、时序推理、负样本、别名等价
- 别名感知:角色别名(如孙悟空=齐天大圣=美猴王)被解析并作为等价组测试
许可证:MIT





