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 wordt beschreven hoe u een containeragent implementeert in Foundry Agent Service met behulp van de Python SDK of REST API. Gebruik deze benaderingen wanneer u agentimplementaties rechtstreeks vanuit uw eigen toepassingen of services wilt beheren.
Als u voor het eerst implementeert of het snelste pad wilt, gebruikt u in plaats daarvan de quickstart: Een gehoste agent maken en implementeren . In de quickstart wordt de Azure Developer CLI (azd) of VS Code-extensie gebruikt, die automatisch omgaan met het bouwen, pushen, versiebeheer en RBAC-configuratie.
Levenscyclus van implementatie
Elke gehoste agentimplementatie volgt deze reeks:
- Build en push — Verpak uw agentcode in een containerafbeelding en deel deze naar Azure Container Registry.
- Maak een agentversie — registreer de afbeelding bij Foundry Agent Service. Het platform richt infrastructuur in en maakt een toegewezen Entra-agentidentiteit.
-
Status opvragen — Wacht tot de status van de versie 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 Azure AI Project Manager nodig binnen de projectomvang om gehoste agenten te maken en te implementeren. Deze rol omvat zowel de machtigingen voor het gegevensvlak voor het maken van agents als de mogelijkheid om de rol Azure AI-gebruiker toe te wijzen aan de door het platform gemaakte agentidentiteit. De agentidentiteit heeft Azure AI-gebruiker in het project nodig om tijdens runtime toegang te krijgen tot modellen en artefacten.
Als u azd of de VS Code-extensie gebruikt, worden de meeste RBAC-toewijzingen automatisch verwerkt, waaronder:
- Container Registry Repository Reader voor de beheerde identiteit van het project (afbeelding ophalen)
- Azure AI-gebruiker voor de door het platform gemaakte agentidentiteit (runtimemodel en toegang tot hulpprogramma's)
Opmerking
Het platform maakt een toegewezen 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 gebruiker die de agent maakt, moet echter zijn gemachtigd om Azure AI-gebruiker toe te wijzen aan die identiteit. Daarom wordt Azure AI-Project Manager aanbevolen via Azure AI-gebruiker alleen.
Opmerking
Hoewel azd- en VS Code-extensies automatisch eenvoudige RBAC-toewijzingen verwerken, is voor complexe scenario's mogelijk aanvullende handmatige configuratie vereist. Zie de referentie voor gehoste agentmachtigingen voor uitvoerige informatie over alle betrokken machtigingen en roltoewijzingen.
Zie Verificatie en autorisatie voor meer informatie.
Belangrijk
De Azure Container Registry die de containerinstallatiekopie van uw gehoste agent bevat, moet momenteel bereikbaar zijn via het openbare eindpunt. Het plaatsen van het register achter een privénetwerk (privé-eindpunt waarvoor openbare netwerktoegang is uitgeschakeld) wordt momenteel niet ondersteund voor gehoste agents. Het platform kan de installatiekopie niet ophalen. Zie Beperkingen voor de volledige lijst met netwerkbeperkingen.
Containervereisten
Uw container-image moet aan de volgende vereisten voldoen om op het gehoste agentplatform te draaien.
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 |
Eén container kan beide protocollen tegelijkertijd beschikbaar maken door beide te declareren wanneer u de agent maakt, in het bestand, de agent.yaml SDK-aanroep of de REST API-aanvraag, en beide 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 de IResponseHandler interface. De bibliotheek verwerkt routering, streaming met door de server verzonden gebeurtenissen (SSE), uitvoering op de achtergrond, annulering, caching en levenscyclusbeheer van reacties.
IResponseHandler
IResponseHandler is de kernabstractie die u implementeert. De bibliotheek roept voor elke binnenkomende aanvraag CreateAsync aan en levert de geretourneerde IAsyncEnumerable<ResponseStreamEvent> aan klanten via SSE:
public class EchoHandler : ResponseHandler
{
public override IAsyncEnumerable<ResponseStreamEvent> CreateAsync(
CreateResponse request,
ResponseContext context,
CancellationToken cancellationToken)
{
return new TextResponse(context, request,
createText: async ct =>
{
var input = await context.GetInputTextAsync(cancellationToken: ct);
return $"Echo: {input}";
});
}
}
ResponseEventStream
ResponseEventStream beheert sequenceNumber, outputIndex, contentIndex, itemId en de volledige Response levenscyclus automatisch. Elke yield return komt één-op-één overeen met een SSE-gebeurtenis, dus u hoeft deze status niet zelf bij te houden.
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 reacties: created → in_progress → completed (offailed).cancelled De bibliotheek beheert ook automatisch annulerings-, foutafhandelings- en terminal gebeurtenisgaranties.
Schroefdraadveiligheid
Alle service-exemplaren, die via AddResponsesServer() zijn geregistreerd, zijn thread-safe. Handler-exemplaren hebben een bereik per aanvraag.
Zie de implementatiehandleiding voor handler voor gedetailleerde richtlijnen voor de implementatie van handler. Zie de voorbeelden van het Responses-protocol voor voorbeelden die kunnen worden uitgevoerd.
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 productie zorgt de Foundry gateway voor de routering—uw container hoeft geen openbare poort beschikbaar te maken.
Door platform geïnjecteerde omgevingsvariabelen
Het gehoste agentplatform injecteert automatisch omgevingsvariabelen in uw container tijdens runtime. Uw code kan deze lezen zonder ze in agent.yaml of environment_variableste declareren. 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 agent.yaml opnieuw. Ze worden automatisch ingesteld.
Variabelen die u zelf declareert, zoals MODEL_DEPLOYMENT_NAME MCP-eindpunten of werksets, gaan in de environment_variables sectie van agent.yaml of de SDK-aanroep create_version .
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 VS Code-extensie automatiseren de volledige levenscyclus van de implementatie. Zie de Quickstart: Een gehoste agent maken en uitrollen voor een stapsgewijze procedure.
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.1.0 of hoger
pip install "azure-ai-projects>=2.1.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
Als u een versie maakt, wordt het platform geactiveerd om de agent automatisch in te richten. 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 HostedAgentDefinition, ProtocolVersionRecord, AgentProtocol
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,
allow_preview=True,
)
# Create a hosted agent version
agent = project.agents.create_version(
agent_name="my-agent",
definition=HostedAgentDefinition(
container_protocol_versions=[
ProtocolVersionRecord(protocol=AgentProtocol.RESPONSES, version="1.0.0")
],
cpu="1",
memory="2Gi",
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:container_protocol_versions
container_protocol_versions=[
ProtocolVersionRecord(protocol=AgentProtocol.RESPONSES, version="1.0.0"),
ProtocolVersionRecord(protocol=AgentProtocol.INVOCATIONS, version="1.0.0")
],
Belangrijkste parameters:
| Parameter | Beschrijving |
|---|---|
agent_name |
Unieke naam (alfanumeriek met afbreekstreepjes, maximaal 63 tekens) |
image |
Url van volledige Azure Container Registry afbeelding met tag |
cpu |
CPU-toewijzing (bijvoorbeeld "1") |
memory |
Geheugentoewijzing (bijvoorbeeld "2Gi") |
container_protocol_versions |
Protocollen die de container beschikbaar maakt (responses, invocationsof beide) |
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 |
Inrichten is mislukt : controleer het error veld op details |
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",
"Foundry-Features": "HostedAgents=V1Preview"
}, params={"api-version": "v1"}, json={
"message": "Process this task"
})
print(response.json())
Voor vollediger voorbeelden, zie de voorbeelden van gehoste agents.
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 uploadt u de containerafbeelding en configureert u de machtigingen van het containerregister.
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",
"image": "myacr.azurecr.io/my-agent:v1",
"cpu": "1",
"memory": "2Gi",
"container_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.
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" \
-H "Foundry-Features: HostedAgents=V1Preview" \
-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",
"image": "myacr.azurecr.io/my-agent:v2",
"cpu": "1",
"memory": "2Gi",
"container_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. Na 15 minuten inactiviteit worden agent-compute resources opgeheven, zodat er geen kosten zijn wanneer een agent geen aanvragen verwerkt.
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:
project.agents.delete(agent_name="my-agent")
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 of het URI van de afbeelding correct is en of de door het project beheerde identiteit Container Registry Repository Reader heeft op de ACR. |
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.