Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hosted Agents in Microsoft Foundry Agent Service können Sie Agent Framework-Agents als containerisierte Anwendungen für Microsoft verwaltete Infrastruktur bereitstellen. Die Plattform behandelt Skalierung, Sitzungszustandspersistenz, Sicherheit und Lebenszyklusverwaltung, damit Sie sich auf die Logik Ihres Agents konzentrieren können.
Mit der Hostintegration des Agent-Frameworks können Sie beliebige Agent oder Workflows mit minimalem Code verwenden und über das Foundry-Responses- oder Invocations-Protokoll verfügbar machen.
Wann werden gehostete Agents verwendet?
Wählen Sie die von Foundry gehosteten Agents aus, wenn Sie möchten:
- Verwaltete Infrastruktur – sie müssen keine Container, Webserver oder Skalierungsregeln selbst konfigurieren.
-
Integrierte Sitzungsverwaltung – die Plattform speichert
$HOMEund hochgeladene Dateien während Sitzungswechseln und Leerlaufzeiten. - Dedizierte Agentidentität – jeder bereitgestellte Agent erhält seine eigene Entra-Identität, um sicheren Zugriff auf Modelle, Tools und downstream-Dienste zu erhalten.
- OpenAI-kompatible Endpunkte – Clients können mit Ihrem Agent über das Antwortprotokoll mit jedem openAI-kompatiblen SDK interagieren.
Hinweis
Gehostete Foundry-Agenten befinden sich derzeit in der Vorschau. In der Dokumentation zu den in Foundry gehosteten Agents finden Sie die neuesten Verfügbarkeit, Grenzwerte und Preise.
Voraussetzungen
- Ein Azure-Abonnement
-
Azure Developer CLI (
azd) mit der AI-Agent-Erweiterung:azd ext install azure.ai.agents
Für lokale Tests benötigen Sie außerdem Folgendes:
- Ein Microsoft Foundry-Projekt mit einer Modellbereitstellung (z. B.
gpt-4o) -
Azure CLI installiert und authentifiziert (
az login)
- .NET 10 SDK oder höher
Installieren Sie das Hosting-NuGet-Paket:
dotnet add package Microsoft.Agents.AI.Foundry.Hosting --prerelease
dotnet add package Azure.AI.Projects --prerelease
- Python 3.10 oder höher
Installieren Sie das Hosting-Python-Paket:
pip install agent-framework agent-framework-foundry-hosting
Antwortprotokoll
Das Antwortprotokoll ist der empfohlene Ausgangspunkt für die meisten Agents. Er bietet einen OpenAI-kompatiblen /responses Endpunkt an, und die Plattform verwaltet den Konversationsverlauf, das Streaming und den Sitzungslebenszyklus automatisch.
using Azure.AI.AgentServer.Core;
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;
var projectEndpoint = new Uri(Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")
?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set."));
var deployment = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-4o";
AIAgent agent = new AIProjectClient(projectEndpoint, new DefaultAzureCredential())
.AsAIAgent(
model: deployment,
instructions: "You are a helpful AI assistant.",
name: "my-agent");
var builder = AgentHost.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
builder.RegisterProtocol("responses", endpoints => endpoints.MapFoundryResponses());
var app = builder.Build();
app.Run();
Der AgentHost.CreateBuilder erstellt einen Anwendungshost, der für die Foundry-Hostingumgebung vorkonfiguriert ist.
AddFoundryResponses registriert Ihren Agent mit dem Antwortprotokollhandler und MapFoundryResponses ordnet den /responses HTTP-Endpunkt zu.
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from agent_framework_foundry_hosting import ResponsesHostServer
from azure.identity import DefaultAzureCredential
client = FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
credential=DefaultAzureCredential(),
)
agent = Agent(
client=client,
instructions="You are a helpful AI assistant.",
default_options={"store": False},
)
server = ResponsesHostServer(agent)
server.run()
ResponsesHostServer umschließt Ihren Agenten und macht ihn über das Foundry Responses-Protokoll verfügbar. Das Festlegen von store auf False in default_options verhindert das Duplizieren des Unterhaltungsverlaufs, da die Hostinginfrastruktur den Verlauf automatisch verwaltet.
Aufrufeprotokoll
Das Aufrufprotokoll bietet Ihnen die vollständige Kontrolle über die HTTP-Anforderung und -Antwort. Verwenden Sie sie, wenn Sie benutzerdefinierte Nutzlasten, nicht unterhaltungsbezogene Verarbeitung oder Streamingprotokolle benötigen, die nicht mit OpenAI kompatibel sind.
Mit dem Invocations-Protokoll in C# implementieren Sie eine benutzerdefinierte InvocationHandler, um eingehende Anforderungen zu verarbeiten.
using Azure.AI.AgentServer.Core;
using Azure.AI.AgentServer.Invocations;
using Microsoft.Agents.AI;
var builder = AgentHost.CreateBuilder(args);
builder.Services.AddSingleton<AIAgent, MyAgent>();
builder.Services.AddInvocationsServer();
builder.Services.AddScoped<InvocationHandler, MyInvocationHandler>();
builder.RegisterProtocol("invocations", endpoints => endpoints.MapInvocationsServer());
var app = builder.Build();
app.Run();
Die AddInvocationsServer Methode registriert die Invocations-Protokolldienste. Sie implementieren InvocationHandler , um zu definieren, wie Ihr Agent jede Anforderung verarbeitet.
Verwenden Sie InvocationsHostServer für ein einfaches Setup aus dem agent_framework_foundry_hosting Paket. Es umschließt Ihren Agenten ähnlich wie ResponsesHostServer und behandelt die Sitzungsverwaltung automatisch.
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from agent_framework_foundry_hosting import InvocationsHostServer
from azure.identity import DefaultAzureCredential
client = FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
credential=DefaultAzureCredential(),
)
agent = Agent(
client=client,
instructions="You are a friendly assistant. Keep your answers brief.",
default_options={"store": False},
)
server = InvocationsHostServer(agent)
server.run()
Um die Vollständige Kontrolle über die Anforderungsverarbeitung zu erhalten, verwenden Sie InvocationAgentServerHost direkt das azure.ai.agentserver.invocations Paket, und implementieren Sie ihren eigenen Aufrufhandler:
import os
from collections.abc import AsyncGenerator
from agent_framework import Agent, AgentSession
from agent_framework.foundry import FoundryChatClient
from azure.ai.agentserver.invocations import InvocationAgentServerHost
from azure.identity import DefaultAzureCredential
from starlette.requests import Request
from starlette.responses import JSONResponse, Response, StreamingResponse
_sessions: dict[str, AgentSession] = {}
client = FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
credential=DefaultAzureCredential(),
)
agent = Agent(
client=client,
instructions="You are a friendly assistant. Keep your answers brief.",
default_options={"store": False},
)
app = InvocationAgentServerHost()
@app.invoke_handler
async def handle_invoke(request: Request):
"""Handle streaming multi-turn chat."""
data = await request.json()
session_id = request.state.session_id
stream = data.get("stream", False)
user_message = data.get("message", None)
if user_message is None:
return Response(content="Missing 'message' in request", status_code=400)
session = _sessions.setdefault(session_id, AgentSession(session_id=session_id))
if stream:
async def stream_response() -> AsyncGenerator[str]:
async for update in agent.run(user_message, session=session, stream=True):
yield update.text
return StreamingResponse(
stream_response(),
media_type="text/event-stream",
headers={"Cache-Control": "no-cache", "Connection": "keep-alive"},
)
response = await agent.run([user_message], session=session, stream=stream)
return JSONResponse({"response": response.text})
if __name__ == "__main__":
app.run()
Warnung
Der speicherinterne Sitzungsspeicher im benutzerdefinierten Handlerbeispiel geht beim Neustart verloren. Verwenden Sie langlebige Lagerung (z. B. Cosmos DB) in der Produktion.
Hinweis
Go-Unterstützung für in Foundry gehostete Agenten ist bald verfügbar. Den neuesten Status finden Sie im Agent Framework Go-Repository .
Tipp
In den Beispielen Python oder in den Beispielen C# finden Sie Beispiele für ein gehostetes Agentprojekt. Oder verwenden Sie den azd ai agent init Befehl, um ein neues gehostetes Agent-Projekt von Grund auf neu zu erstellen. In dieser Schnellstartanleitung finden Sie schrittweise Anleitungen.
Lokales Ausführen
Die Azure Developer CLI (azd) bietet die einfachste Möglichkeit, Ihren gehosteten Agent lokal auszuführen und zu testen.
Initialisieren eines Projekts
Einen neuen Ordner erstellen und es mit einem Beispielmanifest initialisieren.
mkdir my-hosted-agent && cd my-hosted-agent
azd ai agent init -m <path-to-agent.manifest.yaml>
Tipp
Das Manifest kann ein Pfad zu einer lokalen YAML-Datei oder eine URL zu einem Remotemanifest sein.
Festlegen von Umgebungsvariablen
export FOUNDRY_PROJECT_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>"
export AZURE_AI_MODEL_DEPLOYMENT_NAME="<your-model-deployment>"
Starten Sie den Agenthost
azd ai agent run
Der Agenthost beginnt am http://localhost:8088.
Agent aufrufen
azd ai agent invoke --local "Hello!"
Oder verwenden Sie curl:
curl -X POST http://localhost:8088/responses \
-H "Content-Type: application/json" \
-d '{"input": "Hello!"}'
Oder in PowerShell:
(Invoke-WebRequest -Uri http://localhost:8088/responses -Method POST -ContentType "application/json" -Body '{"input": "Hello!"}').Content
Bereitstellen in Gießerei
Nachdem Sie Ihren Agent lokal überprüft haben, stellen Sie ihn für Microsoft Foundry bereit:
Bereitstellen von Ressourcen (wenn Sie noch kein Foundry-Projekt haben):
azd provisionDadurch wird eine Ressourcengruppe mit einer Foundry-Instanz, einem Projekt, einer Modellbereitstellung, Application Insights und einer Containerregistrierung erstellt.
Bereitstellen des Agents:
azd deployDadurch wird Ihr Agent als Containerimage verpackt, an Azure Container Registry verschoben und im Foundry Agent Service bereitgestellt.
Die Foundry-Hostinginfrastruktur fügt automatisch die folgenden Umgebungsvariablen zur Laufzeit in Ihren Agentcontainer ein:
| Variable | Description |
|---|---|
FOUNDRY_PROJECT_ENDPOINT |
Die Endpunkt-URL für das Foundry-Projekt. |
AZURE_AI_MODEL_DEPLOYMENT_NAME |
Der Name der Modellbereitstellung (konfiguriert während azd ai agent init). |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Die Verbindungszeichenfolge für Application Insights für Telemetrie. |
Nach der Bereitstellung ist Ihr Agent über seinen dedizierten Foundry-Endpunkt zugänglich und kann auch über das Foundry-Portal getestet werden.