快速入門:部署你的第一個託管代理

在這個快速入門中,你部署並呼叫 Foundry Agent Service 中的託管代理。 選擇適合你工作流程的開發工具或 SDK。

如果你使用像 GitHub Copilot 這樣的程式代理程式,Microsoft Foundry 技能可以幫助你選擇開發路徑,並完成設定、部署和呼叫步驟。

先決條件

在開始之前,你需要:

  • Azure 訂用帳戶。 如果你還沒有,可以 免費建立一個。
  • 如果你已有 Foundry 專案,則需要在專案範圍內使用 Foundry Project Manager。 如果您需要建立新的 Foundry 專案,您需要資源群組範圍內的Owner角色。 完整角色矩陣請參見 Hosted Agent permissions reference。
  • Foundry 開發套件。 Foundry Dev Pack 安裝了 Azure Developer CLI(azd >= 1.27.1)以及此快速入門中使用的 Foundry 擴充功能。

  • 經過 azd 認證的會話:

    azd auth login
    
  • Python 3.13 或更高。

  • Foundry 開發套件。 The Foundry Dev Pack 會安裝 Azure CLI (az)。

  • 已驗證的 Azure CLI 工作階段:

    az login
    
  • 本次快速入門中使用的 Python SDK 套件:

    pip install "azure-ai-projects>=2.3.0" azure-identity python-dotenv
    
  • 具有已部署模型的現有 Foundry 專案。 這個快速入門中的 Python SDK 路徑會建立並路由一個託管代理版本,但它不會為你建立新的 Foundry 專案或建立模型部署。 如果你需要完整的配置工作流程,請使用本文中的 Azure 開發者 CLI 標籤。

  • .NET 10 SDK。

  • Foundry 開發套件。 The Foundry Dev Pack 會安裝 Azure CLI(az)。

  • 已通過驗證的 Azure CLI 工作階段:

    az login
    
  • 這個快速入門中使用的 .NET 套件。

    dotnet add package Azure.AI.Projects --version 2.1.0-beta.4
    dotnet add package Azure.Identity
    

    Note

    原始碼部署 API 目前可在 Azure.AI.Projects 的預先發行版本中使用。 穩定版 2.0.x 套件不包含這些 API。

  • 具有已部署模型的現有 Foundry 專案。 C# SDK 路徑會建立並路由託管代理版本,但不會建立 Foundry 專案或模型部署。 若要完整配置工作流程,請使用 Azure 開發者 CLI 標籤。

  • Visual Studio Code。
  • Foundry 開發套件。 Foundry Dev Pack 安裝了 Azure Developer CLI(azd)以及此快速入門中使用的 Microsoft Foundry Toolkit for VS Code 擴充套件。
  • 一個帶有 Microsoft Foundry 技能的程式代理主機。

  • Foundry 開發套件。 Foundry Dev Pack 安裝了 Azure CLI(az)、Azure Developer CLI(azd),以及本快速入門中使用的 Foundry 技能。

  • 已通過驗證的 Azure CLI 和 azd 工作階段:

    az login
    azd auth login
    

步驟 1:初始化樣品試劑

在空目錄中使用基本的 代理框架範例 來初始化一個新的託管代理:

azd ai agent init -m "https://github.com/microsoft-foundry/foundry-samples/blob/main/samples/python/hosted-agents/agent-framework/responses/01-basic/azure.yaml" --deploy-mode code

互動流程會提示您輸入以下內容:

  • 代理名稱:自訂名稱或接受 預設的 代理框架-代理-基本回應
  • Foundry Project:選擇建立新的 Foundry 專案或使用現有的 Foundry 專案
  • Tenant:選擇您的Azure租戶
  • 訂閱:選擇您的 Azure 訂閱
  • Location:選擇Azure區域
  • 型號:選擇預設的 gpt-5.4-mini,或你能存取的其他型號
  • 型號版本:選擇 預設 選項
  • 模型 SKU:選擇一個有可用配額且非批次的選項,通常是 Standard 或 GlobalStandard
  • 部署容量:選擇 預設值, 10
  • 部署名稱:選擇 預設, gpt-5.4-mini

完成後,你會看到 AI 代理定義成功加入你的 azd 專案! 將目錄改到新建立的代理資料夾。

