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

news2025/1/15 13:34:07

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

在深入讨论技术细节之前,我们先概述一下先决条件。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 retriever
    ollama_retriever = OllamaRetriever(
        index_name="your_index_name",
        api_key="your_api_key",
    )

    # Create a RAG chain
    rag_chain = Chain(
        components=[ollama_retriever, language_],
        combine_func=lambda retrievals, _: " ".join([doc['text'] for doc in retrievals])
    )

    return rag_chain

def generate_response(question, rag_):
    # Retrieve and generate response
    retrievals = 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.coloradmin.cn/o/1513835.html

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

相关文章

瑞熙贝通实验室物联网管理平台新升级|支持远程开门视频监控与电源控制以及环境监测

瑞熙贝通实验室智能物联网管控平台:利用“互联网与物联网技术”有机融合,对实验室的用电安全监测、实验室环境异常监测(颗粒物监测、明火监测、可燃气体、烟雾监测、温湿度传感器、红外人体感应)、实验室人员安全准入、万物互联等…

16、技巧之九: 修改参数,如何让表格翻页滚动到底部?【Selenium+Python3网页自动化总结】

1、问题提出 在网页配置参数时,输入参数名称搜索,搜出来的同名参数结果有多个,分布在一个表格的不同行,表格是动态加载的,需要滚动鼠标才能把所出参数找出来。用selenium怎么实现这种参数修改? 2、网页元素…

数字工厂管理系统和ERP管理系统有什么区别

在制造业的数字化转型浪潮中,数字工厂管理系统和ERP管理系统作为两大核心系统,扮演者不可或缺的角色。虽然它们都是为了提高企业的运营效率和降低成本,但在功能与实施效果方面,二者却有着显著的区别。本文将从这两个方面对数字工厂…

Pytorch实战01——CIAR10数据集

目录 1、model.py文件 (预训练的模型) 2、train.py文件(会产生训练好的.th文件) 3、predict.py文件(预测文件) 4、结果展示: 1、model.py文件 (预训练的模型) impor…

day57 动态规划part17● 647. 回文子串 ● 516.最长回文子序列● 动态规划总结篇

如果大家做了很多这种子序列相关的题目,在定义dp数组的时候 很自然就会想题目求什么,我们就如何定义dp数组。 布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j…

C++学习路线

C学习路线思维导图,肝了一个星期终于搞定,这么硬核求个赞不过分吧? 思维导图的内容,也是本文的内容框架,坐稳扶好, C 高速快车要发车了! 内容我会持续更新,点赞收藏,…

Window系统下Vscode配置C/Cpp运行+调试环境

Window系统下Vscode配置C/Cpp运行调试环境 文章目录 Window系统下Vscode配置C/Cpp运行调试环境1.安装Vscode2.安装C/Cpp插件3.配置gcc编译器4.配置Cpp运行环境5.配置Cpp调试环境 1.安装Vscode 安装VScode很简单,直接到官网进行下载,然后傻瓜安装即可。 …

读CDO代码

前置任务 module PIL.Image has no attribute ANTIALIASImage.ANTIALIAS 替换为 Image.LANCZOS,参考https://blog.csdn.net/fovever_/article/details/134690657 OSError: science is not a valid package style, path of style file, URL of这是对应可视化里面生…

GraphView实现测量工具

效果演示: 主模块代码: MeasureGraphView::MeasureGraphView(QWidget *parent): QWidget(parent) {ui.setupUi(this);m_measureType NoType;m_bll BllData::getInstance();m_scene new GraphicsScene;connect(m_bll, &BllData::pressMeasurePos…

力扣106 从中序与后续遍历序列构造二叉树

文章目录 题目描述解题思路代码 题目描述 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7], …

【单片机毕业设计7-基于stm32c8t6的智能温室大棚系统】

【单片机毕业设计7-基于stm32c8t6的智能温室大棚系统】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 🔥这里是小殷学长,单片机毕业设计篇7基于stm32的智能衣柜系统 🧿创作不易,拒绝白嫖可私 一、功能介绍 ---------------…

Sqllab第一关通关笔记

知识点: 明白数值注入和字符注入的区别 数值注入:通过数字运算判断,1/0 1/1 字符注入:通过引号进行判断,奇数个和偶数个单引号进行识别 联合查询:union 或者 union all 需要满足字段数一致&…

基础小白快速入门opencv-------C++ 在opencv的应用以及opencv的下载配置

啥是opencv? OpenCV(开源计算机视觉库 Open Source Computer Vision Library)是一个跨平台的计算机视觉库,最初由Intel开发,现在由一个跨国团队维护。它免费提供给学术和商业用途,并且是用C语言写成的&…

doit,一个非常实用的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个非常实用的 Python 库 - doit。 Github地址:https://github.com/pydoit/doit 在软件开发和数据处理过程中,经常会遇到需要执行一系列任务的情况,这些任务可…

华为数通方向HCIP-DataCom H12-821题库(多选题:161-180)

第161题 以下关于IPv6优势的描述,正确的是哪些项? A、底层自身携带安全特性 B、加入了对自动配置地址的支持,能够无状态自动配置地址 C、路由表相比IPv4会更大,寻址更加精确 D、头部格式灵活,具有多个扩展头 【参考答案】ABD 【答案解析】 第162题 在OSPF视图下使用Filt…

做伦敦银要等怎样的价格与行情?

对于不同的伦敦银投资者来说,合适的入市价格和好的行情机会,标准可能并不一样,因为不同人有不同的交易策略、风险偏好和盈利目标。对于喜欢做趋势跟踪的投资者来说,一波明显而持续的上涨或下跌趋势,可能就是最好的行情…

yolov5-v6.0详细解读

yolov5-v6.0详细解读 一、yolov5版本介绍二、网络结构2.1 Backbone特征提取部分2.1.1 ConvBNSiLU模块2.1.2 C3模块2.1.2.1 BottleNeck模块 2.1.3 SPPF模块 2.2 Neck特征融合部分2.2.1 FPN2.2.2 PANet 2.3Head模块 三、目标框回归3.1 yolo标注格式3.2 yolov4目标回归框3.3 yolov…

数据结构-链表(二)

1.两两交换列表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 输入:head [1,2,3,4] 输出:[2…

框架漏洞Shiroweblogicfastjson || 免杀思路

继续来讲一下我们的框架漏洞,先讲一下Shiro 1.Shiro反序列化 1.原理 Shiro的漏洞形成呢,就是因为存在了RememberMe这样的一个字段 Shiro 框架在处理 "rememberMe" 功能时使用了不安全的反序列化方法,攻击者可以构造恶意序列化数据&#xff0…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的危险物品检测系统(深度学习模型+PySide6界面+训练数据集+Python代码)

摘要:本文深入介绍了一个采用深度学习技术的危险物品识别系统,该系统融合了最新的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5等早期版本的性能。该系统在处理图像、视频、实时视频流及批量文件时,能够准确识别和分类各种危险物品…