Een gehoste agent implementeren

In dit artikel leest u hoe u een containeragent implementeert in Foundry Agent Service met behulp van de Azure Developer CLI (azd), de Python SDK of de REST API. Kies een implementatiemethode met behulp van de selector bovenaan het artikel. Gebruik de SDK- of REST-benaderingen wanneer u agentimplementaties rechtstreeks vanuit uw eigen toepassingen of services wilt beheren.

Als u voor het eerst implementeert of een stapsgewijze uitleg wilt, raadpleeg dan de Quickstart: Een gehoste agent maken en implementeren. De Azure Developer CLI (azd) en VS Code-extensie verwerken het bouwen, pushen, versiebeheer en RBAC-configuratie automatisch.

Tip

Geeft u de voorkeur aan een Docker-less binnenlus? U kunt ook rechtstreeks vanuit broncode een gehoste agent implementeren: upload een .zip van uw Python of .NET code en het platform bouwt en host deze voor u.

Als u een coderingsagent zoals GitHub Copilot gebruikt, kan de Microsoft Foundry Skill u helpen bij het plannen van de containerimplementatiestroom, het voorbereiden azd van opdrachten en het verbinden van de SDK of REST-stappen met uw project.

Levenscyclus van implementatie

Elke gehoste agentimplementatie volgt deze reeks:

  1. Bouwen en pushen - Verpak je agentcode in een containerimage en push deze naar Azure Container Registry.
  2. Agentversie maken - Registreer de image bij de Foundry Agent Service. Het platform richt infrastructuur in en maakt een toegewezen Entra-agentidentiteit.
  3. Peiling naar status : wacht tot de versiestatus is bereikt active.
  4. Aanroepen: aanvragen verzenden naar het toegewezen eindpunt van de agent.

Voorwaarden

Vereiste machtigingen

U hebt de rol Foundry Project Manager op projectniveau nodig om een gehoste agent uit te rollen. Deze rol verleent machtigingen voor het gegevensvlak om agenten te maken en bij te werken, en, indien nodig, de mogelijkheid om roltoewijzingen te maken voor de door het platform gemaakte agent-id. Zie De referentie voor gehoste agentmachtigingen voor een gedetailleerde uitsplitsing van de betrokken machtigingen.

Belangrijk

De rollen Foundry RBAC zijn onlangs hernoemd. Foundry User, Foundry Owner, Foundry Account Owner en Foundry Project Manager zijn eerder benoemd Azure AI-gebruiker, Azure AI-eigenaar Azure AI-accounteigenaar en Azure AI Project Manager. Het kan zijn dat u op sommige plekken nog steeds de vorige namen ziet terwijl de naamswijziging wordt doorgevoerd. De rol-id's en basismachtigingen worden niet gewijzigd door de naamswijziging.

Het platform maakt een toegewezen Microsoft Entra agentidentiteit voor elke gehoste agent tijdens de implementatie. Deze identiteit is een service-principal die door uw actieve container wordt gebruikt om modellen en tools aan te roepen. U hoeft beheerde identiteiten niet handmatig te configureren. De agentidentiteit heeft standaard toegang tot modeldeductie via het projecteindpunt en de sessieopslag. Wijs voor externe resources (bijvoorbeeld uw eigen Azure Storage) RBAC-rollen handmatig toe aan de Microsoft Entra ID van de agent. Zie Agent-toegang buiten de standaardinstellingen voor meer informatie.

Als u azd of de VS Code-extensie gebruikt, handelt de tooling de meeste RBAC-toewijzingen automatisch af, inclusief Container Registry Repository Reader voor de door het project beheerde identiteit (image-pulls).

Zie Verificatie en autorisatie voor meer informatie.

Belangrijk

Ondersteuning voor het plaatsen van de Azure Container Registry van uw gehoste agent achter een privénetwerk (privé-eindpunt waarvoor openbare netwerktoegang is uitgeschakeld) is afhankelijk van wanneer het Foundry-project is gemaakt. Projecten die zijn gemaakt na 25 juni 2026 ondersteunen een privéregister. Projecten die vóór die datum zijn gemaakt, vereisen dat de registry bereikbaar is via het publieke eindpunt, zodat het platform de image kan ophalen. Bestaande projecten worden niet beïnvloed. Zie Beperkingen voor de volledige lijst met netwerkbeperkingen.

