本地化部署方案:GraphRAG+LangChain+Ollama 驱动 LLaMa 3.1 集成 Neo4j 实战

本地化部署方案:GraphRAG+LangChain+Ollama 驱动 LLaMa 3.1 集成 Neo4j 实战

本文将带您从零开始,用不到50行核心代码实现基于本地大模型 LLaMa 3.1 的 GraphRAG 应用开发。我们将整合 LangChain 工作流、Ollama 模型管理工具与 Neo4j 图数据库,构建一套支持实体关系挖掘与混合检索的增强生成系统,全程无需依赖云端 API,兼顾数据安全与开发效率。

一、先搞懂核心概念:什么是 GraphRAG?

传统 RAG(检索增强生成)依赖向量数据库的语义相似度匹配,容易丢失实体间的关联信息。而 GraphRAG(图检索增强生成) 则通过"节点-关系"的图结构建模数据,将分散的文本块转化为结构化知识网络,让 LLM 能基于实体关联进行推理,输出更具逻辑性的答案。

其核心价值在于:

  • 结构化上下文:将"蒂姆·库克""苹果公司"等实体抽象为节点,用"担任CEO"明确关系,形成可解释的知识图谱
  • 关联推理能力:支持跨文档挖掘间接关系,例如通过"库克-领导-苹果-收购-特斯拉"的链路回答企业合作问题

混合检索优势:结合图数据库的实体关联查询与向量数据库的语义搜索,平衡精确性与泛化性

如上图所示,GraphRAG 的典型架构包含三大环节:首先通过知识图谱捕获向量块间的关联关系,为向量检索结果补充结构化实体信息;接着将融合后的上下文输入 LLM 进行处理;最终生成兼顾事实准确性与逻辑连贯性的响应。该架构在客户服务(故障排查链路)、语义搜索(学术关系挖掘)、个性化推荐(用户兴趣图谱)等场景中表现尤为突出。

二、保姆级教程开始

在本文中,我们将结合使用LangChain、LLama 和 Ollama ,以及 Neo4j 作为图数据库。我们将创建一个关于一个拥有多家餐厅的大型意大利家庭的信息图,所以这里有很多关系需要建模。

先利用Ollama拉取llama3.1 8b模型:

打开代码文件,来到VS Code 中,你可以在左边看到我们将使用的多个文件。

配置运行Neo4j数据库

在进入代码之前,我们将设置 Neo4j。我为你创建了一个 Docker Compose 文件。所以我们将使用 neo4j 文件夹,里面有一个 jar 文件,这是我们创建图所需的插件。

要创建我们的数据库,只需运行 docker compose up:

这将设置所有内容,并且可以直接使用。可能需要几秒钟,之后你会看到数据库正在运行。

安装依赖

然后我们可以进入 Jupyter Notebook,首先安装所需的包:

我们需要安装 LangChain、OpenAI 的 LangChain、Ollama、LangChain Experimental,因为图解决方案目前在 LangChain 实验包中

我们还需要安装 Neo4j,以及用于在 Jupyter Notebook 中显示图的 py2neo 和 ipywidgets。

%pip install --upgrade --quiet langchain langchain-community langchain-openai langchain-ollama langchain-experimental neo4j tiktoken yfiles_jupyter_graphs python-dotenv 

导入类

安装完这些包后,我们可以导入所需的类。我们将从 LangChain 中导入多个类,例如 Runnable Pass Through、Chat Prompt Template、Output Parser 等。

我们还导入 Neo4j 的图类,这在 LangChain Community 包的 Graphs 模块中。我们还导入 Chat OpenAI 作为 Ollama 的后备模型。

在 LangChain Experimental 包中,我们有一个 Graph Transformer 模块,我们将从那里导入 LLM Graph Transformer,它利用复杂的提示将数据转换为可以存储在图数据库中的形式。

我们还将导入 Neo4j 的图数据库,不仅作为图数据库使用,还可以作为普通的向量数据库使用。

from langchain_core.runnables import RunnablePassthrough from langchain_core.prompts import ChatPromptTemplate from langchain_core.pydantic_v1 import BaseModel, Field from langchain_core.output_parsers import StrOutputParser import os from langchain_community.graphs import Neo4jGraph from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_openai import ChatOpenAI from langchain_community.chat_models import ChatOllama from langchain_experimental.graph_transformers import LLMGraphTransformer from neo4j import GraphDatabase from yfiles_jupyter_graphs import GraphWidget from langchain_community.vectorstores import Neo4jVector from langchain_openai import OpenAIEmbeddings from langchain_community.document_loaders import TextLoader from langchain_community.vectorstores.neo4j_vector import remove_lucene_chars from dotenv import load_dotenv load_dotenv() 

