Skip to content

RealTapeL/ReportRAG

Repository files navigation

ReportRAG

基于 LLM 和 GraphRAG 的 8D 质量报告知识图谱构建系统,支持从 8D 报告中自动提取实体、关系,构建可查询的知识图谱。

系统架构

系统采用流水线架构处理 8D 报告:

JSON/Markdown 输入
       ↓
┌─────────────────┐
│ chunk_generator │  → 生成 chunks (text/table/image)
└─────────────────┘
       ↓
┌─────────────────┐
│   entity.py     │  → LLM 提取实体和关系
│ (LLMExtractor)  │
└─────────────────┘
       ↓
┌─────────────────┐
│   main.py       │  → 批量处理并生成 CSV
└─────────────────┘
       ↓
entities.csv / relationships.csv

核心模块

1. chunk_generator.py

从原始 8D 报告生成结构化的 chunks。

输入: JSON 文件({report}_content_list.json)和 Markdown 文件

输出: chunk.csv - 包含文本、表格、图片的结构化数据

关键功能:

  • JSON/Markdown 解析
  • 二级标题提取(表格标题、图片分组)
  • Caption 提取(图注、表格说明)
  • D0-D8 章节自动检测

输出字段:

  • id: 唯一标识符
  • human-readable_id: 顺序序号
  • chunk: 内容(文本/HTML/图片路径)
  • 格式: text/table/image
  • Dn: D章节代码(D0-D8)
  • D-title: 章节标题
  • chunk_title: 二级标题
  • caption: 图注/说明
  • document_id: 报告名称

2. entity.py

基于 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

3. main.py

主程序入口,批量处理 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 生成)

快速开始

1. 克隆仓库

git clone git@github.com:RealTapeL/ReportRAG.git
cd ReportRAG

2. 配置环境

复制配置模板:

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

3. 安装依赖

# 使用 uv
uv pip install openai pandas

# 或使用 pip
pip install openai pandas

4. 运行

生成 chunks(如有需要):

python chunk_generator.py

LLM 实体提取

python main.py

处理完成后生成:

  • output/entities.csv - 实体表
  • output/relationships.csv - 关系表

配置说明

实体类型(可自定义)

编辑 prompts/entity_types.json

["组织", "人物", "产品", "缺陷", "工艺", "设备", "材料", "标准", "事件", "地理"]

提示词模板

编辑 prompts/entity_extraction.txt 修改 LLM 提示词。

LLM 模型选择

后端 模型 特点 适用场景
DeepSeek deepseek-chat 速度快,价格低 日常提取
DeepSeek deepseek-reasoner 推理能力强 复杂分析
Ollama qwen3.5:27b 本地运行,隐私好 离线环境
Ollama llama3.1:8b 速度快,显存低 资源受限

输出格式

chunk.csv

字段 说明
id 唯一标识符
human-readable_id 顺序序号
chunk 内容(文本/HTML/图片路径)
格式 text/table/image
Dn D章节代码
D-title 章节标题
chunk_title 二级标题
document_id 报告名称

entities.csv

字段 说明
id UUID 唯一标识
human_readable_id 人类可读序号(1, 2, 3...)
title 实体名称
type 实体类型(组织/人物/产品/缺陷等)
description 实体描述
text_unit_ids 来源 chunk ID 列表

relationships.csv

字段 说明
id UUID 唯一标识
human_readable_id 人类可读序号
source 源实体名称
target 目标实体名称
description 关系描述
text_unit_ids 来源 chunk ID 列表

技术特点

  1. LLM 驱动: 使用大语言模型智能提取实体,比规则方法更准确
  2. 多后端支持: 支持 DeepSeek API、Ollama 本地模型、OpenAI API
  3. 模块化设计: 核心模块职责清晰,便于扩展
  4. 可配置提示词: 提示词和实体类型可自定义
  5. 隐私保护: 支持本地 Ollama 部署,数据不上云

注意事项

  1. API Key 安全: .env 文件包含敏感信息,已加入 .gitignore,请勿提交到 Git
  2. Ollama 模型: 首次运行需要下载模型,可能需要较长时间
  3. 处理时间: LLM 提取需要较长时间(每条约 1-3 分钟)
  4. 内存要求: Ollama 本地模型需要足够显存(27B 模型约需 18GB)

License

LICENSE

About

The rag framework used for reporting experimental data types

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors