io.github.hzy9981/aviation-accident-analysis
MCP server that parses aviation accident reports (PDF/DOCX/TXT) and injects their content into extraction prompt templates for knowledge graph construction.
README
航空事故致因抽取与知识图谱项目 (Aviation Accident Analysis)
<!-- mcp-name: io.github.hzy9981/aviation-accident-analysis -->
本项目基于 Microsoft GraphRAG 框架 ,旨在自动从航空事故报告中抽取实体与因果关系,并构建符合“人-机-环-管”框架的知识图谱。
项目结构
data/: 原始数据与地标数据。input/: GraphRAG 输入目录(清洗后的文本)。output/: GraphRAG 输出结果(Parquet, GraphML 等)。prompts/: 自定义的 GraphRAG 提取提示词。src/:ingest.py: PDF/DOCX 解析与文本清洗。evaluate.py: 提取准确率与 F1 分数评测脚本。
run.sh: 一键运行脚本。settings.yaml: GraphRAG 配置文件。
环境要求
- Python 3.10+
- uv (推荐)
环境配置注意事项
- 若遇到 LLM 连接错误,请检查
settings.yaml中的api_base是否配置正确。在某些 Docker 或受限环境中,建议将localhost修改为127.0.0.1。 - 本项目已对
prompts/extract_graph.txt中的抽取示例进行了优化,通过引入复杂场景示例,提升了在航空事故报告中的实体抽取表现。
Prompt 优化与评估记录 (2026-07-24)
优化策略
针对航空事故报告的复杂性,对 prompts/extract_graph.txt 进行了多轮手动迭代优化:
- 实体原子化:强制拆分复杂短语(如“燃油管路破裂”拆分为实体“燃油管路”与关系“破裂导致”),提升知识图谱的结构化程度。
- 严格去噪:建立了否定约束,排除通用职衔(如单独的“机长”)和指示代词(如“该部件”),提升精确率。
- 少样本增强:集成了
few_shot_data.csv中的高质量航空事故致因链示例,引导模型识别长程因果关系。 - 因果链强制构建:明确
[因素] -> [事件] -> [结果]的链条要求。
评估结果 (Fuzzy Match)
通过 scripts/run_automated_evaluation.py 运行自动化评估,对比 data/ground_truth.json 得到以下指标:
| 指标 | 实体 (Entities) | 关系 (Relationships) |
|---|---|---|
| 精确率 (Precision) | 0.4348 | 0.0556 |
| 召回率 (Recall) | 0.7143 | 0.0909 |
| F1 分数 (F1 Score) | 0.5405 | 0.0690 |
结论:实体抽取的精确率和 F1 分数相比基准版本有显著提升。关系抽取受限于本地模型的指令遵循能力,仍有优化空间。
MCP 服务 (Model Context Protocol)
本项目提供了一个 MCP 服务,方便通过 MCP 客户端(如 Claude Desktop)直接调用文档解析与提示词生成功能。
核心功能
- 文档解析:支持 PDF、DOCX、TXT 格式的自动解析与清洗。
- 提示词注入:将解析出的文档内容自动注入到指定的提示词模板中。
启动方式
uv run mcp_server.py
可用工具
upload_and_generate_prompt:- 参数
file_path: 文档路径。 - 参数
template_name:prompts/目录下的模板名(默认extract_entities)。
- 参数
list_available_templates: 列出所有可用的提示词模板。
🐳 一键启动 (Docker)
如果你想快速启动整个分析环境(包含 Neo4j 数据库和 MCP 服务),可以使用 Docker Compose:
docker-compose up -d
启动后:
- Neo4j 控制台: http://localhost:7474 (默认账号:
neo4j, 密码:password) - MCP 服务: 已在容器内运行,并自动连接到容器内的 Neo4j。
运行流程
- 将事故报告(PDF/DOCX/TXT)放入
data/input_reports。 - 运行流水线:
bash run.sh
使用 Ollama (本地 LLM)
在 settings.yaml 中修改 completion_models 和 embedding_models:
completion_models:
default_completion_model:
model_provider: openai
api_base: http://localhost:6006/v1
model: llama3 # 或其他模型
api_key: ollama # 占位符
注意:GraphRAG 对本地模型的支持取决于模型的遵循指令能力。
提取 Schema (人-机-环-管)
- 实体类型: person (人), equipment (机), environment (环), organization (管), procedure, event, weather, violation.
- 关系类型: leads to, limited by, violates, not executed, belongs to.
Neo4j 知识图谱导入
- 本项目支持将 GraphRAG 提取的实体与关系导入 Neo4j 图数据库。
- 使用
src/export_to_neo4j.py脚本完成导入。 - 已配置 Docker 容器运行 Neo4j 实例,确保能够正常连接。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。