我们将采用混合方法,既使用图知识,也使用标准的文档搜索方式,即通过嵌入模型来搜索与查询最相似的文档

我们还将使用 dotenv 包,并在 Jupyter Notebook 中加载环境变量。在 .env 文件中,有一个 OpenAI API 密钥、一个 Neo4j URI、Neo4j 用户名和密码。你可以按原样使用这些信息,但在仓库中,它们将被命名为 .env.example。

下一步是创建与数据库的连接。所以我们实例化 Neo4j 图类,

这将建立与 Neo4j 的连接。

准备dummy_text.txt 数据集

你可以看到它描述了这个意大利家庭的大量信息,包括不同的名字、关系,如 Antonio 的妹妹 Amo、祖母等。这些信息稍后都将在我们的图中呈现。

我们将使用文本加载器将其加载到内存中,

然后使用文本分割器将其分割成多个块,这是标准的方法,以便 LLM 更容易处理信息。

LLM图转换函数创建文档块之间的所有关系

加载后,我们将设置我们的 LLM 图变换器,它负责将文档转换为 Neo4j 可以处理的形式。

基于环境变量 llm_type,目前我没有设置,所以默认是 Ollama。我们将实例化 ChatOllama 或 ChatOpenAI,然后将其传递给 LLM 图变换器的构造函数。

convert_to_graph_documents 方法将创建文档块之间的所有关系。我们传入创建的文档,计算可能需要一些时间,即使是这个很小的例子,也花了我大约 3 分钟时间,所以稍等片刻。

运行结果来了:这是一个图文档,你可以看到我们有一个 nodes 属性,它是一个包含不同节点的列表,具有 ID。我们可以看到 ID 类似于 Micos Family,类型是 Family,然后我们还有更多的节点,如 Love 概念节点、Tradition 等等。

他们之间也有关系,这些关系将被存储在 Neo4j 中。

可视化我们的图

当前我们还没有启动数据库,所以我们需要先运行 add_graph_documents 方法,提供图文档,然后将所有内容存储在 Neo4j 中。这也可能需要几秒钟时间。文档存储到数据库后,我们可以可视化它们。

首先我们要连接到数据库,我们将使用驱动方法,传入我们的 URI(存储在 Neo4j URI 环境变量中),还需要提供用户名和密码进行身份验证,并创建驱动实例。然后我们创建一个新会话,并使用会话的 run 方法对 Neo4j 运行查询。我们将使用这个查询语句:

如果你不熟悉 Neo4j 可能会觉得有点复杂,但它的意思是 Neo4j 应该返回所有通过 mentions 类型的关系连接的节点对,我们想返回 s, r, 和 t。s 是起始节点,r 是结束节点,t 是关系。

我们可以运行这个方法,并实际可视化我们的图:

现在我们可以向下滚动,这里我们可以看到这是我们的文档的完整知识图谱。正如你所看到的,这相当多,我们可以通过滚动来深入了解更多信息。这里我们可以看到一些实体,比如 Petro 是一个人,我们可以看到 Petro 喜欢厨房、喜欢大海,并且是另一个人 Sophia 的家长。

请添加图片描述

所以我们可以看到不同的实体通过不同的关系建模,最终你得到了这个非常大的知识图谱。我认为即使是对于我们的小数据集,这也实际上是很多内容。我个人非常喜欢这种图。现在我们来看一下这不仅仅是美观,实际上也很有用。

图的存储做完了,再来一个向量存储

下一步是从 Neo4j 创建一个向量存储,所以我们将使用 Neo4jVector 类,并使用 from_existing_graph 方法,在这里我们只传入嵌入模型,从现有图中计算嵌入。这样我们也可以执行向量搜索,最终我们将把这个向量索引转换成一个检索器,以便有一个标准化的接口。

为图数据库准备实体(Prompt实体识别)

现在我们有一个图数据库,存储了我们的文档,也有了普通的向量存储。现在我们可以执行检索增强生成。由于我们使用图数据库,我们需要从查询中提取实体,以便从图数据库中执行检索步骤。

