当前位置: 首页 > news >正文

从零到一:基于Ollama与Neo4j的GraphRAG本地实践与图谱可视化

1. 环境准备与工具安装

在开始构建GraphRAG本地知识图谱之前,我们需要先准备好必要的工具和环境。这里假设你使用的是Windows系统,并且已经安装了Python 3.8或更高版本。如果你还没有安装Python,建议先去官网下载安装。

首先需要安装的是Anaconda,这是一个非常方便的Python环境管理工具。安装完成后,我们可以创建一个专门的conda环境来运行GraphRAG:

conda create -n graphrag python=3.10 conda activate graphrag

接下来安装Ollama,这是一个强大的本地大模型运行框架。Ollama的安装非常简单:

pip install ollama

安装完成后,我们需要下载并运行一些基础模型。这里推荐使用llama2作为基础语言模型,nomic-embed-text作为嵌入模型:

ollama pull llama2 ollama pull nomic-embed-text

对于知识图谱存储和可视化,我们需要安装Neo4j。Neo4j提供了社区版,可以直接从官网下载安装包。安装过程中记得设置好用户名和密码,这些信息后面会用到。

最后,我们需要克隆GraphRAG的源代码仓库:

git clone https://github.com/microsoft/graphrag cd graphrag pip install -r requirements.txt

注意:在Windows系统上可能会遇到一些路径相关的问题,建议将所有项目都放在用户目录下的短路径中,避免使用包含中文或空格的路径。

2. GraphRAG配置与模型加载

成功安装所有依赖后,接下来就是配置GraphRAG使其能够正确使用本地部署的Ollama模型。这是整个过程中最容易出错的环节,需要特别注意。

首先修改graphrag目录下的settings.yaml文件。这个文件控制着GraphRAG的核心参数。我们需要修改以下几个关键部分:

llm: provider: openai model: llama2 api_base: http://localhost:11434/v1 temperature: 0.3 max_tokens: 4096 embedding: provider: openai model: nomic-embed-text api_base: http://localhost:11434/api

这里有几个关键点需要注意:

  1. api_base的地址必须正确指向本地Ollama服务的端口(默认是11434)
  2. llm部分的api_base需要以/v1结尾,而embedding部分的api_base需要以/api结尾
  3. 模型名称必须与Ollama中实际下载的模型名称完全一致

接下来需要修改.env文件,这个文件控制着一些环境变量:

GRAPHRAG_API_KEY=ollama GRAPHRAG_CLAIM_EXTRACTION_ENABLED=True

提示:如果后续运行中出现模型加载失败的问题,可以尝试先单独测试Ollama服务是否正常工作。可以通过命令行运行ollama list来查看已安装的模型,或者运行ollama run llama2来直接与模型交互。

3. 代码适配与问题排查

即使完成了上述配置,直接运行GraphRAG可能还是会遇到各种问题。这是因为GraphRAG默认是为云端API设计的,需要进行一些代码修改才能适配本地Ollama服务。

第一个需要修改的文件是graphrag/llm/openai/openai_embeddings_llm.py。找到embeddings_create方法,将其替换为以下内容:

async def embeddings_create(self, input, **kwargs): args = { "model": self.configuration.model, **(kwargs.get("model_parameters") or {}), } embedding_list = [] for inp in input: embedding = ollama.embeddings(model="nomic-embed-text", prompt=inp) embedding_list.append(embedding["embedding"]) return embedding_list

第二个需要修改的文件是graphrag/query/llm/oai/embedding.py。找到_embed_with_retry方法,修改其实现:

def _embed_with_retry(self, chunk, **kwargs): try: embedding = ollama.embeddings( model="nomic-embed-text", prompt=chunk )['embedding'] return embedding, len(chunk) except Exception as e: self._reporter.error( message="Error embedding chunk", details={self.__class__.__name__: str(e)}, ) raise

修改完成后,建议先运行一个简单的测试脚本来验证配置是否正确:

import ollama response = ollama.embeddings( model="nomic-embed-text", prompt="This is a test sentence." ) print(len(response["embedding"])) # 应该输出768

如果遇到"Columns must be same length as key"错误,可以尝试调整settings.yaml中的chunk_size参数,将其设置为300或更小。这是因为本地模型的上下文窗口可能比云端模型小。

4. Neo4j配置与数据导入

当GraphRAG能够正常运行后,下一步就是将生成的知识图谱导入Neo4j进行可视化和查询。

首先确保Neo4j服务已经启动。可以在命令行中运行:

neo4j console

服务启动后,在浏览器中访问http://localhost:7474,使用安装时设置的用户名和密码登录。

在GraphRAG生成知识图谱之前,我们需要在Neo4j中创建一个新的数据库:

  1. 停止Neo4j服务
  2. 打开Neo4j的conf目录(通常在安装目录下)
  3. 编辑neo4j.conf文件,取消注释并修改以下行:
dbms.default_database=graphrag
  1. 保存文件并重新启动Neo4j服务

现在可以运行GraphRAG来生成知识图谱了。GraphRAG支持多种数据源,这里以处理PDF文档为例:

from graphrag import GraphRAG graphrag = GraphRAG() graphrag.add_document("path/to/your/document.pdf") graphrag.build() # 这会花费一些时间,取决于文档大小和硬件性能

构建完成后,数据会自动导入到Neo4j中。回到Neo4j的Web界面,在查询框中输入:

MATCH (n) RETURN n LIMIT 50

这样就可以看到导入的知识图谱节点了。Neo4j提供了丰富的可视化选项,可以通过调整节点大小、颜色和布局来更好地理解知识图谱的结构。

