5分钟手把手系列(二):本地部署Graphrag(Pycharm+Ollama+LM Studio)

背景

大型语言模型(LLM)的前沿研究中,一个核心挑战与机遇并存的领域是扩展它们的能力,以解决超出其训练数据范畴的问题,如目前比较火热的AI Agent的解决方案,使得LLM有了自己的分析决策能力,并能通过调用Tool来获取外部最新的数据信息,或者使用开源模型[Groq/Llama-3-Groq-8B-Tool-Use],均可使得LLM有获取最新数据的能力来解决用户提出的问题,但在更多的场景下,用户需要咨询的信息是无法从公开的网络中进行获取,甚至大部分问题可能是某些公司内部业务的领域知识或者是企业的私有数据等,这时候就需要用到在RAG方案来增强这样的AI场景处理效率。

RAG(Retrieve Augment Generation,检索增强)

目前,RAG是大语言模型搜索增强的主要方案之一。它允许大语言模型在从固定的数据库中抽取相关内容的基础上生成答案,从而限制随意发挥,提升答案的可靠性。可以说,RAG是目前各类大模型落地项目不可缺少的实用技术组件。目前集团内外基于AI知识库问答的功能,大部分使用了RAG技术。

GraphRAG ( Graph-based Retrieval Augmented Generation,基于知识图谱的检索增强生成)

github.com/microsoft/g…

GraphRAG全称为Graph-based Retrieval Augmented Generation是一种结合了知识图谱和检索增强生成(RAG)技术的新方法。 传统的RAG技术通过从外部知识库中检索相关信息,增强生成模型的输出质量。而GraphRAG则进一步引入了知识图谱,将信息以节点和边的形式存储,提供更丰富的上下文和关系信息,从而提升生成效果。 相比于传统的RAG技术,GraphRAG在多个方面展现出了显著的优势:

  • GraphRAG通过构建知识图谱,能够捕捉到整个数据集的全貌,而不仅仅是局部文本片段。这使得它在处理大规模数据集时,能够生成更加全面和准确的答案。
  • 提高摘要质量和多样性:GraphRAG通过并行生成社区摘要,并汇总这些摘要来生成最终答案,能够从不同的角度和社区中提取信息,生成更丰富的摘要。

虽然看起来graphrag确实令人眼前一亮,但从AI学习群里一些小伙伴的反馈,大家对grahprag的使用效果还是有所存疑,带着这个疑问,笔者也准备本地搭建一套graphrag的demo来测试一下检索效果,对比一下传统rag方案与graphrag到底有没有提升~

搭建

本文准备通过Ollama工具提供本地LLM模型服务,通过LM Studio来提供嵌入模型服务,运行环境在Python venv下,Python环境3.11~3.12均可。

Ollama启动

本地LLM使用的是gemma,启动命令如下 ollama run gemma

LM Studio

因为目前ollama无法提供符合openai标准的嵌入模型接口(听说其实也可以,但不想折腾了),所以这里使用LM Studio来启动嵌入模型提供服务,大家可以直接去lmstudio.ai/ 官网下载对应的芯片版本。下载后进行安装。

在这里插入图片描述
但首次使用的时候,直接通过关键字搜索模型是会报网络错误,核心原因是LM通过本地网络访问huggingface.co时访问失败,可以通过解决方案来解决此错误。

下载嵌入模型

搜索nomic关键字,选择nomic-embed-text-v1.5.Q4_K_M.gguf模型下载,下载成功后。

在这里插入图片描述

启动嵌入模型

选择我们刚刚下载的嵌入模型nomic-embed-text-v1.5.Q4_K_M.gguf,点击启动服务即可

在这里插入图片描述

Pycharm

新建Python工程,类型选择venv,Python版本选择3.11

安装graphrag

工程创建之后,在Pycharm终端执行命令安装graphrag pip3 install graphrag

安装完成后,再执行如下命令创建资料输入目录 mkdir -p ./ragtest/input 然后在input目录下录入想要测试的文本资料,文件格式txt 我是选取的三国演义的内容作为测试内容,大家可以自行选取感兴趣的内容

