Ollma+LightRag本地服务器部署+输入PDF格式文档

用到的模型:

LLM:deepseek-r1(7B)

embedding模型:quentinz/bge-large-zh-v1.5

软件:MobaXterm

1、下载项目

链接:GitHub - HKUDS/LightRAG: "LightRAG: Simple and Fast Retrieval-Augmented Generation"

下载好之后解压,然后上传到服务器(eg:文件位置为/home/user/LLM/LightRAG)

2、用ollama下载模型

运行ollama:

OLLAMA_HOST=127.0.0.1:11500 ./ollama serve

下载模型:

ollama pull deepseek-r1  #LLM
ollama pull quentinz/bge-large-zh-v1.5 #emnedding模型

3、把ollama中LLM模型的上下文长度调整到32k

 ollama show --modelfile deepseek-r1:latest > Modelfile

找到Modelfile文件,进行以下修改:

ollama create -f Modelfile deepseek-r1-7b-32k

4、运行deepseek-r1-7b-32k

通过 ollama list 查看已有的模型列表:

运行deepseek-r1-7b-32k:

ollama run deepseek-r1-7b-32k

 5、创建虚拟环境

conda create --name LightRAG python=3.10 #注意这里Python版本必须>=3.10
conda activate LightRAG #激活环境

进入/home/user/LLM/LightRAG/LightRAG-main/文件夹

pip install -e .

6、准备样例数据

进入/home/user/LLM/LightRAG/LightRAG-main/examples文件夹

使用官方的英文示例:

#使用 curl 命令从指定的 URL 下载文件,并将其内容保存到本地文件 book.txt 中
curl https://raw.githubusercontent.com/gusye1234/nano-graphrag/main/tests/mock_data.txt > ./book.txt  

7、修改代码

examples文件夹中找到lightrag_ollama_demo.py进行修改

修改LLM、embedding模型:

7、运行代码

进入/home/user/LLM/LightRAG/LightRAG-main/examples/文件夹

运行代码:

python lightrag_ollama_demo.py

在代码的运行过程中,可以查看ollama正在运行的模型:

运行成功:

8、把文档格式从.txt修改为PDF 

参考链接:LightRAG:GraphRAG 的简单快速替代品

在你的虚拟环境中安装 pdfplumber:

pip install pdfplumber

examples文件夹下,创建一个新的python文件,具体代码如下:

(这个代码和原来的lightrag_ollama_demo.py,只有文档的读取部分有不同:

改为:

此为具体代码:(输入的PDF文档名为paper.pdf,同样放在examples文件夹下)

import asyncio
import os
import inspect
import logging
from lightrag import LightRAG, QueryParam
from lightrag.llm.ollama import ollama_model_complete, ollama_embed
from lightrag.utils import EmbeddingFunc
import pdfplumber

WORKING_DIR = "./Documents"

logging.basicConfig(format="%(levelname)s:%(message)s", level=logging.INFO)

if not os.path.exists(WORKING_DIR):
    os.mkdir(WORKING_DIR)

rag = LightRAG(
    working_dir=WORKING_DIR,
    llm_model_func=ollama_model_complete,
    llm_model_name="deepseek-r1-7b-32k",  #"gemma2:2b",
    llm_model_max_async=4,
    llm_model_max_token_size=32768,
    llm_model_kwargs={"host": "http://localhost:11434", "options": {"num_ctx": 32768}},
    embedding_func=EmbeddingFunc(
        embedding_dim=1024,   #768,
        max_token_size=512,    #8192,
        func=lambda texts: ollama_embed(
            texts, embed_model="quentinz/bge-large-zh-v1.5", host="http://localhost:11434"
            #texts, embed_model="nomic-embed-text", host="http://localhost:11500"
        ),
    ),
)

pdf_path = "./paper.pdf"  # Constitution_of_India.pdf
pdf_text = ""
with pdfplumber.open(pdf_path) as pdf:
    for page in pdf.pages:
        pdf_text += page.extract_text() + "\n"
rag.insert(pdf_text)

# Perform naive search
print(
    #rag.query("What are the top themes in this story?", param=QueryParam(mode="naive"))
    rag.query("这个故事的主题是什么?", param=QueryParam(mode="naive"))
)

# Perform local search
print(
    rag.query("这个故事的主题是什么?", param=QueryParam(mode="local"))
    #rag.query("What are the top themes in this story?", param=QueryParam(mode="local"))
)

# Perform global search
print(
    rag.query("这个故事的主题是什么?", param=QueryParam(mode="global"))
    #rag.query("What are the top themes in this story?", param=QueryParam(mode="global"))
)

# Perform hybrid search
print(
    rag.query("这个故事的主题是什么?", param=QueryParam(mode="hybrid"))
    #rag.query("What are the top themes in this story?", param=QueryParam(mode="hybrid"))
)

# stream response
resp = rag.query(
    "这个故事的主题是什么?",
    param=QueryParam(mode="hybrid", stream=True),
)


async def print_stream(stream):
    async for chunk in stream:
        print(chunk, end="", flush=True)


if inspect.isasyncgen(resp):
    asyncio.run(print_stream(resp))
else:
    print(resp)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值