knowledge-graph-llms 代码实现解析:从文本到知识图谱的完整流水线拆解
2026/8/16 20:33:56 网站建设 项目流程

knowledge-graph-llms 代码实现解析:从文本到知识图谱的完整流水线拆解

【免费下载链接】knowledge-graph-llmsIn this project, I explored how to extract knowledge graphs from text using LLMs, such as OpenAI GPT4o.项目地址: https://gitcode.com/gh_mirrors/kn/knowledge-graph-llms

用 GPT-4o 把任意一段文本变成可视化知识图谱,总共分几步?knowledge-graph-llms 项目给出了答案:它基于 LLM + LangChain + PyVis + Streamlit 搭建了一条完整的知识图谱构建流水线,只需输入文本,就能自动抽取实体与关系,并生成可拖拽、可筛选的交互式知识图谱。本文将从代码实现层面,一步步拆解这条"文本 → 知识图谱"流水线的每个环节,帮助新手彻底看懂它的工作原理。

一、knowledge-graph-llms 是什么?项目全景速览 🚀

knowledge-graph-llms 是一个轻量级的开源实验项目,核心目标只有一个:用大语言模型从纯文本中自动提取知识图谱数据。它的整体架构非常清晰,由 4 个核心模块组成:

模块技术栈职责
交互界面Streamlit提供文件上传与文本输入两种入口
抽取引擎LangChain + GPT-4o从文本中提取实体和关系
图谱可视化PyVis生成可交互的力导向图
异步调度asyncio高效执行 LLM 抽取任务

整个项目只有三个核心代码文件:界面入口app.py、核心逻辑generate_knowledge_graph.py,以及用于实验探索的knowledge_graph.ipynb。麻雀虽小,五脏俱全,非常适合作为 LLM 知识图谱入门的参考模板。

二、完整流水线拆解:文本如何一步步变成知识图谱 🔍

在深入代码之前,先建立全局视角。从输入一段文本到最终看到交互式知识图谱,整个流水线共经历 6 个环节:

输入文本 → 封装为 Document → GPT-4o 抽取实体与关系 → 生成 GraphDocument → PyVis 构建网络图 → Streamlit 展示

其中,前三个环节由generate_knowledge_graph.py中的generate_knowledge_graph(text)函数统一调度:先通过asyncio.run()执行异步抽取,再把结果交给可视化函数渲染。下面我们按环节逐一拆解。

三、环境准备:最快 3 步完成依赖安装与密钥配置 🛠️

在运行代码之前,需要先准备好运行环境。这个项目的依赖非常精简,全部集中在requirements.txt中,主要包括:

  • langchain / langchain-experimental:核心 LLM 框架与实验性图转换器
  • langchain-openai:OpenAI 模型接入
  • pyvis:交互式图谱可视化
  • streamlit:Web 界面框架
  • python-dotenv:环境变量管理

一键安装全部依赖

pip install -r requirements.txt

配置 OpenAI API Key

项目通过.env文件管理密钥。在项目根目录创建.env文件,写入你的 OpenAI API Key 即可:

OPENAI_API_KEY=你的密钥

代码中通过load_dotenv()自动加载(见generate_knowledge_graph.py第 6-14 行),随后用os.getenv("OPENAI_API_KEY")读取,无需手动传参。

四、核心抽取引擎解析:LLMGraphTransformer 如何实现实体关系抽取 ⚙️

这是整个项目最精华的部分。知识图谱构建的关键在于实体识别关系抽取,而 project 巧妙地把这两件事全部交给了 LLM 完成。

GPT-4o 的调用配置

首先创建 LLM 实例,代码中有一个非常值得注意的细节:

llm = ChatOpenAI(temperature=0, model_name="gpt-4o")

temperature=0意味着让模型保持确定性输出,避免每次运行抽取结果随机波动,这对知识图谱构建这类需要稳定结果的任务至关重要。

异步抽取函数 extract_graph_data 的实现思路

接下来是抽取环节,代码将文本封装成 LangChain 的Document对象,再交给LLMGraphTransformer的异步方法处理:

documents = [Document(page_content=text)] graph_documents = await graph_transformer.aconvert_to_graph_documents(documents)

LLMGraphTransformer是 LangChain 实验性模块提供的"文本→图"转换器,它会自动引导模型完成两件事:抽取实体(Nodes)并为其分类(如 Person、Organization、Concept、Event 等类型),以及识别实体之间的语义关系(Relationships)并标注关系类型(如 DEVELOPED、MOVED_TO、WORKED_AT 等)。

