RAG:本地部署Langchain-Ollma(Windows)

RAG:本地部署Langchain🦜🔗-Ollma🐫(Windows)

RAG,即“Retrieval Augmented Generation”(检索增强生成),是一种结合了检索和生成技术的自然语言处理模型。它主要用于文本生成任务,能够利用外部知识源来增强生成的文本,从而提高生成质量。相较于微调技术,RAG能够更加短平快的吸纳本地知识并整合大模型进行问答。因此本地部署了一个基于Langchain🦜🔗 + Ollma🐫的RAG应用,以检索本地知识库生成回答。

1. 创建conda虚拟环境

首先,在Anaconda Prompt中创建名为 LLMs 的conda环境,并指定Python版本为3.10。其次,激活该名为 LLMs 的conda环境。

# 创建新环境
conda create --name LLMs python=3.10
# 激活该环境
conda activate LLMs

2. 安装Langchain🦜🔗

2.1 Langchain简介

🦜🔗Langchain 是一个用于开发由大语言模型(LLMs)提供支持的应用程序框架。Langchain简化了 LLMs应用生命周期的每个阶段,其主要特点包括:

  • 开发:使用 LangChain 的开源构建块和组件构建应用程序,利用第三方集成和模板快速启动。
  • 生产:使用 LangSmith 检查、监控和评估,保障持续优化和稳定部署。
  • 部署:使用 LangServe 将任何链(chian)转换为 API。

2.2 安装🦜🔗Langchain相关的🐍Python库

在上述已经创建的LLMs的新环境中继续安装所需要的Langchain相关的🐍Python库:

  • langchain
  • langchain_text_splitters
  • langchain-chroma
  • langchain-huggingface

选择conda或pip安装:

conda install langchain -c conda-forge
conda install langchain_text_splitters
conda install langchain-chroma -c conda-forge
conda install langchain-huggingface -c conda-forge
pip install -U langchain-community

2.3 安装Ollama

由于知识库问答的底座大模型选择了Ollama所整合的模型,因此需要提前在本地下载安装Ollama🐫。

3. 导入外部文件,进行文本分割

3.1 需要导入的库

# 将文本分割成更小的部分以进行处理
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 读入txt文件
from langchain.document_loaders import TextLoader

# Emdedding模型
from langchain.embeddings import HuggingFaceBgeEmbeddings

# 向量数据库Chroma
from langchain.vectorstores import Chroma

3.2 导入本地的文本文件

# 导入本地文本
loader = TextLoader("test.txt",encoding='utf-8')
data = loader.load()

# 将文本分割成长度为200个字符的小块,并且每个小块之间有20个字符的重叠
text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=20)
all_splits = text_splitter.split_documents(data)

3.3 Embedding模型

由于读入的外部文件既有中文又有英文,因此Embedding模型的选择至关重要。此处选择已经下载在本地的智源BAAI/BGE-M3模型(支持多语言(Multi-Linguality)、多粒度(Multi-Granularity)、多功能(Multi-Functionality))来对分割后的文本进行Embedding向量化。

embedding_function = HuggingFaceBgeEmbeddings(model_name="BAAI/bge-m3")

4.导入向量数据库Chroma

vectorstore_torist = Chroma.from_documents(all_splits, embedding_function, persist_directory="./vector_store")

不知道为什么,这一步在win系统中很慢,也许和本地的GPU显卡太拉有关系?

5. 启动Ollama服务

# 使用Ollama:llama3
OLLAMA_MODEL='llama3'

# 在操作系统级别设置该环境
os.environ['OLLAMA_MODEL'] = OLLAMA_MODEL
!echo $OLLAMA_MODEL

# 启动Ollama服务
!ollama serve

6. 构建RAG Chain

from langchain_core.output_parsers import StrOutputParser
from langchain.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatOllama
from langchain_core.runnables import RunnableLambda, RunnablePassthrough

# Prompt设定输出为中文,并且将其上下文设置为向量数据库中的内容
template = """
Answer the question based only on the following context, and output in Chinese:
{context}
Question: {question}
"""

retriever = vectorstore.as_retriever()
prompt = ChatPromptTemplate.from_template(template)

# 采用本地的大语言模型llama3对话
ollama_llm = "llama3"
model_local = ChatOllama(model=ollama_llm)

# Chain
chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | model_local
    | StrOutputParser()
)

利用test.txt文件中内容对话测试:

chain.invoke("test.txt文件中内容")
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值