LangChain 与 Elastic 合作为 RAG 添加向量数据库和语义重排序

作者:来自 Elastic Max Jakob

在过去的一年中,我们看到了生成式人工智能领域的许多进展。许多新服务和库应运而生。LangChain 已成为使用大型语言模型 (LLM) 构建应用程序的最受欢迎的库,例如检索增强生成 (RAG) 系统。该库使原型设计和试验不同的模型和检索系统变得非常容易。

为了在 LangChain 中实现对 Elasticsearch 的一流支持,我们最近将我们的集成从社区包提升为官方 LangChain 合作伙伴包。这项工作使将 Elasticsearch 功能导入 LangChain 应用程序变得非常简单。Elastic 团队通过专用存储库管理代码和发布过程。我们将继续改进那里的 LangChain 集成,确保用户可以充分利用 Elasticsearch 的最新改进。

LangChain 联合创始人兼首席执行官 Harrison Chase 表示:“我们与 Elastic 在过去 12 个月的合作非常出色,特别是我们为开发人员和最终用户建立了更好的方式,从原型到生产构建 RAG 应用程序。”“LangChain-Elasticsearch 向量数据库集成将有助于实现这一目标,我们很高兴看到这种合作关系随着未来功能和集成版本的发布而不断发展。”

Elasticsearch 是最灵活、性能最高的检索系统之一,其中包括一个向量数据库。Elastic 的目标之一是成为最开放的检索系统。在像生成式人工智能这样快速发展的领域,我们希望在使用新兴工具和库时为开发人员提供支持。这就是我们与 LangChain 等库密切合作并为 GenAI 生态系统添加原生支持的原因。从使用 Elasticsearch 作为向量数据库到混合搜索和编排完整的 RAG 应用程序。

Elasticsearch 和 LangChain 今年密切合作。我们将利用我们在构建搜索工具方面的丰富经验,让你更轻松、更灵活地体验 LangChain。让我们在这篇博客中深入了解一下。

快速 RAG 原型设计

RAG 是一种为用户提供高度相关问题答案的技术。与直接使用 LLM 相比,其主要优势在于可以轻松集成用户数据,并可以最大限度地减少 LLM 的幻觉。这是通过添加为 LLM 提供相关上下文的文档检索步骤来实现的。

自成立以来,Elasticsearch 一直是相关文档检索的首选解决方案,并且一直是领先的创新者,提供多种检索策略。在将 Elasticsearch 集成到 LangChain 中时,我们可以轻松地在最常见的检索策略之间进行选择,例如密集向量、稀疏向量、关键字或混合。我们允许高级用户进一步定制这些策略。继续阅读以查看一些示例。(请注意,我们假设我们有一个 Elasticsearch 部署。)

LangChain 集成包

要使用 langchain-elasticsearch 合作伙伴包,你首先需要安装它:

pip install langchain-elasticsearch

然后,你可以从 langchain_elasticsearch 模块导入所需的类,例如 ElasticsearchStore,它为你提供了索引和搜索数据的简单方法。在此示例中,我们使用 Elastic 的稀疏向量模型 ELSER(必须先部署)作为我们的检索策略。

from langchain_elasticsearch import ElasticsearchStorees_store = ElasticsearchStore(es_cloud_id="your-cloud-id",es_api_key="your-api-key",index_name="rag-example",strategy=ElasticsearchStore.SparseVectorRetrievalStrategy(model_id=".elser_model_2"),
),

一个简单的 RAG 应用程序

现在,让我们构建一个简单的 RAG 示例应用程序。首先,我们将一些示例文档添加到我们的 Elasticsearch 存储中。

texts = ["LangChain is a framework for developing applications powered by large language models (LLMs).","Elasticsearch is a distributed, RESTful search and analytics engine capable of addressing a growing number of use cases.",...
]
es_store.add_texts(texts)

接下来,我们定义 LLM。在这里,我们使用 OpenAI 提供的默认 gpt-3.5-turbo 模型,该模型也为 ChatGPT 提供支持。

from langchain_openai import ChatOpenAIllm = ChatOpenAI(api_key="sk-...") # or set the OPENAI_API_KEY environment variable

现在我们已准备好将 RAG 系统整合在一起。为简单起见,我们采用标准提示来指导 LLM。我们还将 Elasticsearch 存储转换为 LangChain 检索器。最后,我们将检索步骤与将文档添加到提示并将其发送到 LLM 链接在一起。

from langchain import hub
from langchain_core.runnables import RunnablePassthroughprompt = hub.pull("rlm/rag-prompt")  # standard prompt from LangChain hubretriever = es_store.as_retriever()def format_docs(docs):return "\n\n".join(doc.page_content for doc in docs)rag_chain = ({"context": retriever | format_docs, "question": RunnablePassthrough()}| prompt| llm| StrOutputParser()
)

通过这几行代码,我们现在已经有了一个简单的 RAG 系统。用户现在可以针对数据提出问题:

rag_chain.invoke("Which frameworks can help me build LLM apps?")
"LangChain is a framework specifically designed for building LLM-powered applications. ..."

