GraphRAG+Ollama实现本地部署+neo4j可视化结果
- 前言
- 一、GraphRAG+Ollama本地部署
- 补充说明
- 二、neo4j可视化GraphRAG
- 1.windows安装neo4j
- 2.启动neo4j服务
- 3.进入neo4j的webui界面
- 4.使用neo4J可视化GraphRAG索引
- 5.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还是有一点问题,如果后续解决了会在文章中进行补充。