Containervereisten

Uw containerimage moet aan de volgende vereisten voldoen om te kunnen worden uitgevoerd op het Hosted-agentplatform.

Belangrijk

Voor het hostingplatform zijn x86_64 containerinstallatiekopieën (linux/amd64) vereist. Als u bouwt op Apple Silicon of andere ARM-gebaseerde machines, gebruik docker build --platform linux/amd64 . om te voorkomen dat een incompatibele ARM-afbeelding wordt geproduceerd.

Protocolbibliotheken

Gehoste agents communiceren met de Foundry-gateway via protocolbibliotheken. Kies het protocol dat overeenkomt met het interactiepatroon van uw agent:

Protocol bibliotheek voor Python .NET-bibliotheek Eindpunt Het beste voor
Reacties azure-ai-agentserver-responses Azure.AI.AgentServer.Responses /responses Conversationele chatbots, streaming, multi-turn met door platform beheerde geschiedenis
Aanroepen azure-ai-agentserver-invocations Azure.AI.AgentServer.Invocations /invocations Webhookontvangers, niet-gespreksverwerking, aangepaste asynchrone werkstromen
Aanroepen (WebSocket) azure-ai-agentserver-invocations Azure.AI.AgentServer.Invocations /invocations_ws Bidirectionele streaming: real-time spraakagenten, interactieve media

Het WebSocket-protocol gebruikt de id invocations_ws en wordt geleverd in hetzelfde azure-ai-agentserver-invocations pakket als de HTTP-route /invocations , zodat één container beide kan verwerken. Gebruik deze wanneer u permanente full-duplex streaming nodig hebt, bijvoorbeeld het verzenden van microfoon PCM naar de agent en het ontvangen van gesynthetiseerde audio. Zie Een spraakagent bouwen met gehoste agents voor spraakscenario's.

Eén container kan meerdere protocollen tegelijk beschikbaar maken door deze te declareren wanneer u de agent maakt, in het protocols veld van de azure.ai.agent service in azure.yaml, een SDK-aanroep of een REST API-aanvraag, en de vereiste bibliotheken importeert. Gebruik de protocolbibliotheken binnen uw bestaande framework, of dat nu Microsoft Agent Framework, LangChain of aangepaste code is.

Protocolbibliotheek voor antwoorden

De Python- en .NET-bibliotheken voor het protocol Antwoorden implementeren de API voor Azure AI-antwoorden. Importeer het pakket en implementeer een antwoordhandler. De bibliotheek verwerkt routering, streaming met door de server verzonden gebeurtenissen (SSE), uitvoering op de achtergrond, annulering, caching en levenscyclusbeheer van reacties.

Een handler implementeren

De handler is de kernabstractie die u implementeert. De bibliotheek roept deze aan voor elke binnenkomende aanvraag en levert de geretourneerde gebeurtenissen aan clients via SSE. In Python versiert u een asynchrone functie met@app.response_handler:

from azure.ai.agentserver.responses import (
    CreateResponse,
    ResponseContext,
    ResponsesAgentServerHost,
    TextResponse,
)

app = ResponsesAgentServerHost()


@app.response_handler
async def handler(
    request: CreateResponse,
    context: ResponseContext,
    _cancellation_signal,
):
    user_input = await context.get_input_text() or ""
    return TextResponse(context, request, text=f"Echo: {user_input}")

Automatisch beheer van gebeurtenissen en levenscyclus

