背景
大型语言模型(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启动
可以看《5分钟手把手系列(一):使用Mac Book Pro本地部署大模型(Ollama+Llama3.1_8B+Docker+OpenWebUI)》,这个就不再重复了
本地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大模型应用感兴趣,这套大模型学习资料一定对你有用。
1.大模型应用学习大纲
AI大模型应用所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
2.从入门到精通全套视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
3.技术文档和电子书
整理了行业内PDF书籍、行业报告、文档,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
朋友们如果有需要全套资料包,可以点下面卡片获取,无偿分享!