当前位置:   article > 正文

GraphRAG本地运行(Ollama的LLM接口+Xinference的embedding模型)无需gpt的api_graphrag ollama

graphrag ollama

       7月3日,微软在官网开源了基于图的RAG(检索增强生成,经过我的多番试验和测试,其RAG的性能远超原来基础型RAG,但是他的源代码中默认只能用openai的接口,经过两天的捣鼓,我自己摸索出了本地运行的方法。详细的过程我就不赘述,这里只说一下我自己改源码的心路历程。(我是在linux服务器上运行的,如果在win上运行也大同小异,自行更改即可)

一、准备工作(download)

1、GraphRAG

(1)源码地址: graphrag

(2)Graphrag操作文档:get_started

2、Ollama

   自己去下载相关项目,和其他的github包,这里面都有教程

    源码地址:https://github.com/ollama/ollama

3、Xinference

     这里面集合了很多LLM,我们这里使用它的embedding模型。

     教程地址:https://inference.readthedocs.io/zh-cn/latest/getting_started/installation.html

二、启动服务(多开几个terminal)

1、启动Ollama

(1)拉取了需要的模型

       为了速度和大家显存着想,我们这里用最小的qwen2:0.5b模型

ollama pull qwen2:0.5b

(2)检查存在

  如图已存在

  

(3)启动服务

如图已经成功,记得保证http://127.0.0.1:11434的ollama默认端口,不要被别的占用

2、启动Xinference

(1)后台启动服务

    默认:9997端口

xinference-local --host 0.0.0.0 --port 9997

(2)启动成功后,进入网页

    按住ctrl点击右下角,这样算成功。

(3)launch embedding model

    选择Launch model下面embedding model,点下左下角的小火箭启动,我们这里选择了bge-base-en的大模型,然后设置CPU运行。

(4)检查成功

    后台会开始运行或者下载(之前没下载过的)

如果点开网页的running models,有东西在跑代表成功启动,address好像有点随机,不用过多理会。

3、启动GraphGAG

      具体操作:https://microsoft.github.io/graphrag/posts/get_started/

      上文也已经发过这一个链接了,我们先进行一个基础操作

(1)conda activate一个环境

      python要求是3.10-3.12的,我自己用的是3.11

(2)基础操作

  1. pip install graphrag
  2. mkdir -p ./ragtest/input
  3. curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt > ./ragtest/input/book.txt

    分别是创建文件夹和下载官方数据

(3)文件夹目录

   我自己又添加了多一个根目录bzp_graphrag

   

(4)初始化

   在bzp_graphrag目录下面执行操作

python -m graphrag.index --init --root ./ragtest

(5)检查成功

  然后结果成功如下

三、配置更改

1、更改settings.yaml

  (1)原来的LLM配置

(2)原来的embedding配置

(3)更改完毕

    更改内容有:

    api_key, model, 增加了api_base,但type不需要变动。(记得api_base是http,非https)

  1. encoding_model: cl100k_base
  2. skip_workflows: []
  3. llm:
  4. api_key: ollama
  5. type: openai_chat # or azure_openai_chat
  6. model: qwen2:0.5b
  7. model_supports_json: true # recommended if this is available for your model.
  8. api_base: http://127.0.0.1:11434/v1
  9. parallelization:
  10. stagger: 0.3
  11. # num_threads: 50 # the number of threads to use for parallel processing
  12. async_mode: threaded # or asyncio
  13. embeddings:
  14. ## parallelization: override the global parallelization settings for embeddings
  15. async_mode: threaded # or asyncio
  16. llm:
  17. api_key: xinference
  18. type: openai_embedding # or azure_openai_embedding
  19. model: bge-base-en
  20. api_base: http://127.0.0.1:9997/v1

   没有列举完yaml所有配置,大家对照自行更改即可,不要全选复制噢。

2、源码修改

     同学们可以先跳过这一步先尝试运行一下,看看能否成功运行,如果在有显示故障"create_base_entity_graph”不能顺利进行,再回来操作这一步。

(1)寻找出错路径

      这里通过我多次的寻找,发现是graphrag里面的一个包出现了问题,可能没有使用默认调用的openai,在一个is_response_valid总是不能显示。我们寻找它的路径如下:

anaconda安装包的位置(因人而异,总之就是要在你当前python环境下面寻找)

①anaconda->envs->bzp_graphrag(你自己取的环境名字)

②/lib/python3.11/site-packages/graphrag/llm/openai/openai_chat_llm.py

(2)修改函数_invoke_json()

       我们寻找到class OpenAIChatLLM这个类下面的_invoke_json()函数,大概在第60行左右。

然后再定位到是这个出问题。这个代码表达的是如果参数kwargs.get("is_response_valid")可以找到到就采用它,找不到就默认用(lambda _x: True)。我们不使用openai就会导致,每次既能get到kwargs.get("is_response_valid"),又得到kwargs.get("is_response_valid")值是false的。

is_response_valid = kwargs.get("is_response_valid") or (lambda _x: True)

       因此我们就索性,删掉kwargs['is_response_valid']这个选项。我们就在上面这个代码加上如下改动即可,这样每次就会返回lambad等于True

  1. if 'is_response_valid' in kwargs:
  2. del kwargs['is_response_valid']
  3. is_response_valid = kwargs.get("is_response_valid") or (lambda _x: True)

四、运行

1、Running the Indexing pipeline

python -m graphrag.index --root ./ragtest

2、构建

这里实体提取要久一点,耐心等待。

如果出现无法完成“create_base_entity_graph”的报错,请返回上一节的显示故障,来修改源码。

3、完成,进行简单对话

(1)显示成功

(2)执行global输入

  1. python -m graphrag.query \
  2. --root ./ragtest \
  3. --method global \
  4. "What are the top themes in this story?"

  (3)执行local输入

  1. python -m graphrag.query \
  2. --root ./ragtest \
  3. --method local \
  4. "Who is Scrooge, and what are his main relationships?"

  成功返回内容

       不知道是不是qwen2:0.5b的性能有限,很多global的问题回答成功率会比较低,之后可以自行启动其他的ollama内置的模型。不过到此已经大体成功了。

五、提示

       如果还有其他没有讲述的问题,可以在log处查看服务器具体的报错的内容,路径是

/ragtest/output/20240710-060748/reports/log.json

之后还会更新如何自动化更改prompt,放入自己本地的知识库,如果有用的话,可以点赞支持一下,感谢!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/862478
推荐阅读
相关标签
  

闽ICP备14008679号