De bibliotheek beheert de gebeurtenisreeks( volgnummers, uitvoer- en inhoudsindexen en item-id's) en de volledige levenscyclus van reacties automatisch, zodat u deze status niet zelf bijhoudt. Elke gebeurtenis die door uw handler wordt geproduceerd, komt een-op-een overeen met een SSE-gebeurtenis, die door het hostframework voor u wordt beheerd.

Streaming- en achtergrondmodi

  • Streamingmodus (standaard): SSE-gebeurtenissen worden in realtime geleverd aan de verbonden client.
  • Achtergrondmodus: de handler wordt uitgevoerd tot voltooiing zonder een verbonden SSE-client. Gebeurtenissen worden gebufferd en zijn beschikbaar voor opnieuw afspelen via GET /responses/{id}.

Levenscyclus van reactie

De bibliotheek organiseert de volledige levenscyclus van het antwoord: created - ->in_progress>completed (of).failedcancelled De bibliotheek beheert ook automatisch annulerings-, foutafhandelings- en terminal gebeurtenisgaranties.

Schroefdraadveiligheid

Handler-instanties zijn beperkt tot één aanvraag, zodat aanvraaggebonden status niet tussen aanvragen lekt. De bibliotheek verwerkt gelijktijdige aanvragen veilig.

Zie de Python bring-your-own-voorbeelden voor uitvoerbare voorbeelden.

Gezondheidseindpunten

De protocolbibliotheken maken automatisch een /readiness eindpunt beschikbaar voor platformstatuscontroles. U hoeft dit zelf niet te implementeren.

Poort

Containers bedienen lokaal verkeer op poort 8088. In een productieomgeving verzorgt de Foundry-gateway de routering - uw container hoeft geen openbare poort bloot te stellen.

Door platform geïnjecteerde omgevingsvariabelen

Het gehoste agentplatform injecteert automatisch omgevingsvariabelen in uw container tijdens runtime. Uw code kan deze variabelen lezen zonder ze te declareren in de env kaart van de azure.ai.agent service in azure.yaml of in de instellingen voor SDK- en REST-omgevingsvariabelen. Het FOUNDRY_* voorvoegsel is gereserveerd voor platformgebruik.

Variabele Purpose
FOUNDRY_PROJECT_ENDPOINT Eindpunt-URL van Foundry-project
FOUNDRY_PROJECT_ARM_ID ARM-resource-ID voor foundry-project
FOUNDRY_AGENT_NAME Naam van de actieve agent
FOUNDRY_AGENT_VERSION Versie van de uitvoerende agent
FOUNDRY_AGENT_SESSION_ID Sessie-id voor de huidige aanvraag (alleen gehoste containers)
APPLICATIONINSIGHTS_CONNECTION_STRING Application Insights-verbindingstekenreeks voor telemetrie

Declareer geen door het platform geïnjecteerde variabelen azure.yaml opnieuw. Ze worden automatisch ingesteld.

Variabelen die u zelf definieert, zoals MODEL_DEPLOYMENT_NAME of toolbox-MCP-eindpunten, komen in de env-map van de azure.ai.agent-service in azure.yaml of de SDK-aanroep create_version.

Belangrijk

Wanneer u uw gehoste agent implementeert in Foundry Agent Service, injecteert het platform automatisch een Application Insights-verbindingsreeks in uw agentcontainer als omgevingsvariabele, waardoor OpenTelemetry-tracering standaard wordt ingeschakeld. Als u gedistribueerde traceringen, aanvragen en afhankelijkheden wilt weergeven, opent u de Application Insights-resource die is ingericht tijdens de installatie in de Azure-portal en gaat u naar Transaction Search of Performance onderzoeken>. Gebruik azd ai agent monitor voor live consolelogboeken. Wanneer AppInsights is ingeschakeld, registreert dit project traceringen om interacties op gebruikersniveau met agents te bewaken en te evalueren. Project leden met de rol van Log Analytics Lezer in AppInsights kunnen traceringsgegevens bekijken, die mogelijk persoonlijke gegevens en/of klantinhoud bevatten. Als de onderliggende Log Analytics tabellen zijn beveiligd, hebben leden in plaats daarvan de rol Privileged Monitoring Data Reader nodig om die traceringsgegevens weer te geven. Controleer welke traceringsgegevens worden verzameld en wie deze gegevens kan bekijken en gebruiken. Er kunnen aanvullende prijzen voor Azure Monitor App Insights van toepassing zijn. Meer informatie.

Referentieprojectverbindingen in omgevingsvariabelen

In plaats van geheimen (API-sleutels, tokens, eindpunten) hard te coderen in azure.yaml of uw image, haalt u deze bij het starten van de sandbox op uit een Foundry-projectverbinding. Elke waarde die u declareert als een omgevingsvariabele, kan een tijdelijke aanduiding zijn die door het platform wordt omgezet voordat de container wordt gestart.

Plaatshoudersyntaxis

Een plaatsaanduiding heeft de vorm ${{connections.<name>.<path>}}, waarbij <name> de resourcenaam van de verbinding is (zichtbaar in het portal onder Beheren>Project details>Verbonden bronnen) en <path> een van de volgende opties is:

Pad Wordt omgezet in
credentials.<field> Een geheim veld voor de verbinding
target De target eigenschap van de verbinding (bijvoorbeeld een eindpunt-URL)
metadata.<field> Een veld onder de verbinding metadata

De te gebruiken veldnaam is afhankelijk van de verbindingscategorie:

Verbindingscategorie Veldnaam in tijdelijke aanduiding
ApiKey, AppInsights Altijd key, bijvoorbeeld credentials.key
CustomKeys De sleutelnaam die u hebt opgegeven bij het maken van de verbinding, bijvoorbeeld credentials.github_token

Voorbeeld

Maak eerst een CustomKeys verbinding op het project dat het geheim bevat. Zie Een nieuwe verbinding toevoegen in Microsoft Foundry. Vervolgens verwijst u ernaar vanuit de env kaart in de azure.ai.agent service in azure.yaml:

services:
  my-agent:
    host: azure.ai.agent
    env:
      MODEL_DEPLOYMENT_NAME: gpt-5-mini
      GITHUB_TOKEN: ${{connections.agent-secrets.credentials.github_token}}

Bij het starten van de sandbox lost Foundry de placeholder op en injecteert het de opgeloste waarde als een gewone omgevingsvariabele. Uw code leest deze net als elke andere omgevingsvariabele:

import os
token = os.environ["GITHUB_TOKEN"]

Een GET op de agentversie retourneert de letterlijke ${{...}} tekst. Het opgeloste geheim wordt nooit herhaald via de beheer-API.

Considerations

  • Maak de verbinding voordat u de versie implementeert. Als de verbinding of het veld waarnaar wordt verwezen ontbreekt bij het starten van de sandbox, wordt de placeholder niet opgelost en is de variabele leeg.
  • Geheimen zijn alleen schrijfbaar. GET op een verbinding retourneert credentials: null. Controleer de resolutie door de env var vanuit de actieve container te lezen, niet door de verbinding te inspecteren.
  • Registreer zelf CustomKeys veldnamen. De beheer-API herhaalt ze nooit meer na het maken. Bewaar ze naast de broncode van uw agent (bijvoorbeeld in IaC-sjablonen of naast azure.yaml), zodat u later placeholders kunt opbouwen zonder te hoeven gissen.
  • Foundry beheert de naam van het onderliggende geheim. Wanneer u de verbinding maakt, slaat Foundry de waarde op in Key Vault onder een naam die wordt gekozen. U kunt niet verwijzen naar een vooraf bestaande Key Vault geheim op naam. Zie Een Key Vault-verbinding instellen als u uw eigen Key Vault als onderliggende opslag wilt gebruiken.

Uw agent lokaal verpakken en testen

Voordat u implementeert in Foundry, controleert u of uw agent lokaal werkt met behulp van de protocolbibliotheek. De container biedt lokaal dezelfde eindpunten als in de productieomgeving.

Het antwoordprotocol testen

POST http://localhost:8088/responses
Content-Type: application/json

{
    "input": "Where is Seattle?",
    "stream": false
}

Het protocol voor aanroepingen testen

POST http://localhost:8088/invocations
Content-Type: application/json

{
    "message": "Hello!"
}

Implementeren met behulp van de Azure Developer CLI of VS Code

De Azure Developer CLI (azd) en de Microsoft Foundry Toolkit voor Visual Studio Code de volledige levenscyclus van de implementatie automatiseren: de container bouwen, naar Azure Container Registry pushen, de agentversie maken en RBAC-rollen toewijzen. Zie de quickstart: Een gehoste agent maken en implementeren voor een stapsgewijze handleiding voor de eerste keer.

Implementeren met één opdracht

Richt vanuit uw agentprojectmap de infrastructuur in en implementeer deze in één stap:

azd up

azd up combineert azd provision, waarmee het Foundry-project, modelimplementatie, containerregister, Application Insights en beheerde identiteit wordt gemaakt, met azd deploy. Gebruik deze voor de eerste implementaties of wanneer u zowel infrastructuur- als agentcode wijzigt.

Alleen codewijzigingen implementeren

Als u uw Azure resources al hebt ingericht en u alleen een nieuwe agentversie hoeft te pushen:

azd deploy

Tijdens azd deploy voert de CLI het volgende uit:

  1. Bouwt uw containerimages extern in Azure Container Registry, zodat u Docker niet lokaal nodig hebt.
  2. Pusht de image naar de registry.
  3. Hiermee maakt u een gehoste agentversie op Foundry Agent Service.
  4. Hiermee maakt u een toegewezen Microsoft Entra agentidentiteit en wijst u de RBAC-rollen toe die de agent nodig heeft voor toegang tot modellen en hulpprogramma's.

Versies beheren

Elk azd deploy maakt een nieuwe versie van de agent. De CLI behoudt eerdere versies en de nieuwste versie is standaard actief.

De implementatie controleren

azd ai agent show

De uitvoer bevat de agentnaam, versie, protocollen, containerbronnen, omgevingsvariabelen en aanmaaktijdstempel. Gebruiken --output table voor een overzichtsweergave.

Images lokaal bouwen

Standaard bouwt azd containerimages op afstand in Azure Container Registry. Als u lokaal images wilt bouwen, stelt u remoteBuild: false in in azure.yaml. Voor lokale builds is Docker Desktop vereist.

Als u vragen en antwoorden wilt screenen op basis van een beleid voor inhoudsveiligheid, voegt u een veiligheidsbeschermingsrail voor inhoud toe aan uw agent.

Implementeren met behulp van de Python SDK

Gebruik de SDK wanneer u agentimplementaties rechtstreeks vanuit Python code wilt beheren.

Aanvullende vereisten

  • Python 3.10 of hoger

  • Een containerimage in Azure Container Registry

  • De rol van Container Registry Repository Writer of AcrPush in het containerregister (om afbeeldingen te pushen)

  • Azure AI Projects SDK versie 2.3.0 of hoger

    pip install "azure-ai-projects>=2.3.0"
    

Uw containerinstallatiekopieën bouwen en pushen

  1. Bouw uw Docker-image:

    docker build --platform linux/amd64 -t myagent:v1 .
    

    Zie voorbeeld-Dockerfiles voor Python en C#.

  2. Pushen naar Azure Container Registry:

    az acr login --name myregistry
    docker tag myagent:v1 myregistry.azurecr.io/myagent:v1
    docker push myregistry.azurecr.io/myagent:v1
    

Tip

Gebruik unieke afbeeldingstags in plaats van :latest voor reproduceerbare implementaties.

Containerregistermachtigingen configureren

Verleent de beheerde identiteit van uw project toegang tot het ophalen van afbeeldingen.

  1. Ga in de Azure-portal naar je Foundry-projectresource.

  2. Selecteer Identiteit en kopieer de object-id (principal) onder Toegewezen systeem.

  3. Wijs de rol Lezer van containerregisteropslagplaats toe aan deze identiteit in uw containerregister. Zie Azure Container Registry rollen en machtigingen.

Een gehoste agentversie maken

Wanneer u een versie maakt, richt het platform de agent automatisch in. Er is geen afzonderlijke beginstap. Het platform bouwt een momentopname van een container en maakt de agent gereed voor het verwerken van aanvragen.

from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
    AgentEndpointProtocol,
    ContainerConfiguration,
    HostedAgentDefinition,
    ProtocolVersionRecord,
)
from azure.identity import DefaultAzureCredential

# Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"

# Create project client
credential = DefaultAzureCredential()
project = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=credential,
)

# Create a hosted agent version
agent = project.agents.create_version(
    agent_name="my-agent",
    definition=HostedAgentDefinition(
        protocol_versions=[
            ProtocolVersionRecord(protocol=AgentEndpointProtocol.RESPONSES, version="1.0.0")
        ],
        cpu="1",
        memory="2Gi",
        container_configuration=ContainerConfiguration(
            image="your-registry.azurecr.io/your-image:tag"
        ),
        environment_variables={
            "MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
        },
    )
)

print(f"Agent created: {agent.name}, version: {agent.version}")

Als u beide protocollen beschikbaar wilt maken, geeft u beide door:protocol_versions

protocol_versions=[
    ProtocolVersionRecord(protocol=AgentEndpointProtocol.RESPONSES, version="1.0.0"),
    ProtocolVersionRecord(protocol=AgentEndpointProtocol.INVOCATIONS, version="1.0.0"),
    ProtocolVersionRecord(protocol=AgentEndpointProtocol.INVOCATIONS_WS, version="1.0.0"),
],

Belangrijkste parameters:

Parameter Beschrijving
agent_name Unieke naam (alfanumeriek met afbreekstreepjes, maximaal 63 tekens)
container_configuration.image Url van volledige Azure Container Registry afbeelding met tag
cpu CPU-toewijzing (bijvoorbeeld "1")
memory Geheugentoewijzing (bijvoorbeeld "2Gi")
protocol_versions Protocollen die de container beschikbaar maakt (responses, invocationsof beide)

