langchain +ollama +chroma+embedding模型实现RAG入门级Demo(python版)

该文章已生成可运行项目,

LangChain
官方文档:https://python.langchain.com/docs/get_started/introduction.html
github: https://github.com/langchain-ai/langchain
优质入门文章:https://blog.youkuaiyun.com/v_JULY_v/article/details/131552592
LangChain 是一个用于开发由语言模型驱动的应用程序的框架。
可以做什么?
可以将 LLM 模型(大规模语言模型)与外部数据源进行连接
可以与 LLM 模型进行交互
ollama
https://blog.youkuaiyun.com/YXWik/article/details/143871588

chroma
github地址:https://github.com/chroma-core/chroma
向量数据库,轻量级且支持windows,不需要wsl,不需要docker

安装

pip install chromadb 

运行

chroma run 

在这里插入图片描述
embedding模型
选择 BAAI/bge-small-zh-v1.5作为embedding模型,因为它是开源的模型,而且体积较小,性能也不错。

项目
虚拟环境

conda create -n llmrag python=3.10

激活

activate llmrag

torch安装

conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorchcuda=12.1 -c pytorch -c nvidia

安装依赖(以下依赖自行选择一个,我这边是ollama本地的选第二个)

#用openai的模型
pip install openai
#如果是本地部署ollama,langchain 对ollama的支持
pip install -U langchain-ollama
#通义千问线上版
pip install -U langchain_openai

支持chroma

pip install langchain_chroma
pip install -U langchain-community

bs4依赖

pip install beautifulsoup4

安装 sentence-transformers

pip install sentence-transformers

准备数据
这里拿百度百科的检索增强生成数据做测试
https://baike.baidu.com/item/RAG?fromModule=lemma_search-box
在这里插入图片描述
保存到本地
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

加载本地HTML文件代码
在这里插入图片描述

import os
import time
from bs4 import BeautifulSoup
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.prompts import ChatPromptTemplate
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema
本文章已经生成可运行项目
<think>好的,我现在需要帮用户了解如何使用LangChain实现Ollama模型的检索增强生成(RAG)。首先,我需要回忆一下用户提供的引用内容,特别是引用[2]、[4]和[5],因为它们提到了OllamaLangChain的结合。根据这些引用,用户可能已经有一些基础,比如使用ChromaDB和Nomic嵌入,但需要具体的步骤示例。 接下来,我得确保回答符合系统级指令,比如正确使用LaTeX格式,生成相关问题,并在引用后添加标识。不过用户的问题主要集中在实现步骤上,可能不需要数学公式,但如果有涉及到算法或数学的地方,记得用$...$包裹。例如,如果提到相似度计算,可能需要用向量内积公式,比如$\cos(\theta)$。 然后,我需要分解实现RAG的步骤。根据引用[3],RAG的关键是检索外部数据并生成回应。所以步骤可能包括文档加载、分块、嵌入、存储到向量数据库、检索以及结合生成模型。引用[5]提到Retriever是核心,所以需要说明如何配置检索器。 用户提供的示例代码是Python的,所以我也需要用Python示例,比如使用LangChain的模块如ChromaOllamaEmbeddings和Ollama。可能需要引用到引用[2]中的Gemma 2模型和Nomic嵌入,但具体模型用户可以根据需要替换,比如llama2。 另外,用户可能遇到的疑问是各个组件如何连接,比如如何将文档处理后的向量存储到ChromaDB,再通过Ollama生成回答。需要确保代码示例清晰,并解释每个步骤的作用。比如,文档加载器使用TextLoader,分块用CharacterTextSplitter,嵌入模型OllamaEmbeddings,向量库用Chroma,检索器用as_retriever(),最后用RetrievalQA链整合生成模型。 还要注意引用标识的正确添加,比如在提到检索器核心时引用[5],在构建本地RAG系统时引用[2]和[4]。同时,生成的相关问题需要围绕用户可能进一步想知道的内容,比如优化方法、嵌入模型选择、处理长文本等,参考引用中的优化方向,如提示模板调整、内存管理等。 最后,检查是否所有引用都正确标注,代码格式是否正确,以及是否符合中文回答的要求。确保回答结构清晰,分步骤说明,帮助用户逐步理解和实现RAG系统。</think>以下是使用LangChain实现Ollama模型RAG的完整教程(Python实现): ### 一、RAG实现流程 1. **文档加载与分块** 使用`TextLoader`加载本地文档,通过`CharacterTextSplitter`进行文本分块处理: ```python from langchain.document_loaders import TextLoader from langchain.text_splitter import CharacterTextSplitter loader = TextLoader("knowledge.txt") documents = loader.load() text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50) docs = text_splitter.split_documents(documents) ``` 2. **向量嵌入与存储** 采用Ollama的嵌入模型生成向量,存入ChromaDB向量数据库[^2][^4]: ```python from langchain.embeddings import OllamaEmbeddings from langchain.vectorstores import Chroma embeddings = OllamaEmbeddings(model='llama2') vectorstore = Chroma.from_documents(docs, embeddings, persist_directory="./chroma_db") ``` 3. **检索器配置** 创建基于语义相似度的文档检索器[^5]: ```python retriever = vectorstore.as_retriever(search_kwargs={"k": 3}) ``` 4. **生成模型集成** 连接Ollama本地大语言模型: ```python from langchain.llms import Ollama llm = Ollama(model="llama2", temperature=0.7) ``` 5. **构建RAG管道** 使用`RetrievalQA`链整合所有组件: ```python from langchain.chains import RetrievalQA qa_chain = RetrievalQA.from_chain_type( llm, retriever=retriever, chain_type="stuff" ) ``` ### 二、应用示例 ```python query = "请解释量子计算的基本原理" response = qa_chain.run(query) print(f"问题:{query}\n回答:{response}") ``` ### 三、关键优化点 1. **分块策略优化** 根据文档特征调整`chunk_size`和`chunk_overlap`参数,平衡信息完整性与检索效率 2. **混合检索模式** 结合语义检索与关键词检索提升召回率: $$ \text{最终得分} = \alpha \cdot \text{语义相似度} + (1-\alpha) \cdot \text{关键词匹配度} $$ 3. **结果后处理** 添加元数据过滤和结果去重机制
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值