Elasticsearch:LangChain 是什么?

news2024/11/28 0:36:23

当你将应用程序称为 “AI(人工智能)” 时,这通常意味着它包含与学习模型(例如大型语言模型,或 LLM)的交互。 [不那么]有趣的事实是,LLM 的使用实际上并不是使应用程序变得智能的原因。 它的特殊之处在于实时使用神经网络。 碰巧 LLM 是使用神经网络构建的。 人工智能应用程序通常实时处理数据。 这意味着,虽然它拥有大量预先训练的知识,但它可以在数据被提交到应用程序时接收数据并为 LLM 提供最新信息。

“人工智能应用程序” 的替代方案包括使用机器学习模型。 这些应用程序仍然非常智能,但它们的数据处理更限于已经接受过训练的内容。 没有太多实时信息。 预训练模型与使用神经网络似乎是一个很小的微妙之处,因为它们似乎都在做同样的事情,但在数据科学领域,这是一个很大的区别。

人工智能应用程序通常是一组处理接收到的数据的步骤。 当你点击查看电子商务网站上的商品时,该点击事件将发送到网站并通过人工智能应用程序进行处理,以决定应在页面上显示的其他 “建议商品”(如果你正在犹豫 ,是的,他们正在观看)。 该应用程序将获得正在查看的商品的上下文、你的购物车中的商品以及你之前查看过并表现出兴趣的商品。所有这些数据都将提供给 LLM,以决定你可能感兴趣的其他商品。

当你构建这样的应用程序时,管道中的步骤会编排应包含哪些服务、如何 “馈送” 数据以及数据将采用什么形式。 正如你可以想象的那样,这些都是复杂的操作,需要 API、数据结构、网络访问、安全性等等。

LangChain 是一个 Python 框架,可以帮助人们构建人工智能应用程序并简化所有需求,而无需编写所有小细节。 与 LLM 的互动就是一个例子。 一旦所有信息都以简洁的提示形式汇集在一起,你将需要将其提交给 LLM 以完成。 LangChain 为流行的 LLM(如 OpenAI GPT)提供了预构建的库,因此程序员所要做的就是提供他们的凭据和提示并等待响应。 他们无需担心 OpenAI 的任何 API 细节,例如端点、协议和身份验证。

但 LLM 互动只是 LangChain 可以提供帮助的开始。 让我们看一下该框架的一些主要功能。

LangChain 的关键组件有哪些?

以下是 LangChain 最受欢迎的功能的总结。 这并不是 LangChain 所提供的所有功能的详尽列表,而是一个精心策划的列表,列出了它的一些最佳功能。

与模型交流

在构建人工智能应用程序时,你需要一种与模型进行通信的方法(该模型可能是 LLM)。 此外,如果你的应用遵循检索增强生成 (RAG) 模式、提交 LLM 完成提示或打开与模型的聊天会话,你可能需要生成向量嵌入。 LangChain 特别关注与模型的常见交互,并使创建完整的解决方案变得非常容易(了解有关模型以及 LangChain 支持哪些 LLM 的更多信息),

通常,应用程序会一次又一次地执行相同的操作。 无论实时数据是什么,用于与模型通信的提示都会有一些保持不变的文本。 LangChain有一个专门的提示库来帮助参数化常见的提示文本。 这意味着提示可以包含占位符,用于在提交 LLM 之前填写的区域。 你无需在提示符上进行非常低效的字符串替换,而是向 LangChain 提供每个占位符及其值的映射。 它将负责有效地让提示做好完成的准备(了解有关提示的更多信息)。

一旦模型完成其工作并响应完成,应用程序很可能需要在继续之前进行一些后处理。 可能需要对字符进行一些简单的清理,或者(最有可能)需要将完成包含在类对象的参数中。 LangChain 的输出解析器通过提供 LLM 的响应方式和应用程序的自定义类之间的深度集成来快速解决此问题(了解有关输出解析器的更多信息)。

数据检索

创建模型后,会使用一些数据集对其进行训练。 根据训练期间使用的数据量,模型被认为是小或大。 例如,像 GPT 这样的 LLM 已经在整个公共互联网上接受了培训。 如此大的数据量值得贴上 “大” 标签。 挑战在于,无论模型使用多少数据进行训练,它仍然是固定数量。 模型完成后,数据并没有停止。