Zie Sessie-inactiviteit beheren om in te stellen wanneer de rekenkracht van de sessie inactief wordt.

Poll voor versiestatus

Nadat u een versie hebt gemaakt, wacht u totdat de status active is voordat u de agent activeert. Het inrichten duurt doorgaans minder dan één minuut, afhankelijk van de grootte van de afbeelding.

import time

# Poll until the agent version is active
while True:
    version_info = project.agents.get_version(
        agent_name="my-agent",
        agent_version=agent.version
    )
    status = version_info["status"]
    print(f"Status: {status}")

    if status == "active":
        print("Agent is ready!")
        break
    elif status == "failed":
        print(f"Provisioning failed: {version_info['error']}")
        break

    time.sleep(5)

Versiestatuswaarden:

Status Beschrijving
creating De infrastructuur wordt momenteel ingericht
active Agent is klaar om aanvragen te verwerken
failed Provisioneren is mislukt - controleer het veld error voor meer informatie
deleting Versie wordt opgeschoond
deleted Versie is volledig verwijderd

De agent aanroepen

Nadat de versie de status active heeft bereikt, gebruikt u get_openai_client om een OpenAI-client te maken die is verbonden met het eindpunt van de agent.

Voor het protocol Antwoorden :

# Create an OpenAI client bound to the agent endpoint
openai_client = project.get_openai_client(agent_name="my-agent")