cd agent-framework-agent-basic-responses

步驟 2:配置 Azure 資源

佈建於azure.yaml中定義的的資源:

azd provision

步驟三:在本地測試代理人

azd ai agent run

這個指令會建立虛擬環境,安裝相依關係,並透過 startupCommand 中的 azure.yaml定義啟動代理程式,並在瀏覽器中開啟代理檢查器,讓你能與代理程式聊天。

步驟 4:部署至 Foundry Agent Service

部署代理原始碼。 azd 將原始碼打包成 ZIP 檔並上傳到 Foundry。 Foundry 解決相依性,遠端建置託管代理並部署:

azd deploy

指令結束後,輸出會顯示指向代理遊樂場和代理端點的連結:

Deploying services (azd deploy)

  Done: Deploying service basic-agent
  - Agent playground (portal): https://ai.azure.com/.../build/agents/basic-agent/build?version=1
  - Agent endpoint: https://ai-account-<name>.services.ai.azure.com/api/projects/<project>/agents/basic-agent/versions/1

步驟五:啟動你的代理人

  1. 將相同的提示符傳送給已部署的代理:

    azd ai agent invoke "Write a haiku about deploying cloud applications."
    

    你應該會在幾秒內看到俳句回應。

  2. (可選)在與客服互動時,串流容器日誌:

    azd ai agent monitor --follow
    

步驟 1:創建或選擇 Foundry 專案

  1. 打開 Foundry 入口 網站並建立一個 Foundry 專案,或選擇現有專案。

  2. 在專案中,部署一個具備聊天功能的模型,例如 gpt-5.4-mini。

  3. 從入口網站複製這些數值:

    • 來自概觀的 專案端點。
    • 部署名稱來自 建置>部署。

步驟 2:下載 Basic 範例代理程式碼

複製 Foundry 範例存放庫。

git clone https://github.com/microsoft-foundry/foundry-samples.git

步驟 3:建立 Python 環境並設定設定

建立虛擬環境並安裝這個快速入門所需的 Python 套件。

針對 macOS 或 Linux:

python -m venv .venv
source .venv/bin/activate
pip install "azure-ai-projects>=2.3.0" azure-identity python-dotenv

適用於 Windows (PowerShell):

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install "azure-ai-projects>=2.3.0" azure-identity python-dotenv

建立一個部署腳本的工作資料夾,然後在該資料夾裡建立 .env 一個檔案:

FOUNDRY_PROJECT_ENDPOINT=<your-project-endpoint>
FOUNDRY_MODEL_NAME=<your-model-deployment-name>
FOUNDRY_HOSTED_AGENT_NAME=basic-agent
FOUNDRY_SAMPLE_PATH=<full-path-to-foundry-samples/samples/python/hosted-agents/agent-framework/responses/01-basic/src/agent-framework-agent-basic-responses>

步驟 4:用 Python 部署託管代理

在與 deploy_hosted_agent.py 相同的工作資料夾中建立一個名為 .env 的檔案,內容如下:

import os
import tempfile
import time
import zipfile
from pathlib import Path

from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
  AgentEndpointConfig,
  CodeConfiguration,
  CodeDependencyResolution,
  FixedRatioVersionSelectionRule,
  HostedAgentDefinition,
  ProtocolConfiguration,
  ProtocolVersionRecord,
  ResponsesProtocolConfiguration,
  VersionSelector,
)
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv

load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
model_name = os.environ["FOUNDRY_MODEL_NAME"]
agent_name = os.environ.get("FOUNDRY_HOSTED_AGENT_NAME", "basic-agent")
sample_path = Path(os.environ["FOUNDRY_SAMPLE_PATH"]).resolve()


def create_code_zip(source_dir: Path) -> Path:
  zip_path = Path(tempfile.gettempdir()) / f"{agent_name}.zip"
  excluded = {".git", ".venv", "__pycache__", ".env", "deploy_hosted_agent.py"}

  with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zip_file:
    for path in source_dir.rglob("*"):
      if not path.is_file():
        continue
      if any(part in excluded for part in path.parts):
        continue
      zip_file.write(path, path.relative_to(source_dir))

  return zip_path


