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

前言

在过去的一年中,我们看到了生成式人工智能领域的许多进展。许多新服务和库应运而生。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 中时,我们可以轻松地在最常见的检索策略之间进行选择,例如密集向量、稀疏向量、关键字或混合。我们允许高级用户进一步定制这些策略。继续阅读以查看一些示例。

LangChain 集成包

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

pip install langchain-elasticsearch

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



1.  from langchain_elasticsearch import ElasticsearchStore

3.  es_store = ElasticsearchStore(
4.      es_cloud_id="your-cloud-id",
5.      es_api_key="your-api-key",
6.      index_,
7.      strategy=ElasticsearchStore.SparseVectorRetrievalStrategy(model_id=".elser_model_2"),
8.  ),



一个简单的 RAG 应用程序

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



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



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



1.  from langchain_openai import ChatOpenAI

3.  llm = ChatOpenAI(api_key="sk-...") # or set the OPENAI_API_KEY environment variable



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



1.  from langchain import hub
2.  from langchain_core.runnables import RunnablePassthrough

4.  prompt = hub.pull("rlm/rag-prompt")  # standard prompt from LangChain hub

6.  retriever = es_store.as_retriever()

8.  def format_docs(docs):
9.      return "\n\n".join(doc.page_content for doc in docs)

11.  rag_chain = (
12.      {"context": retriever | format_docs, "question": RunnablePassthrough()}
13.      | prompt
14.      | llm
15.      | StrOutputParser()
16.  )



通过这几行代码,我们现在已经有了一个简单的 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 和标签的文档,并且所有这些字段对于搜索都很重要,该怎么办?



1.  def text_similarity_reranking(search_query: str) -> Dict:
2.      return {
3.          "retriever": {
4.              "text_similarity_rank": {
5.                  "retriever": {
6.                      "semantic": {
7.                          "query": {
8.                              "match": {
9.                                  "text_field": search_query
10.                              }
11.                          }
12.                      }
13.                  },
14.                  "field": "text_field",
15.                  "inference_id": "cohere-rerank-service",
16.                  "inference_text": search_query,
17.                  "window_size": 10
18.              }
19.          }
20.      }

22.  retriever = ElasticsearchRetriever.from_es_params(
23.      es_cloud_id="your-cloud-id",
24.      es_api_key="your-api-key",
25.      index_,
26.      content_field=text_field,
27.      body_func=text_similarity_reranking,
28.  )



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

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

结论

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

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.2.1 什么是Prompt
    • L2.2.2 Prompt框架应用现状
    • L2.2.3 基于GPTAS的Prompt框架
    • L2.2.4 Prompt框架与Thought
    • L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
    • L2.3.1 流水线工程的概念
    • L2.3.2 流水线工程的优点
    • L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
    • L3.1.1 Agent模型框架的设计理念
    • L3.1.2 Agent模型框架的核心组件
    • L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
    • L3.2.1 MetaGPT的基本概念
    • L3.2.2 MetaGPT的工作原理
    • L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
    • L3.3.1 ChatGLM的特点
    • L3.3.2 ChatGLM的开发环境
    • L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
    • L3.4.1 LLAMA的特点
    • L3.4.2 LLAMA的开发环境
    • L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值