response = openai_client.responses.create(
    input="Hello! What can you do?",
)

print(response.output_text)

Voor het protocol Aanroepen roept u het eindpunt voor aanroepen rechtstreeks aan:

import requests

token = credential.get_token("https://ai.azure.com/.default").token
url = f"{PROJECT_ENDPOINT}/agents/my-agent/endpoint/protocols/invocations"

response = requests.post(url, headers={
    "Authorization": f"Bearer {token}",
    "Content-Type": "application/json",
}, params={"api-version": "v1"}, json={
    "message": "Process this task"
})

print(response.json())

Zie de voorbeelden van gehoste agents voor uitgebreidere voorbeelden.

Implementeren met behulp van de JavaScript/TypeScript SDK

Gebruik de SDK als u agentimplementaties rechtstreeks vanuit Node.js code wilt beheren. De SDK-aanroeper wordt uitgevoerd in Node.js, maar de containerinstallatiekopie zelf voert nog steeds uw Python- of .NET agentcode uit die is gebouwd met de protocolbibliotheken voor antwoorden of aanroepen. Er is geen Node.js runtime voor gehoste agent.

Aanvullende vereisten

  • Node.js 22 of hoger

  • Een containerimage in Azure Container Registry

  • De rol van Container Registry Repository Writer of AcrPush in het containerregister (om afbeeldingen te pushen)

  • De @azure/ai-projects en @azure/identity pakketten

    npm install @azure/ai-projects @azure/identity
    

Voordat u begint, bouwt u uw containerinstallatiekopie en pusht u deze naar Azure Container Registry (zie het tabblad Python voor voorbeelden van Docker-opdrachten), en verleent u de beheerde identiteit van het project de rol Container Registry Repository Reader voor het register.

Een gehoste agentversie maken

Wanneer u een versie maakt, richt het platform de agent automatisch in. Er is geen afzonderlijke beginstap. Het platform bouwt een momentopname van een container en maakt de agent gereed voor het verwerken van aanvragen.

import { AIProjectClient } from "@azure/ai-projects";
import { DefaultAzureCredential } from "@azure/identity";

// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
const projectEndpoint =
  process.env["FOUNDRY_PROJECT_ENDPOINT"] || "your_project_endpoint";
const agentName = "my-agent";

const project = new AIProjectClient(
  projectEndpoint,
  new DefaultAzureCredential(),
);

// Create a hosted agent version
const agent = await project.agents.createVersion(agentName, {
  kind: "hosted",
  cpu: "1",
  memory: "2Gi",
  container_configuration: {
    image: "your-registry.azurecr.io/your-image:tag",
  },
  protocol_versions: [{ protocol: "responses", version: "1.0.0" }],
  environment_variables: { MODEL_DEPLOYMENT_NAME: "gpt-5-mini" },
});

