点 Redis 8 已发布——并且是开源的

了解更多

探索 LangChain 和 Redis 推出的全新多模态 RAG 模板

大型语言模型 (LLMs) 经过大量公共数据集的训练,擅长根据这些信息生成类似人类的文本。然而,它们无法访问私有或企业数据,这限制了它们在企业用例中的有效性。检索增强生成 (RAG) 是一种流行的方法,可以将 LLMs 连接到这些特定数据,扩展其知识库,使其超越初始训练数据。通过 RAG,公司正在使用 LLMs 回答关于其独特文档和数据的问题。

RAG 的工作原理是将检索组件集成到生成过程中。应用程序首先根据输入查询检索相关文档,然后综合这些信息生成响应。与传统 LLMs 相比,这种方法不仅提供了更深入的上下文,还利用最新信息增强了模型的响应,提供了更准确、更相关的回答。

然而,大多数 RAG 方法仅关注文本,忽略了幻灯片或报告中包含的信息丰富的图像或图表。随着多模态模型(例如 GPT4-V)的兴起,现在可以将图像直接输入到 LLMs 中进行推理。尽管如此,能够无缝处理文本和图像的 RAG 框架的开发仍然存在空白。 

Redis LangChain 通过引入一个多模态 RAG 模板,超越了纯文本处理。通过整合视觉数据,此模板使模型能够跨文本和图像进行处理和推理,为更全面、更精细的 AI 应用程序铺平了道路。我们很高兴能推出一个不仅能阅读文本,还能解释图像的系统,有效结合这些信息源,以增强理解和响应的准确性。

在本文中,我们将介绍

  1. 介绍多模态 RAG
  2. 详细讲解模板设置
  3. 展示一些示例查询以及使用多模态 RAG 的好处

突破简单的 RAG

典型的 RAG 流程包括使用向量嵌入和元数据对文本文档进行索引、从数据库检索相关上下文、构建一个基础提示,然后使用 LLM 合成答案。有关更多信息,请参阅 LangChain 的视频系列《RAG 从零开始》

但是,图像或图形等非文本数据怎么办? 对于这些其他数据类型,我们必须通过独特的流程提取其语义。例如,考虑分析 Nvidia 24 财年第三季度的投资者演示幻灯片。这些幻灯片是文本、图像、表格和图表的组合。标准的 PDF 提取技术只能提取文本,将信息丰富的图像排除在检索范围之外。

幸运的是,我们可以利用 Redis 中灵活的数据结构以及 OpenAI 文本和视觉组合模型 GPT4-V 的创新能力来解决这个问题。要设置多模态 RAG 流程,我们首先需要进行一些预处理步骤

  1. 使用 GPT4-V 将幻灯片摘要提取为文本
  2. 使用 OpenAI 的嵌入模型对文本摘要进行嵌入
  3. 在 Redis 哈希中索引文本摘要嵌入,通过主键引用
  4. 将原始图像编码为 base64 字符串,并使用主键将其存储在 Redis 哈希中

对于这个用例,LangChain 提供了 MultiVector Retriever 来高效地索引文档和摘要。这种方法的好处在于,我们可以使用常用的文本嵌入技术来索引图像摘要,就像处理其他文本一样,避免了对更专业且不够成熟的多模态嵌入技术的需求。  

现在,在运行时,当用户提出问题时

  1. 使用 OpenAI 对用户问题进行嵌入
  2. 根据嵌入的图像摘要从 Redis 中检索相关图像
  3. 使用主键从 Redis 中查找原始图像
  4. 使用 GPT4-V 结合原始图像和原始问题生成一个有信息含量的答案


随着 RAG 功能的不断进步,许多人预计这样的过程将会有更多的数据库和 LLMs 检索调用,从而创建复合 AI 系统。这些额外的步骤会增加延迟和成本。Redis 的语义缓存减少了对数据库和 LLMs 的重复问题调用次数,消除了冗余工作。语义缓存通过存储先前回答问题的响应来工作。然后,当提出类似问题时,应用程序会从缓存中检索存储的答案,而不是再次向数据库发出重复调用并向 LLM 发出另一个昂贵的调用。通过消除常见问题的额外步骤,应用程序可以加快响应速度并显著降低调用 LLMs 的成本。 

使用 RAG 模板快速启动

在启动应用程序之前,您需要一个(免费的)Redis Cloud 实例和一个 OpenAI API 密钥。 

1. 设置您的 OpenAI API 密钥Redis URL 环境变量

export OPENAI_API_KEY=<your-openai-api-key>
export REDIS_URL=redis://:<redis-pwd>@<redis-host>:<redis-port>

2. 在您的 Python 环境中安装 LangChain CLI

pip install -U langchain-cli

3. 创建一个新的 LangChain 应用程序

langchain app new my-app
cd my-app

这将创建一个名为 my-app 的新目录,其中包含两个文件夹

  • app:LangServe 代码所在位置
  • packages:您的链或代理所在位置

4. 添加多模态 RAG 包:

langchain app add rag-redis-multi-modal-multi-vector

当提示安装模板时,选择是选项,y

5. 将以下代码片段添加到您的 app/server.py 文件中

from rag_redis_multi_modal_multi_vector.chain import chain as rag_redis_chain

add_routes(
    app,
    rag_redis_chain,
    path="/rag-redis-multi-modal-multi-vector"
)

6. 导入演示应用程序的源数据

cd packages/rag-redis-multi-modal-multi-vector

poetry install
poetry run python ingest.py

这可能需要几分钟。 ingest.py 脚本执行一个流程,加载幻灯片图像,使用 GPT4-V 提取摘要,并创建文本嵌入。

7. 使用 LangServe 提供 FastAPI 应用程序

cd . . /. . / 

langchain serve

8. 访问 API 地址 http://127.0.0.1:8000 并通过 http://127.0.0.1:8000/playground 上的 playground 测试您的应用程序

通过快速检查幻灯片中引用的 PDF 图像来验证 RAG 系统的答案。

除了 LangServe,LangChain 还有一个可观察性平台,称为 LangSmith。这将记录模板执行的所有生成过程,从而可以检查提示并验证传递给 GPT-4V 的图像。例如,您可以在 langchain.com 上查看一个关于多模态数据的跟踪记录,其中显示了从金融图表中提取信息的过程。   

总结

借助全新的多模态 RAG 模板,开发者现在可以构建复杂的 AI 应用程序,这些应用程序能够理解和利用各种数据类型,并由单一的后端技术 Redis 提供支持。

通过设置一个免费的 Redis Cloud 实例并使用新的 Redis <> LangChain 模板即可开始。如需了解其他新兴 RAG 概念的见解,请观看最近与 Lance Martin、Nuno Campos 和 Tyler Hutcherson 的会议

相关资源