通过 LangChain.js 开始使用无服务器 AI 聊天和 RAG

创建 AI 应用可能非常复杂。 借助 LangChain.js、Azure Functions 和无服务器技术,可以简化此过程。 这些工具可自动管理基础结构和缩放,让你专注于聊天机器人功能。 聊天机器人使用企业文档生成 AI 响应。

该代码包括虚构公司 Contoso Real Estate 的示例数据。 客户可以询问有关公司产品的支持问题。 这些数据包括有关公司服务条款、隐私策略和支持指南的文档。

浏览器中聊天应用的屏幕截图,其中显示了有关聊天输入的多个建议以及用于输入问题的聊天文本框。

注意

本文使用一个或多个 AI 应用模板作为本文中的示例和指南的基础。 AI 应用模板为你提供了维护良好、易于部署的参考实现,可帮助确保 AI 应用有一个高质量的起点。

体系结构概述

聊天应用

用户与应用程序交互:

  • 在客户端 Web 应用中使用聊天界面。
  • 客户端 Web 应用通过 HTTP 调用将用户的查询发送到无服务器 API。
  • 无服务器 API 创建一个链,用于协调 Azure AI 与 Azure AI 搜索之间的交互以生成答案。
  • 如果需要引用文档,则Azure Blob 存储用于检索 PDF 文档。
  • 然后,生成的响应将发送回 Web 应用并向用户显示。

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

显示从客户端到后端应用的体系结构的关系图。

LangChainjs 简化了服务之间的复杂性

API 流有助于了解 LangChainJS 如何通过抽象化交互来在此方案中有所帮助。 无服务器 API 终结点

  • 从用户那里收到问题。
  • 创建客户端对象:
    • 用于嵌入和聊天的 Azure OpenAI
    • 用于矢量存储的 Azure AI 搜索
  • 使用 LLM 模型、聊天消息(系统和用户提示)和文档源创建文档链。
  • 从文档链和向量存储创建检索链。
  • 从检索链流式传输响应。

开发人员的工作是正确配置依赖项服务,例如 Azure OpenAI 和 Azure AI 搜索,并正确构造链。 基础链逻辑知道如何解析查询。 这样,只要它们符合 LangChain 要求,就可以从许多不同的服务和配置构造链。

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

此应用程序由多个组件构成:

先决条件

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

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

  • Azure 订阅 - 免费创建订阅
  • Azure 帐户权限 - Azure 帐户必须具有 Microsoft.Authorization/roleAssignments/write 权限,例如用户访问管理员所有者
  • 已在所需的 Azure 订阅中授予对 Azure OpenAI 的访问权限。 目前,仅应用程序授予对此服务的访问权限。 可以通过在 https://aka.ms/oai/access 上填写表单来申请对 Azure OpenAI 的访问权限。 如果有任何问题,请在此存储库上提出问题以联系我们。
  • GitHub 帐户

打开开发环境

现在从安装了完成本文所需的所有依赖项的开发环境开始。

GitHub Codespaces 运行由 GitHub 托管的开发容器,将 Visual Studio Code 网页版作为用户界面。 对于最简单的开发环境,请使用 GitHub Codespaces,以便预先安装完成本文所需的合适的开发人员工具和依赖项。

重要

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

  1. 在 Codespace 中打开。

    在 GitHub Codespaces 中打开

  2. 等待 Codespace 启动。 此启动过程会花费几分钟时间。

  3. 在终端的屏幕底部,使用 Azure Developer CLI 登录到 Azure。

    azd auth login
    

    完成身份验证过程。

  4. 本文中的剩余任务需要在此开发容器的上下文中完成。

部署和运行

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

将聊天应用部署到 Azure

重要

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

  1. 运行以下 Azure Developer CLI 命令来预配 Azure 资源并部署源代码:

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

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

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

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

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

聊天应用预加载 PDF 文件目录中租赁信息。 可以使用聊天应用询问有关租赁过程的问题。 以下步骤将引导你完成使用聊天应用的过程。

  1. 在浏览器中,选择或输入 什么是退款策略

    聊天应用的第一个问题和答案的屏幕截图。

  2. 选择后续问题。

    聊天应用的推荐跟进提示和答案的屏幕截图

  3. 从响应中选择引文以查看用于生成答案的文档。 这会将文档从Azure 存储传送到客户端。 完成新的浏览器选项卡后,请将其关闭以返回到无服务器聊天应用。

    包含引文的原始文档的屏幕截图。

清理资源

清理 Azure 资源

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

运行以下 Azure Developer CLI 命令以删除 Azure 资源并删除源代码:

azd down --purge

清理 GitHub Codespaces

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

重要

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

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

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

    所有正在运行的 Codespaces 的屏幕截图,其中包含它们的状态和模板。

  3. 打开上下文菜单, ...为代码空间选择“ 删除”。

获取帮助

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

如果未解决问题,请将问题记录到存储库的问题部分。