如何使用 Langchain、Ollama 和 Streamlit 构建 RAG

一、先决条件:您需要了解什么

在深入讨论技术细节之前,我们先概述一下先决条件。Python 的基础知识至关重要,因为它是我们将使用的主要语言。熟悉机器学习和自然语言处理的基本概念将帮助您更轻松地掌握这些概念。此外,对 Langchain、Ollama 和 Streamlit 是什么以及它们在 AI 和 NLP 领域如何运作有一个大致的了解将是有益的。如果您还不是这些工具的专家,请不要担心 - 本教程旨在清晰详细地引导您完成每个步骤。

二、为什么选择 Langchain、Ollama 和 Streamlit? 

 Langchain 是语言人工智能应用的强大工具,将作为我们的支柱,为集成语言和检索系统提供强大的功能。另一方面,Ollama 在 RAG 架构中发挥着至关重要的作用,为信息检索提供了高效且可扩展的解决方案,这对于 RAG 获取外部知识的能力至关重要。Streamlit 具有易用性和灵活性,将成为我们构建用户友好界面的选择,使您能够与 RAG 无缝交互。与我们一起踏上这段激动人心的旅程,释放 RAG 的潜力。在本教程结束时,您不仅可以更深入地了解这些先进的 NLP 技术,而且还可以在本地计算机上运行功能齐全的 RAG,准备好处理各种语言处理任务。让我们一起踏上这段发现与创新的旅程吧!

三、为 RAG 设置环境

创建强大而高效的环境是任何成功软件项目的基石,尤其是在处理 RAG 等先进技术时。本节致力于指导您完成设置最佳开发环境的过程,以使用 Langchain、Ollama 和 Streamlit 构建检索增强生成 (RAG)。

1、Python 安装:我们项目的基础

为什么选择Python?Python 是机器学习世界的通用语言,以其简单性、可读性和庞大的库生态系统而闻名。确保您的系统上安装了 Python;本教程假设您具备 Python 3.6 或更高版本的应用知识。
安装指南:如果尚未安装 Python,请访问 python.org 获取最新版本。选择适合您的操作系统的安装程序,然后按照屏幕上的说明进行操作。

2、设置 Python 虚拟环境:隔离我们的项目

虚拟环境的重要性:使用虚拟环境使我们能够管理项目的依赖项,而不会影响全局 Python 设置。这是保持项目整洁并降低版本冲突风险的最佳实践。
创建虚拟环境:在终端或命令提示符中,导航到项目目录并运行 python -m venv venv。此命令在项目文件夹中创建一个名为 venv 的新虚拟环境。
激活环境:在安装任何软件包之前,激活虚拟环境。在 Windows 上,使用 venv\Scripts\activate,在 Unix 或 MacOS 上,使用源 venv/bin/activate。您应该在控制台中看到环境名称,表明它处于活动状态。

3、依赖管理:安装必要的库

Langchain 和 Ollama:这些是我们 RAG 的核心库。Langchain 促进了语言与检索系统的集成,而 Ollama 则提供高效的检索能力。
Streamlit for UI:Streamlit 将使我们能够轻松构建用户界面。它以其易用性和快速原型制作能力而闻名。
安装命令:在激活的虚拟环境中,运行以下命令:

  • pip install langchain:安装 Langchain,我们用于构建 RAG 的主要库。
  • pip install ollama:安装 Ollama,它将处理 RAG 的检索部分。
  • pip installstreamlit:安装 Streamlit,我们将使用它来创建一个用于流式响应。
4、验证设置:确保一切就位

检查版本:使用 python --version、pip list 和 Streamlit --version 等命令来验证是否安装了正确版本的 Python、Langchain、Ollama 和 Streamlit。

python --version
pip list
Streamlit --version

测试运行:尝试使用 Langchain 运行基本的 Streamlit 应用程序或简单脚本,以确保安装正常运行。

5、为发展做好准备:准备好的环境
  • 代码编辑器:确保安装了代码编辑器或 IDE(如 VS Code、PyCharm 等),以获得流畅的开发体验。
  • 版本控制:考虑在项目目录中初始化 Git 存储库,以有效管理版本控制。

