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🐫。

  • Windows版本下载:Download。
  • 下载安装后进入到CMD中运行Ollama🐫中的 Llama 3模型仅需要一行命令即可: ollama run llama3 ,首次运行会先下载模型文件,需要等待一段时间。
  • ollama serve即可运行Ollama🐫的服务器模式,但在运行服务器模式之前请确保关闭Ollama,详情可参考“Error: listen tcp 127.0.0.1:11434: bind: Only one usage of each socket address”。

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文件中内容")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对SRS媒体服务器进行漏洞扫描时,SRS的API模块会出现漏洞,如何修补这些漏洞的简单方法

目录 一、引言 1、srs介绍 2、媒体流介绍 3、应用场景 二、SRS的http_api介绍、及漏洞 1、概述 2、http_api模块的作用 (1)提供HTTP API服务 (2)管理和监控SRS服务器 (3)自定义开发 三、漏洞扫描…

单位立方体各个面上的法向量,向量场以及每个面上的通量

单位立方体各个面上的法向量,向量场 F ( x , y , z ) \mathbf{F} (x, y, z) F(x,y,z) 以及每个面上的通量 flyfish 假设我们有一个单位立方体,向量场 F ( x , y , z ) \mathbf{F} (x, y, z) F(x,y,z) 在该立方体上。 法向量 :单位立方…

情绪识别反馈训练系统

系统应用简介 情绪识别检测训练系统可以通过语音、实时面部表情、静态情绪图片智能检测使用者的情绪,对异常情绪进行预警,以达到及时明晰情绪状态并辅助缓解负性情绪的目的。 应用范围:适用于年满足12周岁及以上人群。 二、系统基本原理 …

前端面试题14(贝塞尔曲线)

贝塞尔曲线在前端开发中经常用于创建平滑的动画路径或绘制复杂的矢量图形。贝塞尔曲线可以是一次、二次或三次的,其中三次贝塞尔曲线是最常见的,因为它提供了足够的灵活性来创建各种形状,同时保持计算上的可行性。 下面我将解释三次贝塞尔曲…

代码随想录算法训练营第五十九天 | 110.字符串接龙、105.有向图的完全可达性、106.岛屿的周长、复习

110.字符串接龙 题目链接:https://kamacoder.com/problempage.php?pid1183 文档讲解:https://programmercarl.com/kamacoder/0110.%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%8E%A5%E9%BE%99.html 思路 本题只需要求出最短路径的长度就可以了,不用找出…

使用 Qt 实现自定义拖动窗口

文章目录 如何在 Qt 中实现无标题栏窗口的拖动准备工作创建自定义窗口类使用 QDialog 实现拖动功能详细解释代码行解释 小结 如何在 Qt 中实现无标题栏窗口的拖动 在许多桌面应用程序中,我们经常需要自定义窗口外观,包括去掉标题栏,使窗口看…

SQL Server端口配置指南:最佳实践与技巧

1. 引言 SQL Server通常使用默认端口1433进行通信。为了提高安全性和性能,正确配置SQL Server的端口非常重要。本指南将帮助您了解如何配置和优化SQL Server的端口设置,以满足不同环境和需求。 2. 端口配置基础 2.1 默认端口 SQL Server的默认端口是…

LabVIEW幅频特性测试系统

使用LabVIEW软件开发的幅频特性测试系统。该系统整合了Agilent 83732B信号源与Agilent 8563EC频谱仪,通过LabVIEW编程实现自动控制和数据处理,提供了成本效益高、操作简便的解决方案,有效替代了昂贵的专用仪器,提高了测试效率和设…

一款EF Core下高性能、轻量级针对分表分库读写分离的解决方案

ShardingCore项目介绍 ShardingCore是一款开源、简单易用、高性能、普适性,针对EF Core生态下的分表分库的扩展解决方案,支持EF Core2的所有版本,支持EF Core2的所有数据库、支持自定义路由、动态路由、高性能分页、读写分离的一款EF Core拓展…

华为云生态和快速入门

