安装GraphRAG

news2024/11/25 19:55:26

安装GraphRAG

本文没有安装成功,一直卡在构建图节点。

我用的思路是GraphRAG+Ollama(大语言模型)+Xinference(词嵌入)。找到的其他思路是,修改源码。

1 简介

1.1 GraphRAG

GraphRAG是微软开源的一种基于图的检索增强生成 (RAG) 方法。

# 参考地址
https://microsoft.github.io/graphrag/posts/get_started/

# Github地址
https://github.com/microsoft/graphrag

1.2 本地大模型管理工具

比较出名的本地化大模型管理管理工具包括Ollama、XInference、LM Studio、LocalAI。

(1) Ollama

Ollama是一个专注于本地部署大型语言模型的工具,旨在简化部署和管理大型语言模型的过程。它通过提供便捷的模型管理、丰富的预建模型库、跨平台支持以及灵活的自定义选项,使得开发者和研究人员能够在本地环境中高效利用大型语言模型进行各种自然语言处理任务。

# 官网地址
https://ollama.com/

(2) XInference

Xorbits Inference (Xinference) 是一个国产的开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并创建强大的 AI 应用。

# 官网地址
https://inference.readthedocs.io/en/latest/

# Docker安装地址
https://inference.readthedocs.io/zh-cn/latest/getting_started/using_docker_image.html

# 快速入门
https://inference.readthedocs.io/zh-cn/latest/models/model_abilities/index.html

# Github地址
https://github.com/xorbitsai/inference

(3)LocalAI

LocalAI是免费的开源OpenAI替代品。LocalAI作为一个替代REST API的插件,与OpenAI(Elevenlabs,Anthropic…)API规范兼容,用于本地人工智能推理。它允许您使用消费级硬件在本地或本地运行LLM、生成图像、音频(而不仅仅是),支持多个型号系列。不需要GPU。

# 官网地址
https://localai.io/

# Github
https://github.com/go-skynet/LocalAI

(4)LM Studio

LM Studio 是一款桌面应用程序,用于本地运行大型语言模型(LLMs),提供用户友好的图形用户界面(GUI),适合初学者。它支持多个操作系统,专注于易用性,非常适合希望在自有设备上运行如GPT和LLaMA等模型的非技术用户。

# 官网地址
https://lmstudio.ai/

1.3 其他

基于本地大模型管理工具已经其他开源项目可以快速实现系统.

基于chatbox实现模型的对话

# Github地址
https://github.com/Bin-Huang/chatbox

# 官网地址
https://chatboxai.app/

使用Mermaid实现在前端绘制流程图

# 官网地址
https://mermaid.js.org/

# Github地址
https://github.com/mermaid-js/mermaid

2 安装Xinference

2.1 Docker安装Xinference

⚠️ Xinference默认使用的是HuggingFace上的镜像文件,可以通过”XINFERENCE_MODEL_SRC“参数设置国内的ModelScope。

# 参数说明
# XINFERENCE_MODEL_SRC:设置镜像源;
# XINFERENCE_HOME:设置Xinference的根目录;
docker run -itd \
--name=xinference \
-p 9997:9997 \
-e XINFERENCE_MODEL_SRC=modelscope \
-e XINFERENCE_HOME=/data \
-v /home/xinference/data:/data \
--gpus all \
xprobe/xinference:v0.15.4 xinference-local -H 0.0.0.0 --log-level debug

访问地址

# UI地址
http://192.168.137.64:9997/

⚠️ **Docker使用GPUS的错误:**提示docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].错误解决方法,是由于Docker缺少依赖包导致,我的系统是Cent)S7.

# 设置yum源头
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-runtime.repo

# 下载依赖包
yum install nvidia-container-runtime

# 重启docker
systemctl restart docker

2.2 配置模型

下面使用的页面配置,也可以根据自己的实际需求,构建自己的依赖环境,创建模型。

(1)使用页面

