GraphRAG+Ollama实现本地部署+neo4j可视化结果


前言

最近部署微软的graphrag踩了很多坑,记录一下完整的流程,给后来者一些参考。

一、GraphRAG+Ollama本地部署

首先说明,本篇文章默认为windows系统,同时已经在本地安装好Anaconda和Ollama服务,如果没有请先进行部署工作。

GraphRAG+Ollama的本地部署,具体内容参考链接1:傻瓜操作:GraphRAG、Ollama 本地部署及踩坑记录和链接2:微软开源GraphRAG的使用教程(最全,非常详细)

补充说明

1、graphrag中所用的模型,需要在Ollama中下载好,否则无法使用。
在这里插入图片描述

2、部署graphrag遇到的绝大部分问题,例如❌ Errors occurred during the pipeline run, see logs for more details.等,都是代码没有修改好,需要修改的部分见链接1,下面是一些补充说明。

在graphrag目录下的settings.yaml中,修改基础的model和api_base,需要注意的是llm中api_base为v1
在这里插入图片描述

修改embedding模型的model和api_base,需要注意的是embedding中,api_base最后是api
在这里插入图片描述

同时,llm和embedding的模型需要是ollama中部署好的,见补充说明1。

3、修改.env文件,删除源文件,改成下面这个

GRAPHRAG_API_KEY=ollama
GRAPHRAG_CLAIM_EXTRACTION_ENABLED=True

4、修改源码,需要注意文件都在graphrag目录下进行修改。具体修改内容见链接1。
我的是C:\Users\zhu\graphrag\graphrag\llm\openai\openai_embeddings_llm.py,需要引入包import ollama,model为embedding模型。
在这里插入图片描述

        args = {
            "model": self.configuration.model,
            **(kwargs.get("model_parameters") or {}),
        }
        # embedding = await self.client.embeddings.create(
        #     input=input,
        #     **args,
        # )
        # return [d.embedding for d in embedding.data]
        embedding_list = []
        for inp in input:
            embedding = ollama.embeddings(model="nomic-embed-text", prompt=inp)
            embedding_list.append(embedding["embedding"])
        return embedding_list

和C:\Users\zhu\graphrag\graphrag\query\llm\oai\embedding.py,同样需要import ollama,模型为embedding模型。
在这里插入图片描述

        for chunk in token_chunks:
            try:
                #embedding, chunk_len = self._embed_with_retry(chunk, **kwargs)
                embedding = ollama.embeddings(model="nomic-embed-text", prompt=chunk)['embedding']
                chunk_len = len(chunk)

                chunk_embeddings.append(embedding)
                chunk_lens.append(chunk_len)
            # TODO: catch a more specific exception
            except Exception as e:  # noqa BLE001
                self._reporter.error(
                    message="Error embedding chunk",
                    details={self.__class__.__name__: str(e)},
                )

                continue
        # chunk_embeddings = np.average(chunk_embeddings, axis=0, weights=chunk_lens)
        # chunk_embeddings = chunk_embeddings / np.linalg.norm(chunk_embeddings)
        # return chunk_embeddings.tolist()
        return chunk_embeddings

如果这几个文件配置没问题,就能够成功构建graphrag,出现🚀 All workflows completed successfully。

5、如果构建知识图谱的过程中报错,可以尝试更换llm模型,embedding模型和调整超参数,能解决大部分问题。具体如下:

在这里插入图片描述
在这里插入图片描述

6、如果出现ValueError: Columns must be same length as key
在settings.yaml中,将chunk size 调到300(调小就行),相关链接: Clustering crashes: ValueError(“Columns must be same length as key”) - too little input text maybe?

7、如果在执行 Global 询问时出现报错,回复:I am sorry but I am unable to answer this question given the provided data

raise JSONDecodeError(“Expecting value”, s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

解决方法:在settings.yaml找到global_search,调小你的max_tokens与data_max_tokens:
在这里插入图片描述

实测有效,相关链接:GraphRAG:LLM之本地部署GraphRAG(GLM-4+Xinference的embedding模型)(附带ollma部署方式)

8、如果在执行local search时出现ArrowInvalid: only handle 1-dimensional arrays错误,

没解决,如果有解决的大佬可以评论一下

二、neo4j可视化GraphRAG

1.windows安装neo4j

具体操作见链接:【SOP】Windows下安装Neo4j流程

2.启动neo4j服务

在cmd中启动neo4j服务,代码如下:

neo4j console

3.进入neo4j的webui界面

浏览器进入网址,http://localhost:7474

4.使用neo4J可视化GraphRAG索引

具体操作见链接:喂饭教程!全网首发Neo4J可视化GraphRAG索引

使用jupyter notebook运行代码,如果出现py2neo.database.work.ClientError: [Procedure.ProcedureNotFound],参考链接: py2neo.database.work.ClientError: [Procedure.ProcedureNotFound]。不用修改neo4j.conf文件(可以尝试)。

5.neo4j不删除旧数据,新建一个数据库

如果你想看多个文件生成的图谱,可以新建一个数据库进行查看。具体操作见链接:Neo4j不删除旧数据,如何新建一个数据库

总结

目前使用graphrag还是有一点问题,如果后续解决了会在文章中进行补充。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值