def wait_for_active_version(project_client: AIProjectClient, version: str) -> None:
  for attempt in range(60):
    time.sleep(10)
    details = project_client.agents.get_version(
      agent_name=agent_name,
      agent_version=version,
    )
    status = details["status"]
    print(f"Provisioning status: {status} (attempt {attempt + 1}/60)")

    if status == "active":
      return

    if status == "failed":
      raise RuntimeError(f"Hosted agent provisioning failed: {dict(details)}")

  raise RuntimeError("Timed out waiting for the hosted agent version to become active.")


code_zip_path = create_code_zip(sample_path)

with (
  code_zip_path.open("rb") as code_stream,
  DefaultAzureCredential() as credential,
  AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
):
  original_agent_endpoint = None
  created = None

  try:
    created = project_client.agents.create_version_from_code(
      agent_name=agent_name,
      description="Basic hosted agent deployed from local Python source.",
      definition=HostedAgentDefinition(
        cpu="0.5",
        memory="1Gi",
        code_configuration=CodeConfiguration(
          runtime="python_3_14",
          entry_point=["python", "main.py"],
          dependency_resolution=CodeDependencyResolution.REMOTE_BUILD,
        ),
        environment_variables={
          "FOUNDRY_PROJECT_ENDPOINT": endpoint,
          "FOUNDRY_MODEL_NAME": model_name,
        },
        protocol_versions=[
          ProtocolVersionRecord(protocol="responses", version="2.0.0")
        ],
      ),
      code=code_stream,
    )

    print(f"Created hosted agent version {created.version}")

    wait_for_active_version(project_client, created.version)

    original_agent_endpoint = project_client.agents.get(
      agent_name=agent_name
    ).agent_endpoint
    project_client.agents.update_details(
      agent_name=agent_name,
      agent_endpoint=AgentEndpointConfig(
        version_selector=VersionSelector(
          version_selection_rules=[
            FixedRatioVersionSelectionRule(
              agent_version=created.version,
              traffic_percentage=100,
            ),
          ]
        ),
        protocol_configuration=ProtocolConfiguration(
          responses=ResponsesProtocolConfiguration()
        ),
      ),
    )

    print(f"Agent endpoint configured for version {created.version}")

    with project_client.get_openai_client(agent_name=agent_name) as openai_client:
      response = openai_client.responses.create(
        input="Write a haiku about deploying cloud applications.",
      )

    print(f"Agent response: {response.output_text}")
  finally:
    if original_agent_endpoint is not None:
      project_client.agents.update_details(
        agent_name=agent_name,
        agent_endpoint=original_agent_endpoint,
      )
      print("Agent endpoint restored")

    if created is not None:
      project_client.agents.delete_version(
        agent_name=agent_name,
        agent_version=created.version,
        force=True,
      )
      print(f"Deleted hosted agent version {created.version}")

執行腳本:

python deploy_hosted_agent.py

腳本會壓縮範例原始碼,上傳為新的主機代理版本,等待配置完成,暫時將託管代理端點路由到該版本,呼叫已部署的代理,然後還原先前端點設定並刪除臨時版本。

步驟五:啟動你的代理人

腳本完成後,請以以下任一方式使用託管代理:

  1. 編輯 deploy_hosted_agent.py 並更改 input 傳給 的 openai_client.responses.create(...)值,然後再執行腳本。
  2. 如果您想要持久路由版本而非臨時確認部署,請在檢閱流量路由影響後,調整指令碼以跳過還原和delete_version(...)步驟。
  3. 如果你直接依照範例指令碼原樣使用,該指令碼就已經會還原端點組態,並在驗證後刪除暫時的託管代理程式版本。
  4. 如果你為這個快速入門建立了專用的資源群組,當你不再需要專案或模型部署時,可以在 Azure 入口網站刪除該資源群組。

警告

刪除資源群組會永久移除其中的所有東西,包括 Foundry 專案、模型部署、容器登錄、應用程式洞察以及託管代理。

步驟 1:創建或選擇 Foundry 專案

  1. 打開 Foundry 入口 網站並建立一個 Foundry 專案,或選擇現有專案。

  2. 在專案中,部署一個具備聊天功能的模型,例如 gpt-5.4-mini。

  3. 從入口網站複製這些數值:

    • 來自概觀的 專案端點。
    • 部署名稱來自 建置>部署。

步驟 2:下載 C# hello-world agent

