ai-knowledge-graph

GitHub
2k 292 简单 3 次阅读 昨天Apache-2.0开发框架数据工具语言模型
AI 解读 由 AI 自动生成,仅供参考

ai-knowledge-graph 是一个利用大语言模型(LLM)从非结构化文本中自动提取知识并生成可视化知识图谱的开源工具。它将输入文档拆分为合适大小的段落,通过 LLM 识别其中的实体及其关系,以“主语-谓语-宾语”三元组的形式组织信息,并最终生成可交互的 HTML 知识图谱页面。

该工具解决了从杂乱文本中高效梳理结构化知识的难题,特别适合需要快速理解复杂文档内容、发现隐藏关联的研究人员、数据分析师或开发者。无论是技术文档、历史资料还是行业报告,只需提供纯文本,即可获得直观的关系网络。

ai-knowledge-graph 支持任意兼容 OpenAI API 的模型服务(如 Ollama、LM Studio、Azure OpenAI、Anthropic 等),并具备智能分块、实体标准化和关系推理等能力——例如自动合并不同段落中指代同一概念的名称,或推断间接关联。用户可通过配置文件灵活调整处理参数,命令行操作简单,也支持模块化安装使用。整个流程兼顾准确性与易用性,让知识图谱构建不再依赖复杂的数据预处理。

使用场景

某高校历史系研究生正在撰写关于“第二次工业革命”的论文,需从一本200页的英文专著中梳理关键技术、人物与国家之间的复杂关联。

没有 ai-knowledge-graph 时

  • 手动通读全文并摘录关键信息,耗时数周且容易遗漏隐含关系
  • 不同章节对同一实体(如“Thomas Edison” vs “Edison”)命名不一致,导致后续整理混乱
  • 难以直观发现跨章节的间接联系(例如某项技术如何通过多国合作演进)
  • 最终只能用静态表格或手绘草图呈现关系,无法交互探索

使用 ai-knowledge-graph 后

  • 将整本PDF转为纯文本后,仅用一条命令即可自动提取数千条结构化三元组(如“Nikola Tesla — 发明 — 交流电系统”)
  • 内置实体标准化功能自动合并“Bell Telephone Company”和“贝尔电话公司”等变体,确保图谱一致性
  • 启用关系推理后,系统自动补全了“德国化学工业 → 推动 → 美国染料制造”等原文未明说但逻辑成立的连接
  • 生成的交互式HTML图谱支持缩放、搜索与点击展开详情,便于快速定位关键节点并导出子图用于论文插图

ai-knowledge-graph 将数周的手工知识整理压缩至几分钟,同时揭示出肉眼难以察觉的深层关联,极大提升人文研究中的信息洞察效率。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

未说明

内存

未说明

依赖
notes支持任何 OpenAI 兼容的 API 端点(如 Ollama、LM Studio、vLLM、LiteLLM 等),可本地或远程调用大语言模型;无需直接加载模型到本地,因此对 GPU 和内存无硬性要求;推荐使用 uv 或 pip 安装依赖。
python3.11+
openai
pyvis
networkx
tiktoken
tomli
litellm
ai-knowledge-graph hero image

快速开始

ai-knowledge-graph-example

AI 驱动的知识图谱生成器

该系统接收一份非结构化文本文件,并使用你选择的 LLM(大语言模型,Large Language Model)从中提取以“主语-谓语-宾语”(Subject-Predicate-Object, SPO)三元组形式表示的知识,并将这些关系可视化为一个交互式知识图谱。
使用本项目生成的知识图谱示例可在此查看:工业革命知识图谱

功能特性

  • 文本分块(Text Chunking):自动将大型文档拆分为便于处理的小块
  • 知识抽取(Knowledge Extraction):利用 AI 识别实体及其相互关系
  • 实体标准化(Entity Standardization):确保不同文本块中的实体命名一致
  • 关系推理(Relationship Inference):发现图谱中不相连部分之间的额外关系
  • 交互式可视化(Interactive Visualization):生成可交互的图谱可视化结果
  • 兼容任意 OpenAI 兼容的 API 端点:支持 Ollama、LM Studio、OpenAI、vLLM、LiteLLM(后者可接入 AWS Bedrock、Azure OpenAI、Anthropic 等众多 LLM 服务)

依赖要求

  • Python 3.11+
  • 所需依赖包(可通过 pip install -r requirements.txtuv sync 安装)