RAG 是一种应用程序设计,其中应用程序首先将输入数据与其他最新数据进行比较,以获得更好的上下文。 然后,将最新的上下文提供给 LLM,以提供最新的响应。 但这并不像快速查询并继续与 LLM 互动那么简单。 必须执行一些中间步骤。 此外,数据必须以可理解的格式存储,以便数据的检索简单且一致。

LangChain 提供了一些库来帮助在应用程序中实现 RAG 模式。 首先,为了获得正确的背景,数据可能需要来自不同的来源。 每个来源可能遵循不同的模式。 LangChain 提供 “document” 对象作为 “标准化” 来自多个不同来源的数据的一种方式。 作为文档 (document),数据可以轻松地以非常结构化的方式在不同的链之间传递。

用于查找最新上下文的存储不是典型的关系数据库。 它是数据库的特殊版本,可用于存储和检索向量。 现代数据库,如 Elasticsearch,提供向量选项。 还有一些特定于向量的数据库仅用于存储向量嵌入。 LangChain 为所有流行的向量商店提供集成,包括 Elasticsearch。 它还提供了一些特定于向量搜索的非常方便的功能,包括相似性搜索和向量相似性搜索,从而使事情更进一步。 你可以使用最大边际相关性搜索来调整向量搜索。 当你想要获得正确的上下文时,这会非常方便 —— 向 LLM 提供的数据既不要太多,也不要太少。

聊天记忆

如今,聊天机器人风靡一时。 这是人工智能应用程序开发的 “hello word”。 想想 “聊天” 的概念,当你和朋友聊天时,谈话有一定的流程。 随着事情的进展,你们都会分享已经说过的事情的历史。 这有助于推动对话的进展。

当人工智能应用程序与 LLM 聊天时,它需要向 LLM 提供一些有关所询问内容的历史信息(上下文)。 如果没有给出上下文,对话将会非常枯燥并且效率不高。 在前面的数据检索部分中,RAG 模式被描述为添加此上下文的一种方法。

但有时,背景需要是当下的。 当你与朋友聊天时,你很可能没有做笔记,也没有试图记住所说的每一个字。 如果你这样做的话,谈话就变成了一场讲座 —— 这并不有趣。 与 LLM 的聊天也是如此。

LangChain提供了一个特殊的内存库,应用程序可以将聊天历史记录保存到快速查找存储中。 数据以特定方式存储在可以提供非常快速查找的存储类型中。 通常它不是关系数据库。 它通常是 NoSQL 或内存存储。

能够快速检索聊天历史并将其注入 LLM 的提示中是创建非常智能的上下文应用程序的强大方法。

LangChain 是如何工作的?

当你使用信用卡支付某项费用时,需要按特定顺序执行某些步骤。 首先,需要收集和保护卡信息。 然后需要将其传输到处理器。 处理者确保卡帐户有效并且资金可用。 处理者将资金从您的帐户转移到商家的帐户。 最后,所有这些的确认都会被传回,并且你会收到一张收据。 每个步骤都必须按特定顺序执行。 你无法从没有资金的账户中提取资金。 与 LLM 的互动也是如此。 你无法在没有上下文的情况下向 LLM 发送提示。 此时你只需进行互联网搜索即可。

LangChain 中的 “链” 带来了将人工智能动作按顺序组合在一起的想法,以创建一个处理管道。 每个行动或链都是完成总体目标所需的步骤。 考虑 RAG 模式,它从用户提交问题开始。 根据该文本创建嵌入,在向量数据库上进行查找以获得有关该问题的更多上下文,然后使用原始问题和检索中的上下文创建提示。 提示被提交给 LLM,LLM 以智能完成提示的方式进行响应。

RAG 模式中的所有步骤都需要连续发生。 如果过程中出现任何错误,处理应该停止。 LangChain 提供了“链”结构,以特定的方式和特定的配置将步骤连接在一起。 所有 LangChain 库都遵循这种链结构,使得移动步骤和创建强大的处理管道变得非常容易。

LangChain 应用示例

RAG

