首页 > 其他分享 >本地ollama的LLM模型运行微软GraphRAG

本地ollama的LLM模型运行微软GraphRAG

时间:2024-09-04 20:50:37浏览次数:10  
标签:00 GraphRAG text 100% Indexer LLM loaded ollama

pip install graphrag
pip install ollama

1、ollama安装

直接从modelscope下载ollama安装包

modelscope download --model=modelscope/ollama-linux --local_dir ./ollama-linux

# 运行ollama安装脚本

sudo chmod 777 ./ollama-linux/ollama-modelscope-install.sh
sh ./ollama-linux/ollama-modelscope-install.sh

#启动ollama,最好在后台执行,该进程不可以中断

ollama serve

2、下载模型

        在ollama中部署以下两个模型:mistral和nomic-embed-text

# llm
ollama pull mistral
# embedding
ollama pull nomic-embed-text

3、初始化工目录

        在当前目录下新建一个目录./ragtest/input,用于存放我们初始化graphrag需要的相关文件。其中ragtest到时候系统会参数其他配置文件和目录,input目录需要我们自己放置要解析的txt文件。

mkdir -p ./ragtest/input

        运行命令graphrag.index --init。由于我们在上一步中已经配置了一个名为ragtest的目录,因此我们可以运行以下命令:

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

4、修改settings.yaml等配置

        默认graphRag使用的openia的key,要改用本地的llm需要修改相应的代码和配置,我已经整理好修改步骤,按如下步骤修改即可。

        1)settings.yaml配置文件

d2171c1fd541409388d7cbf8cf3fd12d.png

fc595d8e0c6d41f7a84748bd98efe90d.png

根据红色的位置,修改ragtest目录下的settings.yaml相应的内容

        2)openai_embeddings_llm.py嵌入式向量脚本


class OpenAIEmbeddingsLLM(BaseLLM[EmbeddingInput, EmbeddingOutput]):
    _client: OpenAIClientTypes
    _configuration: OpenAIConfiguration

    def __init__(self, client: OpenAIClientTypes, configuration: OpenAIConfiguration):
        self._client = client
        self._configuration = configuration

    async def _execute_llm(
        self, input: EmbeddingInput, **kwargs: Unpack[LLMInput]
    ) -> EmbeddingOutput | None:
        args = {
            "model": self._configuration.model,
            **(kwargs.get("model_parameters") or {}),
        }
        embedding_list = []
        for inp in input:
            embedding = ollama.embeddings(model="nomic-embed-text", prompt=inp)
            embedding_list.append(embedding["embedding"])
        return embedding_list

        屏蔽脚本原来OpenAIEmbeddingsLLM函数,用上面最新脚本替换。若找不到文件位置,使用下列命令查找

        find / -name openai_embeddings_llm.py

        2)embedding.py本地(local)查询脚本


    def embed(self, text: str, **kwargs: Any) -> list[float]:
        """Embed text using Ollama's nomic-embed-text model."""
        try:
            embedding = self.ollama_client.embeddings(model="nomic-embed-text", prompt=text)
            return embedding["embedding"]
        except Exception as e:
            self._reporter.error(
                message="Error embedding text",
                details={self.__class__.__name__: str(e)},
            )
            return np.zeros(self.embedding_dim).tolist()

    async def aembed(self, text: str, **kwargs: Any) -> list[float]:
        """Embed text using Ollama's nomic-embed-text model asynchronously."""
        try:
            embedding = await self.ollama_client.embeddings(model="nomic-embed-text", prompt=text)
            return embedding["embedding"]
        except Exception as e:
            self._reporter.error(
                message="Error embedding text asynchronously",
                details={self.__class__.__name__: str(e)},
            )
            return np.zeros(self.embedding_dim).tolist()

屏蔽embedding.py脚本原来以上两个原函数,使用的新脚本替换

5、运行GraphRAG

        前面的步骤完成后,运行索引,创建graph。

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

        执行结果日志:

Logging enabled at ragtest/output/20240903-093443/reports/indexing-engine.log
⠹ GraphRAG Indexer 
⠹ GraphRAG Indexer les loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
⠹ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
⠹ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
⠹ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
⠼ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
⠼ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
⠼ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
⠼ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
⠼ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
⠼ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
⠼ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
⠼ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
/usr/local/lib/python3.10/site-packages/numpy/core/fromnumeric.py:59: 
FutureWarning: 'DataFrame.swapaxes' is deprecated and will be removed in a 
future version. Please use 'DataFrame.transpose' instead.
  return bound(*args, **kwds)
⠼ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━ 100% 0:00:… 0:00:…
└── create_base_text_units

