0基础实战本地大模型LangChain知识图谱节点识别匹配
基于本地大模型与Langchain,从文本中识别并匹配概念语义关系,构建知识图谱。以医疗数据为例,纯本地运行,无需云服务。通过miniconda、jupyter及zephyr模型实现数据处理与关系提取,最终输出可视化的交互式网页。
用本地LLM构建知识图谱与高级RAG:从数据到概念关系,全流程实战拆解
新年好。
我们先聊聊数据这件事。数据是一切工作的起点——这句话听起来有些老生常谈,但在AI落地场景中,它依然是最朴素的真理。无论是HR筛选简历、业务部门处理合同、电商平台分析客户评价,还是个人整理学习笔记,数据只有在被结构化、可检索之后,才能真正发挥价值。
上一篇文章中,我们完成了私有文档的预处理与文本提取分块。今天继续推进:利用本地LLM,从文本中识别、匹配概念及其语义关系,从而构建知识图谱。整个系列覆盖从数据预处理到高级RAG应用的全部流程,本篇是第四步。
考虑到企业对数据安全与隐私保护的要求,本次所有操作均在本地完成,不依赖任何云服务。整个项目以医疗数据为例,相关资料已整理完毕,可随时查阅。

人的专注力只有十分钟,咱们抓紧聊干货。
第一部分:全局性思考,真正给你“渔”
庄子说:纵横不出方圆,万变不离其宗。做知识图谱也是如此——先搞清楚要解决什么问题,目标明确了,事情就能事半功倍。
先来看一个常见的需求统计表:

有了目标,接下来就需要做好技术工程计划与资源分配。知识图谱的构建是一项综合性工程,不仅需要开发人员,还需要数据分析师、领域专家。此外,还需要一个项目中控,确保资源分配合理、各环节协同推进。
1.1 技术工程计划的制定
技术选型:选择合适的技术栈是成功的前提。包括数据存储(如 Neo4j、JanusGraph)、数据处理(如 Apache Spark、Kafka)、前端展示(如 D3.js、Sigma.js)。本文第二部分会详细说明本次项目所使用的工具。
数据源确定:根据目标确定需要整合的数据源——公开数据集、内部数据库、爬虫数据等。这一步还要评估数据质量、可用性以及相关合规要求。
架构设计:设计完整的系统架构,覆盖数据采集、处理、存储、查询和展示。确保可扩展性、稳定性和安全性。
开发计划:制定分阶段的目标、时间节点和人员分工。推荐采用迭代式开发,灵活应对变化。
1.2 资源分配策略
手上有哪些资源——人员、时间、预算、技术积累,必须做到心中有数。
团队建设:组建跨学科团队,除了技术人员,还要有领域专家支持。每个成员需要清楚自己的职责与协作方式。
时间管理:合理分配时间,确保关键里程碑按时达成。采用敏捷开发方法(Scrum、Kanban)可以提高效率。
资金投入:明确预算,重点投入到技术研发、数据获取和人才培养上。
知识共享:团队内部定期进行技术分享、工作坊、培训,持续提升整体水平。
第二部分:实现方案详解——用什么工具?怎么用?
整个项目分为四步,接下来逐一详解。

① 文本分块:将语料库切分成多个块,每个块分配一个块ID。这一步之前已经完成,尚未完成的可以回看历史内容。
工具:LangChain、LlamaIndex、Unstructured等
② 关系提取:对每个文本块,使用LLM提取概念及其语义关系,并为每个关系分配一个权重W1。同一对概念之间可以存在多个关系,每个关系作为一条边。
工具:Ollama、Zephyr、df2Graph、graph2Df等
③ 相关性计算:同一文本块中的概念,通过上下文邻近性产生关联,分配权重W2。同一对概念可能出现在多个块中。
工具:Pandas、NumPy
④ 可视化呈现:将相似的概念对分组,并对权重求和,最后连接起来。最终每个不同概念对之间只有一条边,带有权重和关系名称,形成可视化概念图,以网页形式输出。
工具:Seaborn、Pandas、NetworkX、Pyvis等
第三部分:跑一个实例——边跑边聊细节
说实话,你是不是直接跳到这里了?建议先回看前面的“心法”,磨刀不误砍柴工。
今天主要完成数据处理和关系提取,下一篇再完成连线与可视化。现在开始动手!
主要分为两块内容:
#A 创建AI实操环境:Miniconda + Jupyter Notebook
#B 实跑知识图谱,输出HTML网页文件
3.1 创建实操AI环境
首先在Ollama中部署一个Zephyr大模型,也可以替换为其他LLM。尚未学习部署的,可以查看之前的部署指南。
打开WSL,输入指令回车启动。如果是首次部署,会自动下载模型,占用显存约6GB。
ollama run zephyr

先将窗口挂在后台,后续代码会接入它。LLM的作用是根据文本块生成概念关系,效果如下图所示:

