kg-gen
kg-gen 是一款基于大语言模型的开源工具,旨在将任意纯文本自动转化为结构化的知识图谱。无论是简短的对话记录还是长篇的技术文档,它都能精准提取其中的实体(如人物、概念)及其相互关系,生成清晰的图结构数据。
这一工具主要解决了非结构化文本难以被机器直接理解和利用的痛点。通过构建知识图谱,用户可以显著提升检索增强生成(RAG)系统的准确性,为模型训练合成高质量的图谱数据,或深入分析文本中复杂的概念关联。
kg-gen 特别适合开发者、AI 研究人员及数据工程师使用。其核心亮点在于极高的灵活性与兼容性:依托 LiteLLM 框架,它支持自由切换 OpenAI、Ollama、Anthropic、Gemini 等多种主流模型提供商,既可使用云端 API,也能部署本地模型;同时结合 DSPy 技术,确保了输出格式的规范与稳定。此外,工具内置了分块聚类策略以处理超长文本,并提供直观的图谱可视化功能,让用户能轻松查看和验证生成结果。只需几行代码,即可将杂乱的文本信息转化为有序的知识网络。
使用场景
某金融风控团队需要从每日海量的非结构化新闻舆情和分析师报告中,快速提取实体关系以构建动态风险知识图谱。
没有 kg-gen 时
- 人工提取效率低下:面对成千上万篇长篇研报,分析师只能手动梳理公司间的持股、担保或诉讼关系,耗时数天且无法实时响应市场变化。
- 关系遗漏严重:在处理长文本或多轮对话记录时,跨段落的隐含关联(如"A 公司是 B 公司的子公司,而 B 公司刚被 C 公司起诉”)极易被忽略,导致图谱不完整。
- 数据格式混乱:不同来源的文本结构各异,将其转化为统一的三元组(实体 - 关系 - 实体)需要编写大量脆弱的正则规则或定制脚本,维护成本极高。
- 难以支持复杂查询:由于缺乏结构化的图数据,现有的 RAG 系统只能进行简单的关键词匹配,无法回答“找出所有与暴雷企业有间接担保关系的上市公司”这类多跳推理问题。
使用 kg-gen 后
- 自动化批量构建:利用 kg-gen 接入大模型 API,团队可将整篇研报或历史对话记录直接输入,分钟级内自动生成包含实体与边的完整知识图谱。
- 深层关系精准捕捉:kg-gen 擅长处理长上下文和分块聚类,能准确识别跨段落的复杂逻辑,将隐性风险传导路径显性化,大幅降低关键信息遗漏率。
- 标准化输出无缝集成:工具直接输出结构化的三元组数据,无需额外清洗即可存入图数据库,并支持通过
visualize函数一键生成可视化报告供决策层审阅。 - 赋能高级智能检索:基于生成的图谱优化 RAG 系统,现在系统能执行多跳推理查询,迅速定位隐蔽的风险传导链条,显著提升预警准确率。
kg-gen 将杂乱的非结构化文本瞬间转化为可推理的结构化知识资产,让金融风险洞察从“大海捞针”变为“按图索骥”。
运行环境要求
未说明
未说明

快速开始
kg-gen:从任意文本生成知识图谱
📄 论文 | 🐍 软件包 | 🤖 MCP | 🔬 实验 | 👩🏻💻 数据集 | 🐦 X动态
欢迎!kg-gen 帮助您使用 AI 从任何纯文本中提取知识图谱。它可以处理小型和大型文本输入,也能处理对话格式的消息。
为什么要生成知识图谱?如果您想:
- 创建一个用于 RAG(检索增强生成)的图谱
- 为模型训练和测试创建图结构的合成数据
- 将任意文本结构化为图谱
- 分析源文本中概念之间的关系
那么
kg-gen非常适合。
我们通过 LiteLLM 支持基于 API 和本地的模型提供商,包括 OpenAI、Ollama、Anthropic、Gemini、Deepseek 等。我们还使用 DSPy 进行结构化输出生成。
- 您可以通过运行
tests/中的脚本来试用。 - 运行我们的 KG 基准测试 MINE 的说明位于
MINE/。 - 阅读论文:KGGen:利用语言模型从纯文本中提取知识图谱
由您选择的模型驱动
传入一个 model 字符串以使用您选择的模型。模型调用通过 LiteLLM 路由,通常 LiteLLM 使用 {model_provider}/{model_name} 的格式。具体格式请参阅 https://docs.litellm.ai/docs/providers。
您可以传入的模型示例:
openai/gpt-5gemini/gemini-2.5-flashollama_chat/deepseek-r1:14b
您还可以通过 base_url 指定自定义的 API 基础 URL(示例在此)。
快速入门
安装模块:
pip install kg-gen
然后导入并使用 kg-gen。您可以采用两种格式提供文本输入:
- 单个字符串
- 消息对象列表(每个对象包含角色和内容)
以下是一些示例代码:
from kg_gen import KGGen
# 使用可选配置初始化 KGGen
kg = KGGen(
model="openai/gpt-4o", # 默认模型
temperature=0.0, # 默认温度
api_key="YOUR_API_KEY" # 如果已在环境变量中设置或使用本地模型,则可选
)
# 示例 1:带上下文的单个字符串
text_input = "Linda 是 Josh 的母亲。Ben 是 Josh 的兄弟。Andrew 是 Josh 的父亲。"
graph_1 = kg.generate(
input_data=text_input,
context="家庭关系"
)
# 输出:
# entities={'Linda', 'Ben', 'Andrew', 'Josh'}
# edges={'is brother of', 'is father of', 'is mother of'}
# relations={('Ben', 'is brother of', 'Josh'),
# ('Andrew', 'is father of', 'Josh'),
# ('Linda', 'is mother of', 'Josh')}
可视化 KG
KGGen.visualize(graph, output_path, open_in_browser=True)

更多示例——分块、聚类、传递消息数组
# 示例 2:带有分块和聚类的大文本
with open('large_text.txt', 'r') as f:
large_text = f.read()
# 示例输入文本:
# """
# 神经网络是一种机器学习模型。深度学习是机器学习的一个子集,
# 它使用多层神经网络。监督学习需要训练数据来学习模式。
# 机器学习是一种人工智能技术,使计算机能够从数据中学习。
# 人工智能,也称为 AI,与更广泛的人工智能领域相关。
# 神经网络(NN)常用于机器学习应用。机器学习(ML)已经彻底改变了许多研究领域。
# ...
# """
graph_2 = kg.generate(
input_data=large_text,
chunk_size=5000, # 按每 5000 字分块处理
cluster=True # 对相似实体和关系进行聚类
)
# 输出:
# entities={'neural networks', 'deep learning', 'machine learning', 'AI', 'artificial intelligence',
# 'supervised learning', 'unsupervised learning', 'training data', ...}
# edges={'is type of', 'requires', 'is subset of', 'uses', 'is related to', ...}
# relations={('neural networks', 'is type of', 'machine learning'),
# ('deep learning', 'is subset of', 'machine learning'),
# ('supervised learning', 'requires', 'training data'),
# ('machine learning', 'is type of', 'AI'),
# ('AI', 'is related to', 'artificial intelligence'), ...}
# entity_clusters={
# 'artificial intelligence': {'AI', 'artificial intelligence'},
# 'machine learning': {'machine learning', 'ML'},
# 'neural networks': {'neural networks', 'neural nets', 'NN'}
# ...
# }
# edge_clusters={
# 'is type of': {'is type of', 'is a type of', 'is a kind of'},
# 'is related to': {'is related to', 'is connected to', 'is associated with'
# ...}
# }
# 示例 3:消息数组
messages = [
{"role": "user", "content": "法国的首都是什么?"},
{"role": "assistant", "content": "法国的首都是巴黎。"}
]
graph_3 = kg.generate(input_data=messages)
# 输出:
# entities={'Paris', 'France'}
# edges={'has capital'}
# relations={('France', 'has capital', 'Paris')}
# 示例 4:合并多个图谱
text1 = "Linda 是 Joe 的母亲。Ben 是 Joe 的兄弟。"
# 输入文本 2:Joseph 也被称为 Joe。
text2 = "Andrew 是 Joseph 的父亲。Judy 是 Andrew 的妹妹。Joseph 也被称为 Joe。"
graph4_a = kg.generate(input_data=text1)
graph4_b = kg.generate(input_data=text2)
# 合并图谱
combined_graph = kg.aggregate([graph4_a, graph4_b])
# 可选地对合并后的图谱进行聚类
clustered_graph = kg.cluster(
combined_graph,
context="家庭关系"
)
# 输出:
# entities={'Linda', 'Ben', 'Andrew', 'Joe', 'Joseph', 'Judy'}
# edges={'is mother of', 'is father of', 'is brother of', 'is sister of'}
# relations={('Linda', 'is mother of', 'Joe'),
# ('Ben', 'is brother of', 'Joe'),
# ('Andrew', 'is father of', 'Joe'),
# ('Judy', 'is sister of', 'Andrew')}
# entity_clusters={
# 'Joe': {'Joe', 'Joseph'},
# ...
# }
# edge_clusters={ ... }
从本仓库安装:
克隆此仓库,并使用 pip install -e '.[dev]' 安装依赖项。
您可以通过在根目录下运行 python tests/test_basic.py 来验证其是否正常工作。这也会在 tests/test_basic.html 中生成一个漂亮的可视化效果。
用于 AI 代理的 MCP 服务器
对于需要持久化记忆能力的 AI 代理:
# 安装并启动 MCP 服务器
pip install kg-gen
kggen mcp
# 与 Claude Desktop、自定义 MCP 客户端或其他 AI 应用程序一起使用
有关详细的设置和集成说明,请参阅 MCP 服务器文档。
功能
大文本分块处理
对于大文本,您可以指定 chunk_size 参数,以较小的块来处理文本:
graph = kg.generate(
input_data=large_text,
chunk_size=5000 # 按每 5000 个字符为一个块进行处理
)
聚类相似实体和关系
您可以在生成过程中或生成之后对相似的实体和关系进行聚类:
# 在生成过程中
graph = kg.generate(
input_data=text,
cluster=True,
context="用于指导聚类的可选上下文"
)
# 或在生成之后
clustered_graph = kg.cluster(
graph,
context="用于指导聚类的可选上下文"
)
聚合多个图
您可以使用聚合方法将多个图合并在一起:
graph1 = kg.generate(input_data=text1)
graph2 = kg.generate(input_data=text2)
combined_graph = kg.aggregate([graph1, graph2])
消息数组处理
在处理消息数组时,kg-gen:
- 会保留每条消息的角色信息
- 维持消息的顺序和边界
- 可以提取实体和关系:
- 消息中提到的概念之间的关系
- 发言者(角色)与概念之间的关系
- 整个对话中多条消息之间的关系
例如,对于以下对话:
messages = [
{"role": "user", "content": "法国的首都是什么?"},
{"role": "assistant", "content": "法国的首都是巴黎。"}
]
生成的图可能包含以下实体:
- “user”
- “assistant”
- “France”
- “Paris”
以及以下关系:
- (user, “询问关于”, “France”)
- (assistant, “指出”, “Paris”)
- (Paris, “是……的首都”, “France”)
引用
如果您觉得 KGGen 很有用,请考虑引用:
@misc{mo2025kggenextractingknowledgegraphs,
title={KGGen: 使用语言模型从纯文本中提取知识图谱},
author={Belinda Mo 和 Kyssen Yu 和 Joshua Kazdan 和 Joan Cabezas 和 Proud Mpala 和 Lisa Yu 和 Chris Cundy 和 Charilaos Kanatsoulis 和 Sanmi Koyejo},
year={2025},
eprint={2502.09956},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2502.09956},
}
许可证
MIT 许可证。
版本历史
MINE-evaluations-expanded2025/11/23MINE-deduplication-scikitlearn-vs-faiss2025/10/28WikiQA-evaluations2025/10/06MINE-evaluations2025/09/26常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
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 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备