首页,从首页的上面导航可以看出有语言模型、嵌入模型等分类,可以根据自己的需求定制模型。

在这里插入图片描述

(2)模型配置

此处以Qwen2.5为例,可以配置Transformers、vLLM、SGLang等类型,同时可以选择不同的参数,最后点击下面的Launch(小火箭)。

在这里插入图片描述

(3)初始化完成

Qwen大模型

在这里插入图片描述

点击右侧的按钮,会跳出模型对话,方便实时对话。

在这里插入图片描述

BGE向量模型
在这里插入图片描述

2.3 调用模型

(1)调用Qwen模型

curl -X 'POST' \
  'http://127.0.0.1:9997/v1/chat/completions' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "qwen2.5-instruct",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "What is the largest animal?"
        }
    ]
  }'

在这里插入图片描述

(2)调用BGE向量模型

curl -X 'POST' \
  'http://127.0.0.1:9997/v1/embeddings' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "bge-base-en",
    "input": "What is the capital of China?"
  }'

在这里插入图片描述

Xinference支持的方式

对话生成:https://platform.openai.com/docs/api-reference/chat
生成: https://platform.openai.com/docs/api-reference/completions
向量生成:https://platform.openai.com/docs/api-reference/embeddings

3 安装Ollama

3.1 命令安装Ollama

# Ollama的网站
https://ollama.com/

# 安装方法 
https://github.com/ollama/ollama/blob/main/docs/linux.md

# 自动安装下载脚本文件,并执行
curl -fsSL https://ollama.com/install.sh | sh

# 方法1:在官网上手动安装Ollama(推荐)
curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz
# 执行命令
sudo tar -C /usr -xzvf ollama-linux-amd64.tgz


# 方法2:在GitHub上手动下载
https://github.com/ollama/ollama/releases
# 找到相应的版本后,选择相应额文件,例如:我选择的是下面文件
https://github.com/ollama/ollama/releases/download/v0.3.12/ollama-linux-amd64.tgz
# 下载完成后,执行下面的命令,会显示执行过程
sudo tar -C /usr -xzvf ollama-linux-amd64.tgz

# 执行完后,启用新的终端,执行下面命令,否则会出现“/usr/local/bin/ollama: No such file or directory”错误
# 直接启动服务
ollama serve
# 后台执行的命令,注意目录
nohup ollama serve > ollama.log 2>&1 &

# 查看版本号
ollama -v

# 显示模型列表
ollama list

# 使用帮助
ollama -h 

3.2 在线初始化模型

# 使用Ollama初始化向量模型
# 注意:可根据自己的实际需求选择高版本
# 下载all-minilm:l6-v2向量模型
# 地址:https://ollama.com/library/all-minilm:l6-v2
ollama pull all-minilm:l6-v2


# 下载Qwen2.5文本模型
# 地址;https://ollama.com/library/qwen2.5:1.5b-instruct
ollama pull qwen2.5:1.5b-instruct

3.3 离线初始化模型

1 找到后缀GGUF

后缀GGUF类型的模型文件是一种以二进制格式存储数据参数的预训练模型,可支持在CPU上推理的量化模型。

# 在ModelScope和HuggingFace上找到相应的文件,然后下载下来
Qwen2.5-1.5B-Instruct-GGUF

2 配置Modelfile

模型目录

--Modelfile
--Qwen2.5-1.5B-Instruct-GGUF

Modelfile文件的内容,只有1行命令

FROM ./Qwen2.5-1.5B-Instruct-GGUF

3 创建模型

# 创建模型,模型名称qwen2.5-1.5b-instruct可以自定义
ollama create qwen2.5:1.5b-instruct -f ./Modelfile

# 运行模型
ollama run qwen2.5:1.5b-instruct

3.4 调用模型

# 测试Qwen模型
curl http://localhost:11434/api/generate -d '{
  "model": "qwen2.5:1.5b-instruct",
  "prompt": "Why is the sky blue?",
  "stream": false
}'

