玩转大语言模型——使用graphRAG+Ollama构建知识图谱

系列文章目录

玩转大语言模型——ollama导入huggingface下载的模型
玩转大语言模型——langchain调用ollama视觉多模态语言模型
玩转大语言模型——使用graphRAG+Ollama构建知识图谱


文章目录

  • 系列文章目录
  • 前言
  • 下载和安装
    • 用下载项目的方式下载并安装
    • 用pip方式下载并安装
  • 生成知识图谱
    • 初始化文件夹
    • 修改模型配置
    • 修改知识库生成配置
    • 创建索引
  • 搜索


前言

GraphRAG是微软开发并开源的一种图基检索增强生成(Graph-based Retrieval Augmented Generation)框架。GraphRAG结合了知识图谱(Knowledge Graph)和大型语言模型(LLM)的技术优势,旨在提升信息处理和问答能力。其基本原理在于,通过知识图谱从非结构化文本中提取结构化信息,并利用大型语言模型的生成能力,为用户提供准确、全面的回答。在本篇中将介绍如何使用GraphRAG结合大模型构建知识图谱。

下载和安装

下载过程分为两种,一种是下载项目,另外一种是直接使用pip下载,两种用法最后的效果是一致的,如果不需要修改源码,可以选择pip方式下载,这样比较方便。但在本篇中,两种都会提到,读者可以根据自己喜好选择。


用下载项目的方式下载并安装

下载
项目地址:https://github.com/microsoft/graphrag
在这里插入图片描述
为了方便大家下载,这里把git下载方式直接放到这里,直接执行就好。
安装

git clone https://github.com/microsoft/graphrag.git   

切换到graphrag的下载目录,配置好虚拟环境之后,在命令行执行以下命令安装poetry资源包管理工具及相关依赖.

pip install poetry 
poetry install

用pip方式下载并安装

没错,用pip方式下载只需要执行一个命令行就可以了

pip install graphrag

生成知识图谱

初始化文件夹

首先在项目文件夹下新建一个文件夹,笔者新建的文件夹为./ragtest,如果是用项目方式下载,直接在项目下新建,如果是使用pip方式下载的,新建一个项目在新建的项目里新建文件夹。
再在./ragtest文件夹下新建一个input文件夹,将要生成知识图谱的文件放到input文件夹中。注意只能是txt文件,编码格式必须为 utf-8。

然后在命令行执行以下命令

graphrag init --root ./ragtest

执行命令后会生成配置文件settings.yaml和提示词模板prompts


修改模型配置

在修改之前我们首先需要下载相关模型,在本篇中使用的是Ollama
使用Ollama下载语言模型mistral和编码模型nomic-embed-text

ollama pull mistral
ollama pull nomic-embed-text

下载完可以使用ollama list查看一下有没有下载成功

不过当前的模型并不能直接拿来使用,我们需要修改一下,不如可能会出现一些奇怪的错误,笔者遇到的问题是在生成entities时识别不到entity。

ollama show --modelfile mistral:latest > Modelfile

打开Modelfile文件,在PARAMETER后面这里添加配置。

PARAMETER num_ctx 10000

然后使用ollama根据配置创建新的模型

ollama create mistral:10k -f Modelfile

修改知识库生成配置

因为我们构建知识库的过程中需要使用到大语言模型和embedding模型,所有需要将设置修改为我们所使用的模型。
打开初始化文件目录,笔者的目录是./ragtest/settings.yaml,修改以下两部分,将llm.model修改为mistral:10k,将llm.api_base修改为http://localhost:11434/v1,将embeddings.llm.model修改为nomic-embed-text,将embeddings.api_base修改为http://localhost:11434/v1

llm:api_key: ${GRAPHRAG_API_KEY}type: openai_chat # or azure_openai_chatmodel: mistral:10kmodel_supports_json: false # recommended if this is available for your model.# max_tokens: 4000# request_timeout: 180.0api_base: http://localhost:11434/v1embeddings:## parallelization: override the global parallelization settings for embeddingsasync_mode: threaded # or asynciollm:api_key: ${GRAPHRAG_API_KEY}type: openai_embedding # or azure_openai_embeddingmodel: nomic-embed-textapi_base:  http://localhost:11434/v1

创建索引

构建索引的过程就是构建知识图谱的过程,同样的,读者需要将笔者的路径替换为自己的路径。

graphrag index --root ./ragtest

如果运行显示如下说明创建成功
在这里插入图片描述

搜索

查询分为局部搜索(Local Search)和全局搜索(Global Search)。当用户的问题需要理解输入文档中提到的特定实体,需要详细了解某个实体及其相关信息时,局部搜索非常有效。而全局搜索在跨数据集进行信息总结上要优于局部搜索。
局部搜索

graphrag query --root ./ragtest --method local --query "要查询的问题"

全局搜索

graphrag query --root ./ragtest --method global --query "主要内容是什么"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/3541.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx三种不同类型的虚拟主机(基于域名、IP 和端口)

🏡作者主页:点击! Nginx-从零开始的服务器之旅专栏:点击! 🐧Linux高级管理防护和群集专栏:点击! ⏰️创作时间:2025年1月15日13点14分 目录 1. 基于域名的虚拟主机 …

pytest-instafail:让测试失败信息即时反馈

pytest-instafail:让测试失败信息即时反馈 前言一、简介二、优势三、安装与使用3.1 未安装时运行情况3.2 安装3.3 已安装时运行情况3.3 pytest.ini 配置选项 四、对比 总结 前言 当测试用例数量庞大时,定位测试失败的原因往往耗时费力。此时,…

从 0 开始实现一个 SpringBoot + Vue 项目

