这个示例展示了如何使用 LangChain.js 和 Azure 构建一个基于检索增强生成 (RAG) 的无服务器 AI 聊天体验。应用程序托管在 Azure 静态 Web 应用程序 和 Azure Functions 上,并使用 Azure Cosmos DB for NoSQL 作为向量数据库。您可以将其作为构建更复杂 AI 应用程序的起点。
概述
构建 AI 应用程序可能既复杂又耗时,但使用 LangChain.js 和 Azure 的无服务器技术可以极大地简化这一过程。此应用程序是一个聊天机器人,它使用一组企业文档来生成对用户查询的响应。
我们提供了示例数据,使此示例可以立即试用,但您可以随意替换为自己的数据。我们使用了一个虚构公司 Contoso Real Estate,体验允许其客户询问有关产品使用的支持问题。示例数据包括一组描述其服务条款、隐私政策和支持指南的文档。
此应用程序由多个组件构成:
-
一个使用 Lit 构建的单一聊天 Web 组件的 Web 应用程序,并托管在 Azure 静态 Web 应用程序 上。代码位于
packages/webapp
文件夹中。 -
一个使用 Azure Functions 构建的无服务器 API,使用 LangChain.js 处理文档并生成对用户聊天查询的响应。代码位于
packages/api
文件夹中。 -
一个使用 Azure Cosmos DB for NoSQL 来存储从文档中提取的文本和 LangChain.js 生成的向量的数据库。
-
一个使用 Azure Blob Storage 存储源文档的文件存储。
我们使用 AI 聊天应用程序的 HTTP 协议 在 Web 应用程序和 API 之间进行通信。
功能
- 无服务器架构:利用 Azure Functions 和 Azure 静态 Web 应用程序实现完全无服务器部署。
- 检索增强生成 (RAG):结合 Azure Cosmos DB 和 LangChain.js 的强大功能,提供相关且准确的响应。
- 可扩展且具成本效益:利用 Azure 的无服务器产品提供可扩展且成本效益高的解决方案。
- 本地开发:支持使用 Ollama 进行本地开发测试,无需任何云成本。
开始
有多种方式可以开始使用此项目。
最快的方式是使用 GitHub Codespaces,它为您提供了一个预配置的环境。或者,您可以按照以下说明 设置本地环境。
[!重要] 如果您想使用 Ollama 在本地完全运行此示例,您必须按照 本地环境 部分中的说明进行操作。
使用本地环境
您需要安装以下工具才能在本地机器上工作:
- Node.js LTS
- Azure Developer CLI
- Git
- PowerShell 7+ (仅限 Windows 用户)
- 重要:确保您可以从 PowerShell 命令运行
pwsh.exe
。如果失败,您可能需要升级 PowerShell。 - 除了 Powershell,您还可以使用 Git Bash 或 WSL 来运行 Azure Developer CLI 命令。
- 重要:确保您可以从 PowerShell 命令运行
- Azure Functions Core Tools (应通过 NPM 自动安装,仅在 API 无法启动时手动安装)
然后,您可以获取项目代码:
- Fork 项目以创建此存储库的副本。
- 在您的 forked 存储库中,选择 代码 按钮,然后选择 本地 选项卡,并复制 forked 存储库的 URL。
- 打开终端并运行此命令以克隆仓库:
git clone <your-repo-url>
使用 GitHub Codespaces
您可以通过使用 GitHub Codespaces 直接在浏览器中运行此项目,这将打开一个基于 Web 的 VS Code:
使用 VSCode 开发容器
与 Codespaces 类似的选项是 VS Code Dev Containers,它将使用 Dev Containers 扩展 在本地 VS Code 实例中打开项目。
您还需要在计算机上安装 Docker 以运行容器。
运行示例
有多种方式可以运行此示例:使用 Ollama 或 Azure OpenAI 模型在本地运行,或将其部署到 Azure。
将示例部署到 Azure
Azure 先决条件
- Azure 账户。如果您是 Azure 新手,获取一个免费的 Azure 账户,以获得免费的 Azure 积分来开始使用。如果您是学生,您也可以通过 Azure for Students 获得免费积分。
- 具有已启用 Azure OpenAI 服务访问权限的 Azure 订阅。您可以通过 此表单 申请访问权限。
- Azure 账户权限:
- 您的 Azure 账户必须具有
Microsoft.Authorization/roleAssignments/write
权限,例如 基于角色的访问控制管理员、用户访问管理员 或 所有者。如果您没有订阅级别的权限,必须为现有资源组授予 RBAC,并 部署到该现有组。 - 您的 Azure 账户还需要在订阅级别上具有
Microsoft.Resources/deployments/write
权限。
- 您的 Azure 账户必须具有
成本估算
请参阅 成本估算 了解在 Azure 上运行此示例的详细信息。
部署示例
- 打开终端并导航到项目的根目录。
- 通过运行
azd auth login
命令与 Azure 进行身份验证。 - 运行
azd up
将应用程序部署到 Azure。这将配置 Azure 资源、部署此示例,并根据./data
文件夹中的文件构建搜索索引。- 系统会提示您选择资源的基础位置。如果不确定选择哪个位置,请选择
eastus2
。 - 默认情况下,OpenAI 资源将部署到
eastus2
。您可以使用azd env set AZURE_OPENAI_RESOURCE_GROUP_LOCATION <location>
设置不同的位置。目前仅接受少数几个位置。该位置列表基于 OpenAI 模型可用性表,并可能随着可用性的变化而过时。
- 系统会提示您选择资源的基础位置。如果不确定选择哪个位置,请选择
部署过程需要几分钟时间。完成后,您将在终端中看到 Web 应用程序的 URL。
您现在可以在浏览器中打开 Web 应用程序并开始与机器人聊天。
增强安全性
在企业环境中部署此示例时,您可能希望实施更严格的安全限制以保护您的数据和资源。有关更多信息,请参阅 增强安全性 指南。
清理
要清理此示例创建的所有 Azure 资源:
- 运行
azd down --purge
- 当被询问是否确认继续时,输入
y
资源组及其所有资源将被删除。
使用 Ollama 在本地运行示例
如果您的机器资源足够,您可以在不使用任何云资源的情况下完全本地运行此示例。为此,您首先需要安装 Ollama,然后运行以下命令将模型下载到您的机器上:
ollama pull mistral:v0.2
ollama pull all-minilm:l6-v2
[!注意]
mistral
模型将下载几GB的数据,因此可能需要一些时间,具体取决于您的互联网连接速度。
之后,您需要安装 NPM 依赖项:
npm install
然后,您可以通过运行以下命令启动应用程序,这将本地启动 Web 应用程序和 API:
npm start
接着,打开一个新终端并并行运行以下命令,将 /data
文件夹中的 PDF 文档上传到 API:
npm run upload:docs
这只需执行一次,除非您想添加更多文档。
现在,您可以在浏览器中打开 http://localhost:8000
URL 开始与机器人聊天。
[!注意] 虽然本地模型通常能够很好地回答问题,但有时它们可能无法完全遵循引文和后续问题的高级格式化指令。这是预期的,也是使用较小本地模型的局限性。
使用 Azure OpenAI 模型在本地运行示例
首先,您需要配置运行示例所需的 Azure 资源。按照 将示例部署到 Azure 部分中的说明将示例部署到 Azure,然后您将能够使用已部署的 Azure 资源在本地运行示例。
部署完成后,您应该会在 packages/api
文件夹中看到一个 .env
文件。此文件包含使用 Azure 资源运行应用程序所需的环境变量。
要运行示例,您可以使用与 Ollama 设置相同的命令。这将本地启动 Web 应用程序和 API:
npm start
在浏览器中打开 http://localhost:8000
URL 开始与机器人聊天。
注意,文档会在使用 azd up
部署示例到 Azure 时自动上传。
[!提示] 您可以通过简单地删除
packages/api/.env
文件并重新启动应用程序来切换回使用 Ollama 模型。要重新生成.env
文件,您可以运行azd env get-values > packages/api/.env
。
资源
以下是一些资源,用于了解本示例中使用的技术:
- LangChain.js 文档
- 生成式 AI 初学者指南
- Azure OpenAI 服务
- Azure Cosmos DB for NoSQL
- Ask YouTube: LangChain.js + Azure 快速入门示例
- 使用 Azure OpenAI 和 Azure AI Search 与企业数据聊天
- 通过聊天革命化您的企业数据:使用 Azure OpenAI 和 AI 搜索构建下一代应用
您还可以在这里找到更多 Azure AI 示例。
常见问题解答
您可以在 常见问题解答 中找到常见问题的答案。
故障排除
如果您在运行或部署此示例时遇到任何问题,请查看故障排除指南。如果找不到解决方案,请在此存储库中打开一个问题。
指导
有关如何使用此示例的更详细指导,请参阅 教程。
贡献
本项目欢迎贡献和建议。大多数贡献要求您同意一个贡献者许可协议 (CLA),声明您有权并实际授予我们使用您贡献的权利。详情请访问 https://cla.opensource.microsoft.com。
当您提交拉取请求时,CLA 机器人将自动确定您是否需要提供 CLA 并适当装饰 PR(例如状态检查、评论)。只需按照机器人提供的说明操作即可。您只需要在使用 CLA 的所有仓库中执行一次此操作。
本项目采用了 Microsoft 开源行为准则。有关更多信息,请参阅 行为准则 FAQ 或联系 opencode@microsoft.com 获取任何其他问题或评论。
商标
本项目可能包含项目、产品或服务的商标或徽标。授权使用 Microsoft 商标或徽标需遵循 Microsoft 商标和品牌指南。在修改版本中使用 Microsoft 商标或徽标不得引起混淆或暗示 Microsoft 赞助。任何第三方商标或徽标的使用需遵循该第三方的政策。