就这么简单。我们的 RAG 系统现在可以回复有关 LangChain 的信息,而 ChatGPT(3.5 版)则无法做到这一点。当然,有很多方法可以改进这个系统。其中之一就是优化我们检索文档的方式。

通过 Retriever 实现完全的检索灵活性

Elasticsearch 存储提供开箱即用的常见检索策略,开发人员可以自由尝试最适合特定用例的策略。但是,如果你的数据模型比仅包含单个字段的文本更复杂,该怎么办?例如,如果你的索引设置包括一个网络爬虫,该爬虫会生成包含文本、标题、URL 和标签的文档,并且所有这些字段对于搜索都很重要,该怎么办?Elasticsearch 的 Query DSL 让用户可以完全控制如何搜索他们的数据。而在 LangChain 中,ElasticsearchRetriever 直接实现了这种完全的灵活性。所需的只是定义一个将用户输入查询映射到 Elasticsearch 请求的函数。

假设我们想在检索步骤中添加语义重新排名功能(semantic reranking)。通过添加 Cohere 重新排名步骤,顶部的结果会变得更加相关,而无需额外的手动调整。为此,我们定义了一个 Retriever,它接受一个返回相应查询 DSL 结构的函数。

def text_similarity_reranking(search_query: str) -> Dict:return {"retriever": {"text_similarity_rank": {"retriever": {"semantic": {"query": {"match": {"text_field": search_query}}}},"field": "text_field","inference_id": "cohere-rerank-service","inference_text": search_query,"window_size": 10}}}retriever = ElasticsearchRetriever.from_es_params(es_cloud_id="your-cloud-id",es_api_key="your-api-key",index_name="rag-example",content_field=text_field,body_func=text_similarity_reranking,
)

(请注意,相似性重新排序的查询结构仍在最终确定中。)

此检索器可以无缝插入上面的 RAG 代码。结果是我们的 RAG 管道的检索部分更加准确,从而导致更多相关文档被转发到 LLM,最重要的是,导致更多相关答案。

结论

Elastic 对 LangChain 生态系统的持续投资为最受欢迎的 GenAI 库之一带来了最新的检索创新。通过此次合作,Elastic 和 LangChain 使开发人员能够快速轻松地为最终用户构建 RAG 解决方案,同时提供必要的灵活性以深入调整结果质量。

准备好自己尝试了吗?开始免费试用。
希望将 RAG 构建到你的应用程序中?想要使用向量数据库尝试不同的 LLM?
在 Github 上查看我们针对 LangChain、Cohere 等的示例笔记本,并立即加入 Elasticsearch Relevance Engine 培训。

原文:LangChain and Elastic collaborate to add vector database and semantic reranking for RAG — Elastic Search Labs

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

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

相关文章

大数据学习——安装hive

一. 安装准备 1. 打开虚拟机,启动配置了NameNode节点的虚拟机(一般和mysql在同一台虚拟机)并连接shell 二. 安装 1. 上传hive安装包 hive安装包 提取码:6666 切换到/opt/install_packages目录下 可以将之前解压的rpm文件删除…

C语言调用so/dll动态库

文章目录 windows系统linux系统windows 与 linux下 C 调用动态库的差异 C语言调用动态链接库 windows系统 windows系统下&#xff0c;C语言调用win下的动态库dll&#xff0c;使用头文件<windows.h>。 准备基础C代码 lauf.c #include <stdio.h>// 定义函数&#x…

算法课程笔记——线段树维护矩阵

算法课程笔记——线段树维护矩阵 2

前后端知识点汇总

springboot项目启动 springboot集成naocs和redis springboot集成mybatis springboot集成mybatisPlus 集成rabbitMq 集成sa-token satoken介绍 sa-token官网Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会…

【stm32】基于I2C协议的OLED显示(利用U82G库)

【stm32】基于I2C协议的OLED显示&#xff08;利用U82G库&#xff09; 一、实验目的二、探究任务三、原理探究3.1 I2C接口3.1.1 概述3.1.2 主要特点3.1.3 功能描述3.1.4 从模式3.1.5 主模式3.1.6 时序协议 3.2 OLED屏3.2.1 工作原理3.2.2 汉字点阵显示原理3.2.3 汉字点阵取模 四…

【后端开发】服务开发场景之高性能(CDN与负载均衡,数据库优化,消息队列)

【后端开发】服务开发场景之高性能&#xff08;CDN与负载均衡&#xff0c;数据库优化&#xff0c;消息队列&#xff09; 文章目录 1、内容分发网络&#xff08;CDN &#xff09; & 负载均衡算法CDN是什么&#xff1f;&#xff08;静态资源加速&#xff09;CDN的应用场景&am…

OV5647与树莓派bullseye 64bit的兼容性问题

OV5647与树莓派bullseye 64bit的兼容性问题 1. 源由2. 问题3. 分析方法一&#xff1a;使用 pyudev 库方法二&#xff1a;使用 v4l2-ctl 工具方法三&#xff1a;直接读取 /dev 目录方法四&#xff1a;使用 OpenCV方法五&#xff1a;使用 Picamera方法六&#xff1a;使用 libcame…