完成这些步骤后,您的环境已准备就绪。当我们深入研究构建检索增强一代的复杂性时,这个基础为无缝且高效的开发体验奠定了基础。让我们充满信心地继续前进,因为我们的工具和环境已做好充分准备,可以应对未来令人兴奋的挑战。

四、Langchain简介:解锁高级语言AI能力

当我们涉足高级语言人工智能领域时,Langchain 成为我们工具包中的关键工具。理解 Langchain 对于任何渴望构建复杂语言的人来说都是至关重要的,特别是当它们与检索系统集成时,就像我们的检索增强一代(RAG)一样。

1、什么是Langchain?

Langchain:语言与链的融合 - Langchain 不仅仅是一个库;这是我们处理语言人工智能方式的范式转变。Langchain 的开发目的是将语言人工智能系统的不同组件链接在一起,它是一个多功能且强大的框架。它促进大型语言与其他元素(例如检索系统和数据库)的无缝集成,使其成为构建 RAG 的完美候选者。

2、Langchain的核心理念

模块化设计:Langchain 的架构本质上是模块化的,允许各种组件的即插即用功能。这种模块化方法使开发人员能够尝试不同的配置并定制最适合其特定要求的解决方案。
可扩展性:Langchain 在设计时考虑到了可扩展性,能够在不影响性能的情况下处理复杂的任务和更大的数据集,使其成为企业级应用程序的理想选择。
社区驱动的开发:Langchain 是开源的,受益于开发者社区的集体智慧,确保持续改进和适应语言 AI ​​领域不断变化的需求。

3、安装和设置

轻松安装:Langchain 入门非常简单。Python 环境准备就绪后,安装 Langchain 就是在终端或命令提示符中执行 pip install langchain 如此简单。这个命令为您提供了一个强大的工具包来构建高级语言人工智能应用程序。

pip install langchain 
4、Langchain的基本使用

抢先一认知 Langchain 的功能:为了让您了解 Langchain 的功能,让我们看一个简单的示例。想象一下创建一个将语言与搜索系统集成在一起的系统来回答复杂的查询。借助 Langchain,您只需几个行代码可以设置此集成,展示了该库的强大功能和易用性。
实践示例:在我们的教程中,我们将进行更深入的研究,提供实践示例和详细解释。您将学习如何使用 Langchain从外部源获取数据,通过语言对其进行处理,并生成财富洞察的响应——这就是我们RAG的核心。

5、为什么选择Langchain来支持RAG?

RAG 的理想匹配:Langchain 将搜索系统与生成系统集成的能力构建成为构建 RAG 的理想选择。其灵活的设计允许进行必要的定制和定制,以在我们的 RAG 应用程序中实现高质量、上下文读取的响应。
总而言之,Langchain不仅仅是一个工具,更是接入语言人工智能未来的门户。它的多功能性、可扩展性和社区驱动的性质使其成为我们项目码头的资产。随看着我们学习本教程,您将亲眼目睹Langchain如何改变您构建高级语言AI解决方案的方法。让我们与Langchain一起踏上梦想之旅,释放新的可能性并突破人工智能语言世界可实现的界限。

五、Ollama 简介:人工智能信息搜索的革命性变革

在语言人工智能错综复杂的织锦中,Ollama 移动,成为一条关键线索,特别是在搜索增强生成(RAG)的背景下。本节将深入探讨 Ollama 的本质,阐明其在构建先进人工智能系统中的作用和意义。

1、Ollama是什么?

Ollama:搜索引擎 - Ollama 的核心是最先进的信息检索系统,经过所提出的设计,通过为语言提供访问和利用外部知识的能力来增强语言。在信息为王的人工智能世界中,Ollama 释放了大量数据的钥匙,成为任何RAG的宝贵资产。

