ai-knowledge-graph
用LLM从任意文本自动提取实体关系,生成可交互知识图谱的开源工具
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用LLM从任意文本自动提取实体关系,生成可交互知识图谱的开源工具
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你是否曾为读懂一篇长篇技术报告而头疼?那些密密麻麻的文字、隐藏在段落间的关系网络,往往需要反复阅读才能理出头绪。现在,有一个开源工具试图用AI解决这个问题——它能把任何一篇文本自动转化成一张可交互的知识图谱。

图1:ai-knowledge-graph 生成的知识图谱示例,节点代表实体,边代表关系(来源:项目官方仓库)
这个项目来自一位名叫 Robert McDermott 的安全研究人员。在日常工作中,他需要反复处理大量安全报告、APT分析文档——这些材料往往长达几十页,充满了组织机构、攻击工具、目标行业之间的复杂关联关系。手动梳理这些关系不仅耗时,还容易遗漏。
于是,他写了这个工具:用大语言模型自动从文本中抽取 SPO 三元组(主体-谓语-客体),再把结果可视化成一张交互式图谱。2024年底发布后,迅速在安全社区引发关注——SANS Institute 的安全分析师甚至专门写了教程,展示如何用它分析俄罗斯APT组织的活动报告。
这个项目的出现并非偶然。随着 LLM 能力的爆发式提升,RAG(检索增强生成)系统对结构化知识的渴求越来越强烈,而知识图谱正是结构化知识的代表形式之一。GraphRAG(将知识图谱与RAG结合)已成为2024-2025年AI领域最热门的方向之一,Microsoft、Neo4j等大厂纷纷入场。本项目恰好踩在这个趋势的起点上。
ai-knowledge-graph 的工作流程分为四个阶段,每个阶段都可独立配置开关:
第一步:文本分块(Text Chunking)。系统将输入的长文档按词数切分成小块(默认100词一块,20词重叠),避免LLM处理超长文本时的上下文溢出。这与大多数 RAG 系统的做法一致。
第二步:实体与关系抽取(Knowledge Extraction)。这是整个流程的核心。LLM 被要求从每个文本块中识别实体(Subject)和它们之间的关系(Predicate),最终输出 SPO 三元组列表。比如输入一段关于APT28攻击能源机构的文章,LLM会抽取出类似「APT28 攻击 能源机构」这样的结构化关系。
第三步(可选):实体标准化(Entity Standardization)。同一个实体在不同文本块中可能有不同表述——比如「俄罗斯」和「Russia」或「Russian Federation」。此阶段用LLM进行跨块实体消歧,确保全图谱的命名一致性。
第四步(可选):关系推理(Relationship Inference)。利用传递性规则和LLM辅助推理,发现文本中未直接提到但合理存在的关系,让图谱更加完整。
最终,所有结构化数据通过 pyvis 渲染成交互式 HTML 文件,用户可以在浏览器中放大缩小、点击节点查看详情、拖拽布局。
架构设计:项目采用模块化架构,核心代码在 src/knowledge_graph/ 下,分为 llm.py(LLM接口)、entity_standardization.py(实体标准化)、text_utils.py(文本处理)、visualization.py(可视化)等子模块。入口脚本 generate_graph.py 负责命令行参数解析和流程编排。
依赖栈非常精简:networkx(图数据结构)、pyvis(交互式可视化)、requests(HTTP调用LLM API)、tomli(TOML配置解析)、python-louvain(社区检测)。没有任何重型ML框架,纯Python实现,依赖总数约20个包。
LLM兼容性:项目支持任何兼容 OpenAI API 格式的端点,包括:本地 Ollama(默认)、LM Studio、vLLM、LiteLLM(进而访问 AWS Bedrock、Azure OpenAI、Anthropic 等)。配置文件中只需改 base_url 和 model 两个字段即可切换后端。SANS 分析师实测了 Gemma 3 的 12B 和 27B 参数版本。
可配置项丰富:分块大小、重叠词数、实体标准化开关、推理开关、传递性规则开关、可视化边的平滑类型……几乎没有硬编码参数。
输出形式:生成的 HTML 文件自带完整 pyvis 运行时,可直接在浏览器打开,无需任何服务器。项目还提供了一个工业革命知识图谱的在线演示,可在 robert-mcdermott.github.io/ai-knowledge-graph/ 预览效果。
对于有 Python 基础的用户,安装非常简单:
pip install -r requirements.txt # 或 uv sync
python generate-graph.py --input your_text.txt --output output.html
进阶用户可以 pip install -e . 安装为模块,用 generate-graph 命令行工具。项目对 Python 版本要求为 3.11+,没有其他系统级依赖。
不过有一个隐形成本:需要有一个可用的 LLM 后端。如果选择本地 Ollama,还需要一台有足够显存的机器(Gemma 3 12B约需12GB显存,27B约需27GB)。如果选择 API 模式,则会产生 token 消耗。作者在配置文件中预置了多个模型的示例配置,新手可以快速试跑 demo。
作者本人提供了 Medium 博客详细记录了从设计思路到实际效果的完整过程,是学习该项目设计理念的绝佳资料。
这个工具并非万能,以下几点值得注意:
抽取质量依赖LLM能力。Gemma 3 12B 在复杂技术文档上可能不如 GPT-4o 或 Claude 3.5 Sonnet 抽取得全面。作者自己也在配置文件中注释掉了 Claude 和 GPT-4o 的配置作为备选。
无服务器/容器化方案。这是一个纯本地 CLI 工具,没有 Docker 支持,也不提供 Web 服务。如果要集成到生产 RAG 流水线,需要自行二次开发 API 层。
仅支持文本输入。不支持 PDF 直接解析(需要先用 pdftotext 提取文本)、不支持 URL 抓取、不支持多文件批量处理。
知识图谱表达能力有限。输出是 pyvis HTML,节点和边的属性模型较简单,不支持多关系类型、时序属性等高级图谱特性。
社区规模较小。截至分析时项目仅有3位贡献者,40余次提交,属于典型的个人项目,维护状态需持续观察。
从更宏观的视角看,这个项目的价值不仅在于工具本身,更在于它以极低的门槛展示了「LLM + 知识图谱」这一范式的威力。
2024年以来,GraphRAG 迅速成为 LLM 应用领域的焦点:Microsoft 开源了基于知识图谱的 GraphRAG 框架,Neo4j 推出了向量+图谱混合查询方案,Anthropic 和 OpenAI 都在文档中推荐知识图谱作为 RAG 的增强手段。而本项目的意义在于:它用不到20行核心代码,展示了如何从零构建一个可用的知识图谱生成+可视化 pipeline。
对于想在本地快速验证「我的文档里有哪些实体和关系」这一命题的开发者来说,这可能是目前最轻量的起点。
项目基本信息
| 维度 | 内容 |
|---|---|
| 编程语言 | Python |
| 主要依赖 | networkx, pyvis, requests, tomli |
| LLM支持 | 任何OpenAI兼容API(Ollama/LM Studio/vLLM/Bedrock等) |
| 输入格式 | 文本文件(.txt) |
| 输出格式 | 交互式 HTML(pyvis) |
| Python版本 | >= 3.11 |
| 许可证 | Apache 2.0 |
| 最新更新 | 2025年12月 |
| 贡献者数 | 3人 |