# 测试向量模型
curl http://localhost:11434/api/embeddings -d '{
  "model": "all-minilm:l6-v2",
  "prompt": "The sky is blue because of Rayleigh scattering"
}'

4 安装LocalAI

4.1 Docker安装LocalAI

使用docker安装LocalAI,注意LocalAI的镜像很大,因为默认安装了几个模型。

# 注意主机的CUDA版本号
docker run -itd \
--name local-ai \
-p 8080:8080 \
-v /home/localai/models:/build/models \
--gpus all \
localai/localai:v2.22.0-aio-gpu-nvidia-cuda-12


# 注意可以选择cpu版本
docker run -itd \
--name local-ai \
-p 8080:8080 \
localai/localai:v2.22.0-aio-cpu

访问地址

# 网页地址
http://192.168.137.64:8080/

# 浏览模型的地址,可能会很慢,跟网速有关
http://192.168.137.64:8080/browse/

4.2 配置模型

系统首页,系统默认已经安装了gpt-4、gpt-4o、jina-reranker-v1-base-en、stablediffusion、text-embedding-ada-002、tts-1、whisper-1等多个模型,由于网络限制问题,不能直接使用。

在这里插入图片描述

⚠️ **问题1:**LocalAI使用的是HuggingFace上的镜像文件,国内无法直接下载,可以使用下面的方法解决.

下载GGUF或者bin镜像文件

HuggingFace上的"https://huggingface.co/bartowski"地址上有很多GGUF文件,可以直接使用。

注意:不同模型的地址不太一样,可根据自己的需求在系统上找到镜像,然后点击Install,如果安装失败会提示下载失败和模型路径

# 在下面HuggingFace仓库中下载需要的GGUF文件
# 由于"https://huggingface.co/bartowski"不能直接访问,使用下面的地址访问.
https://hf-mirror.com/bartowski

上传到容器共享的目录下,上传到目录后,可以在Home菜单下直接看到,也可以在chat菜单下选择模型后使用。

# 我创建的容器共享目录如下
/home/localai/models

上传后的目录
在这里插入图片描述

系统上可以直接看到模型

在这里插入图片描述

4.3 调用模型

在这里插入图片描述

使用命令访问

curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{
  "model": "Qwen2.5-0.5B-Instruct-Q4_K_M.gguf",
  "messages": [{"role": "user", "content": "Say this is a test!"}],
  "temperature": 0.7
}'

在这里插入图片描述

5 安装graphrag

⚠️ Python版本:3.10.6;graphrag版本:0.3.6

5.1 安装依赖

# 创建目录,虚拟环境和应用全部放在graphrag
mkdir graphrag

# 注意Python环境Python3.10-3.12
# 创建虚拟环境
python -m venv pygraphrag

# 激活虚拟环境
source pygraphrag/activate

# 安装graphrag
pip install graphrag -i https://pypi.tuna.tsinghua.edu.cn/simple

5.2 初始化GraphRAG

# 创建ragtest
mkdir /home/ragtest

# 下载数据
curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt > /home/ragtest/input/book.txt

# 使用命令初始化配置
# ragtest初始化文件的目录
python -m graphrag.index --init --root ./ragtest

# 初始化后会生成文件
# GraphRAG设置的提示模板,可根据实际需求修改
--prompts
----claim_extraction.txt
----community_report.txt
----entity_extraction.txt
----summarize_descriptions.txt
# 存储第三方密钥文件,例如:ChatGPT、Qwen等密钥
--.env
# 配置文件
--settings.yaml

5.3 初始化配置参数

修改模型参数“settings.yaml”

encoding_model: cl100k_base
skip_workflows: []
llm:
  # 0 配置基础
  api_key: ollama
  type: openai_chat # or azure_openai_chat
  model: qwen2.5:1.5b-instruct
  model_supports_json: true # recommended if this is available for your model.
  # 1 修改tokens数量
  max_tokens: 4000
  # request_timeout: 180.0
  # 2 修改地址
  api_base: http://127.0.0.1:11434/v1/

