Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
- Bouwen en pushen - Verpak je agentcode in een containerimage en push deze naar Azure Container Registry.
- Agentversie maken - Registreer de image bij de Foundry Agent Service. Het platform richt infrastructuur in en maakt een toegewezen Entra-agentidentiteit.
-
Peiling naar status : wacht tot de versiestatus is bereikt
active. - Aanroepen: aanvragen verzenden naar het toegewezen eindpunt van de agent.
Voorwaarden
- Een Microsoft Foundry-project.
- Agentcode met behulp van een ondersteund framework.
- Docker Desktop geïnstalleerd voor lokale containerontwikkeling.
- Azure CLI versie 2.80 of hoger.
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
CustomKeysveldnamen. De beheer-API herhaalt ze nooit meer na het maken. Bewaar ze naast de broncode van uw agent (bijvoorbeeld in IaC-sjablonen of naastazure.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:
- Bouwt uw containerimages extern in Azure Container Registry, zodat u Docker niet lokaal nodig hebt.
- Pusht de image naar de registry.
- Hiermee maakt u een gehoste agentversie op Foundry Agent Service.
- 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
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
Bouw uw Docker-image:
docker build --platform linux/amd64 -t myagent:v1 .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.
Ga in de Azure-portal naar je Foundry-projectresource.
Selecteer Identiteit en kopieer de object-id (principal) onder Toegewezen systeem.
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
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-projectsen@azure/identitypakkettennpm 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
Verwante inhoud
- Wat zijn gehoste agents?
- Een veiligheidsbeveiligingsrail voor inhoud toevoegen aan een gehoste agent
- Concepten van agentidentiteit
- Agenttoepassingen
- Azure Container Registry documentatie