打开Miniconda,创建一个新环境,在该环境中完成数据处理与概念图生成。尚未搭建环境的,请参考之前的环境搭建指南。
创建新环境,在Miniconda的命令窗口中输入:
conda create --name kg python=3.10
环境名称为“kg”,指定Python 3.10。务必重新创建环境,不要沿用旧环境,养成良好习惯。
激活环境:
conda activate kg
安装依赖:
pip install pandas numpy networkx seaborn langchain pypdf2 pyvis tqdm yachalk unstructured "unstructured[pdf]"
安装Jupyter:
pip install jupyter
启动Jupyter:
jupyter-notebook

处理下载的文件
将会员盘中的文件下载后,放到一个纯英文路径下,使用cd进入该路径,然后双击打开名为“yiyiai-kg”的notebook。

简单介绍一下Jupyter的使用方法:右上角圆圈表示运行内核,如果是空白状态,重新进入即可。运行过程中圆圈会变灰色。选中代码块后,按Ctrl+Enter即可运行,也可以点击上方的三角形按钮。按顺序依次运行即可。每个模块的核心操作都已标注清楚,仔细阅读就能理解。

至此,环境就创建完成了。
3.2 实跑知识图谱,输出HTML网页文件
一边运行一边讲解核心代码。
设置默认输入与输出目录
数据统一存放在“F:/data/03”路径下,直接使用绝对路径即可。输出目录在同一文件夹内,系统会自动创建“output”文件夹。
## 定义输入数据的路径
data_dir = "F:/data/03"
inputdirectory = Path(f"./data_input/{data_dir}")
## 定义数据输出路径
out_dir = data_dir
outputdirectory = Path(f"./data_output/{out_dir}")

加载数据与拆分文本块
使用PDF加载器,并结合LangChain的递归拆分方法,将文件夹下所有PDF拆分为文本块。每个块大小设为1500,重叠部分为150。
loader = PyPDFDirectoryLoader(r"F:/data/03")
documents = loader.load()
splitter = RecursiveCharacterTextSplitter(
chunk_size=1500,
chunk_overlap=150,
length_function=len,
is_separator_regex=False,
)
pages = splitter.split_documents(documents)
print("Number of chunks = ", len(pages))
print(pages[3].page_content)
运行后返回拆分总数。示例中拆出了8个块,数据量越多,块数越多,处理时间也会相应增加。
创建数据框,分配块ID
from helpers.df_helpers import documents2Dataframe df = documents2Dataframe(pages) print(df.shape) df.head()

传给LLM,提取主体关系
将8个文本块保存为“chunks.csv”,传给LLM处理后返回“graph.csv”。
if regenerate:
concepts_list = df2Graph(df, model='zephyr:latest')
dfg1 = graph2Df(concepts_list)
if not os.path.exists(outputdirectory):
os.makedirs(outputdirectory)
dfg1.to_csv(outputdirectory/"graph.csv", sep="|", index=False)
df.to_csv(outputdirectory/"chunks.csv", sep="|", index=False)
else:
dfg1 = pd.read_csv(outputdirectory/"graph.csv", sep="|")
dfg1.replace("", np.nan, inplace=True)
dfg1.dropna(subset=["node_1", "node_2", 'edge'], inplace=True)
dfg1['count'] = 4
print(dfg1.shape)
dfg1.head()

提示词文件用于告诉LLM如何提取以及返回什么格式。如果效果不理想,可以修改提示词,或者更换模型。

计算相似度并合并数据框
同一份数据中可能包含含义相近的关系,需要先计算相似度再合并,才能准确呈现关系。
dfg = pd.concat([dfg1, dfg2], axis=0)
dfg = (dfg.groupby(["node_1", "node_2"]).agg({"chunk_id": ",".join, "edge": ','.join, 'count': 'sum'}).reset_index())
dfg

关键内容到这里就完成了。但知识图谱最重要的还是可视化——“图”本身至关重要。下一篇,我们会将这些数据转换为HTML格式,可视化为交互式网络图,并可以部署到公司内网,供所有员工使用。

你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:0基础实战本地大模型LangChain知识图谱节点识别匹配要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点Llama3模型架构与Llama2一致,核心提升来自数据工程:预训练数据量达15Ttoken,为Llama2的7倍,并优化数据质量与混合比例。算力需求激增,万卡H100集群成标配。Meta同时采用RoCE和InfiniBand网络方案,并重点改进了容错与故障恢复机制,训练效率提升约三倍。
AI金融助手Zocks与海托华独家合作,通过隐私保护技术自动化会议准备等行政事务,使顾问每周节省超10小时;Jump与信安顾问合作,以自主AI自动化手动流程,提升效率。二者均旨在用AI替代重复低附加值任务,推动金融服务行业加速拥抱智能化。
在Vidu中制作老式蒸汽火车怀旧视频需三步:先通过文生图生成带“静止画面”关键词的静帧;再用图生视频或文本重试让火车以“步行速度”缓行;最后用CapCut叠加蒸汽滤镜、调整LUT并导出为高比特率H 264以强化氛围与质感。
博通凭借730亿美元AI积压订单及106%的半导体收入增长,被列为2026年克劳德AI首选。其Tomahawk6交换机创下订单纪录,角色已超越芯片供应商,转向为超大规模企业提供定制硅芯片与集成网络解决方案。
- 日榜
- 周榜
- 月榜
热点快看