LangChain 提供了几种实现 RAG 模式的不同场景。 有一个简单的问题/答案示例,它是向提示添加上下文的经典用法。 还有 RAG-over-code 示例可以帮助开发人员编写代码。 聊天历史记录示例为 LLM 创建了非常智能的聊天体验。 请访问 LangChain 的用例区了解更多信息。

聊天机器人

聊天机器人是 LLM 互动的基石。 LangChain 提供了一个入门示例,帮助你在短短几分钟内创建一个 AI 应用程序。

合成数据生成

在开发应用程序时,工程师编写测试以确保其所有功能都按预期工作。 这些被称为单元测试。 开发人员还进行负载测试,以确保应用程序可以处理生产中遇到的负载。 要运行这些测试中的任何一个,你都需要数据。 有时数据很多。 LangChain 的合成数据生成示例使用 LLM 来人工生成数据。 然后,开发人员可以使用该数据来测试他们的应用程序。

使用自然语言与数据库交互

编写 SQL 查询并不是很有趣。 编写查询需要将现实问题转换为 SQL 语法。 像 “How many chunks can a woodchuck chuck” 这样的简单问题将被转换为 “select count(chunk) from chunks where animal like ‘woodchuck’”。 LangChain 的 SQL 示例使用 LLM 将自然语言问题转换为 SQL 方言。

LangChain 入门

无论你现有的 Python 应用程序需要学习新的 AI 技巧还是从头开始,你都需要将 LangChain 库添加到需求中。

假设你计划与 LLM 进行交互,下一步就是安装其支持库。 在此查看 LLM 的完整列表。

就这样,乐趣开始了! 你可以创建 PromptTemplate + LLM + OutputParser,也可以创建一个简单的提示模板应用程序。 在 LangChain 文档中阅读有关与模型、数据检索、链和内存交互的更多信息。

如何结合 Elasticsearch 使用 LangChain

如果你想更多地了解如何结合 Elasticsearch 来使用 LangChain,请详细阅读文章 “Elastic:开发者上手指南” 中的 “NLP - 自然语言处理及向量搜索” 章节。

在那里,我们可以找到很多相关的文章来介绍如何在 Elasticsearch Stack 中使用 LangChain。

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

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

相关文章

vue项目npm install报错Failed at the fibersa4.0.3 install script

报错如下 解决:降低node版本 降到12.16.0 参考链接

基于51单片机的全自动洗衣机proteus仿真设计

标题目录 💫51单片机全自动洗衣机proteus仿真设计💫设计介绍💫仿真图电动机驱动模块电路设计电源模块电路设计控制按键进水阀和排水阀控制继电器 💫程序设计main函数 💫设计报告💫资料清单&&下载链…

【古诗生成AI实战】之三——任务加载器与预处理器

本章内容属于数据处理阶段,将分别介绍任务加载器task和预处理器processor。 [1] 数据集 在深入探讨数据处理的具体步骤之前,让我们先了解一下我们将要使用的数据集的形式。 本项目采用的是七绝数据集,总计83072条古诗,其形式如下&…

Linux系统编写C语言程序并执行(图文详解)

目录 前言 Linux如何编写C语言 1.打开编辑器,写代码 2.编译运行文件 相关拓展 前言 LINUX中包含了很多软件开发工具。它们中的很多是用于C和C应用程序开发的。 C是一种能在UNIX的早期就被广泛使用的通用编程语言。它最早是由Bell实验室的Dennis Ritchie为了UN…

中年人怎么发展?持续发展?

现在ai这么火,就像当年的xxx,如果没有抓住,会xxx吗? 为了ai,多学学python也是也是好的啊。 在学习之余,还是想做做自媒体的。不求马上赚到钱。我的想法是,现在每天下班回家都是刷刷抖音&#…

Jmeter工具学习三——CSV文件、关联、断言

Jmeter学习三——CSV文件和关联 jmeter做功能测试和做性能测试的区别CSV数据文件设置(读取外部文件,进行分数据驱动)文件设置字段介绍:文件名文件编码如果出现编码问题导致的乱码,如何解决? 变量名忽略首行…

基于深度学习的图像超分辨率应用

引言 在使用图片浏览软件显示图片时,为了凸显某个部位,你会放大图片,为了显示整体,你会缩小图片。 你的原始图片大小是固定的,但图像浏览软件既可以最大化到整个屏幕,也可以只占一个区域,这些…