複製 Foundry 範例存放庫:

git clone https://github.com/microsoft-foundry/foundry-samples.git

代理程式來源位於 samples/csharp/hosted-agents/agent-framework/hello-world/src/hello-world-dotnet-agent-framework。

步驟 3:建立 C# 部署專案

建立一個主控台應用程式並安裝所需的套件:

dotnet new console --name HostedAgentDeployer
cd HostedAgentDeployer
dotnet add package Azure.AI.Projects --version 2.1.0-beta.4
dotnet add package Azure.Identity

設定部署應用程式所用的值。 在 PowerShell 中,執行:

$env:FOUNDRY_PROJECT_ENDPOINT = "<your-project-endpoint>"
$env:FOUNDRY_MODEL_NAME = "<your-model-deployment-name>"
$env:FOUNDRY_HOSTED_AGENT_NAME = "basic-agent"
$env:FOUNDRY_SAMPLE_PATH = "<full-path-to-hello-world-dotnet-agent-framework>"

macOS 或 Linux 請執行:

export FOUNDRY_PROJECT_ENDPOINT="<your-project-endpoint>"
export FOUNDRY_MODEL_NAME="<your-model-deployment-name>"
export FOUNDRY_HOSTED_AGENT_NAME="basic-agent"
export FOUNDRY_SAMPLE_PATH="<full-path-to-hello-world-dotnet-agent-framework>"

步驟 4:使用 C# 部署託管代理程式

請將 Program.cs 的內容替換成以下代碼。 .NET SDK 會打包並上傳原始碼目錄,所以你不需要自己建立 ZIP 壓縮檔。

using Azure.AI.Extensions.OpenAI;
using Azure.AI.Projects;
using Azure.AI.Projects.Agents;
using Azure.Identity;
using OpenAI.Responses;

#pragma warning disable AAIP001, OPENAI001

var projectEndpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")
  ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT isn't set.");
var modelName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL_NAME")
  ?? throw new InvalidOperationException("FOUNDRY_MODEL_NAME isn't set.");
var agentName = Environment.GetEnvironmentVariable("FOUNDRY_HOSTED_AGENT_NAME")
  ?? "basic-agent";
var samplePath = Environment.GetEnvironmentVariable("FOUNDRY_SAMPLE_PATH")
  ?? throw new InvalidOperationException("FOUNDRY_SAMPLE_PATH isn't set.");

AIProjectClient projectClient = new(
  endpoint: new Uri(projectEndpoint),
  tokenProvider: new DefaultAzureCredential());

HostedAgentDefinition definition = new(cpu: "0.5", memory: "1Gi")
{
  Versions =
  {
    new ProtocolVersionRecord(ProjectsAgentProtocol.Responses, "2.0.0")
  },
  CodeConfiguration = new(
    runtime: "dotnet_10",
    entryPoint: ["dotnet", "hello-world.dll"],
    dependencyResolution: CodeDependencyResolution.RemoteBuild),
};
definition.EnvironmentVariables.Add(
  "FOUNDRY_PROJECT_ENDPOINT", projectEndpoint);
definition.EnvironmentVariables.Add(
  "AZURE_AI_MODEL_DEPLOYMENT_NAME", modelName);

ProjectsAgentVersion? created = null;
AgentEndpointConfiguration? originalEndpoint = null;