从 0 开始实现一个 SpringBoot Vue 项目 从 0 开始实现一个 SpringBoot Vue 项目 软件和工具创建 SpringBoot 后端项目创建 MySQL 数据库配置文件实现增删改查接口 Model 层mapper 层service 层controller 层测试 实现项目功能接口 代码测试 创建 Vue 前端 安装 Node.js配置…

5. 推荐算法的最基础和最直观的认识

1.性别年龄转换为统一的计量单位 所谓推荐,就是替别人推荐,比如工厂A需要招男员工,希望大家推荐认识的人。那么在这里,就有了推荐的概念,限定条件是男。我们知道,人的性别一般分为男或者女。在这里假设把男…

ASP.NET Core - 配置系统之配置添加

ASP.NET Core - 配置系统之配置添加 2. 配置添加 2. 配置添加 配置系统可以读取到配置文件中的信息,那必然有某个地方可以将配置文件添加到配置系统中。之前的文章中讲到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 对象) 中有一个 Config…

AI编程工具横向评测--Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发

AI编程工具横向评测–Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发 数据分析类应用的开发,指的是首先进行数据分析,比如统计学分析、机器学习模型的构建等,然后将分析的流程开发成数据分析类的工具,或者将数据分…

HBase实训:纸币冠字号查询任务

一、实验目的 1. 理解分布式数据存储系统HBase的架构和工作原理。 2. 掌握HBase表的设计原则,能够根据实际业务需求设计合理的表结构。 3. 学习使用HBase Java API进行数据的插入、查询和管理。 4. 实践分布式数据存储系统在大数据环境下的应用,…

算法与数据结构——复杂度

目录 一 数据结构前言 1 数据结构 2 算法 3 算法与数据结构的关系 二 算法效率 1 算法效率: 2 复杂度 2.1 概念: 2.2分类: 2.3 空间复杂度在计算机高速发展的现代重要吗? 3 复杂度的重要性 三 时间复杂度…

usb通过hdc连接鸿蒙next的常用指令

参考官方 注册报名https://www.hiascend.com/developer/activities/details/44de441ef599450596131c8cb52f7f8c/signup?channelCodeS1&recommended496144 hdc-调试命令-调测调优-系统 - 华为HarmonyOS开发者https://developer.huawei.com/consumer/cn/doc/harmonyos-guid…

论文笔记-arXiv2025-A survey about Cold Start Recommendation

论文笔记-arXiv2025-Cold-Start Recommendation towards the Era of Large Language Models: A Comprehensive Survey and Roadmap 面向大语言模型(LLMs)时代的冷启动推荐:全面调研与路线图1.引言2.前言3.内容特征3.1数据不完整学习3.1.1鲁棒…

如何将数据库字符集改为中文,让今后所有的数据库都支持中文

最后一行有我自己的my.ini文件 数据库输入中文数据时会变为乱码, 这个时候,我们为每个数据库设置字符集,太过于麻烦,为数据库单独设置重启后又会消失 Set character_set_database’utf8’; Set character_set_server’utf8’; …

AI刷题-小R的随机播放顺序、不同整数的计数问题

目录 一、小R的随机播放顺序 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、 不同整数的计数问题 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 最终…

从零搭建SpringBoot3+Vue3前后端分离项目基座,中小项目可用

文章目录 1. 后端项目搭建 1.1 环境准备1.2 数据表准备1.3 SpringBoot3项目创建1.4 MySql环境整合,使用druid连接池1.5 整合mybatis-plus 1.5.1 引入mybatis-plus1.5.2 配置代码生成器1.5.3 配置分页插件 1.6 整合swagger3(knife4j) 1.6.1 整…

在.NET用C#将Word文档转换为HTML格式

将Word文档转换为HTML格式尤其具有显著的优势,它不仅能够确保文档内容在多种设备和平台上保持一致灵活的显示,还便于通过网络进行传播和集成到各种Web应用中。随着越来越多的企业和开发者寻求更灵活、更具兼容性的文件处理方式,.NET框架下的C…

GPT-5 传言:一场正在幕后发生的 AI 变革

新的一年,让我们从一个引人入胜的话题开始:如果我告诉你,GPT-5 并非虚构,而是真实存在呢?它不仅真实存在,而且正在你看不见的地方悄然塑造着世界。我的基本假设是:OpenAI 已经秘密开发出 GPT-5&…

【机器学习实战】kaggle 欺诈检测---使用生成对抗网络(GAN)解决欺诈数据中正负样本极度不平衡问题

【机器学习实战】kaggle 欺诈检测---如何解决欺诈数据中正负样本极度不平衡问题https://blog.csdn.net/2302_79308082/article/details/145177242 本篇文章是基于上次文章中提到的对抗生成网络,通过对抗生成网络生成少数类样本,平衡欺诈数据中正类样本极…

ZNS SSD垃圾回收优化方案解读-2

四、Brick-ZNS 关键设计机制解析 Brick-ZNS 作为一种创新的 ZNS SSD 设计,聚焦于解决传统 ZNS SSDs 在垃圾回收(GC)过程中的数据迁移低效问题,其核心特色为存储内数据迁移与地址重映射功能。在应用场景中,针对如 Rock…

浅谈云计算14 | 云存储技术

云存储技术 一、云计算网络存储技术基础1.1 网络存储的基本概念1.2云存储系统结构模型1.1.1 存储层1.1.2 基础管理层1.1.3 应用接口层1.1.4 访问层 1.2 网络存储技术分类 二、云计算网络存储技术特点2.1 超大规模与高可扩展性2.1.1 存储规模优势2.1.2 动态扩展机制 2.2 高可用性…

C++ 强化记忆

1 预处理指令 # include <> #include <filename> 添加系统头文件。 #include "filename" 添加自定义头文件。 # include <iostream> 对应使用cout cin的情况下需要添加 # include <string> 对应使用字符串情况 # include <fstream> …