Skip to content

Lin-A1/MediGraphRAG

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MediGraphRAG


cover

MediGraphRAG 项目旨在构建一个医疗知识图谱并基于此实现 RAG(Retrieval-Augmented Generation)方法,应用于医学试题的生成,提升医学领域的信息管理与应用效率。项目通过知识点抽取、关系提取和知识融合,解决大模型在生成过程中可能出现的幻觉问题,确保模型生成内容的准确性和可靠性。最终目标是为医学教育和实践提供一个动态、准确的知识支持系统。

环境

# ollama
# ollama自行选择参数量大小,同时可以选择调用api,只需要在comfig上进行修改metagpt配置即可
# 同时留意agent/questionGenerator.py中有调用ollama模块进行试题生成的验证,可以将其注释掉,强行判断验证结果,
curl -fsSL https://ollama.com/install.sh | sh # unbutu
ollama run qwen2.5
ollama run glm4
ollama run deepseek-r1

# docker
docker pull neo4j:latest
docker run --name med-neo4j -d -p 7474:7474 -p 7687:7687 -e NEO4J_AUTH=neo4j/test neo4j:latest

# model
cd model
git lfs install
git clone https://huggingface.co/BAAI/bge-large-zh-v1.5
git clone https://huggingface.co/BAAI/bge-reranker-v2-m3

# python
conda create -n med python=3.10
conda activate med
cd MediGraphRAG
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
pip install -r requirements.txt

数据来源

快速开始

# 先构建好上面所描述环境

# 拉取项目
git clone git@github.com:Lin-A1/MediGraphRAG.git
cd MediGraphRAG

# 虚拟环境
conda activate med

# 创建neo4j知识图谱
cd utils
python GraphBuilder.py

# 进行检索生成(仅支持ollama)
cd ..
python utils/generate.py

# 使用智能体
python main.py

# 可视化页面
cd web/frontend
npm install

cd ../../
bash web/run.sh

构建流程可见process.md

更新

2025.03.13:
- 使用fastapi将检索流程封装为接口:bash api/run.sh
- 生成器与解释器使用模型拆解,分别使用deepseek-r1:32b与qwen2.5:32b

2025.03.24:
- 作者显卡换了,模型改用14b
- 引入rerank模型,在知识库调出知识点后进行一次重排序

2025.03.24:
- 开始使用api啦!(可以自己在config中选择ollama还是api)
- 在web目录下构建了web页面

知识库构建

1. 知识点抽取

使用qwen2.5:14b从医学试题中抽取考题知识点。清洗后数据存储在knowledge.json中。

2. 关系抽取

同样使用qwen2.5:14b从抽取的知识点中识别实体与关系。数据存储在graph.json中。模型抽取时需指定实体与关系类别,避免错误抽取。

3. Neo4j构建

使用Neo4jBuilder.py将知识图谱数据导入Neo4j图数据库,以支持高效检索。


RAG流程

1. 嵌入模型

使用bge-large-zh-v1.5进行实体和知识点编码

2. Neo4j数据提取

使用Neo4jEntityFetcher.py从Neo4j提取实体,提供基于属性、标签等条件的查询接口。

3. FAISS索引生成

通过IndexBuild.py构建FAISS索引,用于快速匹配实体和知识点。

4. RAG工作流

ragWorkflow.py中,输入关键词,利用FAISS索引进行实体匹配,提取相关知识点,生成医学试题。


模型输出

模型根据抽取的知识点生成医学试题,并返回题目、选项、答案和解析。例如:

{
  "topic": "糖尿病患者治疗过程中出现酮症酸中毒,应首选的治疗方法是",
  "options": {
    "A": "口服降糖药",
    "B": "静脉输注葡萄糖加胰岛素",
    "C": "口服补液盐",
    "D": "使用胰岛素泵"
  },
  "answer": "B",
  "parse": "酮症酸中毒是糖尿病急性并发症,需通过静脉输注葡萄糖和胰岛素来治疗。"
}

Agent

调用智能体使用的是metagpt架构,可以选择调用api,只需要在comfig上进行修改metagpt配置即可

同时留意agent/questionGenerator.py中有调用ollama模块进行试题生成的验证,可以将其注释掉,强行判断验证结果,

在上述数据准备的基础上,我们使用metagpt构建试题,启动脚本为main.py,相关agent配置位于agent,其他脚本位于utils

配置

开发框架配置

类别 工具/框架名称 功能描述
模型部署工具 Ollama 轻量级大模型管理与部署工具,支持多平台适配和快速加载。
模型开发框架 LangChain 模块化 NLP 开发框架,支持复杂任务建模与优化。
数据构建模型 qwen2.5:14b 参数量 140 亿的语言模型,适用于文本生成与上下文理解任务。
智能体框架 MetaGpt 多智能体协作框架,支持任务分解、角色分配和动态交互。
智能体模型 DeepSeek-r1:32B 参数量 320 亿的高性能语言模型,具备卓越的推理与理解能力。
图数据库 Neo4j 高效的关系型图数据库,适用于知识图谱构建与复杂网络分析。
向量检索引擎 faiss 高性能相似性搜索库,用于语义搜索和大规模向量数据处理。
嵌入模型 bge-large-zh-v1.5 中文专用嵌入模型,生成高质量语义向量,支持下游任务如分类与检索。
重排序模型 bge-reranker-v2-m3 中文Reranker模型,将数据映射到高纬度向量进行数据重排序

实验环境硬件资源配置

组件 规格参数 技术特性
处理器 Intel Core i7-12700KF (8P+4E/20T) 基础频率3.6GHz,睿频5.0GHz
显卡 NVIDIA RTX4090 (24GB GDDR6X) CUDA核心16384,FP32算力82.6 TFLOPS
内存 DDR4-3592MHz 64GB双通道 CL18时序,带宽57.5GB/s
存储系统 SamsungSSD980PRO1TB NVMe SSD ×2 顺序读7,000MB/s,写5,100MB/s
操作系统 Ubuntu 22.04 LTS Linux 5.15内核,CUDA 12.2驱动环境

About

构建一个医疗知识图谱并基于此实现 RAG,并以此实现医学试题的生成

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published