try
{
  created = await projectClient.AgentAdministrationClient
    .CreateAgentVersionFromCodeAsync(
      agentName: agentName,
      filePath: samplePath,
      metadata: new AgentVersionFromCodeMetadata(definition));
  Console.WriteLine($"Created hosted agent version {created.Version}");

  for (var attempt = 1; attempt <= 60; attempt++)
  {
    await Task.Delay(TimeSpan.FromSeconds(10));
    created = await projectClient.AgentAdministrationClient
      .GetAgentVersionAsync(agentName, created.Version);
    Console.WriteLine(
      $"Provisioning status: {created.Status} (attempt {attempt}/60)");

    if (created.Status == AgentVersionStatus.Active)
    {
      break;
    }
    if (created.Status == AgentVersionStatus.Failed)
    {
      throw new InvalidOperationException("Hosted agent provisioning failed.");
    }
  }

  if (created.Status != AgentVersionStatus.Active)
  {
    throw new TimeoutException(
      "Timed out waiting for the hosted agent version to become active.");
  }

  ProjectsAgentRecord agent = await projectClient.AgentAdministrationClient
    .GetAgentAsync(agentName);
  originalEndpoint = agent.AgentEndpoint;

  AgentEndpointConfiguration endpoint = new()
  {
    VersionSelector = new(
      [new FixedRatioVersionSelectionRule(created.Version, 100)]),
    ProtocolConfiguration = new()
    {
      Responses = new ResponsesProtocolConfiguration()
    }
  };
  await projectClient.AgentAdministrationClient.PatchAgentAsync(
    agentName,
    new PatchAgentOptions { AgentEndpoint = endpoint });
  Console.WriteLine($"Agent endpoint configured for version {created.Version}");

  ProjectResponsesClient responsesClient = projectClient.ProjectOpenAIClient
    .GetProjectResponsesClientForAgentEndpoint(agentName);
  ResponseResult response = await responsesClient.CreateResponseAsync(
    "Write a haiku about deploying cloud applications.");
  Console.WriteLine($"Agent response: {response.GetOutputText()}");
}
finally
{
  if (originalEndpoint is not null)
  {
    await projectClient.AgentAdministrationClient.PatchAgentAsync(
      agentName,
      new PatchAgentOptions { AgentEndpoint = originalEndpoint });
    Console.WriteLine("Agent endpoint restored");
  }

  if (created is not null)
  {
    await projectClient.AgentAdministrationClient.DeleteAgentVersionAsync(
      agentName,
      created.Version,
      force: true);
    Console.WriteLine($"Deleted hosted agent version {created.Version}");
  }
}

程式碼遵循 Azure SDK for .NET 程式碼代理範例中的原始碼上傳與端點路由模式。

執行應用程式:

dotnet run

應用程式上傳 C# 代理原始碼,等待配置,將代理端點路由到新版本,發送提示符,還原先前路由,並刪除臨時版本。

步驟五:啟動你的代理人

應用程式完成後,請以以下任一方式使用託管代理:

  1. 在 Program.cs中,將傳達的提示改為 CreateResponseAsync,然後再次執行 dotnet run 。
  2. 若要保留已路由的版本,請在檢閱流量路由的影響後,移除端點還原作業及DeleteAgentVersionAsync呼叫。
  3. 如果你照原版使用 C# 應用程式,它會在驗證後還原端點設定並刪除臨時的託管代理版本。
  4. 如果你為這個快速啟動建立了專用的資源群組,當你不再需要專案或模型部署時,請從 Azure 入口網站刪除該資源群組。

警告

刪除資源群組會永久移除其中的所有東西,包括 Foundry 專案、模型部署、容器登錄、應用程式洞察以及託管代理。

步驟一:建立鑄造廠專案

  1. 開啟指令面板(Ctrl+Shift+P),選擇 Foundry 工具包:建立 Project。
  2. 選擇您的 Azure 訂閱。
  3. 建立新的資源群組或選擇現有的。
  4. 請輸入鑄造廠專案的名稱。

步驟二:部署模型

  1. 打開指令面板,選擇 Foundry 工具包:Open Model Catalog。
  2. 搜尋 gpt-4.1 並選擇 部署。
  3. 在模型部署頁面,選擇 Deploy to Microsoft Foundry。

步驟 3:建立託管代理專案

  1. 打開指令面板,選擇 Foundry 工具包:建立新的託管代理。
  2. 選擇 Python 作為語言。
  3. 在 框架 中,選取 代理程式框架。
  4. 選擇 回應 API 作為協定類型。
  5. 選擇 Basic 作為範例程式碼。
  6. 選取下一步按鈕。
  7. 選擇一個資料夾來存放專案檔案,並輸入代理檔的名稱。
  8. 關於環境設定,請選擇使用 Microsoft Foundry 設定。 內容會自動填充你在步驟 1 和 2 中建立的專案和模型。
  9. 選擇 「建立 」按鈕。

系統會開啟一個新的 VS Code 視窗,並將該專案設為作用中的工作區。

步驟 4:安裝依賴項目

建立虛擬環境並安裝相關需求。

針對 macOS 或 Linux:

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

適用於 Windows (PowerShell):

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt

步驟五:在本地測試代理人