以项目 notebook 中的爱因斯坦文本为例,GPT-4o 能从一段人物传记中抽取 35 个节点和 32 条关系——从"Albert Einstein → DEVELOPED → Theory Of Relativity"到"Albert Einstein → RECEIVED → 1921 Nobel Prize In Physics",实体与关系覆盖人物、地点、组织、奖项、概念、事件等多种类型,效果相当惊艳。

五、可视化模块拆解:PyVis 让知识图谱"活"起来 🎨

抽取完成后的GraphDocument只是结构化数据,要想直观展示,还需要可视化的加持。项目选用 PyVis(vis.js 的 Python 接口)来完成这一步。

节点与边的构建逻辑

visualize_graph函数中,有几个值得学习的工程细节:

  1. 建立节点索引:先把所有节点放进字典node_dict,便于快速查找;
  2. 过滤非法边:只保留源节点和目标节点都真实存在的边,防止出现"悬空连接";
  3. 按类型着色:通过group=node.type让同类型节点显示同一颜色,视觉上层次分明;
  4. 容错处理:添加节点和边时使用 try/except 跳过异常数据,保证单个脏数据不会拖垮整个渲染流程。

forceAtlas2Based 物理布局

为了让图谱看起来更美观、更易读,代码为 PyVis 配置了forceAtlas2Based物理引擎:通过调整引力常数、弹簧长度等参数,让节点自动散开、关联紧密的节点相互靠近,形成符合直觉的力导向布局。最终图谱会保存为独立的knowledge_graph.html文件,用户可以在浏览器中自由拖拽节点、滚动缩放、悬停查看详情,还能使用筛选菜单过滤指定节点。

六、Streamlit 交互界面解析:两种输入方式一次讲透 💻

项目的用户界面由app.py实现,代码逻辑非常简洁。它通过侧边栏的单选组件提供了两种输入方式。

方式一:上传 .txt 文件

用户选择 "Upload txt" 后,界面出现文件上传组件,代码将上传的文件读取并解码为 UTF-8 文本:

text = uploaded_file.read().decode("utf-8")

方式二:直接输入文本

用户也可以选择 "Input text",在文本框中直接粘贴任意内容(例如新闻、论文摘要、人物介绍),无需创建文件。

无论哪种方式,点击"Generate Knowledge Graph"按钮后,都会进入统一的处理流程:调用generate_knowledge_graph(text)生成图谱 → 保存为 HTML 文件 → 通过components.html()内嵌到 Streamlit 页面中展示。整个交互只有几十行代码,却构成了一个完整的"输入—处理—展示"闭环,非常适合初学者模仿学习。

七、进阶玩法:限定节点类型与关系类型,让抽取更精准 🎯

如果觉得默认抽取"太自由",项目在knowledge_graph.ipynb中还演示了两种精准控制技巧:

  • 限定节点类型:通过allowed_nodes参数,只抽取 Person、Organization、Location、Award 等指定类型的实体,过滤掉无关概念;
  • 限定关系类型:通过allowed_relationships参数指定关系三元组模板,例如只保留("Person", "WORKS_AT", "Organization")这类关系,让抽取结果严格符合业务需求。

这两个参数是LLMGraphTransformer内置的能力,适合在特定领域(如人物履历分析、公司关系网)中控制知识图谱的精度。

八、快速上手指南:从零跑通整个项目 🚀

想亲自体验这条知识图谱构建流水线?按下面的步骤操作即可:

  1. 克隆项目
git clone https://gitcode.com/gh_mirrors/kn/knowledge-graph-llms
  1. 安装依赖:执行pip install -r requirements.txt
  2. 配置密钥:创建.env文件并填入OPENAI_API_KEY
  3. 启动应用
streamlit run app.py

启动后浏览器会自动打开 Streamlit 界面(默认地址 http://localhost:8501),粘贴一段文本并点击生成按钮,稍等片刻就能看到属于你的知识图谱了。

结语 📝

knowledge-graph-llms 虽然代码量不大,却完整覆盖了"文本 → LLM 抽取 → 图谱可视化 → 交互展示"的全链路,是学习 LLM 知识图谱构建的绝佳样板。它的核心启发在于:借助大模型的理解能力,知识图谱构建不再依赖繁琐的规则编写,只需几行代码即可完成。如果你正在探索如何用 LLM 从非结构化文本中挖掘结构化知识,这个项目值得仔细研读。

【免费下载链接】knowledge-graph-llmsIn this project, I explored how to extract knowledge graphs from text using LLMs, such as OpenAI GPT4o.项目地址: https://gitcode.com/gh_mirrors/kn/knowledge-graph-llms

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询