parallelization:
  stagger: 0.3
  # num_threads: 50 # the number of threads to use for parallel processing

async_mode: threaded # or asyncio

embeddings:
  ## parallelization: override the global parallelization settings for embeddings
  async_mode: threaded # or asyncio
  # target: required # or all
  # batch_size: 16 # the number of documents to send in a single request
  # batch_max_tokens: 8191 # the maximum number of tokens to send in a single request
  llm:
    # 0 配置基础
    api_key: Xinference
    type: openai_embedding # or azure_openai_embedding
    model: bge-base-en
    api_base: http://127.0.0.1:9997/v1/

5.4 构建索引

# 构建索引
python -m graphrag.index --root ./ragtest

⚠️ 我没构建成功一直报错,只能通过修改代码的方式实现了。

错误如下:我没有解决,日志文件在output中的indexing-engine.log。

datashaper.workflow.workflow ERROR Error executing verb "cluster_graph" in create_base_entity_graph: Columns must be same length as key
Traceback (most recent call last):

在这里插入图片描述

修改源码的方法,参考其中的Graph-RAG地址。

https://github.com/echonoshy/cgft-llm

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙开发 三十九 ArkTs类 class 静态属性和方法的定义

鸿蒙提供了static关键字,可以用static关键字修饰的属性和方法,用static修饰的属性和方法用类名.的方式调用,如下图: 在Robot方法中定义了静态的属性version,调用的话直接Robot.version就可以了,定义了方法&…

RabbitMQ消息队列MQ脑裂(网络分区)整理分析

文章目录 RabbitMQ 的集群架构基础什么是MQ脑裂检测网络分区RabbitMQ 网络分区导致脑裂的原因• 多个节点认为自己是主节点:• 节点间状态不一致:• 集群的不可用性和错误恢复: RabbitMQ 网络分区引发脑裂的常见场景队列镜像不同步HA&#xf…

人工智能的研究方法

一、人工智能是自然科学和社会科学的交叉学科 1、仿生学,生物构造和功能 2、运筹学,应用数学进行科学决策 3、控制论,通信与控制 4、认知科学,人脑或心智工件机制 5、哲学,世界观和方法论 6、数学,概…

Halcon Blob分析提取小光斑

文章目录 算子complement 返回一个区域的补集select_region_point 选择包含指定像素的所有区域intensity 计算灰度值的均值和偏差 案例 算子 complement 返回一个区域的补集 complement(Region : RegionComplement : : )Region (输入对象):这指的是输入的一个或多…

[Linux] 软硬链接

软硬连接是两种链接方式,目的是通过使用一个已有的文件,在不进行拷贝的情况下,可以在不同的路径下访问同一份文件 软连接相当于快捷方式 硬连接相当于引用计数 软硬链接的目标也可以是软硬链接 软连接 指令 : ln -s 源文件 链接文件 软连接可链接文件夹 链接文件被删除后文件…

复杂网络基本概念(二)

一、集聚系数 节点i的集聚系数定义: 节点i的k个邻居节点之间实际存在的边数E和总的可能边数之比 所有节点的集聚系数的平均值 二、网络稀疏性与连通性 完全连接网络: 如果一个网络中任意两个节点之间都有来连边存在,则称其是一个完全连接…

探索 Python 装饰器的新境界:wrapt 库的神秘力量

文章目录 探索 Python 装饰器的新境界:wrapt 库的神秘力量背景:为何选择 wrapt?wrapt 是什么?如何安装 wrapt?简单的 wrapt 库函数使用方法创建简单装饰器保持元信息处理参数传递 场景应用:wrapt 的实际用例…

某知名国企面试题

引言 金九银十,求职热潮再度来袭。最近,有位同学去一家知名国企应聘,回来后带回了一套面试题。这套面试题非常典型,其中包含了许多供应链金融方面的典型问题。这些问题很有分享的价值,大家也可以先自己独立思考一下&a…

