快速构建本地RAG聊天机器人:使用LangFlow和Ollama实现无代码开发

基于LangChain的快速RAG应用原型制作方法

还记得构建智能聊天机器人需要数月编码的日子吗?

LangChain这样的框架确实简化了开发流程,但对非程序员来说,数百行代码仍然是一道门槛。

有没有更简单的方法呢?

图片

图片由 Ravi Palwe 在 Unsplash 提供

这时我发现了“Lang Flow”,一个基于Python版本LangChain的开源包。它让你无需编写一行代码就能创建AI应用。它提供了一个画布,你只需拖动组件并连接它们,就能构建你的聊天机器人。

在这篇文章中,我们将使用LangFlow在几分钟内构建一个智能AI聊天机器人的原型。在后端,我们将使用Ollama进行嵌入模型和大型语言模型,这意味着应用程序可以在本地免费运行!最后,我们将这个流程转化为一个Streamlit应用,只需少量编码。

探索检索增强生成流程:LangChain、LangFlow和Ollama简介

在这个项目中,我们将构建一个人工智能聊天机器人,并命名为“Dinnerly——您的健康食谱规划师”。它的目标是借助检索增强生成(RAG)技术,从一个食谱PDF文件中推荐健康的菜肴配方。

在深入了解如何实现这一目标之前,让我们快速浏览一下项目中将要使用的关键组件。

检索增强生成(RAG)

RAG(Retrieval-Augmented Generation)通过向大型语言模型(LLMs)提供外部来源的相关信息,帮助它们提高生成响应的准确性和时效性。

RAG的工作流程通常包括以下步骤,如A Guide to Retrieval Augmented Generation中所述:

  1. 加载文档: 首先加载文档或数据源。
  2. 分割成片段: 将文档分解成可管理的部分
  3. 创建嵌入向量: 使用嵌入技术将这些片段转换为向量表示。
  4. 存储在向量数据库中: 将这些向量保存在数据库中,以便高效检索。
  5. 用户交互: 接收用户查询或输入,并将其转换为嵌入向量。
  6. 向量数据库中的语义搜索: 连接到向量数据库,根据用户的查询进行语义搜索。
  7. 检索并处理响应: 获取相关响应,通过LLM处理,生成答案。
  8. 向用户交付答案: 将LLM生成的最终输出返回给用户。

图片

这是RAG工作流程的概述,由Han HELOIR, Ph.D. ☕️提供。

Langchain

Langchain 是一个围绕大型语言模型构建的开源框架,它促进了各种生成式AI应用的设计和开发,包括聊天机器人、摘要等。

该库的核心思想是将不同的组件“串联”起来,以简化复杂的AI任务,并围绕LLMs创建更高级的用例。

图片

LangFlow

LangFlow 是专为LangChain设计的一款网页工具,它提供了一个用户界面,用户可以通过拖放组件来构建和测试LangChain应用,无需编写代码。

然而,为了使用LangFlow设计AI应用流程,你需要首先对LangChain的工作原理及其不同组件有基本的了解。

图片

LangFlow界面

Ollama

Ollama 对我来说,是开源LLM(大型语言模型)中最优秀且最容易上手的方式。它支持诸如Llama 2和Mistral等强大的LLM,并且你可以在ollama.ai/library上查看可用模型的列表。

图片

Ollama https://ollama.ai/

配置Ollama

安装Ollama

首先,访问 Ollama下载页面,选择与您操作系统匹配的版本,下载并安装。

安装好Ollama后,打开命令终端并输入以下命令。这些命令将下载模型并在您的本地机器上运行它们。

对于本项目,我们将使用Llama2作为大型语言模型(LLM),并使用“nomic-embed-text”作为嵌入模型。"Nomic-embed-text"是一个功能强大的开源嵌入模型,具有大上下文窗口。这使得我们可以在本地运行整个应用程序,而无需任何云服务!

在这里插入图片描述

配置LangFlow

前置条件

在开始使用LangFlow之前,确保你的计算机上已经安装了Python。Python的版本应高于3.9,但需低于3.12。

