使用 LlamaIndex 通过 RAG 开始使用无服务器 AI 聊天

使用 LlamaIndex、Azure Functions 和无服务器技术管理的数据简化使用 RAG 的 AI 应用开发。 这些工具可自动管理基础结构和缩放,使你能够专注于聊天机器人功能。 LlamaIndex 负责管理从数据引入到实时响应的完整数据管道。

浏览器中聊天应用的屏幕截图,其中显示了聊天输入和响应。

体系结构概述

应用程序流包括:

  • 使用聊天界面输入提示。
  • 通过 HTTP 调用将用户的提示发送到无服务器 API。
  • 接收用户的提示,然后使用 LlamaIndex 框架处理和流式传输响应。 无服务器 API 使用引擎创建与 Azure OpenAI 大型语言模型(LLM)的连接,以及 LlamaIndex 中的矢量索引。

下图显示了聊天应用的简单体系结构:

LlamaIndex RAG 聊天应用的体系结构示意图。

此示例使用 LlamaIndex 生成嵌入内容并将其存储在其自己的向量存储中。 LlamaIndex 还提供与其他矢量存储(包括 Azure AI 搜索)的集成。 此示例中未演示该集成。

此体系结构中的 Azure 在哪里?

应用程序的体系结构依赖于以下服务和组件:

  • Azure OpenAI 表示我们向其发送用户的查询的 AI 提供程序。
  • LlamaIndex 是一种框架,可帮助我们引入、转换和向量内容(PDF 文件),并从数据创建搜索索引。
  • Azure 容器应用 是托管应用程序的容器环境。
  • Azure 托管标识 可帮助我们确保业界领先的安全性,并且使得作为开发人员的您无需处理凭据和 API 密钥。

LlamaIndex 管理数据从引入到检索的工作流程

若要使用 LlamaIndex 实现 RAG (Retrieval-Augmented Generation) 系统,以下关键步骤与 LlamaIndex 功能匹配:

过程 描述 LlamaIndex
数据引入 从 PDF、API 或数据库等源导入数据。 简单目录读取器
区块文档 将大型文档分解为较小的区块。 句子分割器
矢量索引创建 创建矢量索引,以便进行高效的相似性搜索。 VectorStoreIndex
从索引递归检索(可选) 使用分层检索管理复杂数据集。
转换为查询引擎 将矢量索引转换为查询引擎。 asQueryEngine
高级查询设置 (可选) 使用代理来构建多代理系统。
实现 RAG 管道 定义一个目标函数,该函数采用用户查询并检索相关的文档区块。
执行检索 处理查询并重新排序文档。 RetrieverQueryEngine、CohereRerank

先决条件

开发容器 环境提供了完成本文所需的所有依赖项。 可以在 GitHub Codespaces(在浏览器中)或使用 Visual Studio Code 在本地运行开发容器。

若要使用本文,需要满足以下先决条件:

开放开发环境

按照以下说明部署预配置开发环境,其中包含完成本文所需的所有依赖项。

GitHub Codespaces 运行由 GitHub 托管的开发容器,Visual Studio Code for web 作为用户界面。 对于最直接的开发环境,请使用 GitHub Codespaces,以便预先安装正确的开发人员工具和依赖项来完成本文。

重要

所有 GitHub 帐户每月最多可使用 Codespaces 60 小时,其中包含 2 个核心实例。 有关详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数

  1. 在 codespace 中打开。

    在 GitHub Codespaces 中打开

  2. 等待 Codespace 启动。 此启动过程可能需要几分钟时间。

  3. 在屏幕底部的终端中,使用 Azure 开发人员 CLI 登录到 Azure。

    azd auth login
    

    完成身份验证过程。

  4. 本文中的剩余任务发生在此开发容器的上下文中。

部署和运行

示例存储库包含将无服务器聊天应用部署到 Azure 所需的所有代码和配置文件。 以下步骤将指导完成将示例部署到 Azure 的过程。

将聊天应用部署到 Azure

重要

在本部分中创建的 Azure 资源会产生直接成本,主要来自 Azure AI 搜索资源。 即使你在命令完全执行之前中断命令,这些资源也可能会产生费用。

  1. 若要预配 Azure 资源并部署源代码,请运行以下 Azure 开发人员 CLI 命令:

    azd up
    
  2. 使用下表回答提示:

    提示
    环境名称 保持简短和小写。 添加名称或别名。 例如,john-chat。 它用作资源组名称的一部分。
    订阅 选择要在其中创建资源的订阅。
    位置(用于托管) 从列表中选择一个您附近的位置。
    OpenAI 模型的位置 从列表中选择一个离您最近的位置。 如果与第一个位置相同的位置可用,请选择该位置。
  3. 等待应用部署。 部署可能需要 5-10 分钟才能完成。

  4. 成功部署应用程序后,终端中会显示两个 URL。

  5. 选择标记为 Deploying service webapp 的 URL,在浏览器中打开聊天应用程序。

    显示 Web 应用程序 URL 的部署命令输出的屏幕截图。

使用聊天应用从 PDF 文件获取答案

聊天应用预加载了来自 PDF 文件目录的有关国内邮政邮件物理标准的信息。 可以使用聊天应用询问有关邮寄信件和包裹的问题。 以下步骤将引导你完成使用聊天应用的过程。

  1. 在浏览器中,选择或输入 向法国发送大型包的费用是多少?

  2. LlamaIndex 利用 PDF 文件生成答案,并流式传输响应。

    浏览器中聊天应用的屏幕截图,其中显示了聊天输入和响应。

    答案来自 Azure OpenAI,并受引入到 LlamaIndex 矢量存储中的 PDF 数据的影响。

清理资源

若要清理资源,需要解决以下两项问题:

  • Azure 资源,你可以使用 azd(一个 Azure Developer CLI)清理这些资源。
  • 你的开发人员环境(无论是 Visual Studio Code,还是基于 Visual Studio Code 的 DevContainers)。

清理 Azure 资源

本文中创建的 Azure 资源将计费给 Azure 订阅。 如果不希望将来需要这些资源,请将其删除,以避免产生更多费用。

运行以下 Azure 开发人员 CLI 命令以删除 Azure 资源并删除源代码:

azd down --purge

清理开发人员环境

删除 GitHub Codespaces 环境可确保可以最大程度地提高帐户获得的每核心免费小时数权利。

重要

有关 GitHub 帐户权利的详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数

  1. 登录到 GitHub Codespaces 仪表板(https://github.com/codespaces)。

  2. 找到当前正在运行的、源自 Azure-Samples/llama-index-javascript GitHub 存储库的 Codespaces。

    所有正在运行的 Codespace 的屏幕截图,包括其状态和模板。

  3. 打开代码空间的上下文菜单 ...,然后选择 删除

获取帮助

此示例存储库提供 故障排除信息

如果您的问题未得到解决,请将其记录到存储库的 问题

下一步