按 F5 啟動本地 HTTP 伺服器並啟用除錯。 Foundry Toolkit Agent Inspector 會開啟互動式測試,你可以在程式碼中設定斷點。

要在不除錯的情況下執行伺服器:

python main.py

Agent 在 http://localhost:8088/ 上監聽。 發送帶有 curl(或任何 HTTP 用戶端)的測試提示:

curl -sS -H "Content-Type: application/json" -X POST http://localhost:8088/responses \
    -d '{"input": "Write a haiku about deploying cloud applications.", "stream": false}'

步驟 6:部署至 Foundry 代理服務

  1. 打開指令面板並選擇 Foundry 工具包:部署託管代理程式。 部署網頁檢視會開啟。
  2. 在 部署方法 中,選擇 程式碼。
  3. 選擇 遠端 作為套件模式。
  4. 代理人名稱會自動填入。
  5. 選取下一步按鈕。
  6. 檢視與部署頁面會自動填入。
  7. 選取 [部署] 按鈕。

部署結束後,Agent 會出現在 Foundry 工具組總管中裝載 Agent 底下。

步驟七:召喚你的代理人

  1. 在 Foundry 工具組總管中,展開裝載 Agent,然後選取您的 Agent。 詳細頁面會在 Deployment Details 下方顯示狀態。
  2. 選擇 Playground 標籤,並發送測試提示,例如 Write a haiku about deploying cloud applications.。

Microsoft Foundry Canvas 會引導你從 GitHub Copilot App 的側面板建立並部署託管代理程式。 當你在畫布中做出選擇時,它會將每個步驟傳給 Copilot,並附上你 Foundry 專案的相關上下文。

步驟一:打開畫布

  1. 在 GitHub Copilot 應用程式中,提示 Copilot 建立一個 Foundry 託管代理。 例如:

    Create a Foundry hosted agent using Microsoft Foundry Canvas
    
  2. 畫布會在右側面板中開啟。 如果它不能自動開啟,就從右邊的面板打開。

Microsoft Foundry Canvas 的截圖顯示於 GitHub Copilot 應用程式右側面板開啟。畫布顯示三個階段:建立新的託管代理、建置現有託管代理,以及部署與測試。Create 階段擴展了 Inspire me、Help me decide 和 Hello world 選項,位於 Copilot 對話旁邊。

畫布會帶你走過三個階段,對應以下步驟:

  • 建立一個託管代理人。 選擇你的 Foundry 專案,告訴 Copilot 你想做什麼。 你可以從預先寫好的提示開始,加快進度。
  • 建立託管代理程式。 從 Foundry 專案中的資源中,為您的經紀人選擇模型、工具箱、技能與護欄。
  • 部署並測試。 在本地測試代理程式,滿意後再部署到 Foundry 代理服務。

步驟二:連結鑄造廠專案

  1. 如果有提示,打開畫布專案選單並登入 Azure。
  2. 選取訂閱。
  3. 選擇鑄造廠專案。 重新開啟畫布時,畫布會保留這個選擇。

步驟三:為代理人搭建支架

選擇如何開始:

  • 選取 給我靈感,根據產生的構想建立託管代理程式的基本架構。
  • 選擇 Hello world 範例提示詞,從基本代理開始。

Copilot 會根據你的選擇,在你的工作區中架設代理代碼。

步驟 4:設定 Agent 設定檔

在這個階段,你會將代理人連接到 Foundry 專案中的資源。 每個選擇都會向 Copilot 發送一個提示,讓它自動更新代理代碼和設定:

  1. 選擇一個已部署的模型來驅動代理的推理。
  2. 連接 Foundry 工具箱 及其工具,賦予代理程式功能,例如呼叫 API 或執行程式碼。
  3. 連結那些能將邏輯包裝成可重複使用的 技能 ,讓代理使用。
  4. 指定 護欄 以實施安全與內容控制。

步驟五:在本地測試代理人

  1. 選擇「 本地檢查」。 畫布會在 Copilot 整合式終端機中執行azd ai agent run、於連接埠8088等待 Agent,並嵌入 Agent 檢查器。

  2. 發送一個測試提示,例如:

    Write a haiku about deploying cloud applications.
    
  3. 如果檢查員回報錯誤,將錯誤訊息複製到 canvas 提示區,請 Copilot 修正問題。

步驟 6:部署至 Foundry 代理服務

  1. 選擇 部署到鑄造廠。 Canvas 使用 azd 和 Copilot 來部署你的託管代理。
  2. 部署結束後,利用輸出中的連結在 Foundry 入口開啟代理遊樂場。

步驟 1:使用鑄造技能開啟工作區

在你的 coding agent 主機中開啟一個空資料夾,例如 Visual Studio Code 中的 GitHub Copilot、Copilot CLI 或 Claude Code。 在請程式代理建立 Azure 資源之前,先確認該microsoft-foundry技能是否可用。

如果無法使用該技能,請參閱在程式碼代理程式中使用 Microsoft Foundry 技能。

步驟 2:要求技能建立代管代理程式

請你的程式代理使用這項技能來完成完整的託管代理工作流程:

Use the Microsoft Foundry Skill hosted-agent quick-start workflow to create my
first hosted agent end to end. Verify my environment first, and stop if I need
to sign in myself. Use Python 3.13, Agent Framework, the Responses API, the
Basic sample, and code deployment. Create a new Foundry project unless I provide
an existing project. Use the model deployment from the Basic sample unless I
provide an existing deployment. Test the agent locally, deploy it to Foundry
Agent Service, and invoke it with: "Write a haiku about deploying cloud
applications."

當 MCP 工具可用時,編碼代理應檢查可用的 Foundry 工具,載入託管代理的快速啟動工作流程,並要求或預設缺少的值,如訂閱、區域、專案名稱,以及是否使用現有的 Foundry 專案。

步驟三:審查並核准計畫

  1. 檢視程式、檔案、指令、Azure 資源及程式代理所提議的角色分配。
  2. 要匹配這個快速入門,請選擇 Python 3.13、Agent Framework、Responses API、Basic 範例程式碼和 Code 部署。
  3. 只有在驗證訂閱、區域、資源群組、模型部署及配額後,才批准有成本的資源建立。
  4. 如果程式代理要求你驗證,自己執行az loginazd auth login,然後請程式代理繼續。

步驟 4:讓技能建立架構並測試代理程式

讓編碼代理建立託管代理專案,當你選擇新的 Foundry 專案時配置資源,撰寫本地環境值,準備本地環境,並執行本地煙霧測試。 對於 Python 代理程式,技能工作流程會在首次本機執行期間使用 azd ai agent run 安裝相依性。

工作流程也應該加入程式代理主機所需的專案指引檔案,並在本地測試前檢查已產生的專案設定是否合理。

如果你的程式代理主機無法讓本地伺服器持續運作進行煙霧測試,請使用本文中的 Azure 開發者 CLI 標籤來執行本地測試指令。 只有在你決定改為遠端驗證代理程式後,才能繼續進行部署。

步驟 5:部署並呼叫託管代理

本地煙霧測試成功後,請你的程式代理完成部署與遠端驗證:

Continue with the Microsoft Foundry Skill workflow. Deploy the hosted agent to
Foundry Agent Service, show the deployment status and playground link, and invoke
it remotely with: "Write a haiku about deploying cloud applications." If the
skill workflow requires evaluation suite generation before the final summary,
submit the generation job and show me the follow-up eval command.

當工作流程完成時,編碼代理應該顯示託管代理名稱、版本、部署狀態、端點、遊樂場連結、已建立的資源、對測試提示字元的回應,以及任何評估後續指令。

清理資源

完成後刪除資源,這樣就不會再被收費了。

警告

如果目前 azd 環境建立了 Foundry 專案, azd down 則會永久刪除該專案的資源群組及所有相關資料。 如果你在初始化時選擇了現有專案,則保留 azd down 該專案、其資源群組、託管代理程式及其他快速啟動資源。 要刪除現有專案中不再需要的資源,請分別刪除。

azd down

當環境建立專案時,會 azd 列出資源、提示確認,並在大約 2-5 分鐘內刪除。

  1. 打開 Azure 入口網站,前往包含你代理程式的資源群組。
  2. 選擇 刪除資源群組,輸入資源群組名稱以確認,然後選擇 刪除。

警告

刪除資源群組會永久移除其中所有東西,包括 Foundry 專案、容器登錄檔、應用程式洞察以及託管代理。

畫布會建立一個以azd支援的工作區,因此您可以從工作區資料夾使用azd down進行清理。

警告

如果目前 azd 環境建立了 Foundry 專案, azd down 則會永久刪除該專案的資源群組及所有相關資料。 如果你在初始化時選擇了現有專案,則保留 azd down 該專案、其資源群組、託管代理程式及其他快速啟動資源。 要刪除現有專案中不再需要的資源,請分別刪除。

azd down

當環境建立專案時,會 azd 列出資源、提示確認,並在大約 2-5 分鐘內刪除。

Microsoft Foundry 技能本身不會刪除資源。 它能幫助你的編碼人員辨識這個快速入門所產生的資源,並選擇合適的清理方法。 你或你的程式代理在審核並核准後,仍會執行清理指令。

  1. 在託管代理專案資料夾中,請你的程式代理檢視清理內容:

    Use the Microsoft Foundry Skill to identify the Azure resources created for
    this quickstart. Confirm whether azd down is the right cleanup method for
    this project, and show me the resources before any deletion command runs.
    
  2. 如果託管代理專案是用 BY azd 建立,且資源群組只包含快速啟動資源,請執行:

    azd down
    
  3. 只有在確認指令列出的資源群組和資源後,才會核准刪除。

如果你的程式代理程式無法執行清理指令,請使用本文中的 Azure 開發者 CLI 標籤,或從 Azure 入口網站刪除資源群組。

故障排除

問題 解法
SubscriptionNotRegistered 註冊服務提供者:az provider register --namespace Microsoft.CognitiveServices。
AuthorizationFailed 配置期間 請申請訂閱或資源群組的 貢獻 者角色。
AuthenticationError 或 DefaultAzureCredential 失敗 要刷新憑證,執行 azd auth logout ,然後 azd auth login。
ResourceNotFound 或 DeploymentNotFound 請在 Foundry 入口網站的 「建置>部署」中確認端點 URL 與模型部署名稱。
create_version_from_code 失敗並顯示 Hosted agent provisioning failed 確認 main.py 和 requirements.txt 位於你上傳的 ZIP 檔根目錄,並確認 .env 中的模型部署名稱存在於目標 Foundry 專案中。
Connection refused 在本機執行時 確保沒有其他程序使用 8088 埠。
azd ai agent init 失敗 執行 azd version 以確認版本為 1.27.1 或更新版本。 更新為 winget upgrade Microsoft.Azd(Windows)或 brew upgrade azd(macOS)。 執行 azd ext show azure.ai.agents 以驗證 1.0.0-beta.4 或更新版本。 使用 azd ext upgrade azure.ai.agents 升級。
找不到 Microsoft Foundry Toolkit 擴充功能 從市集安裝 Microsoft Foundry Toolkit for Visual Studio Code,並切換到預發布頻道。
Coding Agent 無法載入 Microsoft Foundry Skill 請依照 在程式碼代理中使用 Microsoft Foundry Skill 安裝或重新載入該技能。
程式碼代理程式無法執行本機煙霧測試 請使用本文中的 Azure Developer CLI 或 VS Code 標籤來進行本地測試。 只有在檢視為何無法提供本地驗證後,才繼續遠端驗證。
Windows ARM64 的本地執行會失敗,建置錯誤包括 aiohttp、grpcio、cryptography 或 httptools 這些套件不會公開預先編譯的 arm64 輪組,且原始碼編譯需要 Microsoft C++ 建置工具。 作為權宜作法,請跳過步驟 3,並透過遠端方式使用 azd deploy,再接著使用 azd ai agent invoke 來驗證代理程式。

完整權限與角色指派矩陣,請參見 Hosted agent permissions 參考。

你學到了什麼

在這個快速入門指南中,您:

  • 根據 Basic 代理樣本搭建了一個託管代理專案。
  • 使用 Python 或 C# SDK 上傳並設定託管代理程式版本的路由,或使用 Azure Developer CLI 建立範例骨架。
  • 在當地測試了該藥劑。
  • 已將代理程式部署至 Foundry Agent Service。
  • 從 Python 或 C# SDK、Azure Developer CLI、VS Code、Foundry 畫布,或使用 Microsoft Foundry 技能的程式代理程式發送測試提示。

後續步驟