华为云生态 新技术催生新物种,新物种推动新生态 数字技术催生各类运营商去重塑并颠覆各行业的商业模式 从业务层面看,企业始终如一的目标是业务增长和持续盈利,围绕这些目标衍生出提质、增效、降本、安全、创新和合规的业务诉求&#xff0c…

本迪戈和阿德莱德银行与MongoDB合作, 利用生成式AI对银行核心技术进行现代化改造

MongoDB公司(纳斯达克股票代码:MDB)近日宣布与本迪戈和阿德莱德银行 (Bendigo and Adelaide Bank,澳大利亚证券交易所股票代码:BEN)建立合作伙伴关系。 本迪戈和阿德莱德银行将使用MongoDB Atlas对其银行核…

【PTGui、Pano2VR6、UE4】VR全景拍摄及漫游交互制作操作实例(更新中)

一、基本思路 首先进行VR全景拍摄,获取高质量的全景图像;然后使用PTGui进行图像拼接,确保图像的连续性与准确性;接着利用Pano2VR6进行VR漫游的制作,添加交互元素与多媒体内容;最后进行作品的调试与优化&am…

条件筛选1-4题(30 天 Pandas 挑战)

条件筛选 1. 相关知识点1.1 query条件或查询1.2 query条件与查询1.3 存在查询及列名修改1.4 条件查询,相等1.5 删除重复值1.6 排序 2. 题目2.1 大的国家2.2 可回收且低脂的产品2.3 从不订购的客户2.4 文章浏览 I 1. 相关知识点 1.1 query条件或查询 # |或 world.q…

三星组件新的HBM开发团队加速HBM研发

为应对人工智能(AI)市场扩张带来的对高性能存储解决方案需求的增长,三星电子在其设备解决方案(DS)部门内部成立了全新的“HBM开发团队”,旨在提升其在高带宽存储器(HBM)领域的竞争力。根据Business Korea的最新报告,该团队将专注于推进HBM3、…

CUDA编程基础

文章目录 1、GPU介绍2、CUDA程序进行编译3、CUDA线程模型3.1、一维网格一维线程块3.2、二维网格二维线程块3.3、三维网格三维线程块3.3、不同组合形式 4、nvcc编译流程5、CUDA程序基本架构6、错误检测函数6.1、运行时API错误代码6.2、检查核函数 7、CUDA记时7.1、记时代码7.2、…

期货量化交易:探索金融投资的新领域

在当今快速发展的金融市场中,期货量化交易作为一种新兴的投资策略,正逐渐受到投资者的关注。本文将深入探讨期货量化交易的概念、优势、风险以及其在现代投资组合中的作用,旨在为广大读者提供一个全面而深入的视角。 期货市场概览 期货市场…

Google Earth Engine(GEE)——控制台ui.Textbox复制你想要的textbox

结果 函数: ui.Textbox(placeholder, value, onChange, disabled, style) A textbox that enables the user to input text information. Arguments: placeholder (String, optional): The placeholder text to display when the textbox is empty. Defaults to none. …

VBA语言専攻T3学员领取资料通知0706

T3学员领取资料通知0706 各位学员∶本周MF系列VBA技术资料增加641-645讲,T3学员看到通知后请免费领取,领取时间7月5日晚上19:00-7月6日晚上19:00。本次增加内容: MF641:前个窗体组合框选项联动下个组合框 MF642:工作表中数据选项联动下个数据验证 MF…

技术驱动旅游创新!深度解析景区导览小程序的地图渲染与AR导航技术

随着现代生活节奏的加快,人们在外出旅游时更倾向于轻便出行,携带导览地图已成为过去。然而,面对景区广阔的面积和众多景点,游客常常感到迷茫,难以快速定位到自己所需的地点。景区导览小程序让游客只需搜索景区名称&…

人工智能系列-NumPy(二)

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 链接数组 anp.array([[1,2],[3,4]]) print(第一个数组:) print(a) print(\n) bnp.array([[5,6],[7,8]]) print(第二个数组:) print(b) print(\n) print…