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

将 Azure Functions 与 Foundry 代理服务配合使用

Note

本文档引用 Microsoft Foundry (经典) 门户。

🔍 查看 Microsoft Foundry (new) 文档 ,了解新门户。

Azure Functions 是一种无服务器计算服务,可用于使用代码生成的自定义工具扩展 Foundry 代理服务代理。 当你需要代理与企业中的系统集成时,此方法特别有用。

Functions 提供了多个托管计划。 弹性消耗计划非常适合托管自定义工具,因为它提供:

  • 支持缩放到零无服务器托管,基于消耗量定价。
  • 对 Azure 中资源的基于标识的访问,包括虚拟网络中的资源。
  • 通过 输入/输出绑定进行声明性数据源连接。

何时使用 Azure Functions 与函数调用

虽然 函数调用 允许你定义使用代理代码进行进程内运行的工具,但在需要时,在 Azure Functions 上托管自定义工具可提供其他企业功能:

  • 关注点分离:将业务逻辑与代理代码隔离,从而启用独立的开发、测试和部署周期。
  • 集中管理:创建多个代理、应用程序或团队可以一致使用的可重用工具。
  • 安全隔离:分别控制代理对工具和企业资源的访问。 此方法允许你仅分配代理所需的特定权限来调用该工具,而无需提供对基础数据库、API 或网络的直接访问。
  • 外部依赖项:利用非Microsoft库、特定运行时环境或旧版系统集成。
  • 复杂作:处理多步骤工作流和数据转换,或卸载计算密集型作。
  • 异步处理:使用重试功能和消息可靠性处理执行长时间运行的操作。

集成选项

Foundry 代理服务为代理提供了两种访问 Azure Functions 托管工具的主要方法:

功能 / 特点 模型上下文协议 (MCP) 服务器 基于 Azure 队列存储的工具
工作原理 代理使用 MCP 协议连接到 Azure 中的函数应用。 函数应用本身充当自定义 MCP 服务器,将单个函数公开为工具。 自定义 MCP 服务器从代理项目中抽象化托管和公开工具的复杂性,并提升代码的可重用性。 代理通过队列存储在 Azure 中的函数应用中与工具代码通信,方法是将消息放置在队列中,这会触发工具代码执行。 函数应用侦听输入队列,异步处理消息,并返回对第二个队列的响应。
何时使用它? ✔ 最适合利用行业标准协议进行代理工具集成。
✔ 提供实时同步的交互,并且即时响应。
✔ 最适合不需要实时响应的异步工作流。
✔ 非常适合使用重试功能进行后台处理和可靠的消息传递。
SDK 配置 通用 MCP 工具 特定的 Azure Functions 工具
入门 如何将 Azure Functions 与 MCP 配合使用 如何将 Azure Functions 与队列配合使用

对于 HTTP 触发器函数,还可以通过在代理配置中使用 OpenAPI 工具 将函数描述为可调用的工具并将其注册为可调用工具,从而集成。 此方法为现有的基于 HTTP 的函数提供了灵活性,但它需要额外的设置来定义 API 规范。

支持的模型

若要使用函数调用的所有功能(包括并行函数),需要使用在 2023 年 11 月 6 日之后发布的模型。

创建和部署基于队列的工具集成示例

本文的其余部分演示如何使用 Azure 开发人员 CLI (azd) 示例,该示例使用 Functions 配置 Foundry 代理服务项目,以支持代理的基于队列的工具集成。

Note

有关如何将基于 Functions 的工具定义为 MCP 服务器的详细说明,请参阅 Azure Functions 中的主机 MCP 服务器

Prerequisites

使用支持

Azure AI Foundry 支持 Python SDK C# SDK Java SDK REST API 基本代理设置 标准代理设置
✔️ ✔️ ✔️ ✔️ ✔️

初始化项目模板

此项目用于 azd 简化创建 Azure 资源和部署代码。 此部署遵循当前安全且可缩放的 Functions 部署的最佳做法。 可以在 GitHub 上找到此处使用的模板和代码。

  1. azd init在终端窗口中运行以下命令,从 azd 模板初始化项目:

    azd init --template azure-functions-ai-services-agent-python
    

出现提示时,请提供环境名称,例如 ai-services-agent-python。 在 azd 中,环境可维护应用的唯一部署上下文,你可以定义多个环境。 环境名称还用于资源组的名称和在 Azure 中创建的其他资源。

  1. 运行以下命令以允许本地安装脚本成功运行,具体取决于本地作系统:

    chmod +x ./infra/scripts/*.sh 
    

配置资源

运行以下命令 azd provision ,在 Azure 中创建所需的资源:

azd provision

出现提示时,请提供以下所需的部署参数:

Prompt Description
选择要使用的 Azure 订阅 选择您希望创建资源的订阅。
位置 部署参数 要在其中创建包含新 Azure 资源的资源组的 Azure 区域。 仅显示当前支持 Flex 消耗计划的区域。
vnetEnabled 部署参数 虽然模板支持在虚拟网络中创建资源,但为了简化部署和测试,请选择 False

部署文件 main.bicep 然后由 azd 读取,并用于在 Azure 中创建这些资源。

  • Flex 消耗计划和函数应用
  • Foundry 中的代理平台,包括:
    • 服务帐户
    • 模型部署
    • 项目
    • Agents
    • 搜寻
    • Azure Cosmos DB 帐户(供搜索使用)
  • Azure 存储(Azure Functions 和 AI 代理需要)和 Application Insights(推荐)
  • 您的账户的访问策略和角色
  • 使用托管标识(而不是存储的连接字符串)的服务到服务连接

还可以在 文章中使用这些集成的 Azure 资源:如何将基于队列的 Azure Functions 与 Microsoft Foundry 代理配合使用

预配后脚本还会创建一个 local.settings.json 文件,以便 Functions 能够在本地运行。 生成的文件应如下所示:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "STORAGE_CONNECTION__queueServiceUri": "https://<storageaccount>.queue.core.windows.net",
    "PROJECT_CONNECTION_STRING": "<project connnection for AI Project>"
    }
}

在 Visual Studio Code 中运行应用

  1. 在新终端中打开文件夹。
  2. 运行 code . 代码命令,在 Visual Studio Code 中打开项目。
  3. 在命令面板(F1)中,键入 Azurite: Start,它允许使用 Functions 运行时的本地存储进行调试。
  4. Run/Debug (F5) 在调试器中运行。 如果系统提示本地模拟器未运行,请选择 “仍然调试”
  5. 使用 HTTP 测试工具分别发送 POST prompt 终结点。 如果已安装 RestClient 扩展,可以直接从 test.http 项目文件执行请求。

部署到 Azure 云

azd deploy运行以下命令,将项目代码发布到刚刚预配的函数应用和相关 Azure 资源:

azd deploy

成功完成发布后,azd 会提供新函数的 URL 终结点,但不会提供访问终结点所需的函数键值。 可以使用 Azure Functions Core Tools 命令 func azure functionapp list-functions--show-keys 选项来获取函数终结点的密钥。 有关详细信息,请参阅在 Azure Functions 中使用访问密钥

重新部署代码

还可以根据需要多次运行 azd up 该命令,以便预配 Azure 资源并将代码更新部署到函数应用。

Note

已部署的代码文件始终被最新的部署包覆盖。

清理资源

使用完函数应用和相关资源后,可使用此命令从 Azure 中删除函数应用及其相关资源,并避免产生任何进一步的成本(--purge 不会留下软删除的 AI 资源并会恢复你的配额):

azd down --purge