2、Ollama之柱
  • 效率和速度:Ollama 专为高速数据搜索和设计,这是实时应用程序和响应式人工智能系统的关键功能。其效率确保搜索过程不会成为 RAG 整体性能的瓶颈。
  • 可扩展性:Ollama 的亮点在于其处理大规模数据集的能力,无论数据量有多大,都能保持其效率和速度。这种可扩展性非常适合企业级应用程序和复杂的人工智能项目。
  • 灵活:Ollama的设计充分考虑了灵活性,可以与各种数据库和信息源无缝集成。这种对于构建依赖于多元化和动态数据源的 RAG 至关重要。
3、安装和设置

简化设置:安装 Ollama 轻而易举。当您的 Python 环境准备就绪并等待时,只需一个简单的 pip install ollama 命令即可将这个复杂的搜索系统添加到您的工具包中。这种安装的简单性被忽视它为您的项目带来了功能的复杂性和精密性。

pip install ollama 
4、为 RAG 配置 Olama

根据您的需求定制Ollama:Ollama的配置是一个简单的过程,允许您自定义其行为按照RAG的特定要求。无论您需要连接到数据库还是调整搜索参数,Ollama都可以灵活地以最小的麻烦
Ollama 的实际应用:实际示例了解
Ollama 的工作情况:在本教程的后续部分中,我们将指导您完成将 Ollama 与 RAG 集成的实际示例。您将学习如何利用其检索功能和相关信息输入您的语言,从而生成丰富的响应的上下文和深度。

5、为什么选择Ollama加入RAG?

理想的搜索伙伴:Ollama 的搜索能力和 RAG 的生成能力之间的良好作用是不可否认的。Ollama 为 RAG 的“搜索”方面提供了重要的支撑,确保生成者能够访问必要的信息来生成上下文丰富并且准确的响应。
从本质上讲,Ollama不仅仅是一个工具;更是一个工具。它是增强人工智能功能的门户。它的高效性、可扩展性和建立成为高级语言人工智能系统领域随着本教程的进展,Ollama 在增强 RAG 能力方面的作用将变得越来越明显,展示其作为现代 AI 开发基石的价值。让我们继续冒险,利用 Ollama 的优势,在令人兴奋的人工智能和机器学习世界中开辟新天地。

六、构建RAG:创新与工程的融合

当我们深入研究增强一代(RAG)的构建时,我们正在踏上人工智能创新最前沿的旅程。本节致力于指导您完成构建 RAG 的复杂过程,利用 Langchain 和 Ollama 的综合功能,并最终形成一个体现现代语言AI尖端的系统。

1、RAG架构概述

RAG代表了两种复杂的人工智能范式的融合:检索和生成。从本质上讲,RAG是一种复杂的算法,它首先从庞大的数据集中检索相关信息(由Ollama提供),然后利用这些信息生成丰富的洞察力、上下文丰富的响应(由Langchain提供支持)。这种双流程方法使RAG能够产生不仅语言连贯、信息丰富且事实准确的输出。

2、将 Langchain 与 Ollama 集成

在构建更复杂、上下文采集的人工智能的过程中,Langchain 语言和 Ollama 的集成成为创新的灯塔。我们教程的这一部分深入探讨了这种集成的实际方面,提供了一个源代码示例来演示这一点这个强大的工具之间的配合非常好,能够彻底改变语言处理能力。

3、搜索与生成的融合

我们的 RAG(搜索增强生成)的本质依赖它能够将 Ollama 的搜索能力与 Langchain 的生成技巧相结合。在这里,我们提供了一个封装此集成的简化源代码示例:

python
from langchain.chains import Chain
from langchain.retrieval import OllamaRetriever
from langchain.llms import YourFavoriteLLM  # Replace with your chosen language def create_rag_():# Initialize your language language_ = YourFavoriteLLM()# Initialize Ollama retrieverollama_retriever = OllamaRetriever(index_name="your_index_name",api_key="your_api_key",)# Create a RAG chainrag_chain = Chain(components=[ollama_retriever, language_],combine_func=lambda retrievals, _: " ".join([doc['text'] for doc in retrievals]))return rag_chaindef generate_response(question, rag_):# Retrieve and generate responseretrievals = rag_.retrieve(question)response = rag_.generate(retrievals, prompt=question)return response# Instantiate RAG 
rag_ = create_rag_()# Example usage
question = "What is the significance of quantum computing in AI?"
response = generate_response(question, rag_)print("Response:", response)

