基于 LLM 和 GraphRAG 的 8D 质量报告知识图谱构建系统,支持从 8D 报告中自动提取实体、关系,构建可查询的知识图谱。
系统采用流水线架构处理 8D 报告:
JSON/Markdown 输入
↓
┌─────────────────┐
│ chunk_generator │ → 生成 chunks (text/table/image)
└─────────────────┘
↓
┌─────────────────┐
│ entity.py │ → LLM 提取实体和关系
│ (LLMExtractor) │
└─────────────────┘
↓
┌─────────────────┐
│ main.py │ → 批量处理并生成 CSV
└─────────────────┘
↓
entities.csv / relationships.csv
从原始 8D 报告生成结构化的 chunks。
输入: JSON 文件({report}_content_list.json)和 Markdown 文件
输出: chunk.csv - 包含文本、表格、图片的结构化数据
关键功能:
- JSON/Markdown 解析
- 二级标题提取(表格标题、图片分组)
- Caption 提取(图注、表格说明)
- D0-D8 章节自动检测
输出字段:
id: 唯一标识符human-readable_id: 顺序序号chunk: 内容(文本/HTML/图片路径)格式: text/table/imageDn: D章节代码(D0-D8)D-title: 章节标题chunk_title: 二级标题caption: 图注/说明document_id: 报告名称
基于 LLM 的实体和关系提取器。
特点:
- 使用 LLM(DeepSeek / Ollama)智能提取实体
- 自动识别实体类型(组织、人物、产品、缺陷等)
- 提取实体间的关系
- 支持多种 LLM 后端
支持的后端:
- DeepSeek API:
deepseek-chat,deepseek-reasoner - Ollama 本地:
qwen3.5,llama3.1等 - OpenAI API:
gpt-4o-mini等
输出格式:
- 实体表: id, human_readable_id, title, type, description, text_unit_ids
- 关系表: id, human_readable_id, source, target, description, text_unit_ids
主程序入口,批量处理 chunk.csv 生成实体和关系表。
ReportRAG/
├── main.py # 主程序入口
├── entity.py # LLM 实体提取模块
├── chunk_generator.py # Chunk 生成模块(传统规则方法)
├── entity_extractor.py # 实体提取模块(传统规则方法)
├── relationship_extractor.py # 关系提取模块(传统规则方法)
├── prompts/
│ ├── entity_extraction.txt # LLM 提示词模板
│ └── entity_types.json # 实体类型定义
├── .env # 环境变量(API Key,gitignored)
├── .env.example # 环境变量模板
└── output/ # 输出目录
├── chunk.csv # Chunk 数据
├── entities.csv # 实体表(LLM 生成)
└── relationships.csv # 关系表(LLM 生成)
git clone git@github.com:RealTapeL/ReportRAG.git
cd ReportRAG复制配置模板:
cp .env.example .env编辑 .env 选择 LLM 后端:
方式 A: DeepSeek API(推荐,速度快)
# 注册获取 API Key: https://platform.deepseek.com/
OPENAI_API_KEY=sk-your-deepseek-api-key
OPENAI_BASE_URL=https://api.deepseek.com/v1
LLM_MODEL=deepseek-chat方式 B: Ollama 本地模型
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=qwen3.5:27b# 使用 uv
uv pip install openai pandas
# 或使用 pip
pip install openai pandas生成 chunks(如有需要):
python chunk_generator.pyLLM 实体提取:
python main.py处理完成后生成:
output/entities.csv- 实体表output/relationships.csv- 关系表
编辑 prompts/entity_types.json:
["组织", "人物", "产品", "缺陷", "工艺", "设备", "材料", "标准", "事件", "地理"]编辑 prompts/entity_extraction.txt 修改 LLM 提示词。
| 后端 | 模型 | 特点 | 适用场景 |
|---|---|---|---|
| DeepSeek | deepseek-chat | 速度快,价格低 | 日常提取 |
| DeepSeek | deepseek-reasoner | 推理能力强 | 复杂分析 |
| Ollama | qwen3.5:27b | 本地运行,隐私好 | 离线环境 |
| Ollama | llama3.1:8b | 速度快,显存低 | 资源受限 |
| 字段 | 说明 |
|---|---|
| id | 唯一标识符 |
| human-readable_id | 顺序序号 |
| chunk | 内容(文本/HTML/图片路径) |
| 格式 | text/table/image |
| Dn | D章节代码 |
| D-title | 章节标题 |
| chunk_title | 二级标题 |
| document_id | 报告名称 |
| 字段 | 说明 |
|---|---|
| id | UUID 唯一标识 |
| human_readable_id | 人类可读序号(1, 2, 3...) |
| title | 实体名称 |
| type | 实体类型(组织/人物/产品/缺陷等) |
| description | 实体描述 |
| text_unit_ids | 来源 chunk ID 列表 |
| 字段 | 说明 |
|---|---|
| id | UUID 唯一标识 |
| human_readable_id | 人类可读序号 |
| source | 源实体名称 |
| target | 目标实体名称 |
| description | 关系描述 |
| text_unit_ids | 来源 chunk ID 列表 |
- LLM 驱动: 使用大语言模型智能提取实体,比规则方法更准确
- 多后端支持: 支持 DeepSeek API、Ollama 本地模型、OpenAI API
- 模块化设计: 核心模块职责清晰,便于扩展
- 可配置提示词: 提示词和实体类型可自定义
- 隐私保护: 支持本地 Ollama 部署,数据不上云
- API Key 安全:
.env文件包含敏感信息,已加入.gitignore,请勿提交到 Git - Ollama 模型: 首次运行需要下载模型,可能需要较长时间
- 处理时间: LLM 提取需要较长时间(每条约 1-3 分钟)
- 内存要求: Ollama 本地模型需要足够显存(27B 模型约需 18GB)