安装LangFlow

接下来,我们继续安装LangFlow。建议在虚拟环境中进行此操作。这种方法有助于在自己的空间内整洁地管理依赖项。在我的Mac上,我使用Conda来设置。只需在命令行终端中输入以下命令,创建一个名为“langflow”的虚拟环境,其中包含Python 3.11。

在这里插入图片描述

如果你没有Conda,也可以直接使用Python设置虚拟环境,如下所示。

在这里插入图片描述

安装完成后,只需在终端中输入“langflow run”即可启动LangFlow。

图片

Langflow后端控制台。图片由作者提供。

然后,将它给出的URL(如上例中的http://127.0.0.1:7860)复制到你的网络浏览器中,搞定!你应该会看到一个类似这样的界面,显示了你的所有项目。

图片

Langflow UI项目页面。图片由作者提供。

设计聊天机器人的流程

是时候创建你的第一个流程了!

点击“新建项目”,这将打开一个空白画布。在左侧窗格中,你会看到各种组件,可以将它们拖放到工作区。

图片

LangFlow 画布。作者提供图片。

对于我们的项目,我们将构建一个能够从 PDF 文件中回答问题的聊天机器人。还记得我们之前提到的 RAG 管道吗?我们需要以下元素来组合它:

  1. PDF 加载器:我们将使用“PyPDFLoader”。你需要输入 PDF 文档的文件路径。
  2. 文本分割器:选择“RecursiveCharacterTextSplitter”,默认设置即可。
  3. 文本嵌入模型:选择“OllamaEmbeddings”来利用免费的开源嵌入。
  4. 向量数据库:我们选择“FAISS”来存储嵌入并支持向量搜索。
  5. 用于生成响应的 LLM:选择“ChatOllama”,并指定模型为“llama2”。
  6. 对话内存:这使聊天机器人能够保留聊天历史,有助于后续问题。我们将使用“ConversationBufferMemory”。
  7. 对话检索链:将 LLM、内存和检索到的文本等组件连接起来生成响应。我们选择“ConversationRetrievalChain”。

将所有这些组件拖放到画布上,并设置必要的字段,如 PDF 文件路径和 LLM 模型名称。其他设置可以保持默认。

接下来,将这些组件连接起来形成你的流程。

图片

一旦所有组件都连接好,点击右下角的“闪电”按钮编译流程。如果一切顺利,按钮将变为绿色,表示成功。

成功编译流程后,点击“聊天机器人”图标来测试你的创作。

图片

Langflow 聊天机器人演示。作者提供图片。

一些提示:

  1. 完成流程后,你可以将其保存为 JSON 文件,或在“我的收藏”中找到它,以便将来访问或编辑。
  2. 通过使用预建示例深入 LangFlow 可以提供很好的灵感并帮助你入门。你可以:
    - 在“LangFlow Store”中找到示例,但需要 API 密钥才能访问。
    - 访问 LangFlow GitHub 页面下载示例,然后使用 UI 上的“上传”按钮将它们上传到 LangFlow。
  3. 如果本地设置不适合你,你也可以选择使用 OpenAI 构建 RAG 管道。只需确保你有设置所需的 OpenAI API 密钥。

将流程转化为Streamlit聊天机器人

如果流程设置正确,现在是将其集成到应用程序中的时候了。在构建流程后,LangFlow提供了必要的代码片段,只需点击侧边栏中的“代码”按钮。

图片

让我们继续将此流程集成到Streamlit聊天机器人中。

  1. 设置依赖项:首先,我们需要安装依赖项。

在这里插入图片描述

  1. 获取Lang Flow代码片段:创建一个新的Python文件“app.py”。返回LangFlow UI,再次找到“代码”按钮。导航到“Python API”标签,复制代码片段并粘贴到“app.py”中。

在这里插入图片描述

  1. 构建聊天功能:在同一个Python文件中,我们将定义一个专门用于聊天的函数。此函数在接收到用户的新查询时运行流程以获取响应,然后在界面上流式传输该响应。

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

  1. 创建界面:现在,我们将在同一个Python文件中构建一个简单的Streamlit用户界面。

在这里插入图片描述

运行Streamlit应用后,您就可以与自己的食谱规划师聊天了!它将帮助您创建美味健康的餐点。

图片

Streamlit应用演示。图片由作者提供。

提示:

可以使用相同的代码和界面来测试和集成不同的流程。只需将FLOW_ID更改为要测试和集成的新流程即可。

图片

结束语

在这篇文章中,我们创建了一个基于RAG的智能聊天机器人。我们利用LangFlow无需编码就建立了RAG管道,借助开源模型进行嵌入和LLM处理,使应用程序能在本地运行,无需推理成本。最后,我们将这个设置转化为一个Streamlit应用程序。

我特别欣赏LangFlow的无代码方式,相信它可能会改变我们构建和原型设计AI应用的方式。

然而,值得注意的是,某些组件仍在开发中,有时可能无法按预期工作。当遇到这些问题时,缺乏问题的可见性或故障排除指导。另一个改进之处可能是直接提供底层Python代码,以提供更大的定制空间。

总的来说,我认为LangFlow对于快速原型设计需求是一个有价值的工具。

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字政协:迈向智慧时代,开启政协工作新篇章

在信息化浪潮席卷全球的今天,数字技术不仅改变了我们的生活方式,也深刻影响着政治生态的变革。其中,“数字政协”的崛起,正是新时代政协工作创新发展的重要标志。那么,什么是数字政协?它又将如何助力政协工…

[图解]建模相关的基础知识-09

1 00:00:01,350 --> 00:00:03,780 首先,我们来看一下什么叫关系 2 00:00:05,370 --> 00:00:08,990 这个关系跟下面说的这些关系 3 00:00:09,000 --> 00:00:10,390 它不是一个东西 4 00:00:11,110 --> 00:00:14,950 比如说,我们UML类图上&…

门控循环单元GRU与长短期记忆网络LSTM

门控循环单元与长短期记忆网络 门控隐状态 问题提出:对于一个序列来说不是每个观察值都是同等重要想只记住相关的观察需要: 能关注的机制(更新门)能遗忘的机制(重置门) 第一个词元的影响至关重要。 我们…

使用vuejs3时,报错:Uncaught (in promise)

解决: vite.config.js里 import {fileURLToPath, URL} from node:urlimport {defineConfig} from vite import vue from vitejs/plugin-vue// https://vitejs.dev/config/ export default defineConfig({resolve: {alias: {: fileURLToPath(new URL(./src, import…

LeetCode | 520.检测大写字母

这道题直接分3种情况讨论:1、全部都为大写;2、全部都为小写;3、首字母大写其余小写。这里我借用了一个全是大写字母的串和一个全为小写字母的串进行比较 class Solution(object):def detectCapitalUse(self, word):""":type …

通过Vue3+高德地图的JS API实现市区地图渲染

效果图: 核心代码: <script setup>import { onMounted, onUnmounted } from vue;import AMapLoader from @amap/amap-jsapi-loader;import { message } from ant-design-vue;import school from @/assets/icons/school.svg;import enterprise from @/assets/icons/ent…

pytest + yaml 框架 -61.jenkins+allure+钉钉通知添加测试结果

前言 上一篇pytest + yaml 框架 -60.git+jenkins+allure+钉钉通知反馈 已经实现测试结果用钉钉通知。 本篇继续在钉钉通知里添加测试的汇总结果,此功能在pytest-yaml-yoyo v1.5.2版本上实现。 Environment Injector 插件 在运行完用例后会生成一个summary.json 文件,汇总…

JAVA小知识20:万字详解List与ArrayList

一、集合简介 1.1、什么是集合&#xff1f; 可同时存储多个元素的数据结构就是集合。 1.2、为什么要有集合&#xff1f; 我们可以使用数组同时存储多个元素&#xff0c;但是数组有个弊端。数组创建之后长度就会固定&#xff0c;如需扩容则需要手动扩容&#xff0c;我们需要…

【计算机视觉】人脸算法之图像处理基础知识(四)

图像的几何变换 图像的几何变换是指在不改变图像内容的前提下对图像的像素进行空间几何变换。主要包括图像的平移变换、镜像变换、缩放和旋转等。 1.插值算法 插值通常用来放缩图像大小&#xff0c;在图像处理中常见的插值算法有最邻近插值法、双线性插值法、二次立方、三次…

中小制造业工厂要不要上MES系统

MES系统的主要功能包括制造数据管理、计划排产管理、生产调度管理、库存管理、质量管理、人力资源管理、工作中心/设备管理、工具工装管理、采购管理、成本管理、项目看板管理、生产过程控制、底层数据集成分析、上层数据集成分解等。通过这些模块&#xff0c;MES为企业打造一个…

【网络安全学习】使用Kali做渗透情报收集-01-<域名信息主机信息>

1.收集开源情报 开源情报(Open Source Intelligence&#xff0c;OSINT)是指从各种公开的渠道中寻找和获取有价值的信息 如&#xff1a;互联网、媒体、社交网络、公共数据库等开源情报具有以下特点&#xff1a; - 丰富性&#xff1a;开源情报涵盖了各种类型和领域的信息 - 可…

【学习】什么样的软件测试项目适合做自动化测试

随着科技的发展和社会的进步, 软件行业也在不断地壮大和发展。在这个过程中&#xff0c;软件测试变得越来越重要&#xff0c;并且成为了保证软件质量的关键环节。而自动化测试作为软件测试的一种方法&#xff0c;在提高测试效率、降低人力成本等方面具有显著的优势。那么什么样…

SpringBoot集成mqtt上下线提醒功能设计

目录 1.首先安装emqx&#xff0c;去官网下载emqx压缩包&#xff0c;并且解压。 2.使用emqx start 命令启动emqx后台管理 3.下载mqttx调试工具&#xff0c;使用mqttx调试mqtt连接。下载地址:MQTTX下载-MQTTX官方版下载,下载完成直接打开&#xff0c;便可进行mqtt连接调试 4.…

超详解——Python 字典详解——小白篇

目录 1. 创建字典 示例&#xff1a; 2. 访问字典中的元素 示例&#xff1a; 3. 修改字典元素 示例&#xff1a; 4. 删除字典元素 示例&#xff1a; 5. 查找元素是否是字典的键 示例&#xff1a; 6. 标准类型操作符 获取字典长度 合并两个字典 7. 常用内置函数 k…

el-table表头修改文字或者背景颜色,通过header-row-style设置样式

方式一 <el-table :header-cell-style"{text-align: center}" />方式二 <template><el-table :header-cell-style"tableHeaderColor" /> </template> <script> export default {methods: {tableHeaderColor ({row, column…

socket收发数据的处理

1. TCP 协议是一种基于数据流的协议 Socket的Receive方法只是把接收缓冲区的数据提取出来,当系统的接收缓冲区为空,Receive方法会被阻塞,直到里面有数据。 Socket的Send方法只是把数据写入到发送缓冲区里,具体的发送过程由操作系统负责。当操作系统的发送缓冲区满了,Send方法会…

基于springboot的大学计算机基础网络教学系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于springboot的大学计算机基础网络教学…

【Pycharm】设置双击打开文件

概要 习惯真可怕。很多小伙伴用习惯了VsCode开发&#xff0c;或者其他一些开发工具&#xff0c;然后某些开发工具是单击目录文件就能打开预览的&#xff0c;而换到pycharm后&#xff0c;发现目录是双击才能打开预览&#xff0c;那么这个用起来就特别不习惯。 解决办法 只需一…

代码随想录-Day31

455. 分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都…

swiftui中使用icon图标时,让中间部分不透明显示

在使用了Image(systemName: "plus.circle.fill")这个视图组件后&#xff0c;发现中间的加号竟然是透明的&#xff0c;但是我们想要的是不让它透明&#xff0c;该怎么做呢&#xff1f; 最简单的方式就是给这个图片设置一个白色的背景是不是就好了&#xff1f;我们可以…