【云平台】STM32微信小程序阿里云平台学习板

【云平台】STM32微信小程序阿里云平台学习板 文章目录 前言一、立创EDA(硬件设计)1.主控STM32F103C8T62.ESP8266模块3.温湿度模块4.光照强度模块5.OLED显示模块6.PCB正面7.PCB反面8.3D视角正面9.3D视角反面 二、【云平台】STM32微信小程序阿里云平台学习…

Linux7设置ssh秘钥登录并关闭密码登录

说明:场景为windows使用WinScp远程登录linux服务 winscp安装教程:winscp安装及关联putty使用_putty.exe没有找到_cherishSpring的博客-CSDN博客 1.在window上生成公钥和秘钥,操作方式参考以下文章第3点: git关联云效使用教程_云…

爬取极简壁纸

js反编译的代码需要解密之类的,直接给我干蒙圈了,借助selenium可以直接获取到调式工具中的源码,可以获取渲染后的链接,然后将链接交给下载函数(使用异步提高效率)即可。 后续学习完js反编译的话&#xff0…

项目实战——苍穹外卖(DAY10)

如果之前有改过端口号造成WebSocket无法连接的,可以看本篇文章“来单提醒”前的内容进行解决。 课程内容 Spring Task 订单状态定时处理 WebSocket 来单提醒 客户催单 功能实现:订单状态定时处理、来单提醒和客户催单 订单状态定时处理&#xff1a…

Spring Boot 项目配置文件出现乱码的解决方法

如下图,我们 Spring Boot 项目的配置文件 application.properties 可能会出现如下的乱码问题: 我们写注解的时候是正常的,但是下次启动项目就出现了乱码,这个是字符集设置的问题 解决方法 1.点击 File 选择 Settings 2.搜索 enco…

C#学习-8课时

P10 输入输出程序编写 相同类型的可以直接相加; cwtabtabconsole.Writeline(); using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace C_8_1 { class Program { s…

基于xml配置的AOP

目录 xml方式AOP快速入门 xml方式AOP配置详解 xml方式AOP快速入门 xml方式配置AOP的步骤 导入AOP相关坐标 <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.13</version></de…

树状数组专题

折叠 区间修改&#xff0c;区间查询&#xff0c;这一类题通常都可以使用线段树解决&#xff0c;但对于此题&#xff0c;树状数组同样可以&#xff0c;而且常数较小&#xff0c;代码简单。 思路&#xff1a; 考虑使用树状数组去维护差分数组&#xff0c;即对于 a i a_i ai​,我们…

C语言WFC实现矩形旋转

前言&#xff1a;结合上一篇的博客进行对矩形的创建和旋转操作 代码实现&#xff1a; //旋转矩阵 void CCGDrawingView::RotateRectangle(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, double angle, CDC* pDC) {//绘制旋转前的矩形Rectangle(x1, y1, x…

阿里云MQTT: 子设备上线流程

0. 背景 阿里云网关子设备上平台的资料很少。有些厂家直接配置每个子设备的DeviceSecret到网关里&#xff0c;显然太麻烦了&#xff01;我经过阅读阿里文档&#xff0c;发现有些简化的方法&#xff0c;更便于客户使用&#xff0c;因此分享给大家。 1. 主要信息片段 子设备 $…

Java之API(上):Boolean

一、前言&#xff1a; 上次我们将到了 java.lang.* 下的包装类&#xff1a;Integer。这次我讲一下基本数据类型中的&#xff1a;布尔型&#xff08;boolean&#xff09;对应的包装类&#xff08;Boolean&#xff09;。注意&#xff1a;还有对包装类&#xff1a;Integer进行一些…

爬楼梯(力扣LeetCode)动态规划

爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1 阶 1 阶2 阶 示…

kubernetes架构及核心组件简单介绍

目录 整体架构控制面kube-apiserver访问控制通知 kube-scheduler概述默认调度策略 kube-controller-manageretcd架构Raft协议日志复制 数据面kubeletkube-proxy 整体架构 集群架构图 控制面 控制面是kubernetes的核心组件&#xff0c;负责管理和控制集群的整体行为&#xf…