使用 LangChain.js 通过 RAG 开始使用无服务器 AI 聊天
创建 AI 应用可能很复杂。 而利用 LangChain.js、Azure Functions 和 Serverless 技术可以简化这一过程。 这些工具可以自动管理基础结构和缩放,让你专注于聊天机器人功能。 聊天机器人使用企业文档生成 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 在此体系结构中的什么位置?
此应用程序由多个组件组成:
使用 Lit 构建的单个聊天 Web 组件制作的 Web 应用,并托管在 Azure Static Web Apps 上。 代码位于
packages/webapp
文件夹中。使用 Azure Functions 构建的无服务器 API,并使用 LangChain.js 来引入文档并生成对用户聊天查询的响应。 代码位于
packages/api
文件夹中。一个 Azure OpenAI 服务,用于创建嵌入并生成答案。
一个数据库,用于存储从文档中提取的文本和 LangChain.js 使用 Azure AI 搜索生成的矢量。
使用 Azure Blob 存储来存储源文件的文件存储。
先决条件
开发容器 环境提供了完成本文所需的所有依赖项。 可以在 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 每月包含的存储和核心小时数。
部署和运行
示例存储库包含将无服务器聊天应用部署到 Azure 所需的所有代码和配置文件。 以下步骤将指导完成将示例部署到 Azure 的过程。
将聊天应用部署到 Azure
重要
在本部分中创建的 Azure 资源会产生即时成本,主要由 Azure AI 搜索资源产生。 即使在完全执行命令之前中断命令,这些资源也会产生费用。
运行以下 Azure Developer CLI 命令来预配 Azure 资源并部署源代码:
azd up
使用下表回答提示:
提示 Answer 环境名称 保持简短和小写。 添加名称或别名。 例如 john-chat
。 它用作资源组名称的一部分。订阅 选择要在其中创建资源的订阅。 位置(用于托管) 从列表中选择附近的位置。 OpenAI 模型的位置 从列表中选择附近的位置。 如果可以使用与第一个位置相同的位置,请选择该位置。 等待应用部署完成。 完成部署需要 5-10 分钟。
成功部署应用程序后,终端中会显示两个 URL。
选择标记为
Deploying service webapp
的 URL 在浏览器中打开聊天应用程序。
使用聊天应用从 PDF 文件获取答案
聊天应用预加载 PDF 文件目录中的租赁信息。 可以使用聊天应用询问有关租赁流程的问题。 以下步骤将引导你完成使用聊天应用的过程。
在浏览器中选择或输入什么是退款政策。
选择一个后续问题。
从响应中选择引文,以查看生成答案所使用的文档。 这将把文档从 Azure 存储传送到客户端。 完成新的浏览器选项卡后,请将其关闭以返回到无服务器聊天应用。
清理资源
清理 Azure 资源
本文中创建的 Azure 资源的费用将计入你的 Azure 订阅。 如果你预计将来不需要这些资源,请将其删除,以避免产生更多费用。
运行以下 Azure Developer CLI 命令以删除 Azure 资源并删除源代码:
azd down --purge
清理 GitHub Codespaces
删除 GitHub Codespaces 环境可确保可以最大程度地提高帐户获得的每核心免费小时数权利。
重要
有关 GitHub 帐户权利的详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数。
登录到 GitHub Codespaces 仪表板 (https://github.com/codespaces)。
找到当前正在运行的、源自
Azure-Samples/serverless-chat-langchainjs
GitHub 存储库的 Codespaces。打开 codespace 的上下文菜单
...
,然后选择“删除”。
获取帮助
此示例存储库提供故障排除信息。
如果未解决问题,请将问题记录到存储库的问题部分。