基于langChain使用Chroma向量数据库和Ollama的嵌入模型和Ollama3.2实现的一个RAG服务

实现的功能:

  1. PDF处理:将PDF文件分块并存储到向量数据库(Chroma)。

  2. 问答查询:从向量数据库中检索相关内容,结合使用Ollama的llama3.2生成答案。
    (考虑到调用openAi接口不是免费的,这里直接使用llama基础模型llama3.2,也省去了申请OPENAI_API_KEY的步骤,主要以学习为目的嘛)

  3. 代码链接stevensu1/EC01: 基于langChain使用Chroma向量数据库和Ollama的嵌入模型Ollama3.2和实现的一个RAG服务

功能介绍:

 项目启动后进入首页上传pdf文档(一个简单的知识库)

PDF处理函数 process_pdf
def process_pdf(pdf_path: str):
    """PDF分块并存储到Chroma向量数据库(使用Ollama的llama3.2嵌入模型)"""
    # 1. 加载PDF文件
    loader = PyPDFLoader(pdf_path)
    pages = loader.load_and_split()

    # 2. 文本分块
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=1000,
        chunk_overlap=200
    )
    splits = text_splitter.split_documents(pages)

    # 3. 初始化Ollama的嵌入模型(llama3.2)
    ollama_embeddings = OllamaEmbeddings(model="llama3.2")  # 使用llama3.2嵌入模型

    # 4. 存储到Chroma向量数据库
    Chroma.from_documents(
        documents=splits,
        embedding=ollama_embeddings,
        persist_directory="chroma_storage"  # 数据保存目录
    )

从向量数据库Chroma中匹配检索信息并通过llama3.2生成返回

问答函数 rag_query

def rag_query(question: str) -> str:
    """基于Ollama的llama3.2模型进行RAG问答"""
    # 1. 初始化Ollama的LLM(llama3.2)
    llm = Ollama(model="llama3.2")  # 显式指定模型

    # 2. 加载向量数据库
    ollama_embeddings = OllamaEmbeddings(model="llama3.2")
    db = Chroma(
        persist_directory="chroma_storage",
        embedding_function=ollama_embeddings
    )

    # 3. 检索相关文档(Top 3)
    retriever = db.as_retriever(search_kwargs={"k": 3})
    relevant_docs = retriever.invoke(question)

    # 4. 组合上下文
    context = "\n\n".join([doc.page_content for doc in relevant_docs])

    # 5. 构建提示词(llama3.23专用格式)
    prompt = f"""请根据以下上下文回答问题:
    上下文:{context}
    问题:{question}
    答案:"""

    # 6. 调用llama3.2生成答案
    response = llm.invoke(prompt)
    return response

<think>好的,用户想了解如何在LangChain使用Ollama嵌入模型,需要教程示例。首先,我需要回忆一下LangChainOllama的相关知识。Ollama一个本地运行大型语言模型的工具,而LangChain一个用于构建基于语言模型的应用程序的框架。嵌入模型通常用于将文本转换为向量表示,以便进行相似性比较或其他机器学习任务。 接下来,用户的问题涉及到如何在LangChain中集成Ollama嵌入模型。我应该先确认Ollama是否支持嵌入模型,比如是否有一些预训练的模型可以用来生成嵌入。例如,Ollama可能提供类似于llama2或其他的模型,这些模型可能具备生成嵌入的功能。 然后,我需要考虑LangChain嵌入模型使用方式。通常,LangChain提供了Embeddings类,用户需要指定嵌入模型的名称或路径。使用Ollama可能需要通过Ollama类来调用模型,因此可能需要安装相应的Python包,比如langchain_community中的Ollama集成。 接下来,我需要构造一个示例代码。首先,安装必要的库,比如`pip install langchain-community ollama`。然后,导入所需的模块,初始化Ollama服务,设置模型名称,比如&#39;llama2:7b&#39;,创建嵌入实例。之后,演示如何生成嵌入向量,比如使用embed_documents方法处理多个文本,或者使用embed_query处理单个查询。 还需要注意一些细节,比如确保Ollama服务已经启动,模型已经下载(通过`ollama pull llama2:7b`)。此外,可能需要处理不同模型之间的差异,比如嵌入向量的长度是否一致,或者是否需要调整参数。 用户可能遇到的问题包括安装依赖、模型下载、嵌入生成错误等,应该在回答中提及这些可能的注意事项。例如,提醒用户检查模型是否可用,服务是否运行,以及如何处理嵌入生成过程中的异常。 最后,生成相关问题,帮助用户进一步探索,比如比较不同模型的效果,优化性能的方法,或者处理长文本的策略。这些问题应该与嵌入模型使用场景优化相关,符合用户可能的需求。 总结一下,回答的结构应该是:先介绍步骤,包括安装、导入、初始化、生成嵌入,然后给出示例代码,接着说明注意事项,最后提供相关问题。确保代码格式正确,使用中文解释每个步骤,引用相关的参考资料,比如Ollama模型下载命令。</think>### LangChain使用Ollama嵌入模型教程 #### 1. 环境准备 首先确保已安装Ollama下载所需模型(例如`llama2:7b`): ```bash ollama pull llama2:7b # 下载模型[^1] pip install langchain-community ollama # 安装依赖库 ``` #### 2. 初始化嵌入模型 在Python脚本中引入Ollama嵌入模块: ```python from langchain_community.embeddings import OllamaEmbeddings # 初始化嵌入模型(确保Ollama服务已启动) embeddings = OllamaEmbeddings(model="llama2:7b") ``` #### 3. 生成文本嵌入 通过`embed_documents`方法批量处理文本: ```python texts = ["机器学习", "自然语言处理"] doc_embeddings = embeddings.embed_documents(texts) print(f"嵌入向量维度:{len(doc_embeddings[0])}") # 输出示例:嵌入向量维度:4096 ``` 通过`embed_query`处理单个查询: ```python query_embedding = embeddings.embed_query("深度学习") ``` #### 4. 集成到LangChain流程 可将嵌入模型向量数据库结合使用: ```python from langchain_community.vectorstores import FAISS # 创建向量存储 vector_store = FAISS.from_texts(texts, embeddings) ``` #### 注意事项 1. 本地服务验证:执行`ollama serve`确保服务运行在`http://localhost:11434` 2. 模型兼容性:不同模型的输出维度可能不同(如`llama2:7b`输出4096维) 3. 性能优化:通过`temperature`等参数调整生成效果: ```python embeddings = OllamaEmbeddings(model="llama2:7b", temperature=0.3) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值