提示:如果数据量很大,可视化可能会比较卡顿。这时可以使用Neo4j的过滤功能,先查看特定类型的节点或关系。例如,只查看某个主题相关的节点:

MATCH (n:Concept)-[r]->(m) WHERE n.name CONTAINS '人工智能' RETURN n, r, m

5. 常见问题与优化建议

在实际使用过程中,可能会遇到各种问题。下面列出一些常见问题及其解决方法:

  1. 模型加载失败

    • 确保Ollama服务正在运行(ollama serve
    • 检查settings.yaml中的模型名称是否与Ollama中的完全一致
    • 尝试降低模型的temperature参数
  2. 内存不足

    • 减少chunk_size参数的值
    • 使用更小的基础模型
    • 关闭其他占用内存的程序
  3. Neo4j连接问题

    • 检查Neo4j服务是否启动
    • 确认bolt端口(默认7687)没有被防火墙阻止
    • 在settings.yaml中正确设置Neo4j的连接参数
  4. 知识图谱质量不高

    • 尝试不同的基础模型组合
    • 调整GraphRAG的提取参数
    • 对输入文档进行预处理,去除无关内容

为了提高系统性能,可以考虑以下优化措施:

  • 为Ollama和Neo4j分配更多内存
  • 使用SSD存储
  • 对频繁查询的结果建立索引
  • 定期清理Neo4j中的旧数据

对于大规模知识图谱,建议采用增量构建的方式,而不是一次性处理所有文档。GraphRAG支持增量更新,可以只处理新增或修改的文档部分。

6. 进阶应用与扩展

成功搭建基础系统后,可以进一步探索GraphRAG和Neo4j的高级功能。

一个实用的扩展是为知识图谱添加全文检索功能。Neo4j提供了全文索引支持,可以显著提高查询效率:

CREATE FULLTEXT INDEX entitySearch FOR (n:Entity) ON EACH [n.name, n.description]

GraphRAG生成的图谱可以与其他数据源结合。例如,可以将公司内部数据库中的结构化数据导入Neo4j,与GraphRAG生成的语义网络进行关联。

对于需要长期维护的知识图谱,建议建立定期更新的自动化流程。可以编写脚本定时检查新文档,自动触发GraphRAG处理并更新Neo4j中的数据。

Neo4j还提供了强大的图算法库,可以用来分析知识图谱的结构特征:

CALL gds.pageRank.stream({ nodeProjection: 'Concept', relationshipProjection: 'RELATED' }) YIELD nodeId, score RETURN gds.util.asNode(nodeId).name AS name, score ORDER BY score DESC LIMIT 10

这个查询会返回知识图谱中最重要的概念节点,基于PageRank算法计算得出。

最后,可以考虑将整个系统容器化,使用Docker来管理Ollama、GraphRAG和Neo4j服务。这样可以简化部署流程,也便于在不同环境间迁移。

http://www.jsqmd.com/news/628784/

相关文章:

  • 淮安车间如何高效降温?蒸发冷省电空调或是理想之选!
  • 解决大规模多标签图像分类挑战的Open Images数据集完整实现
  • 聊聊2026年能给施工指导、售后投诉少的MPP电力管厂家哪家性价比高 - 工业推荐榜
  • 微信小程序Python随便点奶茶在线点餐系统小程序
  • 5个步骤彻底掌握浏览器用户脚本:OpenUserJS.org完整指南
  • Android设备标识终极解决方案:Android_CN_OAID技术深度解析与最佳实践
  • XDM浏览器插件实战指南:解锁高效下载与视频捕获新境界
  • 【技术升级】无GUI版GRACE工具箱RL06数据读取核心函数解析与实战
  • 探讨明星代理公司选购,北京哪家服务好又靠谱? - myqiye
  • 手把手教你用运放和基准源,把±10V信号变成ADC能吃的0-4V(附完整计算过程)
  • 终极指南:4步智能配置黑苹果,OpCore Simplify让小白也能轻松搞定
  • Raspberry Pi Imager完整指南:三步快速部署树莓派系统
  • 如何用AI让模糊照片瞬间清晰:Real-ESRGAN-ncnn-vulkan终极指南
  • 上海有实力的旧房改造装修企业选购要点有哪些 - 工业设备
  • Qwen3-Reranker效果展示:政府公文写作中政策依据与原文段落匹配
  • CTF实战:Base编码变体与多层嵌套解密技巧
  • Win11 + WSL2 + VS Code:打造高效跨平台开发环境全攻略
  • 3步搞定微信聊天记录永久备份:开源工具的完整实践指南
  • 模态分析必看!ABAQUS点质量与材料密度的选择陷阱及工程验证技巧
  • SM2加密实战:用C++封装GmSSL库,处理密钥文件与二进制密文的那些坑
  • 测序数据翻车现场:我是如何用BLAST揪出那些隐藏的污染reads的
  • 分享2026年知名的演员签约培养公司,靠谱品牌有哪些 - mypinpai
  • 深度解析MIT四足机器人控制:从ROS+PyBullet仿真到实际部署的完整指南
  • Raspberry Pi Imager终极指南:3分钟完成树莓派系统部署的免费神器
  • 性能监控体系
  • 告别树莓派+USB加速棒:实测OAK-D在机器人项目中的性能与资源占用对比
  • ESP32-C3 USB串行/JTAG控制器:从零构建高效开发与调试环境
  • 2026届毕业生推荐的十大降AI率助手解析与推荐
  • FanControl深度解析:突破Windows风扇控制瓶颈的专业级解决方案
  • 零基础部署Qwen3-14B:手把手教你解决Ollama兼容性问题,5分钟跑通