一个基于大型语言模型(LLM)和 Neo4j 图数据库的知识图谱检索增强生成(RAG)问答系统,专注于模型基系统工程(MBSE)领域的知识处理和分析。
本项目实现了一个端到端的 MBSE 知识图谱问答流程,包括:
- 从技术文档和 SysML 模型中自动提取建模领域的三元组知识。
- 支持 TMX 文件解析,以提取 SysML 模型结构。
- 将三元组知识导入 Neo4j 图数据库,以构建知识图谱。
- 基于 RAG(检索增强生成)的智能问答。
- 提供 RESTful API 和一个基于 Web 的交互界面。
- 需求三元组提取:从文本文档中自动提取与建模相关的结构化知识(三元组)。
- SysML 模型解析:支持解析 TMX 格式文件,以提取 SysML 模型结构和关系。
- 图构建:将三元组导入 Neo4j,以构建可查询的知识图谱。
- 实体识别:使用 LLM 从用户问题中识别关键实体。
- 子图检索:根据已识别的实体执行子图查询。
- 向量检索:支持基于语义相似性的文档检索。
- RAG 问答:通过结合检索到的知识生成准确的答案。
- 多重接口:支持命令行工具、RESTful API 和 Web 界面。
- LLM:deepseek-chat(通过 LiteLLM 集成)
- 图数据库:Neo4j
- RAG 框架:LangChain
- Web API:FastAPI
- 依赖管理:uv
- SysML 解析:自定义 TMX 解析器
-
克隆仓库并进入项目目录:
git clone <repository-url> cd ai4mbse
-
使用 uv 安装依赖:
uv sync
-
配置环境变量(创建一个
.env文件):DEEPSEEK_API_KEY=your_deepseek_api_key NEO4J_URL=bolt://localhost:7687 NEO4J_USER=neo4j NEO4J_PASSWORD=password
从文本中提取三元组:
python utils.py extract_triples --input_txt_path=path/to/input.txt --output_json_path=path/to/output.json解析 TMX 文件:
python utils.py parse_tmx --input_tmx_path=path/to/model.tmx --output_json_path=path/to/graph.json导入知识图谱:
python utils.py import_triples --triples_path=path/to/triples.json测试查询:
python utils.py test_query启动 FastAPI 服务器:
uvicorn web:app --reloadAPI 端点:
POST /extract_triples- 上传文档以提取三元组。POST /parse_tmx- 上传 TMX 文件以解析模型结构。POST /import_triples- 将三元组导入 Neo4j。POST /query- 基于知识图谱进行查询。GET /- 检查 API 状态。
您还可以运行测试脚本来检查后端 API:
./test_backend.shai4mbse/
├── chat/ # 核心问答模块
│ ├── __init__.py
│ ├── query.py # 问题处理和子图查询
│ ├── template.py # LLM 提示模板
│ └── triple.py # 三元组提取功能
├── controller/ # 控制器模块
│ ├── graph.py # Neo4j 图数据库控制器
│ └── tmx.py # SysML TMX 文件解析器
├── data/
│ ├── test_requirements.txt
│ ├── test_triples.json
│ └── trufun.tmx
├── utils.py # 命令行工具的入口点
├── web.py # FastAPI Web 服务
├── test_backend.sh # 后端 API 的测试脚本
├── pyproject.toml # 项目配置和依赖管理
├── uv.lock # 依赖锁定文件
├── .env # 环境配置文件(由用户创建)
└── README.md # 项目文档
POST /extract_triples
Content-Type: multipart/form-data
# 上传一个文本文件以返回提取的三元组。POST /parse_tmx
Content-Type: multipart/form-data
# 上传一个 TMX 文件以返回解析后的图结构。POST /import_triples
Content-Type: multipart/form-data
# 上传一个包含三元组的 JSON 文件以导入 Neo4j。POST /query
Content--Type: application/json
{
"question": "分析机上通信的需求。"
}主要依赖包括:
fastapi[standard]- Web API 框架langchain- LLM 应用开发框架langchain-litellm- LiteLLM 集成langchain-neo4j- Neo4j 集成neo4j- Neo4j 数据库驱动fire- 命令行界面生成rich- 终端美化
本项目采用开源许可证。详情请参阅 LICENSE 文件。