『原型资源』Axure自带图标库不够用,第三方经典图标库来袭

​今天小编为大家带来第三方经典图标库&#xff0c;己确认内容可用现推荐给大家。直接上手就可不用自己画哈~ 获取原型文档请与班主任联系&#xff01; 先睹为快&#xff0c;合适再拿走不谢&#xff1a; 图标太多&#xff0c;截取部分给大家参考o(*&#xffe3;︶&#xffe3;*…

Java最新面试题(全网最全、最细、附答案)

一、Java基础 1、基础概念与常识Java 语言有哪些特点? 简单易学&#xff08;语法简单&#xff0c;上手容易&#xff09;&#xff1b;面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b;平台无关性&#xff08; Java 虚拟机实现平台无关性&a…

OCP学习笔记-007 SQL语言之二:DML

2. DML - Data Manipulation Language 数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括insert、delete、udpate和select等。(增添改查) 事务:A transaction consists of a collection of DML statements that form a logi…

Vue 3获取DOM元素的大小以及相对于视口的位置的getBoundingClientRect属性

在Vue 3中&#xff0c;可以使用ref来获取DOM元素的getBoundingClientRect属性。 如果元素已挂载&#xff0c;我们使用 getBoundingClientRect 方法来获取元素的位置和大小信息。这个方法返回一个对象&#xff0c;其中包含了 left、top、right、bottom 等属性&#xff0c;这些属…

LVS负载均衡集群企业级应用实战-LVS/NAT模式(三)

目录 LVS/NAT模式 一. 环境准备 二. 对虚拟服务器操作 三. 对真实服务器操作 四. 打开网站验证 LVS/NAT模式 一. 环境准备 主机名主机IP模拟服务器系统用途localhost 10.36.178.156 192.168.226.137 虚拟服务器 Rocky_linux 客户兼负载均衡机分发IPlocalhost192.168.226…

关于Linux桌面系统的普及 这里是一些建议

Linux 桌面系统在普及方面面临一些挑战&#xff0c;尽管它在服务器和开发者社区中非常受欢迎。为了提高其普及率&#xff0c;可以从以下几个方面着手&#xff1a; 1. 改善用户体验 用户界面友好性&#xff1a;提升桌面环境的易用性和美观度&#xff0c;使其更符合普通用户的习…

记C#优化接口速度过程

前提摘要 首先这个项目是接手的前一任先写的项目&#xff0c;接手后&#xff0c;要求对项目一些速度相对较慢的接口进行优化&#xff0c;到第一个速度比较慢的接口后&#xff0c;发现单接口耗时4-8秒&#xff0c;是的&#xff0c;请求同一个接口&#xff0c;在参数不变的情况下…

【个人博客搭建】(24)统一api接口返回格式

统一接口的返回格式是为了方便开发的数据对接。 在现如今前后端分离的趋势下&#xff0c;需要对接各种类型的数据 所以&#xff0c;我们需要一个标准的数据格式。 1、定义数据格式&#xff1a;例如下边就是一个常见的格式 {"succeed":true,"code": 200,&q…

【算法——动态规划(从dfs回溯开始推导dp)】

基础理论 递归&#xff1a; 递&#xff1a;大问题分解子问题的过程 &#xff1b; 归&#xff1a;产生答案 dp&#xff1a;只进行归&#xff1b;用已知的最底层的&#xff08;递归的边界&#xff0c;搜索树的底&#xff09;&#xff0c;推出未知 《视频索引》 一句话&…

TDengine数据迁移

前言 taosdump 是一个支持从运行中的 TDengine 集群备份数据并将备份的数据恢复到相同或另一个运行中的 TDengine 集群中的工具应用程序。 taosdump 可以用数据库、超级表或普通表作为逻辑数据单元进行备份&#xff0c;也可以对数据库、超级 表和普通表中指定时间段内的数据记录…

蓝牙BLE上位机工具开发理论线索梳理_5.Windows WinRT API包Microsoft.Windows.SDK.Contracts

1. WinRT API包介绍 本文介绍下Windows WinRT API包&#xff08;Microsoft.Windows.SDK.Contracts&#xff09;&#xff0c; 如图1是SDK包的描述。 图1 Microsoft.Windows.SDK.Contracts Windows WinRT API包使您能够将最新的Windows运行时API支持添加到您的。net Framework 4.…

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 探测效果(地图探测、地图窥探)

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 探测效果&#xff08;地图探测、地图窥探&#xff09; 实现原理 ArcGIS Maps SDK for JavaScript 从 4.29 开始增加 RenderNode 类&#xff0c;可以添加数据以及操作 FBO&#xff08;ManagedFBO&#xff09;&#xf…

媲美Sora,免费使用!带物理模拟的,文生视频模型

6月13日&#xff0c;知名3D建模平台Luma AI发布最新文生视频模型Dream Machine&#xff0c;向所有用户免费开放使用。 Dream Machine除了支持文本之外&#xff0c;还可使用图片作为引导来生成视频&#xff0c;其生成的视频质量、动作一致性、色彩、光影、饱和度、运镜等方面&a…