console.log(`Agent created: ${agent.name}, version: ${agent.version}`);

Als u beide protocollen beschikbaar wilt maken, geeft u beide door:protocol_versions

protocol_versions: [
  { protocol: "responses", version: "1.0.0" },
  { protocol: "invocations", version: "1.0.0" },
  { protocol: "invocations_ws", version: "1.0.0" },
],

Poll voor versiestatus

Nadat u een versie hebt gemaakt, wacht u totdat de status active is voordat u de agent activeert. Het inrichten duurt doorgaans minder dan één minuut, afhankelijk van de grootte van de afbeelding.

function sleep(ms: number) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// Poll until the agent version is active
for (;;) {
  const versionInfo = await project.agents.getVersion(
    agentName,
    agent.version,
  );
  console.log(`Status: ${versionInfo.status}`);
  if (versionInfo.status === "active") {
    break;
  }
  if (versionInfo.status === "failed") {
    console.log(`Provisioning failed: ${versionInfo.error}`);
    break;
  }
  await sleep(5_000);
}

Het eindpunt van de agent routeren en aanroepen

Routeer het agenteindpunt naar de versie die u hebt gemaakt en bind vervolgens een OpenAI-client aan het eindpunt.

Voor het protocol Antwoorden :

await project.agents.patchAgentObject(agentName, {
  agentEndpoint: {
    version_selector: {
      version_selection_rules: [
        {
          type: "FixedRatio",
          agent_version: agent.version,
          traffic_percentage: 100,
        },
      ],
    },
    protocol_configuration: { responses: {} },
  },
});

// Create an OpenAI client bound to the agent endpoint
const openAIClient = project.getOpenAIClient({
  azureConfig: { allowPreview: true, agentName },
});

const response = await openAIClient.responses.create({
  input: "Hello! What can you do?",
});
console.log(response.output_text);

Voor het protocol Aanroepen roept u het eindpunt voor aanroepen rechtstreeks aan:

const credential = new DefaultAzureCredential();
const token = await credential.getToken("https://ai.azure.com/.default");
if (!token) {
  throw new Error("Failed to acquire an access token.");
}
const url = `${projectEndpoint}/agents/my-agent/endpoint/protocols/invocations`;

const response = await fetch(`${url}?api-version=v1`, {
  method: "POST",
  headers: {
    Authorization: "Bearer " + token.token,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ message: "Process this task" }),
});
console.log(await response.json());

Referentie: AIProjectClient

Implementeren met behulp van de REST API

Gebruik de REST API voor directe HTTP-implementaties of bij het integreren met aangepaste hulpprogramma's.

Voordat u begint, bouwt en pusht u uw containerinstallatiekopie naar Azure Container Registry en verleent u de beheerde identiteit van het project de rol Container Registry Repository Reader op het register.

Variabelen instellen

BASE_URL="https://{account}.services.ai.azure.com/api/projects/{project}"
API_VERSION="v1"
TOKEN=$(az account get-access-token --resource https://ai.azure.com --query accessToken -o tsv)

Een agent maken

curl -X POST "$BASE_URL/agents?api-version=$API_VERSION" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-agent",
    "definition": {
      "kind": "hosted",
      "container_configuration": {
        "image": "myacr.azurecr.io/my-agent:v1"
      },
      "cpu": "1",
      "memory": "2Gi",
      "protocol_versions": [
        {"protocol": "responses", "version": "1.0.0"}
      ],
      "environment_variables": {
        "MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
      }
    }
  }'

Het maken van een agent maakt ook versie 1 en activeert provisioning.

Zie Sessie-inactiviteit beheren om in te stellen wanneer de rekenkracht van de sessie inactief wordt.

Als u prompts en antwoorden wilt screenen op basis van een beleid voor inhoudsveiligheid, moet u een rai_config object opnemen in de definition. Zie Een veiligheidsbeschermingsrail voor inhoud toevoegen aan een gehoste agent.

Poll voor versiestatus

Controleer het versie-eindpunt totdat statusactive:

