你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用 LangGraph 或 Foundry 代理服务在 Azure 应用服务中生成代理 Web 应用(Python)

本教程演示如何向现有的数据驱动 FastAPI CRUD 应用程序添加智能体功能。 它使用两种不同的方法执行此作:LangGraph 和 Foundry 代理服务。

如果 Web 应用程序已具有有用的功能(如购物、酒店预订或数据管理),则通过将这些功能包装在插件(for LangGraph)或 OpenAPI 终结点(对于 Foundry 代理服务)中来向 Web 应用程序添加代理功能相对简单。 本教程从简单的待办事项列表应用开始。 最后,你将能够使用应用服务应用中的智能体创建、更新和管理任务。

通过 LangGraph 和 Foundry Agent Service,可以构建具有 AI 驱动能力的代理特性 Web 应用程序。 LangGraph 类似于 Microsoft 语义内核,是 SDK。 下表显示了一些注意事项和权衡因素:

注意事项 LangGraph 或语义内核 Foundry 代理服务
Performance 快速(在本地运行) 速度较慢(托管的远程服务)
开发 完整代码,最大程度的控制 低代码,快速集成
Testing 代码中的手动/单元测试 用于快速测试的内置操场
可伸缩性 应用托管 Azure 托管,自动缩放

本教程中,您将学习如何:

  • 将现有应用功能转换为 LangGraph 的插件。
  • 将插件添加到 LangGraph 智能体并在 Web 应用中使用它。
  • 将现有应用功能转换为 OpenAPI 终结点以用于 Foundry 代理服务。
  • 在 Web 应用中调用 Microsoft Foundry 代理。
  • 分配建立托管标识连接所需的权限。

先决条件

使用 Codespaces 打开示例

最简单的入门方法是使用 GitHub Codespaces,它提供完整的开发环境,预装了所有必需的工具。

  1. 导航到 https://github.com/Azure-Samples/app-service-agentic-langgraph-foundry-python 处的 GitHub 存储库。

  2. 选择“代码”按钮,选择“Codespaces”选项卡,然后选择“在主分支上创建 codespace”。

  3. 稍等片刻,让 Codespace 初始化。 准备就绪后,浏览器中会显示完全配置的开发环境。

  4. 在本地运行应用程序:

    python3 -m venv venv
    source venv/bin/activate
    pip install -r requirements.txt
    uvicorn src.app:app --host 0.0.0.0 --port 3000
    
  5. 看到“在端口 3000 上运行的应用程序可用”时,选择“在浏览器中打开”并添加一些任务。

    智能体未完全配置,因此尚不起作用。 稍后需对其进行配置。

查看智能体代码

这两种方法使用相同的实现模式,即在应用程序启动时初始化智能体,并通过 POST 请求响应用户消息。

在 src/agents/LangGraphTaskAgent.tsLangGraphTaskAgent 中的构造函数中初始化 。 初始化代码执行以下操作:

  • 使用环境变量配置 AzureChatOpenAI 客户端。
  • 创建预生成的 ReAct 智能体,该智能体具有内存和一组用于任务管理的 CRUD 工具(请参阅 LangGraph 快速入门¶)。
# Initialize Azure OpenAI client
credential = DefaultAzureCredential()
azure_ad_token_provider = get_bearer_token_provider(
    credential, "https://cognitiveservices.azure.com/.default"
)

self.llm = AzureChatOpenAI(
    azure_endpoint=endpoint,
    azure_deployment=deployment_name,
    azure_ad_token_provider=azure_ad_token_provider,
    api_version="2024-10-21"
)

# Define tools
tools = [
    self._create_task_tool(),
    self._get_tasks_tool(),
    self._get_task_tool(),
    self._update_task_tool(),
    self._delete_task_tool()
]

# Create the agent
self.agent = create_react_agent(self.llm, tools, checkpointer=self.memory)
print("LangGraph Task Agent initialized successfully")

部署示例应用程序

示例存储库包含一个 Azure Developer CLI (AZD) 模板,该模板使用托管标识创建应用服务应用并部署示例应用程序。

  1. 在终端中,使用 Azure Developer CLI 登录到 Azure:

    azd auth login
    

    按照说明完成身份验证过程。

  2. 使用 AZD 模板部署 Azure 应用服务应用:

    azd up
    
  3. 出现提示时,请提供以下答案:

    问题 答案
    输入新的环境名称: 键入唯一名称。
    选择要使用的 Azure 订阅: 选择订阅。
    选取要使用的资源组: 选择“新建资源组”
    选择要在其中创建资源组的位置: 选择任何区域。 资源实际上将在“美国东部 2”中创建。
    输入新资源组的名称: 键入 Enter
  4. 在 AZD 输出中,找到应用的 URL 并在浏览器中导航到该 URL。 该 URL 在 AZD 输出中如下所示:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <URL>
     
  5. 选择“OpenAPI 架构”项以在默认 /openapi.json 路径中打开自动生成的 OpenAPI 架构。 稍后需要此架构。

  6. 成功部署后,会看到已部署应用程序的 URL。

    现在已有了一个具有系统分配的托管标识的应用服务应用。