划分代码

  1. 初始化:代码从设置 Langchain 和 Ollama 开始。必须替换YourFavoriteLLM以满足您的项目需求的实际语言。
  2. RAG链创建:集成的核心是RAG链的创建。这条链连接了Ollama搜索器和语言,保证搜索和生成信息之间的顺利流动。
  3. 响应生成:该generate_response函数说明如何通过RAG处理查询,将检索到的信息与原始查询相结合生成综合响应。
  4. 示例查询:我们提供了一个示例来展示 RAG 的实际应用,回答有关人工智能中量子计算的复杂问题。

七、集成测试

Langchain 和 Ollama 的集成构建搜索增强生成(RAG)是一个重要的里程碑,但成功的真正缓解标准需要对其进行评估。正确的测试和评估确保 RAG 预期运行、有效地结合搜索和生成功能提供准确且与上下文相关的响应关键。本节重点介绍评估集成 RAG 的方法和最佳实践。
1. 单元测试:首先单独测试 Langchain 和 Ollama。此步骤将确保每个组件都独立正常运行,执行各自的任务。
此外,开发各个场景(包括边缘情况)的测试用例,以彻底评估每个。这些组件可能涉及使用不同类型的输入查询来测试 Langchain,并评估 Ollama 从不同数据源检索相关信息2.
端到端测试:单个组件经过验证后,下一步就是对它们进行一起测试。这涉及通过整个RAG系统运行查询并观察检索和生成过程之间的交互。
使用一组包含广泛的主题和复杂性的预定义查询。这有助于评估其检索相关信息的效果以及它如何有效地利用这些信息来生成响应。
3.评估性能和准确性:评估RAG生成的响应的质量。这包括评估其相关性、连贯性、事实准确性和语言质量。人类评估员或自动评分系统可用的获取目的。评估检索组件的有效性。分析 Ollama 是否正在获取对生成响应的质量有重大贡献的相关且全面4.
调整和优化:纳入反馈循环,分析的准确性和相关性。使用此反馈来调整、调整参数并设置更好输出的性能。
采用响应时间、准确性评分和相关性指标等各种指标来定量评估绩效。这些指标为指导进一步优化提供了具体数据。

1、增强RAG

定制:基本RAG就位后,下一步是根据应用程序的特定需求由此进行定制。这可能涉及针对特定类型的查询进行调整或优化搜索过程以提高效率。
反馈循环:实施反馈循环可以显着提高RAG 的性能。通过分析生成的响应和检索到的信息的相关性,您可以不断完善它以提高准确性和相关性。

2、应用和扩展

一旦RAG构建完成并经过全面测试,最后一步就是准备部署。这涉及到可扩展性的考虑,特别是在需要处理大量查询的情况下。Langchain和Ollama的可扩展性在这里发挥作用,确保RAG即使在重负载下也保持新鲜和高效。
总而言之,构建 RAG 是一项复杂但高效的工作,它结合了尖端的人工智能技术。通过 Langchain 和 Ollama 的集成,我们可以创建一个不仅能够并理解生成的自然语言,并且具有外部的接入和事实准确性水平的系统。当我们继续学习本教程时,每一步都涉及到我们更接近实现 RAG 的全部潜力,从而为 AI 语言领域开辟新的视野。

八、在本地运行 RAG 应用程序:将您的 AI 提高现实

我们构建搜寻强化一代(RAG)之旅的最后一个令人兴奋的阶段是通过在本地运行来实现它。该阶段从理论发展到实际应用的过渡,让您亲眼目睹辛勤工作的成果。让我们浏览一下在本地启动 RAG 应用程序的过程,确保配置顺利、成功。

1、启动Streamlit服务器:您访问RAG的窗口

启动界面:使用简单的 Streamlit,启动应用程序既又令人兴奋。Streamlit的设计理念以练习性和快速配置为中心,使其成为展示 RAG 的理想选择。要启动服务器,请导航到包含 Streamlit 脚本的目录并运行命令streamlit run your_script.py。此激活Streamlit服务器并为您的应用命令程序提供服务。