初始化graphrag环境:graphrag.index --init

终端执行如下代码 python3 -m graphrag.index --init --root ./ragtest 此时初始化成功后工程结构如下

配置settings.yaml

由于我们使用本地环境,所以env文件不用去理会,直接开始配置settings.yaml,如下代码是我修改的配置区块,主要是关于LLM、embeddings还有chunk的size设置,其他保持默认

  api_key: ollama
  type: openai_chat # or azure_openai_chat
  model: gemma
  model_supports_json: false # recommended if this is available for your model.
  api_base: http://127.0.0.1:11434/v1

embeddings:
  ## parallelization: override the global parallelization settings for embeddings
  async_mode: threaded # or asyncio
  llm:
    api_key: lm-studio
    type: openai_embedding # or azure_openai_embedding
    model: nomic-ai/nomic-embed-text-v1.5-GGUF/nomic-embed-text-v1.5.Q4_K_M.gguf
    api_base: http://localhost:1234/v1

chunks:
  size: 300
  overlap: 100
  group_by_columns: [id] # by default, we don't allow chunks to cross documents

建立索引:graphrag.index --root

当graphrag环境配置完成后,执行如下命令对input文件夹txt内容建立索引,执行如下命令 python3 -m graphrag.index --root 终端会显示相关的一些graphrag的流水线执行过程日志

当执行索引成功后,就可以通过命令执行提问了,说实话,看到🚀 **All workflows completed successfully.**这个提示语,笔者是留下了激动的泪水,

  • 虽然过程看起来很简单,但其实中间还是有不少的坑,其中一直困扰我的一个报错就是 Columns must be same length as key,尝试搜索了很多资料,甚至也去debug了graphrag包的Python源码,但收效甚微。 最终笔者尝试了以下几个方向的分析调试: ollama本地模型的选择:笔者尝试过llama3.1、qwen2、mistral,最终成功的case是使用gemma:latest,曾经一度也放弃过demo的搭建,因为在github.com/microsoft/g… graphrag的技术人员也明确提出了对本地ollama环境的支持不是特别完善,很有很多问题,也委婉表示了暂时没有精力来解决此类问题,以至于我认为graphrag确实不适合通过本地模型环境来进行搭建
  • 嵌入模型的选择,开始使用的nomic-embed-text-v1.5.Q5_K_M.gguf,后改用nomic-embed-text-v1.5.Q4_K_M.gguf
  • 由于“ Columns must be same length as key”一直报错,也尝试更改chunk size: 1200->300
  • 怀疑是不是本地API服务没起来,通过Apifox来测试ollama的API服务,发现是成功的

查询问题:graphrag.query

python3 -m graphrag.query --root ./ragtest --method global "刘备是谁?"

python3 -m graphrag.query --root ./ragtest --method global "刘备关羽张飞是什么关系?" 由于我只索引了三国演义的第一章(全文需要索引的时间太长了,好像看了要7~8个小时,马上就终止了),所以目前能搜索摘要出来的内容有限

传统RAG效果对比

下图是我使用AnytingLLM,通过传统RAG技术搜索出来的结果,能关联的内容较少,而通过GraphRAG 极大地改进了 RAG 的“检索”部分,用更高相关性的内容来显示检索结果,从而得到更好的答案

写到最后

通过搭建GraphRAG本地demo后,笔者通过少量的文本内容(三国演义第一章),初略对比了一下传统RAG方案与GraphRAG方案,基于少量文本内容而言,GraphRAG的效果还是符合其宣传内容的,后续更严谨的测试还是需要海量数据的进行验证。 希望本文能帮助到对GraphRAG有兴趣的朋友,毕竟读万卷书不如行万里路,看再多的理论介绍,不如自己亲自去动手验证一把来的实在~

在这里插入图片描述

大模型&AI产品经理如何学习

求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

在这里插入图片描述

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方图片前往获取

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
在这里插入图片描述

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员辣条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值