RAG实战 llama-index+ollama 本地环境构建rag

RAG实战 llama-index+ollama 本地环境构建rag

1.环境搭建

1.1llama-index环境

pip install llama-index

#ollama chroma 使用到的包
pip install llama-index-llms-ollama
pip install llama-index-embeddings-ollama
pip install llama_index-vector_stores-chroma

1.2 ollama环境

git clone https://www.modelscope.cn/modelscope/ollama-linux.git
cd ollama-linux
sudo chmod 777 ./ollama-modelscope-install.sh
./ollama-modelscope-install.sh

1.3 ollama启动

ollama serve

2.模型下载(ollama)

2.1embedding模型下载

ollama pull yxl/m3e

2.2 llm模型下载

本次测试选用qwen2.5-7b模型

ollama pull qwen2.5:7b

2.3 模型查看

ollama list

2.4 自己微调模型使用

本次篇暂不详细说明,可以参考

ollama实战(二): gguf 格式部署及转换方式(llamacpp)_imtoken下载新版本-CSDN博客

3.向量数据库下载

开源向量存储 Chroma

pip install chromadb

4.构建RAG

自己修改的地方:

模型路径

文档读取路径

4.1构建数据向量库

import chromadb
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, get_response_synthesizer, Settings
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding
from llama_index.core.node_parser import SentenceSplitter
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.core import StorageContext


# 设置嵌入模型和语言模型
Settings.embed_model = OllamaEmbedding(model_name="yxl/m3e:latest")  
Settings.llm = Ollama(model="qwen2.5:7b", request_timeout=360)  

# 读取文档
documents = SimpleDirectoryReader("docs").load_data()

# 初始化 Chroma 客户端,指定数据存储路径为当前目录下的 chroma_db 文件夹
db = chromadb.PersistentClient(path="./chroma_db")

# 获取或创建名为 "quickstart" 的集合,如果该集合不存在,则创建它
chroma_collection = db.get_or_create_collection("quickstart")

# 使用上述集合创建一个 ChromaVectorStore 实例,以便 llama_index 可以与 Chroma 集合进行交互
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)

# 创建一个存储上下文,指定向量存储为刚刚创建的 ChromaVectorStore 实例
storage_context = StorageContext.from_defaults(vector_store=vector_store)


# 构建索引
index = VectorStoreIndex.from_documents(
    documents, storage_context=storage_context, transformations=[SentenceSplitter(chunk_size=256)]
)

注:对同一个集合再次需要embedding时,对新的内容新的文件夹直接添加即可,无需再次对旧文件embedding

测试:对26M pdf文件embedding大概花费时间十分钟左右

4.2 自定义查询

import chromadb
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, get_response_synthesizer, Settings
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.core import StorageContext
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.query_engine import RetrieverQueryEngine

# 设置嵌入模型和语言模型
Settings.embed_model = OllamaEmbedding(model_name="yxl/m3e:latest")  # 使用指定的嵌入模型
Settings.llm = Ollama(model="qwen2.5:7b", request_timeout=360)  # 使用指定的语言模型

# 初始化 Chroma 客户端,指定数据存储路径为当前目录下的 chroma_db 文件夹
db = chromadb.PersistentClient(path="./chroma_db")

# 获取或创建名为 "quickstart" 的集合,如果该集合不存在,则创建它
chroma_collection = db.get_or_create_collection("quickstart")

# 使用上述集合创建一个 ChromaVectorStore 实例,以便 llama_index 可以与 Chroma 集合进行交互
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)

# 创建一个存储上下文,指定向量存储为刚刚创建的 ChromaVectorStore 实例
storage_context = StorageContext.from_defaults(vector_store=vector_store)

# 从存储的向量中加载索引
index = VectorStoreIndex.from_vector_store(
    vector_store, storage_context=storage_context
)

# 配置检索器
retriever = VectorIndexRetriever(
    index=index,
    similarity_top_k=5,  # 返回最相似的前 n 个文档片段
)

# 配置响应合成器
response_synthesizer = get_response_synthesizer()

# 组装查询引擎
query_engine = RetrieverQueryEngine(
    retriever=retriever,
    response_synthesizer=response_synthesizer,    
)

# 执行查询
response = query_engine.query("分析借款合同中关于利息的规定,特别是当利息预先在本金中扣除时的处理方式,指明是第几条民法典规定")
print(response)  # 输出查询结果

5.效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值