streamlit run your_script.py


本地托管:运行命令后,通常Streamlit将您的应用程序托管在本地服务器上,通常可以通过 localhost:8501这种本地托管允许您在Web界面中与RAG交互,提供一种切实且用户友好的方式来探索其功能。

2、与RAG交互:以用户为中心的方法

用户界面体验:Streamlit应用程序为用户与RAG交互提供了交互式的交互式界面。您可以输入查询、调整参数并实时查看响应。这种交互式对于体验理解的功能和灵敏度来说。
实时反馈:本地运行应用程序的主要优点之一是能够获得实时反馈。当您输入不同的查询和调整设置时,系统会立即做出响应,从而允许动态探索其功能。

九、结论:人工智能之旅的里程碑

在本地运行的 RAG 应用程序不仅仅是一项技术成就;更是一项技术成就。这是您人工智能开发人员旅程中的一个重要里程碑。它代表了您在掌握复杂的人工智能概念和工具方面您努力的顶峰,以及可以改进、共享和潜在扩展的新阶段的开始。
总之,本阶段教程将 RAG 的所有组件集成到一个有形状的交互式应用程序中。通过在本地运行,您可以其实际功能的宝贵意见,让您了解人工智能驱动的语言处理的分数差。这种体验观察输出;而不是观察结果。这是关于参与它、消耗学习并思考它在现实世界中的潜在应用。

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

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

相关文章

蓝桥杯练习系统(算法训练)ALGO-973 唯一的傻子

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 腿铮找2255有点事,但2255太丑了,所以腿铮不知道他的长相。正愁不知道到如何找他的时候,…

【开发环境】Ubuntu 18.04 搭建 QT编译环境详细步骤 【亲测有效】

目录 1 查看Ubuntu系统中Qt版本 2 下载Ubuntu系统Qt版本安装包 3 Qt安装 3.1 Qt 安装步骤 3.2 安装qt发现Ubuntu空间不足,怎么去扩容呢? 3.2.1 硬盘操作步骤(需要关闭虚拟机进行操作) 3.2.2 Ubuntu命令操作:安装…

云计算项目七:jump-server安装部署

jump-server安装部署 配置清单 jumpserver概述 Jumpserver是一款开源的堡垒机,可使系统的管理员和开发人员安全的连接到企业内部服务器上执行操作,并且支持大部分操作系统,是一款非常安全的远程连接工具 常见支持的系统 CentOS, RedHat, …

基于springboot实现酒店客房管理系统项目【项目源码+论文说明】

基于springboot实现酒店客房管理平台系统演示 摘 要 随着人们的物质水平的提高,旅游业和酒店业发展的速度越来越快。近年来,市面上酒店的数量和规模都在不断增加,如何提高酒店的管理效率和服务质量成为了一个重要的问题。伴随着信息技术的发…

内网渗透-跨域环境渗透-1

目录 smbclient工具 mimikatz工具 Kerbers协议 NTLM认证 hash传递攻击(PTH攻击) 黄金票据攻击 白银票据 MS14-068 smbclient工具 在linux里面连接远程windows共享目录,可以使用这个工具 ​ 第一种连接方式:smbclient -L 目…

HarmonyOS 非线性容器特性及使用场景

非线性容器实现能快速查找的数据结构,其底层通过 hash 或者红黑树实现,包括 HashMap、HashSet、TreeMap、TreeSet、LightWeightMap、LightWeightSet、PlainArray 七种。非线性容器中的 key 及 value 的类型均满足 ECMA 标准。 HashMap HashMap 可用来存…

JWT概述

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。 一、跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。 2、服务器验证通过后,在当前对话…

学习Java的第八天

本节我们重点研究对象和类的概念。 对象(Object)是一个应用系统中的用来描述客观事物的实体,是有特定属性和行为(方法)的基本运行单位。是类的一个特殊状态下的实例。对象可以是一个实体、一个名词、一个可以想象为有…

记事小本本

记事小本本 实现效果 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</titl…

Qt Creator常见问题解决方法

