使用 LangChain.js 通过 RAG 开始使用无服务器 AI 聊天
创建 AI 应用可能非常复杂。 借助 LangChain.js、Azure Functions 和无服务器技术,可以简化此过程。 这些工具可自动管理基础结构和缩放,让你专注于聊天机器人功能。 聊天机器人使用企业文档生成 AI 响应。
该代码包括虚构公司的示例数据。 客户可以询问有关公司产品的支持问题。 这些数据包括有关公司服务条款、隐私策略和支持指南的文档。
注意
本文使用一个或多个 AI 应用模板 作为本文中的示例和指南的基础。 AI 应用模板为你提供了维护良好、易于部署的参考实现,有助于确保 AI 应用的高质量起点。
体系结构概述
聊天应用
用户与应用程序交互:
- 用于聊天的客户端 Web 应用中的聊天界面。
- 客户端 Web 应用通过 HTTP 调用将用户的查询发送到无服务器 API。
- 无服务器 API 创建一个链,用于协调 Azure AI 与 Azure AI 搜索之间的交互以生成答案。
- 通过 Azure Blob 存储检索 PDF 文档。
- 然后,生成的响应将发送回 Web 应用并向用户显示。
下图显示了聊天应用的简单体系结构:
显示从客户端到后端应用的体系结构的
LangChain.js 简化了服务之间的复杂性
API 流可用于通过抽象化交互来了解 LangChain.js 在此方案中的有用性。 无服务器 API 端点:
- 接收用户的问题。
- 创建客户端对象:
- 用于嵌入和聊天的 Azure OpenAI
- 用于矢量存储的 Azure AI 搜索
- 使用 LLM 模型、聊天消息(系统和用户提示)和文档源创建文档链。
- 从文档链和向量存储中创建出一个检索链。
- 从检索链中流式传输响应。
开发人员的工作是正确配置依赖项服务,例如 Azure OpenAI 和 Azure AI 搜索,并正确构造链。 基础链逻辑知道如何解析查询。 这允许你根据许多不同的服务和配置构造链,只要它们符合 LangChain.js 要求。
此体系结构中的 Azure 在哪里?
此应用程序由多个组件构成:
一个使用单个聊天 Web 组件制作的 Web 应用,该组件使用 Lit 构建,并托管在 Azure 静态 Web 应用上。 代码位于
packages/webapp
文件夹中。使用 Azure Functions 生成的无服务器 API,并使用 LangChain.js 引入文档并生成对用户聊天查询的响应。 代码位于
packages/api
文件夹中。一个 Azure OpenAI 服务,用于创建嵌入并生成答案。
一个数据库,用于存储从文档中提取的文本和 LangChain.js 使用 Azure AI 搜索生成的矢量。
使用 Azure Blob 存储来存储源文件的文件存储。
先决条件
开发容器 环境已可用,其中包含完成本文所需的所有依赖项。 可以在 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 开发人员 CLI 命令预配 Azure 资源并部署源代码:
azd up
使用下表回答提示:
提示 答 环境名称 保持简短和小写。 添加名称或别名。 例如, john-chat
。 它用作资源组名称的一部分。订阅 选择用于创建资源的订阅。 位置(用于托管) 从列表中选择一个离您较近的位置。 OpenAI 模型的位置 从列表中选择一个离您最近的位置。 如果与第一个位置相同的位置可用,请选择该位置。 等待应用部署。 部署可能需要 5-10 分钟才能完成。
应用程序成功部署后,终端中会显示两个 URL。
选择标记为
Deploying service webapp
的 URL,在浏览器中打开聊天应用程序。
使用聊天应用从 PDF 文件获取答案
聊天应用预加载 PDF 文件目录中的租赁信息。 可以使用聊天应用询问有关租赁过程的问题。 以下步骤将引导你完成使用聊天应用的过程。
在浏览器中,选择或输入 什么是退款策略。
选择后续问题。
从响应中选择引文以查看用于生成答案的文档。 这会将文档从 Azure 存储传送到客户端。 完成新的浏览器选项卡后,请将其关闭以返回到无服务器聊天应用。
清理资源
清理 Azure 资源
本文中创建的 Azure 资源将计费给 Azure 订阅。 如果不希望将来需要这些资源,请将其删除,以避免产生更多费用。
使用以下 Azure 开发人员 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。打开代码空间的上下文菜单
...
,然后选择 删除。
获取帮助
此示例存储库提供 故障排除信息。
如果未解决问题,请将问题记录到存储库的问题部分。