while true; do
  STATUS=$(curl -s -X GET "$BASE_URL/agents/my-agent/versions/1?api-version=$API_VERSION" \
    -H "Authorization: Bearer $TOKEN" | jq -r '.status')
  echo "Status: $STATUS"
  [ "$STATUS" = "active" ] && echo "Ready!" && break
  [ "$STATUS" = "failed" ] && echo "Provisioning failed." && exit 1
  sleep 5
done

De agent aanroepen

Gebruik het toegewezen eindpunt van de agent om aanvragen te verzenden. Stel "stream": true in om door de server verzonden gebeurtenissen te ontvangen.

Antwoordprotocol:

curl -X POST "$BASE_URL/agents/my-agent/endpoint/protocols/openai/responses?api-version=$API_VERSION" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Hello! What can you do?",
    "store": true
  }'

Protocol voor aanroepen:

curl -X POST "$BASE_URL/agents/my-agent/endpoint/protocols/invocations?api-version=$API_VERSION" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Process this task"
  }'

Een nieuwe versie maken

Bijgewerkte code of configuratie implementeren door een nieuwe versie te maken:

curl -X POST "$BASE_URL/agents/my-agent/versions?api-version=$API_VERSION" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "definition": {
      "kind": "hosted",
      "container_configuration": {
        "image": "myacr.azurecr.io/my-agent:v2"
      },
      "cpu": "1",
      "memory": "2Gi",
      "protocol_versions": [
        {"protocol": "responses", "version": "1.0.0"}
      ],
      "environment_variables": {
        "MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
      }
    }
  }'

Resources opschonen

Om kosten te voorkomen, ruim middelen op zodra u klaar bent. Het platform deprovisioneert de rekenresources van de agent na de geconfigureerde time-out voor inactiviteit, die standaard 15 minuten bedraagt, zodat er geen kosten zijn wanneer een agent geen verzoeken afhandelt.

Azure Developer CLI opschonen

azd down

SDK opschoning

Eén versie verwijderen:

project.agents.delete_version(agent_name="my-agent", agent_version=agent.version)

Of verwijder de volledige agent en alle bijbehorende versies. Gebruik force=True om actieve sessies in cascade te verwijderen, bijvoorbeeld direct nadat u de agent hebt aangeroepen; zonder dit mislukt de aanroep met een conflictfout terwijl er actieve sessies zijn:

project.agents.delete(agent_name="my-agent", force=True)

SDK opschoning

Eén versie verwijderen:

await project.agents.deleteVersion("my-agent", agent.version);

Of verwijder de volledige agent en alle bijbehorende versies:

await project.agents.delete("my-agent", { force: true });

Referentie: AIProjectClient

REST API opschonen

Eén versie verwijderen:

curl -X DELETE "$BASE_URL/agents/my-agent/versions/1?api-version=$API_VERSION" \
  -H "Authorization: Bearer $TOKEN"

Of verwijder de hele agent:

curl -X DELETE "$BASE_URL/agents/my-agent?api-version=$API_VERSION" \
  -H "Authorization: Bearer $TOKEN"

Waarschuwing

Als u een agent verwijdert, worden alle versies ervan verwijderd en worden actieve sessies beëindigd. Deze actie kan niet ongedaan worden gemaakt.

Probleemoplossing

Inrichtingsfouten worden weergegeven op de error.code- en error.message-velden van het versieobject. Controleer de versiestatus na het maken om problemen te identificeren.

Foutcode HTTP-code Oplossing
image_pull_failed 400 Controleer de afbeeldings-URI. Controleer of de beheerde identiteit van het project de rol Lezer van opslagplaats in containerregister heeft op de ACR en of de beleidsstatus voor azureADAuthenticationAsArmPolicy van het register enabled is
SubscriptionIsNotRegistered 400 De abonnementsprovider registreren
InvalidAcrPullCredentials 401 Identiteit voor beheerde toegang of registertoegang via RBAC herstellen
UnauthorizedAcrPull 403 Geef de juiste referenties of identiteit op
AcrImageNotFound 404 Corrigeer de afbeeldingsnaam/tag of publiceer de afbeelding
RegistryNotFound 400/404 Register-DNS of netwerkbereikbaarheid herstellen

Neem voor 5xx-fouten contact op met Microsoft ondersteuning.

Zie De referentie voor gehoste agentmachtigingen voor gedetailleerde RBAC-vereisten en het oplossen van problemen met machtigingen.

Volgende stappen