快速开始

  1. 克隆本仓库
  2. 安装依赖:pip install -r requirements.txt
  3. config.toml 中配置你的设置
  4. 运行系统:
python generate-graph.py --input your_text_file.txt --output knowledge_graph.html

或使用 UV:

uv run generate-graph.py --input your_text_file.txt --output knowledge_graph.html

或安装为模块后使用:

pip install --upgrade -e .
generate-graph --input your_text_file.txt --output knowledge_graph.html

配置说明

系统可通过 config.toml 文件进行配置:

[llm]
model = "gemma3"  # Google 开源权重模型
api_key = "sk-1234"
base_url = "http://localhost:11434/v1/chat/completions" # 本地运行的 Ollama 实例(也可替换为任意 OpenAI 兼容端点)
max_tokens = 8192
temperature = 0.2

[chunking]
chunk_size = 200  # 每个文本块的单词数量
overlap = 20      # 相邻文本块之间的重叠单词数

[standardization]
enabled = true            # 启用实体标准化
use_llm_for_entities = true  # 使用 LLM 进行额外的实体消歧

[inference]
enabled = true             # 启用关系推理
use_llm_for_inference = true  # 使用 LLM 进行关系推理
apply_transitive = true    # 应用传递性推理规则

命令行选项

  • --input FILE:待处理的输入文本文件
  • --output FILE:用于可视化的输出 HTML 文件(默认:knowledge_graph.html)
  • --config FILE:配置文件路径(默认:config.toml)
  • --debug:启用调试输出,显示原始 LLM 响应
  • --no-standardize:禁用实体标准化
  • --no-inference:禁用关系推理
  • --test:使用测试数据生成示例可视化

使用帮助信息(--help)

generate-graph --help
usage: generate-graph [-h] [--test] [--config CONFIG] [--output OUTPUT] [--input INPUT] [--debug] [--no-standardize] [--no-inference]

Knowledge Graph Generator and Visualizer

options:
  -h, --help        show this help message and exit
  --test            Generate a test visualization with sample data
  --config CONFIG   Path to configuration file
  --output OUTPUT   Output HTML file path
  --input INPUT     Path to input text file (required unless --test is used)
  --debug           Enable debug output (raw LLM responses and extracted JSON)
  --no-standardize  Disable entity standardization
  --no-inference    Disable relationship inference

示例运行

命令:

generate-graph --input data/industrial-revolution.txt --output industrial-revolution-kg.html

控制台输出:

Using input text from file: data/industrial-revolution.txt
==================================================
阶段 1:初始三元组提取(Triple Extraction)
==================================================
正在将文本处理为 13 个块(每块大小:100 词,重叠:20 词)
正在处理块 1/13(100 词)
正在处理块 2/13(100 词)
正在处理块 3/13(100 词)
正在处理块 4/13(100 词)
正在处理块 5/13(100 词)
正在处理块 6/13(100 词)
正在处理块 7/13(100 词)
正在处理块 8/13(100 词)
正在处理块 9/13(100 词)
正在处理块 10/13(100 词)
正在处理块 11/13(100 词)
正在处理块 12/13(86 词)
正在处理块 13/13(20 词)

从所有块中共提取出 216 个三元组

==================================================
阶段 2:实体标准化(Entity Standardization)
==================================================
起始状态:216 个三元组,201 个唯一实体
正在对所有三元组中的实体名称进行标准化...
对 15 个实体组应用了基于大语言模型(LLM)的实体标准化
将 201 个实体标准化为 181 种标准形式
标准化后:216 个三元组,160 个唯一实体

==================================================
阶段 3:关系推理(Relationship Inference)
==================================================
起始状态:216 个三元组
推理前出现次数最多的 5 种关系类型:
  - enables: 出现 20 次
  - impacts: 出现 15 次
  - enabled: 出现 12 次
  - pioneered: 出现 10 次
  - invented: 出现 9 次
正在推断实体之间的额外关系...
在图中识别出 9 个不连通的社区(communities)
推断出 3 个社区间的新关系
推断出 3 个社区间的新关系
推断出 3 个社区间的新关系
推断出 3 个社区间的新关系
推断出 3 个社区间的新关系
推断出 3 个社区间的新关系
推断出 3 个社区间的新关系
推断出 3 个社区间的新关系
推断出 3 个社区间的新关系
推断出 3 个社区间的新关系
推断出 9 个社区内的新关系
推断出 2 个社区内的新关系
基于词汇相似性推断出 88 个关系
新增了 -22 个推断关系

