【AI大模型】5分钟手把手系列(二):本地部署Graphrag
背景
大型语言模型(LLM)的前沿研究中,一个核心挑战与机遇并存的领域是扩展它们的能力,以解决超出其训练数据范畴的问题,如目前比较火热的AI Agent的解决方案,使得LLM有了自己的分析决策能力,并能通过调用Tool来获取外部最新的数据信息,或者使用开源模型,均可使得LLM有获取最新数据的能力来解决用户提出的问题,但在更多的场景下,用户需要咨询的信息是无法从公开的网络中进行获取,甚至大部分问题可能是某些公司内部业务的领域知识或者是企业的私有数据等,这时候就需要用到在RAG方案来增强这样的AI场景处理效率。
RAG(Retrieve Augment Generation,检索增强)
目前,RAG是大语言模型搜索增强的主要方案之一。它允许大语言模型在从固定的数据库中抽取相关内容的基础上生成答案,从而限制随意发挥,提升答案的可靠性。可以说,RAG是目前各类大模型落地项目不可缺少的实用技术组件。目前集团内外基于AI知识库问答的功能,大部分使用了RAG技术。
GraphRAG ( Graph-based Retrieval Augmented Generation,基于知识图谱的检索增强生成)
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来启动嵌入模型提供服务,大家可以直接去 官网下载对应的芯片版本。下载后进行安装。

但首次使用的时候,直接通过关键字搜索模型是会报网络错误,核心原因是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的搭建,因为在 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有兴趣的朋友,毕竟读万卷书不如行万里路,看再多的理论介绍,不如自己亲自去动手验证一把来的实在~
如何系统的去学习大模型LLM ?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。
事实上,抢你饭碗的不是AI,而是会利用AI的人。
继科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?
与其焦虑……
不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉👈

一、LLM大模型经典书籍
AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

二、640套LLM大模型报告合集
这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

三、LLM大模型系列视频教程

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

LLM大模型学习路线 ↓
阶段1:AI大模型时代的基础理解
目标:了解AI大模型的基本概念、发展历程和核心原理。
内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践
- L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例
- L2.2 Prompt框架
- L2.3 流水线工程
- L2.4 总结与展望
阶段3:AI大模型应用架构实践
目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
内容:
- L3.1 Agent模型框架
- L3.2 MetaGPT
- L3.3 ChatGLM
- L3.4 LLAMA
- L3.5 其他大模型介绍
阶段4:AI大模型私有化部署
目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉👈
