赞
踩
7月3日,微软在官网开源了基于图的RAG(检索增强生成,经过我的多番试验和测试,其RAG的性能远超原来基础型RAG,但是他的源代码中默认只能用openai的接口,经过两天的捣鼓,我自己摸索出了本地运行的方法。详细的过程我就不赘述,这里只说一下我自己改源码的心路历程。(我是在linux服务器上运行的,如果在win上运行也大同小异,自行更改即可)
自己去下载相关项目,和其他的github包,这里面都有教程
源码地址:https://github.com/ollama/ollama
这里面集合了很多LLM,我们这里使用它的embedding模型。
教程地址:https://inference.readthedocs.io/zh-cn/latest/getting_started/installation.html
为了速度和大家显存着想,我们这里用最小的qwen2:0.5b模型
ollama pull qwen2:0.5b
如图已存在
如图已经成功,记得保证http://127.0.0.1:11434的ollama默认端口,不要被别的占用
默认:9997端口
xinference-local --host 0.0.0.0 --port 9997
按住ctrl点击右下角,这样算成功。
选择Launch model下面embedding model,点下左下角的小火箭启动,我们这里选择了bge-base-en的大模型,然后设置CPU运行。
后台会开始运行或者下载(之前没下载过的)
如果点开网页的running models,有东西在跑代表成功启动,address好像有点随机,不用过多理会。
具体操作:https://microsoft.github.io/graphrag/posts/get_started/
上文也已经发过这一个链接了,我们先进行一个基础操作
python要求是3.10-3.12的,我自己用的是3.11
- pip install graphrag
- mkdir -p ./ragtest/input
- curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt > ./ragtest/input/book.txt
分别是创建文件夹和下载官方数据
我自己又添加了多一个根目录bzp_graphrag
在bzp_graphrag目录下面执行操作
python -m graphrag.index --init --root ./ragtest
然后结果成功如下
更改内容有:
api_key, model, 增加了api_base,但type不需要变动。(记得api_base是http,非https)
- encoding_model: cl100k_base
- skip_workflows: []
- llm:
- api_key: ollama
- type: openai_chat # or azure_openai_chat
- model: qwen2:0.5b
- model_supports_json: true # recommended if this is available for your model.
- api_base: http://127.0.0.1:11434/v1
-
-
- parallelization:
- stagger: 0.3
- # num_threads: 50 # the number of threads to use for parallel processing
-
- async_mode: threaded # or asyncio
-
- embeddings:
- ## parallelization: override the global parallelization settings for embeddings
- async_mode: threaded # or asyncio
- llm:
- api_key: xinference
- type: openai_embedding # or azure_openai_embedding
- model: bge-base-en
- api_base: http://127.0.0.1:9997/v1
-
-
没有列举完yaml所有配置,大家对照自行更改即可,不要全选复制噢。
同学们可以先跳过这一步先尝试运行一下,看看能否成功运行,如果在有显示故障"create_base_entity_graph”不能顺利进行,再回来操作这一步。
这里通过我多次的寻找,发现是graphrag里面的一个包出现了问题,可能没有使用默认调用的openai,在一个is_response_valid总是不能显示。我们寻找它的路径如下:
anaconda安装包的位置(因人而异,总之就是要在你当前python环境下面寻找)
①anaconda->envs->bzp_graphrag(你自己取的环境名字)
②/lib/python3.11/site-packages/graphrag/llm/openai/openai_chat_llm.py
我们寻找到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
- if 'is_response_valid' in kwargs:
- del kwargs['is_response_valid']
- is_response_valid = kwargs.get("is_response_valid") or (lambda _x: True)
python -m graphrag.index --root ./ragtest
这里实体提取要久一点,耐心等待。
如果出现无法完成“create_base_entity_graph”的报错,请返回上一节的显示故障,来修改源码。
- python -m graphrag.query \
- --root ./ragtest \
- --method global \
- "What are the top themes in this story?"
- python -m graphrag.query \
- --root ./ragtest \
- --method local \
- "Who is Scrooge, and what are his main relationships?"
成功返回内容
不知道是不是qwen2:0.5b的性能有限,很多global的问题回答成功率会比较低,之后可以自行启动其他的ollama内置的模型。不过到此已经大体成功了。
如果还有其他没有讲述的问题,可以在log处查看服务器具体的报错的内容,路径是
/ragtest/output/20240710-060748/reports/log.json
之后还会更新如何自动化更改prompt,放入自己本地的知识库,如果有用的话,可以点赞支持一下,感谢!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。