创建和配置 Microsoft Foundry 资源

  1. Foundry 门户中,部署所选的模型(请参阅 快速入门:Microsoft Foundry 入门)。 在此过程中会为你创建一个项目和一个默认智能体。

  2. 从左侧菜单中选择“概述”。

  3. 选择 Microsoft Foundry ,并在 Microsoft Foundry 项目终结点中复制 URL。

  4. 选择“Azure OpenAI”,并复制“Azure OpenAI 终结点”中的 URL 供以后使用。

    屏幕截图显示如何在 Foundry 门户中复制 OpenAI 终结点和 Foundry 项目终结点。

  5. 从左侧菜单中选择“智能体”,然后选择默认智能体。

  6. “设置”窗格中,复制智能体 ID 以及“部署”中的模型名称。

    屏幕截图显示如何在 Foundry 门户中复制智能体 ID 和模型部署名称。

  7. “设置”窗格中,使用 OpenAPI 指定工具添加操作。 使用从部署的 Web 应用和匿名身份验证获取的 OpenAPI 架构。 有关详细步骤,请参阅如何使用 OpenAPI 指定工具

    应用程序代码已配置为包含服务器的 urloperationId,这两项为代理所需。 有关详细信息,请参阅 如何将 Foundry 代理服务与 OpenAPI 指定工具配合使用:先决条件

  8. 选择“在操场中试用”,并使用“显示所有任务”等提示测试你的 Foundry 代理。

    如果收到有效的响应,则表明智能体正在对已部署的 Web 应用上的 OpenAPI 终结点进行工具调用。

分配所需的权限

  1. 在 Foundry 门户的右上角选择资源的名称,然后选择“资源组”以在 Azure 门户中打开它。

    屏幕截图显示如何在 Azure 门户中快速转到 Foundry 资源的资源组视图。

  2. 使用下表为应用服务应用的管理标识的两个资源中的每一个添加一个角色:

    目标资源 所需角色 用途:
    Microsoft Foundry 认知服务 OpenAI 用户 LangGraph 中的聊天补全服务。
    Microsoft Foundry 项目 Azure AI 用户 读取并调用 Foundry 代理。

    有关说明,请参阅使用 Azure 门户分配 Azure 角色

在示例应用程序中配置连接变量

  1. 打开 .env。 使用前面从 Foundry 门户复制的值,配置以下变量:

    Variable Description
    AZURE_OPENAI_ENDPOINT Azure OpenAI 终结点(从“概述”页复制)。 这是 LangGraph 智能体所需的。
    AZURE_OPENAI_DEPLOYMENT_NAME 部署中的模型名称(从“代理设置”窗格复制)。 这是 LangGraph 智能体所需的。
    AZURE_AI_FOUNDRY_PROJECT_ENDPOINT Microsoft Foundry 项目终结点(从“概述”页复制)。 Foundry 代理服务需要此项。
    AZURE_AI_FOUNDRY_AGENT_ID 智能体 ID(从“智能体设置”窗格复制)。 为了调用现有的 Microsoft Foundry 代理,需要这个。

    注释

    为了简化本教程,我们将在 .env 中使用这些变量,而不是在应用服务中使用应用设置覆盖它们。

  2. 通过 Azure CLI 登录 Azure:

    az login
    

    这样一来,示例代码中的 Azure 标识客户端库就可以接收已登录用户的身份验证令牌。 请记住,之前已为此用户添加了所需的角色。

  3. 在本地运行应用程序:

    npm run build
    npm start
    
  4. 看到“在端口 3000 上运行的应用程序可用”时,选择“在浏览器中打开”

  5. 选择“LangGraph 智能体”链接和“Foundry 智能体”链接以试用聊天界面。 如果收到响应,应用程序将成功连接到 Microsoft Foundry 资源。

  6. 回到 GitHub codespace,部署应用更改。

    azd up
    
  7. 再次导航到已部署的应用程序并测试聊天智能体。

清理资源

使用完应用程序后,可以删除应用服务资源,以避免产生更多成本:

azd down --purge

由于 AZD 模板不包含 Microsoft Foundry 资源,需要根据需要手动删除它们。

更多资源