通过 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 在哪里?
此应用程序由多个组件构成:
使用使用 Lit 构建的单个聊天 Web 组件并在 Azure 静态Web 应用上托管的 Web 应用。 代码位于
packages/webapp
文件夹中。使用 Azure Functions 构建的无服务器 API,并使用LangChain.js引入文档并生成对用户聊天查询的响应。 代码位于
packages/api
文件夹中。用于 创建嵌入和生成答案的 Azure OpenAI 服务。
一个数据库,用于存储从文档中提取的文本,以及使用 Azure AI 搜索LangChain.js生成的矢量。
使用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。打开上下文菜单,
...
为代码空间选择“ 删除”。
获取帮助
此示例存储库提供故障排除信息。
如果未解决问题,请将问题记录到存储库的问题部分。
相关内容
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