图数据库需要这种实体,所以我们将创建一个名为 Entities 的自定义模型,继承自 BaseModel,我们希望提取实体,这可以通过提供这个属性 entities 来完成,它是一个字符串列表。这里是 LLM 的描述,所以我们希望提取文本中的所有人、组织和业务实体。

▲ Langchain教程操作有类似

然后我们创建一个 ChatPromptTemplate,系统消息是你正在从文本中提取组织、个人和业务实体。然后我们提供用户输入,并将我们的提示模板传递给 LLM,与结构化输出一起使用,这使用了 Entities 类。我将向你展示其效果。

我们得到了我们的实体链,并可以像这样调用它。我们传入问题 “Who are Nonna and Giovanni Corrado?”,所以我们有两个名字,执行调用方法后,我们可以看到输出是一个字符串列表,只有名字,

这些名字将用于查询图数据库。接下来是在 graph_retriever 函数中调用这个方法。首先从查询中提取实体,然后对 Neo4j 运行查询,我将向你展示最终效果。

我们创建了 graph_rae 函数,传入问题,提取实体,然后查询数据库。

我们问 “Who is Nonna?”,如果运行这个查询,我们可以看到 Nonna 拥有哪些节点和连接。她影响了 Conato,教导了孙子们,影响了新鲜意大利面,影响了 Amico,是家族的女族长。

创建一个混合检索器

然后我们创建一个混合检索器,使用 graph_retriever 和我们的向量存储检索器。我们定义一个函数 full_retriever,在这里设置我们的 graph_retriever 函数,并使用向量检索器,调用其 invoke 方法,获取最相关的文档。我们有了关系图和基于余弦相似度的最相关文档,最终我们将所有文档结合,返回最终数据集。这就是 full_retriever 的作用。

最终链

然后我们创建一个最终链,这是一个普通的 RAG 链,你在几乎所有初学者教程中都会找到这样的链。我们有两个变量,context 和 question,context 是向量存储或其他数据库的输出,question 是我们的问题。所有这些都将发送给 LLM,我们创建一个模板,然后使用 Lang 和表达式语言在这里创建我们的最终链。这将创建一个 runnable_parallel,我将展示其 invoke 方法。

我们只使用一个字符串输入,传递给 full_retriever 函数,保持问题不变,然后将 context 和 question 传递给我们的提示,以填充这些变量。填充这些变量后,我们将所有内容传递给 LLM,并将 LLM 的输出传递给字符串输出解析器。

现在我们可以问 “Who is Nonna Lucia? Did she teach anyone about restaurants or cooking?” 所有关于关系的东西,执行结果:

Generated Query: Nonna~2 AND Lucia~2 'Nonna Lucia is the matriarch of the Caruso family and a culinary mentor. She taught her grandchildren the art of Sicilian cooking, including recipes for Caponata and fresh pasta.' 

**我们可以看到答案是 Nonna Lucia 是 Corrado 家族的女族长和烹饪导师。她教导了她的孙子们西西里烹饪的艺术,**这确实是正确的。

这就是如何使用 Neo4j 执行图数据库 RAG。

附件:

以前看过的一个叫PP-Structure文档分析的项目,

信息抽出其中的实体识别。。。

▲ 信息抽取 是自然语言处理中的基础问题,即从自然语言文本中,抽取出特定的事件或事实信息,帮助我们将海量内容自动分类、提取和重构。

🌟希望这篇文章对你有帮助,感谢阅读!
[1] 全文代码:https://github.com/Ai-trainee/GraphRAG-with-Llama-3.1/tree/main
[2] GraphRA所有架构:https://gradientflow.com/graphrag-design-patterns-challenges-recommendations/
[3] https://microsoft.github.io/graphrag/

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传ZEEKLOG,朋友们如果需要可以微信扫描下方ZEEKLOG官方认证二维码免费领取【保证100%免费

在这里插入图片描述

为什么要学习大模型?

我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。

在这里插入图片描述
在这里插入图片描述

大模型入门到实战全套学习大礼包

1、大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!

img

2、大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。

在这里插入图片描述

3、AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

img

4、大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

img

5、大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

img
适用人群
在这里插入图片描述
第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传ZEEKLOG,朋友们如果需要可以微信扫描下方ZEEKLOG官方认证二维码免费领取【保证100%免费

Read more

从社死边缘拯救我:用 AR 眼镜打造“亲戚称呼助手“

从社死边缘拯救我:用 AR 眼镜打造“亲戚称呼助手“

