Elasticsearch:LangChain 是什么?

当你将应用程序称为 “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.mzph.cn/news/172750.shtml

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

相关文章

显示器校准软件BetterDisplay Pro mac中文版介绍

BetterDisplay Pro mac是一款显示器校准软件,可以帮助用户调整显示器的颜色和亮度,以获得更加真实、清晰和舒适的视觉体验。 BetterDisplay Pro mac软件特点 - 显示器校准:可以根据不同的需求和环境条件调整显示器的颜色、亮度和对比度等参数…

数据里有{1,2,3,4,5,6,7,8,9},请随机打乱顺序,生成一个新的数组

问题:数据里有{1,2,3,4,5,6,7,8,9},请随机打乱顺序,生成一个新的数组。 思路: 旧数组 nums,新数组 newNums 1、先创建一个新数组,用来存打乱数据后的元素,新旧数组的长度要一致 2、然后遍历数组…

OpenCV检测圆形东西是否存在缺口?

文章目录 前言一、试过的方法二、最终使用的方法1.先极坐标变换2.计算斜率 总结 前言 想了挺久,一直没解决这个问题。后面勉强解决了。 一、试过的方法 1.想用圆度来解决,后来发现圆度差值很小,完整的圆圆度0.89,然后有缺角的圆圆…

二十七、微服务案例

目录 一、实现输入搜索功能 1、下载代码,在idea上打开 2、新建RequestParams类,用于接收解析请求 3、在启动类中加入客户端地址Bean,以便实现服务 4、编写搜索方法 5、新建返回分页结果类 6、实现搜索方法 7、编写控制类,…

4.前端--HTML标签-表格列表表单【2023.11.25】

1.表格 1.1表格的作用 表格的作用&#xff1a;表格主要用于显示、展示数据 1.2表格的基本格式 <table><tr><td>单元格内的文字</td><td>单元格内的文字</td>...</tr>... </table><table> </table> 是用于定义表…

【RTP】3: RTPSenderVideo::SendVideo 切片到发送

m98 版本。之前1 2 都是m79.RTPSenderVideo::SendVideo 负责切片,是入口 实际发送要靠: RTPSender* const rtp_sender_; 外部传递的: rtp_rtcp\source\rtp_sender.h 实现了rtp rtcp协议 ,负责实际的打包 新增了一个 TransformableFrameInterface 用的 编码线程 - RTPSend…

Windows开启SQL Server服及1433端口

需求&#xff1a;Windows开启SQL Server服务及1433端口 目前端口没有启动 解决&#xff1a; 打开SQL Server配置管理器&#xff08;winR&#xff09; 各个sqlserver版本在textbox中输入对应的命令如下&#xff1a; SQLServerManager15.msc&#xff08;对于 SQL Server 2019 &am…

⑨【Stream】Redis流是什么?怎么用?: Stream [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ⑨Redis Stream基本操作命令汇总 一、Redis流 …

Linux7安装mysql数据库以及navicat远程连接mysql

1.下载地址&#xff1a;MySQL :: Download MySQL Community Server 2.创建mysql目录将压缩包上传到该目录 mkdir /opt/mysql cd /opt/mysql3.解压压缩包 gzip mysql-8.1.0-1.el7.x86_64.rpm-bundle.tar tar -zxvf mysql-8.1.0-1.el7.x86_64.rpm-bundle.tar.gz 4.前置检查 ch…

电子学会C/C++编程等级考试2021年09月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:余数相同问题 已知三个正整数 a,b,c。 现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同。 请问满足上述条件的x的最小值是多少? 数据保证x有解。输入: 一行,三个不大于1000000的正整数a,b,c,两个整数…

Windows TCP 通信测试_1

一、单对单通信测试 应用函数 socket、bind、connect、listen、accept、recv、send&#xff08;win下的函数&#xff09;等 1、客户端demo client.cpp #include<WINSOCK2.H> #include<STDIO.H> #include<iostream> #include<cstring> using namespa…

nodejs+vue+python+PHP+微信小程序-婚纱摄影预约系统的设计与实现-安卓-计算机毕业设计

本婚纱摄影预约系统主要包括个人中心、套系风格管理、用户管理、摄影师管理、婚纱套系管理、婚纱套系订单管理、客片欣赏管理、客户样片管理、摄影咨询管理、客户选片管理、系统管理等多个模块。它帮助婚纱摄影预约实现了信息化、网络化&#xff0c;通过测试&#xff0c;实现了…

基于jmeter的性能全流程测试

做性能测试的步骤 1、服务器性能监控 首先要在对应服务器上面安装性能监控工具&#xff0c;比如linux系统下的服务器&#xff0c;可以选择nmon或者其他的监控工具&#xff0c;然后在jmeter模拟场景跑脚本的时候&#xff0c;同时启动监控工具&#xff0c;这样就可以获得jmeter…

Android之高级UI

系统ViewGroup原理解析 常见的布局容器: FrameLayout, LinearLayout,RelativeLayoout,GridLayout 后起之秀&#xff1a;ConstraintLayout,CoordinateLayout Linearlayout Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {if (mOrientation …

STK Components 二次开发-地面站传感器

上一篇我们说了创建地面站&#xff0c;那么这次我们在地面站添加一些特效。 1. 创建地面站 var locationPoint1 new PointCartographic(m_earth, new Cartographic(Trig.DegreesToRadians(117.17066), Trig.DegreesToRadians(31.84056), 240.359)); m_facility new Platfor…

【论文解读】Real-ESRGAN:使用纯合成数据训练真实世界的超分辨率图像

图一是4种超分方法的对比效果 。 0 摘要 尽管在盲超分辨率方面已经进行了许多尝试&#xff0c;以恢复具有未知和复杂退化的低分辨率图像&#xff0c;但它们仍然远远不能解决一般的真实世界退化图像。在这项工作中&#xff0c;我们将强大的 ESRGAN 扩展到一个实际的恢复应用程序…

Retrofit怎么返回一个JSON字符串?

项目用已经使用了 Retrofit&#xff0c;定义了接口方法&#xff0c;返回了 JSON 转换后的实体对象&#xff0c;炒鸡方便。但是总有意料之外的时候&#xff0c;比如我不需要返回实体对象&#xff0c;我要返回纯纯的 JSON 字符串&#xff0c;怎么办呢&#xff1f; 先看源码 通过…

什么是半监督学习

1 概述 1.1 定义 半监督学习&#xff08;Semi-Supervised Learning&#xff09;是机器学习中的一个重要分支&#xff0c;它介于监督学习和无监督学习之间。半监督学习利用少量标注数据和大量未标注数据共同训练模型&#xff0c;旨在充分挖掘未标注数据中潜在的信息和模式&…

【数据库】缓冲区管理器结构,几种常用替换策略分析,pin钉住缓冲区块防止错误的替换,以及缓冲区管理带来的代价优化

缓冲区管理 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期更新&…

【算法】装备合成(二分)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 牛牛有x件材料a和y件材料b&#xff0c;用2件材料a和3件材料b可以合成一件装备&#xff0c;用4件材料a和1件材料b也可以合成一件装备。牛牛想要最大化合成的装备的数量&#xff0c;于是…