标签:00,GraphRAG,text,100%,Indexer,LLM,loaded,ollama
From: https://blog.csdn.net/m0_38007743/article/details/141852489

相关文章

  • 基于Shiny的LLM对话框
    Shiny介绍     Shiny最初是一个R语言的包,由RStudio开发,它的主要作用是允许用户创建交互式的Web应用程序而无需深入学习复杂的Web开发技术,我相信做R开发的同学基本都知道这个R包。以下是Shiny的一些具体作用:简化Web开发:Shiny提供了一种简便的方法来创建......
  • A-LLMRec论文阅读笔记
    LargeLanguageModelsmeetCollaborativeFiltering:AnEfficientAll-roundLLM-basedRecommenderSystem论文阅读笔记Abstract现存的问题:​ 最近的策略侧重于利用基于预训练模态编码器和大型语言模型(LLM)的用户/项目模态信息(如文本或图像)。尽管它们在冷场景下非常有效,但我......
  • 【大模型】使用 Xinference 部署本地模型,从GPU服务器到本地知识库搭建Dify【LLM大语言
    基本介绍基础信息GPU服务器获取基础安装基础信息安装显卡驱动配置显卡检查下载禁用nouveau系统自带驱动显卡驱动安装安装nvidia-docker下载配置验证Xinference部署docker部署官方文档模型下载glm-4-9b-chatEmbedding(向量)模型Rerank模型模型部署Embedding(向量)模型......
  • INSIDE: LLMS’ INTERNAL STATES RETAIN THE POWER OF HALLUCINATION DETECTION
    本文是LLM系列文章,针对《INSIDE:LLMS’INTERNALSTATESRETAINTHEPOWEROFHALLUCINATIONDETECTION》的翻译。INSIDE:LLMS的内部状态保留了幻觉检测的力量摘要1引言2幻觉检查的背景3方法4实验5相关工作6结论摘要知识幻觉引起了人们对部署的LLM的......
  • Monocle:一款基于LLM的二进制文件自然语言搜索工具
    关于MonocleMonocle是一款基于LLM的二进制文件自然语言搜索工具,该工具由LLM驱动,用于对已编译的目标二进制文件执行自然语言搜索,并查找加密代码、密码字符串和安全缺陷漏等。功能介绍Monocle是一款由大型语言模型支持的工具,用于对已编译的目标二进制文件执行自然语言搜索......
  • 九银十拿到大模型(LLM)offer,面试八股
    金九银十拿到大模型(LLM)offer,面试八股从事大模型的朋友在金J九银十拿到了一份不错的offer,面试十几家公司,通过了六家。好在分享了大佬总结的大模型方向面试的常见题目(含答案),短时间内过了一边,能针对的回答。有了面试框架更容易拿到offer,分享给大家,祝大家都能拿到自己心仪的o......
  • From "LLM" to "Agent"(从大语言模型到智能体)
    比尔·盖茨近期发表了一篇博客,其中谈到Agents将会是LLM的未来方向。LLM是一个Decoder,是Agent的大脑。LLM和Agent的区别,正如GPT-4和ChatGPT的区别。1Intro如图所示:Agents具有运用“Tools”的能力,可以调用外部api或沙盘来执行代码;Agents具有多种“Memory”的能力,短期记忆......
  • LLM-文心一言:线程窃取
    线程窃取,也称为工作窃取(Work-Stealing),是一种多线程和并行计算中的负载平衡策略。这种策略允许那些已经完成了自己任务的线程去“窃取”其他线程尚未完成的任务,从而尽可能均衡地利用所有可用的计算资源。以下是关于线程窃取(工作窃取)的详细解释:一、定义与原理定义:线程窃取是指当......
  • LLM大模型基础知识学习总结
    大家好,我是Edison。在这个已经被大模型包围的时代,不了解一点大模型的基础知识和相关概念,可能出去聊天都接不上话。刚好近期我也一直在用GPT和GitHubCopilot,也刚好对这些基础知识很感兴趣,于是学习了一下,做了如下的整理总结,分享与你!一句话描述GPTGPT:GenerativePre-TrainingTra......
  • 使用docker部署tensorrtllm推理大模型baichuan2-7b
    简介大模型的推理框架,我之前用过vllm和mindie。近期有项目要用tensorrtllm,这里将摸索的过程记录下,特别是遇到的问题。我的环境是Linux+rt3090准备docker环境本次使用docker镜像部署,需要从网上拉取:dockerpullnvcr.io/nvidia/tritonserver:24.08-trtllm-python-py3Th......