推理后出现次数最多的 5 种关系类型:
  - related to: 出现 65 次
  - advances via Artificial Intelligence: 出现 36 次
  - pioneered via computing: 出现 26 次
  - enables via computing: 出现 24 次
  - enables: 出现 21 次

新增了 370 个推断关系
最终知识图谱:564 个三元组
原始知识图谱数据已保存至 /mnt/c/Users/rmcdermo/Documents/industrial-revolution-kg.json
正在处理 564 个三元组以生成可视化
发现 161 个唯一节点
发现 355 个推断关系
使用 Louvain 方法检测到 9 个社区
NetworkX 图中的节点数:161
NetworkX 图中的边数:537
知识图谱可视化已保存至 /mnt/c/Users/rmcdermo/Documents/industrial-revolution-kg.html
图统计信息:{
  "nodes": 161,
  "edges": 564,
  "original_edges": 209,
  "inferred_edges": 355,
  "communities": 9
}

知识图谱统计信息:
节点数:161  
边数:564  
社区数:9  

要查看可视化结果,请在浏览器中打开以下文件:
file:///mnt/c/Users/rmcdermo/Documents/industrial-revolution-kg.html

工作原理

  1. 分块(Chunking):将文档分割为有重叠的文本块,以适应大语言模型(LLM)的上下文窗口限制。
  2. 第一轮处理 - SPO 提取(Subject-Predicate-Object Extraction)
    • 每个文本块由 LLM 处理,提取主语-谓语-宾语(SPO)三元组
    • process_with_llm 函数中实现
    • LLM 识别每个文本段中的实体及其关系
    • 所有块的结果汇总形成初始知识图谱
  3. 第二轮处理 - 实体标准化(Entity Standardization)
    • 通过文本规范化进行基础标准化
    • 可选启用 LLM 辅助的实体对齐(由配置项 standardization.use_llm_for_entities 控制)
    • 启用后,LLM 会审查图谱中所有唯一实体,并识别指向同一概念的实体组
    • 解决同一实体在不同文本块中表述不一致的问题(例如:“AI”、“artificial intelligence”、“AI system”)
    • 标准化有助于构建更连贯、更易浏览的知识图谱
  4. 第三轮处理 - 关系推理(Relationship Inference)
    • 自动推断传递性关系
    • 可选启用 LLM 辅助的不连通图组件间关系推理(由配置项 inference.use_llm_for_inference 控制)
    • 启用后,LLM 会分析来自不连通社区的代表性实体,并推断合理的关系
    • 通过添加文本中未明确说明的逻辑连接,减少图谱碎片化
    • 基于规则和基于 LLM 的推理方法协同工作,构建更全面的图谱
  5. 可视化(Visualization):使用 PyVis 库生成交互式 HTML 可视化

第二轮和第三轮处理均为可选项,可在配置中禁用,以最小化 LLM 使用或手动控制这些流程。

可视化特性

  • 社区颜色编码:节点颜色代表不同社区
  • 节点大小:根据重要性(度中心性、介数中心性、特征向量中心性)调整节点大小
  • 关系类型:原始关系以实线显示,推断关系以虚线显示
  • 交互控件:支持缩放、平移、悬停查看详情、过滤及物理引擎控制
  • 浅色(默认)和深色主题

项目结构

.
├── config.toml                     # 系统的主配置文件
├── generate-graph.py               # 直接作为脚本运行时的入口点
├── pyproject.toml                  # Python 项目元数据和构建配置
├── requirements.txt                # 供 'pip' 用户使用的 Python 依赖项
├── uv.lock                         # 供 'uv' 用户使用的 Python 依赖项
└── src/                            # 源代码
    ├── generate_graph.py           # 作为模块运行时的主入口脚本
    └── knowledge_graph/            # 核心包
        ├── __init__.py             # 包初始化文件
        ├── config.py               # 配置加载与验证
        ├── entity_standardization.py # 实体标准化(Entity Standardization)算法
        ├── llm.py                  # LLM(大语言模型,Large Language Model)交互与响应处理
        ├── main.py                 # 主程序流程与协调逻辑
        ├── prompts.py              # LLM 提示词(Prompts)的集中管理
        ├── text_utils.py           # 文本处理与分块工具
        ├── visualization.py        # 知识图谱可视化生成器
        └── templates/              # 可视化用的 HTML 模板
            └── graph_template.html # 交互式图谱的基础模板