38 Spring

38 Spring 参考资料 Spring-全面详解(学习总结) 基本概念 Spring理念 : 使现有技术更加实用 . 本身就是一个大杂烩 , 整合现有的框架技术。 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。 IOC本质 IOC全…

【Redis】分布式(day12)

引入 在实际生产中,只部署一个Redis时,就会造成单点问题: 可用性问题,单个节点部署的Redis,如果此时该服务器挂了,那么意味着Redis整体的服务也就断掉了。性能/并发也是比较有限的。 为了避免单点问题的…

如何在UE5中创建加载屏幕(开场动画)?

第一步: 首先在虚幻商城安装好Async Loading Screen,并且在项目的插件中勾选好。 第二步: 确保准备好所需要的素材: 1)开头的动画视频 2)关卡加载图片 3)准备至少两个关卡 第三步&#xff1a…

通信工程学习:什么是SPI串行外设接口

SPI:串行外设接口 SPI,即串行外设接口(Serial Peripheral Interface),是一种由Motorola公司首先在其MC68HCXX系列处理器上定义的同步串行接口技术。SPI接口主要用于微控制器(MCU)与外部设备之间…

spring |Spring Security安全框架 —— 认证流程实现

文章目录 开头简介环境搭建入门使用1、认证1、实体类2、Controller层3、Service层3.1、接口3.2、实现类3.3、实现类:UserDetailsServiceImpl 4、Mapper层3、自定义token认证filter 注意事项小结 开头 Spring Security 官方网址:Spring Security官网 开…

leetcode 1027 最长等差数列 题目的思考

https://leetcode.cn/problems/longest-arithmetic-subsequence/ 如果序列是:3 0 3,枚举的公差是3 对于第一个数3,它的序列长度就是他自己3 对于第二个数0,它的序列长度就行它自己0 对于第三个数,它的序列长度应该是【…

【未知列名注入】

简介 在sql注入中,如果服务器过滤了column_name阻止我们获取列名,我们该如何绕过 一、union 绕过 使用union构造多个表,把数据表和构造的123表连接起来,我们看一下构造过程: 查询user表数据 select * from user;Union联合查询…

基于协同过滤的景区旅游可视化与景区推荐系统(自动爬虫,地点可换)

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍过程展示项目移植每文一语 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍 本项目是一个综合性的旅游景区数据管理与分析推荐系统,集成了用…

Qt:设置程序图标与主窗口背景图片

目录 设置程序图标: 设置主窗口背景图片: 设置程序图标: 在设置图标之前先准备一张ico图标,没有ico图标的可以准备一张图片,然后找一个在线的ico转换网站去转换一张ico文件出来。 然后打开项目文件所在的文件夹&am…

C语言 | Leetcode C语言题解之第467题环绕字符串中唯一的子字符串

题目&#xff1a; 题解&#xff1a; #define MAX(a, b) ((a) > (b) ? (a) : (b))int findSubstringInWraproundString(char * p) {int dp[26];int len strlen(p);memset(dp, 0, sizeof(dp));int k 0;for (int i 0; i < len; i) {if (i && (p[i] - p[i - 1] …

Spark高级用法-数据源的读取与写入

目录 数据读取 数据写入 总结 数据读取 读文件 read.json read.csv csv文件有两个部分构成 头部数据&#xff0c;也就是字段数据&#xff0c;行数数据 read.orc 读数据库 read.jdbc(jdbc连接地址,table表名,properties{user用户名,password密码,driver驱动信息}) 缺少连…

机器学习基础概念(3)

小小考一下大家前两节的内容(坏笑) 我们如何评判一个机器学习模型的性能呢&#xff1f; 通常是判断它的泛化能力&#xff08;对于未知数据的处理能力&#xff09; 那么对于泛化能力是否有一个标准&#xff0c;比如在未知的1万个数据中&#xff0c;泛化能力 模型一90% >…