使用 LlamaIndex 通过 RAG 开始使用无服务器 AI 聊天
使用 LlamaIndex、Azure Functions 和无服务器技术管理的数据简化使用 RAG 的 AI 应用开发。 这些工具可自动管理基础结构和缩放,使你能够专注于聊天机器人功能。 LlamaIndex 负责管理从数据引入到实时响应的完整数据管道。
体系结构概述
应用程序流包括:
- 使用聊天界面输入提示。
- 通过 HTTP 调用将用户的提示发送到无服务器 API。
- 接收用户的提示,然后使用 LlamaIndex 框架处理和流式传输响应。 无服务器 API 使用引擎创建与 Azure OpenAI 大型语言模型(LLM)的连接,以及 LlamaIndex 中的矢量索引。
下图显示了聊天应用的简单体系结构:
此示例使用 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 每月包含的存储和核心小时数。
部署和运行
示例存储库包含将无服务器聊天应用部署到 Azure 所需的所有代码和配置文件。 以下步骤将指导完成将示例部署到 Azure 的过程。
将聊天应用部署到 Azure
重要
在本部分中创建的 Azure 资源会产生直接成本,主要来自 Azure AI 搜索资源。 即使你在命令完全执行之前中断命令,这些资源也可能会产生费用。
若要预配 Azure 资源并部署源代码,请运行以下 Azure 开发人员 CLI 命令:
azd up
使用下表回答提示:
提示 答 环境名称 保持简短和小写。 添加名称或别名。 例如, john-chat
。 它用作资源组名称的一部分。订阅 选择要在其中创建资源的订阅。 位置(用于托管) 从列表中选择一个您附近的位置。 OpenAI 模型的位置 从列表中选择一个离您最近的位置。 如果与第一个位置相同的位置可用,请选择该位置。 等待应用部署。 部署可能需要 5-10 分钟才能完成。
成功部署应用程序后,终端中会显示两个 URL。
选择标记为
Deploying service webapp
的 URL,在浏览器中打开聊天应用程序。
使用聊天应用从 PDF 文件获取答案
聊天应用预加载了来自 PDF 文件目录的有关国内邮政邮件物理标准的信息。 可以使用聊天应用询问有关邮寄信件和包裹的问题。 以下步骤将引导你完成使用聊天应用的过程。
在浏览器中,选择或输入 向法国发送大型包的费用是多少?。
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 每月包含的存储和核心小时数。
登录到 GitHub Codespaces 仪表板(https://github.com/codespaces)。
找到当前正在运行的、源自
Azure-Samples/llama-index-javascript
GitHub 存储库的 Codespaces。打开代码空间的上下文菜单
...
,然后选择 删除。
获取帮助
此示例存储库提供 故障排除信息。
如果您的问题未得到解决,请将其记录到存储库的 问题。