NVIDIA Morpheus (24.10.01)

检索增强生成 (RAG) 管道

所有环境都需要额外的 Conda 软件包,这些软件包可以使用 conda/environments/all_cuda-125_arch-x86_64.yamlconda/environments/examples_cuda-125_arch-x86_64.yaml 环境变量文件安装。此示例还需要先前运行 VDB 上传 管道。

环境

支持

注释

Conda

Morpheus Docker 容器 需要在主机上启动 Milvus
Morpheus 发布容器 需要在主机上启动 Milvus
开发容器

目的

本示例的目的是说明用户如何构建检索增强生成管道,将信息源和 LLM 服务集成到 Morpheus 管道中。此示例基于之前的 Completion 管道 示例构建,增加了使用来自知识库的上下文信息增强 LLM 查询的能力。附加此上下文有助于通过提供额外的背景上下文和事实信息来改进 LLM 的响应,LLM 可以从中提取信息以进行响应。

源文档

  • 为了使此管道正常运行,向量数据库必须已经填充了可以检索的信息。

  • 填充数据库的示例在 VDB 上传 中进行了说明

  • 本示例假设管道已经运行完成。

向量数据库服务

  • 任何向量数据库都可用于存储生成的嵌入和相应的元数据。

  • 如果需要,更新示例以使用 Chroma 或 FAISS 将非常简单。

  • 对于本示例,我们将使用 Milvus,因为它是 VDB 上传 管道中使用的默认 VDB。

实现和设计决策

实现细节

原始 GitHub 问题

为了满足检索增强生成 (RAG) 机制的独特需求,采用了以下步骤

  • 嵌入检索: 在 LLM 可以完成之前,从向量数据库中检索相关上下文。此上下文以嵌入的形式存在,这些嵌入表示与查询密切相关的信息片段。

  • 上下文增强: 然后将检索到的上下文附加到用户的查询中,用必要的背景丰富它,以帮助 LLM 生成更明智的完成。

  • LLM 查询执行: 然后将增强的查询发送到 LLM,LLM 根据原始查询和附加上下文的组合生成响应。

设计决策背后的原理

  • 使用 Milvus 作为 VDB: Milvus 提供可扩展且高效的向量搜索功能,使其成为实时嵌入检索的自然选择。

  • 灵活的 LLM 集成: LLM 作为独立组件集成到管道中,这允许轻松更换模型,并确保管道可以轻松扩展以支持多个 LLM。

独立的 Morpheus 管道

独立的 Morpheus 管道使用以下组件构建

  • 一个 InMemorySourceStage 来保存 DataFrame 中的 LLM 查询。

    • 我们在 source_df 中提供一组固定的问题,然后由 LLMEngineStage 处理

  • 一个 DeserializationStage,用于根据 LLMEngine 的需要将 MessageMeta 对象转换为 ControlMessage 对象。

    • 新功能已添加到 DeserializeStage 以支持 ControlMessage,并为每条消息添加默认任务。

  • 然后,LLMEngineStage 包装核心 LLMEngine 功能。

    • 一个 ExtracterNode 从 DataFrame 中提取问题。

    • 一个 RAGNode 执行检索,并使用提供的模板将上下文添加到查询中,并执行 LLM。

    • 最后,使用 SimpleTaskHandler 将响应放回 ControlMessage 中。

  • 管道以 InMemorySink 阶段结束,以存储结果。

注意: 为了使其正常运行,VDB 上传管道必须已事先运行。

在运行管道之前,我们需要获取以下服务的服务 API 密钥

获取 OpenAI API 或 NGC API 密钥

NGC

  • 按照此处的说明进行操作

  • 在本文档的其余部分,我们将您的 NGC API 密钥称为 ${NGC_API_KEY}

OpenAI

  • 按照此处的说明获取 OpenAI API 密钥。

  • 在本文档的其余部分,我们将您的 OpenAI API 密钥称为 ${OPENAI_API_KEY}

在运行管道之前,我们需要确保以下服务正在运行

Milvus 服务

  • 按照此处的说明安装并运行 Milvus 服务。

运行 Morpheus 管道

每个 LLM 示例管道的顶级入口点是 examples/llm/main.py。此脚本接受一组选项和一个要运行的管道。基线选项如下,并且为了本文档的目的,我们将假设管道选项为 rag

运行示例(独立管道)

使用 NGC NeMo LLM

复制
已复制!
            

export NGC_API_KEY=[YOUR_KEY_HERE] python examples/llm/main.py rag pipeline

使用 OpenAI LLM 模型

复制
已复制!
            

export OPENAI_API_KEY=[YOUR_KEY_HERE] python examples/llm/main.py rag pipeline --llm_service=OpenAI --model_name=gpt-3.5-turbo

上一个 向量数据库上传 (VDB 上传) 管道
下一个 Morpheus LLM Agents 管道
© 版权所有 2024,NVIDIA。 最近更新于 2024 年 12 月 3 日。