从社死边缘拯救我:用 AR 眼镜打造"亲戚称呼助手 一个真实的新年灾难 大年初二,我跟着新婚妻子回娘家。 刚进门,七大姑八大姨就围了上来。一位头发花白的阿姨笑盈盈地递过来一个红包,我脑子里嗡的一声——这到底是妻子的哪位亲戚?大姨?小姨?还是什么远房表姑? “小张啊,还认识我不?” 我支支吾吾半天,最后还是妻子打了圆场:“这是大姨,小时候还抱过你呢!” 那一刻,我看到了大姨眼里的失望。这种社死现场,相信很多人都经历过:春节期间,走亲访友是必修课,但那些一年见一次的亲戚,名字和称呼根本记不住。尤其是刚结婚的新人、不常回家的打工人,简直是"称呼灾难"高发人群。 回家后,我下定决心:明年春节,我绝不能再叫错人。 思路:为什么是 AR 眼镜? 解决方案无非几种: ● 记在手机备忘录:掏手机、解锁、

Flutter 三方库 discord_interactions 的鸿蒙化适配指南 - 在 OpenHarmony 打造高效的社交机器人交互底座

Flutter 三方库 discord_interactions 的鸿蒙化适配指南 - 在 OpenHarmony 打造高效的社交机器人交互底座

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 discord_interactions 的鸿蒙化适配指南 - 在 OpenHarmony 打造高效的社交机器人交互底座 在现代社交应用与办公协同工具的开发中,集成强大的机器人(Bot)交互能力是提升活跃度的关键。discord_interactions 库为 Flutter 开发者提供了一套完整的、遵循 Discord 官方协议的交互模型,涵盖了从 Slash Commands(斜杠命令)到 Webhook 签名验证的核心功能。本文将深入解析如何在 OpenHarmony(鸿蒙)环境下,结合鸿蒙的安全机制与网络特性,完美适配 discord_interactions 到你的鸿蒙应用中。 前言 随着鸿蒙系统(HarmonyOS)进入原生应用开发的新纪元,跨平台社交工具的适配需求日益增长。discord_interactions 作为一个纯

Open Duck Mini v2完整指南:从零构建智能行走机器人伙伴

Open Duck Mini v2完整指南:从零构建智能行走机器人伙伴 【免费下载链接】Open_Duck_MiniMaking a mini version of the BDX droid. https://discord.gg/UtJZsgfQGe 项目地址: https://gitcode.com/gh_mirrors/op/Open_Duck_Mini 你是否梦想拥有一个能够自主行走、响应指令的智能机器人?Open Duck Mini v2正是为你量身打造的完美项目。这款42厘米高的开源机器人不仅外形精致可爱,更拥有强大的运动能力和智能化控制系统,让机器人技术变得触手可及。 为什么这个项目值得你投入时间? 在众多机器人项目中,Open Duck Mini v2以其独特的优势脱颖而出。项目总成本控制在400美元以内,让预算有限的爱好者也能轻松入门。更重要的是,所有设计文件、代码和文档完全开源,

英伟达开源DreamDojo:4.4万小时“梦境”,破解机器人数据鸿沟

英伟达开源DreamDojo:4.4万小时“梦境”,破解机器人数据鸿沟

摘要:本文深度解析英伟达开源的DreamDojo世界模型,详解DreamDojo的核心定位与开源战略,拆解44711小时超大规模数据集的优势、连续潜在动作的技术创新,剖析其实时遥操作、策略评估等应用场景,对比其与1XWM、Genie 3的技术路线差异,解读其与扬·勒丘恩物理AI理念的契合点,探讨DreamDojo对破解机器人物理鸿沟、推动物理AI发展的核心作用,为技术从业者、行业观察者、投资者提供最专业、最全面的深度解读,助力了解2026年世界模型与物理AI领域的最新技术革新与赛道趋势。 一、行业痛点:数据鸿沟,困住人形机器人的核心瓶颈 长期以来,“数据短缺+数据低效”是制约机器人行业发展的致命痛点——机器人想要掌握一项技能,需要海量真实场景下的动作数据进行训练,但真实数据的采集的成本极高、周期极长,且场景覆盖有限;与此同时,传统机器人数据集规模偏小、多样性不足,难以支撑通用型机器人的训练需求,形成了难以逾越的“数据鸿沟”。 更关键的是,多数企业陷入了“重指令、轻物理”的误区:大量布局视觉-语言-动作(VLA)模型,过度依赖文本推理驱动机器人动作,却忽略了直觉物理规律的核心价值。