Qt Creator源文件重命名的正确方法 光改文件名是不够的&#xff0c;还要在.pro文件中的SOURCES中把名字改成之后的。 中文乱码&#xff08;字符集设置&#xff09; 菜单栏-工具-选项-设置为utf-8

MongoDB性能最佳实践:硬件和操作系统配置

欢迎阅读有关MongoDB性能最佳实践的系列博文。在往期文章中&#xff0c;我们已经讨论过查询模式和性能分析、事务和读/写关注等实现大规模性能的关键考虑因素。在本篇文章中&#xff0c;我们将讨论硬件和操作系统配置。 如果您在阿里云上部署MongoDB&#xff0c;那么阿里云会为…

移动端tabBar的固定问题

tabBar原本是 position: fixed的布局&#xff0c;会导致元素脱标&#xff0c;不占位&#xff0c;上面的内容就会被覆盖 .layout {height: 100%;display: flex;flex-direction: column;.main{flex: 1;overflow: hidden; // 隐藏二级路由中超出main高度的内容}.van-tabbar {posi…

运维自动化之ansible

pxe 一键安装操作系统 操作系统只是提供一个平台 lnmp 需要多软件协同完成的一个简单项目 服务器正常运行 日常运维 巡检 服务器上的软件正常运行 zabbix 普罗米修斯 系统调优&#xff0c;架构调优 云计算核心职能 搭建平台架构 日常运营保障 性能效率优化 相关工具 代…

lucky-canvas实现老虎机、九宫格和大转盘抽奖

lucky-canvas是一款开源免费的基于 jscanvas 的前端插件&#xff0c;UI精美&#xff0c;功能强大&#xff0c;使用起来比较方便。 lucky-canvas官网https://100px.net/ 一、使用 注意&#xff1a;下例是vue中的应用&#xff0c;具体还有js和uniapp中的应用&#xff0c;详细查…

部署zabbix6.0.27 执行 make install 报错

CentOS7 部署 zabbix6.0.27 执行 make install 报错 报错信息 [rootlocalhost zabbix-6.0.27]# make install /usr/bin/ld: warning: libssl.so.3, needed by /usr/local/mysql/lib/libmysqlclient.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: l…

EasyExcel导出自定义表格

谈到新技术&#xff0c;每个人都会有点恐惧&#xff0c;怕处理不好。确实&#xff0c;第一次使用新技术会遇到很多坑&#xff0c;这次使用 EasyExcel 这个新技术去做 excel 导出&#xff0c;还要给表格加样式&#xff0c;遇到不同的版本问题&#xff0c;遇到颜色加错了地方&…

web开发——前端html、css、JavaScript学习总结(持续更新中.......)

目录模版 1 html:结构标签/属性文本标记: mark文本设置:删除线del / 下划线ins/ 加粗b / 强调的文本em / 重要的文本 strong超链接: a联系信息: addressdiv 定义文档中的分区或节: div行元素:spanhtml结构: main / section / articlenav表格:table html中各种标签/属性的英文扩…

记一次寻找js来文件上传

edu教育证书站之路 0x01 信息收集 通过fofa&#xff0c;子域名收集等相关工具搜索域名 定位到站点&#xff1a;htps://xx..edu.cn/x/xx/ 0x02 寻找接口 通过f12寻找相关的js&#xff0c;发现有其他的页面 0x03 拼接路径 https://xx.xx.edu.cn/xx/xx/repairResgister 之后未授权…

主流接口测试框架对比

公司计划系统的开展接口自动化测试&#xff0c;需要我这边调研一下主流的接口测试框架给后端测试&#xff08;主要测试接口&#xff09;的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求&#xff0c;看哪个框架更适合我们。 需求 1、接口编写…

亿道三防手持机丨安卓加固手持终端丨手持机PDA丨货物出入库

出入库管理是现代物流系统中的重要环节&#xff0c;涉及到货物的接收、分发、存储和追踪等方面。然而&#xff0c;在复杂的仓库环境中&#xff0c;传统的管理方法面临着很多困难和挑战&#xff0c;如手写记录容易出错、数据处理繁琐等。为了提高出入库管理的效率和准确性&#…