Elastic 中国社区官方博客

Elastic 中国社区官方博客

Elasticsearch:LangChain 是什么?-LMLPHP

当你将应用程序称为 “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:LangChain 是什么?-LMLPHP

Elasticsearch:LangChain 是什么?-LMLPHP

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

11-27 09:52