程序流程

下图展示了程序的执行流程。

flowchart TD
    %% Main entry points
    A[main.py - Entry Point] --> B{Parse Arguments}
    
    %% Test mode branch
    B -->|--test flag| C[sample_data_visualization]
    C --> D[visualize_knowledge_graph]
    
    %% Normal processing branch
    B -->|normal processing| E[load_config]
    E --> F[process_text_in_chunks]
    
    %% Text processing
    F --> G[chunk_text]
    G --> H[process_with_llm]
    
    %% LLM processing
    H --> I[call_llm]
    I --> J[extract_json_from_text]
    
    %% Entity standardization phase
    F --> K{standardization enabled?}
    K -->|yes| L[standardize_entities]
    K -->|no| M{inference enabled?}
    L --> M
    
    %% Relationship inference phase
    M -->|yes| N[infer_relationships]
    M -->|no| O[visualize_knowledge_graph]
    N --> O
    
    %% Visualization components
    O --> P[_calculate_centrality_metrics]
    O --> Q[_detect_communities]
    O --> R[_calculate_node_sizes]
    O --> S[_add_nodes_and_edges_to_network]
    O --> T[_get_visualization_options]
    O --> U[_save_and_modify_html]
    
    %% Subprocesses
    L --> L1[_resolve_entities_with_llm]
    N --> N1[_identify_communities]
    N --> N2[_infer_relationships_with_llm]
    N --> N3[_infer_within_community_relationships]
    N --> N4[_apply_transitive_inference]
    N --> N5[_infer_relationships_by_lexical_similarity]
    N --> N6[_deduplicate_triples]
    
    %% File outputs
    U --> V[HTML Visualization]
    F --> W[JSON Data Export]
    
    %% Prompts usage
    Y[prompts.py] --> H
    Y --> L1
    Y --> N2
    Y --> N3
    
    %% Module dependencies
    subgraph Modules
        main.py
        config.py
        text_utils.py
        llm.py
        entity_standardization.py
        visualization.py
        prompts.py
    end
    
    %% Phases
    subgraph Phase 1: Triple Extraction
        G
        H
        I
        J
    end
    
    subgraph Phase 2: Entity Standardization
        L
        L1
    end
    
    subgraph Phase 3: Relationship Inference
        N
        N1
        N2
        N3
        N4
        N5
        N6
    end
    
    subgraph Phase 4: Visualization
        O
        P
        Q
        R
        S
        T
        U
    end

程序流程说明

  1. 入口点:程序从 main.py 开始,解析命令行参数。

  2. 模式选择

    • 如果提供了 --test 标志,则生成一个示例可视化结果
    • 否则,处理输入的文本文件
  3. 配置加载:使用 config.pyconfig.toml 中加载配置

  4. 文本处理

    • 使用 text_utils.py 将文本按重叠方式切分为多个块
    • 对每个文本块调用 LLM 提取三元组(triples)
    • 使用 prompts.py 中的提示词引导 LLM 的提取过程
  5. 实体标准化(可选):

    • 对所有三元组中的实体名称进行标准化
    • 在存在歧义的情况下,可能使用 LLM 进行实体消歧(entity resolution)
    • 使用 prompts.py 中专门用于实体消歧的提示词
  6. 关系推理(可选):

    • 识别图谱中的社区(communities)
    • 推理不同社区之间的潜在关系
    • 应用传递性推理(transitive inference)和词汇相似性规则
    • 使用 prompts.py 中专门用于关系推理的提示词
    • 对三元组进行去重
  7. 可视化

    • 计算中心性指标(centrality metrics)并检测社区结构
    • 根据节点重要性确定其大小和颜色
    • 使用 PyVis 生成交互式 HTML 可视化
    • 利用模板自定义 HTML 内容
  8. 输出

    • 将知识图谱同时保存为 HTML 和 JSON 格式
    • 显示关于节点、边和社区的统计信息

版本历史

0.6.32025/12/28
0.6.22025/12/28
0.6.12025/05/12
0.6.02025/03/30
0.5.72025/03/27
0.5.62025/03/25
0.5.52025/03/25
0.5.42025/03/25
0.5.32025/03/25
0.4.32025/03/24
0.4.12025/03/24
0.4.02025/03/24
0.3.32025/03/24
0.3.12025/03/23
0.2.02025/03/23
0.1.02025/03/23

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架