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.
Verwenden Sie die Microsoft Agent Framework-Hostingpakete, um einen Agent Framework-Agent über die Protokolle für foundry gehostete Agents verfügbar zu machen. Mit den Hostingpaketen können Sie Ihre Agentlogik im Code beibehalten, während Foundry die gehostete Laufzeit, Sitzungen, Skalierung, Identität und Protokollendpunkte verwaltet.
In diesem Artikel erstellen Sie einen minimalen Agent Framework-Agent, machen ihn entweder über das Antwort- oder Aufrufprotokoll verfügbar, testen sie über HTTP und stellen sie mit der Azure Developer CLI in Foundry bereit.
Die Microsoft Foundry Skill kann dabei helfen, den Adapter zu implementieren, die Protokolle zu testen und bereitzustellen.azd
Voraussetzungen
- Ein Azure-Abonnement. Erstellen Sie ein kostenloses Konto.
- Ein Foundry-Projekt.
- Ein bereitgestelltes Chatmodell, wie
gpt-4.1odergpt-4o. - Die Rolle Foundry Project Manager im Projekt zur Bereitstellung eines gehosteten Agenten. Ausführliche Informationen finden Sie unter Bereitstellen eines gehosteten Agents.
- Azure CLI ist angemeldet (
az login), damitDefaultAzureCredentialsich authentifizieren kann.
- Python 3.10 oder höher.
- .NET 10 SDK oder höher.
Installieren der Pakete
Installieren Sie das Agent Framework und das Foundry-Hostingpaket:
pip install -U agent-framework agent-framework-foundry-hosting azure-identity python-dotenv
Das agent_framework_foundry_hosting Paket stellt die Hostserver für die Foundry-Protokolle bereit:
-
ResponsesHostServerfür den OpenAI-kompatiblen/responsesEndpunkt. -
InvocationsHostServerfür den generischen/invocationsEndpunkt.
Fügen Sie Ihrem Projekt die Agent Framework- und Foundry-Hostingpakete hinzu:
dotnet add package Microsoft.Agents.AI
dotnet add package Microsoft.Agents.AI.Foundry.Hosting
dotnet add package Azure.AI.Projects
dotnet add package Azure.Identity
Fügen Sie für das Invocations-Protokoll auch das Invocations-Serverpaket hinzu:
dotnet add package Azure.AI.AgentServer.Invocations
Diese Pakete stellen die Hosterweiterungen für die Foundry-Protokolle bereit:
-
AddFoundryResponsesundMapFoundryResponsesfür den openAI-kompatiblen/responsesEndpunkt. -
AddInvocationsServerundMapInvocationsServerfür den generischen/invocationsEndpunkt.
Auswählen eines Hostingprotokolls
Gehostete Agents können ein oder mehrere Protokolle verfügbar machen. Beginnen Sie für die meisten Konversationsagenten mit Responses.
| Protocol | Endpunkt | Verwenden Sie, wenn |
|---|---|---|
| Antworten | /responses |
Sie möchten OpenAI-kompatiblen Chat, Streaming, Antwortverlauf und Konversations-Threading. |
| Aufrufe | /invocations |
Sie möchten eine benutzerdefinierte JSON-Struktur, einen Endpunkt im Webhook-Stil oder eine nicht-konversationelle Verarbeitung. |
Hintergrundinformationen zu Protokollverhalten und Sitzungen finden Sie unter "Gehostete Agents " und "Verwalten von gehosteten Agent-Sitzungen".
Umgebungsvariablen konfigurieren
Legen Sie den Projektendpunkt und den Modellbereitstellungsnamen für die lokale Entwicklung fest:
export FOUNDRY_PROJECT_ENDPOINT="https://<resource>.services.ai.azure.com/api/projects/<project>"
export AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-4.1"
In PowerShell:
$env:FOUNDRY_PROJECT_ENDPOINT="https://<resource>.services.ai.azure.com/api/projects/<project>"
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-4.1"
Wenn derselbe Code in Foundry als gehosteter Agent ausgeführt wird, injiziert die Plattform zur Laufzeit FOUNDRY_PROJECT_ENDPOINT und AZURE_AI_MODEL_DEPLOYMENT_NAME.
Antwortprotokoll
Verwenden Sie das Responses-Protokoll, wenn Sie einen OpenAI-kompatiblen Chat-Endpunkt mit Streaming, Antwortverlauf und Konversations-Threads benötigen.
Erstellen eines Antworthosts
Erstellen Sie eine Datei main.py mit einem minimalen Agent Framework-Agent, der ein Foundry-Modell verwendet.
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
from dotenv import load_dotenv
# Load environment variables from a .env file when present.
load_dotenv()
def main() -> None:
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.",
# The hosting infrastructure manages conversation history, so the
# service doesn't need to store it.
default_options={"store": False},
)
server = ResponsesHostServer(agent)
server.run()
if __name__ == "__main__":
main()
Funktionsweise dieses Codeausschnitts: Erstellt einen Agent Framework-Agent, der von einem Foundry-Modell FoundryChatClientunterstützt wird, und übergibt dann den Agent an ResponsesHostServer. Der Host startet einen HTTP-Server und macht den Agent über POST /responses verfügbar. Standardmäßig ist der Server an Port 8088 gebunden.
Referenz: Microsoft Agent Framework-Dokumentation
Führen Sie die App lokal aus:
python main.py
Erstellen Sie eine Program.cs Datei mit einem minimalen Agent Framework-Agent, der über das Antwortprotokoll ein Foundry-Modell verwendet.
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";
// Create the agent via the AI project client using the Responses API.
AIAgent agent = new AIProjectClient(projectEndpoint, new DefaultAzureCredential())
.AsAIAgent(
model: deployment,
instructions: "You are a friendly assistant. Keep your answers brief.",
name: "assistant",
description: "A simple general-purpose AI assistant");
// Host the agent as a Foundry hosted agent using the Responses API.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
var app = builder.Build();
app.MapFoundryResponses();
app.Run();
Was dieser Codeausschnitt macht: Erstellt einen AIAgent aus dem Foundry-Projektclient, registriert ihn mit AddFoundryResponses als Foundry-Responses-Host und ordnet den Endpunkt POST /responses mit MapFoundryResponses zu. Standardmäßig dient der Host am Port 8088.
Referenz: AIProjectClient | DefaultAzureCredential
Führen Sie die App lokal aus:
dotnet run
Testen des Endpunkts "Antworten"
Senden Sie eine Antwortanforderung ohne Streaming an den lokalen Server.
Bash:
curl -sS -H "Content-Type: application/json" \
-X POST http://localhost:8088/responses \
-d '{"input":"Give me one practical tip for testing hosted agents.","stream":false}'
PowerShell:
$body = @{
input = "Give me one practical tip for testing hosted agents."
stream = $false
} | ConvertTo-Json
Invoke-RestMethod `
-Uri http://localhost:8088/responses `
-Method Post `
-Body $body `
-ContentType "application/json"
Der Server antwortet mit einem JSON-Objekt, das den Antworttext und eine Antwort-ID enthält. Setzen Sie für Streaming-Antworten stream auf true. Der Host sendet vom API-Server übermittelte Ereignisse wie z. B. response.created, response.output_text.delta und response.completed.
Mehrstufige Unterhaltungen
Um eine Unterhaltung fortzusetzen, übergeben Sie die vorherige Antwort-ID im previous_response_id Feld der nächsten Anforderung:
curl -sS -H "Content-Type: application/json" \
-X POST http://localhost:8088/responses \
-d '{"input":"Can you make that more concise?","previous_response_id":"<previous-response-id>","stream":false}'
Wenn der Agent in Foundry läuft, funktioniert dasselbe Muster über den Responses-Endpunkt des gehosteten Agenten. Wenn in späteren Interaktionen ebenfalls dasselbe gehostete Sandbox-Dateisystem benötigt wird, fügen Sie agent_session_id ein oder verwenden Sie eine conversation-ID. Ausführliche Informationen finden Sie unter Verwalten gehosteter Agentsitzungen.
Aufrufeprotokoll
Verwenden Sie das Aufrufprotokoll, wenn Ihre Anrufer das Antwort-API-Anforderungs-Shape nicht verwenden können oder wenn Ihr Szenario keine Chatunterhaltung ist. Der Invocations-Host verwaltet den Sitzungszustand über einen agent_session_id-Abfrageparameter und einen Antwortheader.
Invocations-Host erstellen
Verwenden Sie dasselbe Agent-Setup wie im „Responses“-Beispiel, aber starten Sie mit InvocationsHostServer anstelle von ResponsesHostServer.
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
from dotenv import load_dotenv
# Load environment variables from a .env file when present.
load_dotenv()
def main() -> None:
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()
if __name__ == "__main__":
main()
Funktionsweise dieses Codeausschnitts: Hosten Sie den Agent Framework-Agent über POST /invocations. Der Host verwaltet den Status pro Sitzung über den agent_session_id Abfrageparameter und den Antwortheader.
Referenz: Microsoft Agent Framework-Dokumentation
Das Aufrufprotokoll verwendet ein InvocationHandler , das Sie implementieren, um jede Anforderung zu verarbeiten. Registrieren Sie den Invocations-Server und Ihren Handler und ordnen Sie die Endpunkte zu.
using Azure.AI.AgentServer.Invocations;
using Microsoft.Agents.AI;
var builder = WebApplication.CreateBuilder(args);
// Register your agent and the Invocations server services.
builder.Services.AddInvocationsServer();
builder.Services.AddScoped<InvocationHandler, MyInvocationHandler>();
var app = builder.Build();
// Map the Invocations protocol endpoints:
// POST /invocations - invoke the agent
// GET /invocations/{id} - get result
// POST /invocations/{id}/cancel - cancel
app.MapInvocationsServer();
app.Run();
Funktionsweise dieses Codeausschnitts: Registriert die Aufrufserverdienste und Ihre InvocationHandler Implementierung und ordnet die /invocations Endpunkte zu. Sie implementieren MyInvocationHandler , um zu definieren, wie jede Anforderung verarbeitet wird. Ein vollständiges Handlerbeispiel finden Sie im Beispiel für .NET Aufrufe.
Referenz: AddInvocationsServer
Den Endpunkt für Aufrufe testen
Senden Sie eine Anforderung an den lokalen Server:
curl -sS -X POST http://localhost:8088/invocations \
-H "Content-Type: application/json" \
-d '{"message":"My name is Alice.","stream":false}'
Verwenden Sie für mehrteilige Konversationen den agent_session_id-Wert aus dem Antwortheader als agent_session_id-Abfrageparameter für die nächste Anfrage:
curl -sS -X POST "http://localhost:8088/invocations?agent_session_id=<session-id>" \
-H "Content-Type: application/json" \
-d '{"message":"What is my name?"}'
Die Plattform speichert keinen Unterhaltungsverlauf für das Aufrufprotokoll.
Verwenden Sie den agent_session_id Abfrageparameter, um spätere Aufrufe an dieselbe gehostete Sandbox weiterzuleiten.
Deploy
Bereitstellen mithilfe der Azure Developer CLI (azd). Der Ablauf verwendet Beispielmanifeste und Docker, um das Container-Image des Agents zu erstellen und es in der gehosteten Agent-Runtime von Foundry bereitzustellen.
Für die Bereitstellung des gehosteten Agents ist im Projekt die Rolle Foundry Project Manager erforderlich. Ausführliche Informationen finden Sie unter Bereitstellen eines gehosteten Agents.
Installieren der Azure Developer CLI-Erweiterung
Installieren Sie die AI-Agent-Erweiterung, und melden Sie sich an, bevor Sie ein Beispiel initialisieren:
azd ext install azure.ai.agents
azd auth login
Docker muss lokal laufen, da azd ai agent run das im Dockerfile des Beispiels deklarierte Container-Image erstellt. Weitere Informationen finden Sie in der Azure Developer CLI-Referenz.
Mit einem Beispielmanifest initialisieren
Erstellen Sie einen neuen Ordner, und initialisieren Sie ihn aus einem Beispielmanifest. Ersetzen Sie die Manifest-URL durch das Beispiel, das Sie verwenden möchten.
mkdir my-agent-framework-agent
cd my-agent-framework-agent
azd ai agent init -m https://github.com/microsoft/agent-framework/blob/main/python/samples/04-hosting/foundry-hosted-agents/responses/01_basic/agent.manifest.yaml
mkdir my-agent-framework-agent
cd my-agent-framework-agent
azd ai agent init -m https://github.com/microsoft/agent-framework/blob/main/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-ChatClientAgent/agent.manifest.yaml
Folgen Sie den Anweisungen von azd ai agent init. Wenn Sie noch nicht über ein Foundry-Projekt und eine Modellbereitstellung verfügen, kann der Initialisierungsfluss Sie durch die Erstellung führen.
Bereitstellen von Azure-Ressourcen
Wenn das initialisierte Projekt ein neues Foundry-Projekt und eine Modellbereitstellung verwendet, stellen Sie zuerst die Azure Ressourcen bereit:
azd provision
Mit diesem Befehl wird eine Ressourcengruppe erstellt, die unter anderem eine Foundry-Instanz, ein Foundry-Projekt mit einer Modellbereitstellung, eine Application Insights-Instanz und eine Containerregistrierung für die gehosteten Agent-Images enthält.
Den Container lokal ausführen
Führen Sie den Agent-Host lokal über azd aus:
azd ai agent run
Der Host wird auf http://localhost:8088 bereitgestellt. Rufen Sie in einem anderen Terminal den lokalen Protokollendpunkt auf:
azd ai agent invoke --local "Hello!"
Sie können den Endpunkt auch direkt mit curl:
curl -X POST http://localhost:8088/responses \
-H "Content-Type: application/json" \
-d '{"input": "Hello!"}'
Bereitstellen in Foundry
Bereitstellen des Agents:
azd deploy
Die Bereitstellung verpackt den Agenten in ein Container-Image, überträgt es in die bereitgestellte Containerregistrierung und stellt es für die von Foundry gehostete Agent-Laufzeit bereit.
Die Foundry-Hostinginfrastruktur fügt Laufzeitumgebungsvariablen in den Agent ein, einschließlich:
-
FOUNDRY_PROJECT_ENDPOINT: Die Endpunkt-URL für das Foundry-Projekt, in dem der Agent bereitgestellt wird. -
AZURE_AI_MODEL_DEPLOYMENT_NAME: Der Name der Modellbereitstellung, der währendazd ai agent initausgewählt wurde. -
APPLICATIONINSIGHTS_CONNECTION_STRING: Die Verbindungszeichenfolge für die Application Insights-Instanz des Projekts.
Vollständige Bereitstellungskonzepte, Berechtigungen und Verwaltungsdetails finden Sie unter Bereitstellen eines gehosteten Agents und Verwalten des Lebenszyklus des gehosteten Agents.
Troubleshooting
Verwenden Sie diese Checkliste, um häufige Probleme beim Entwickeln gehosteter Agents mit Agent Framework zu diagnostizieren.
Das Modell kann im gehosteten Container nicht erreicht werden.
Vergewissern Sie sich, dass die version des gehosteten Agents enthält AZURE_AI_MODEL_DEPLOYMENT_NAMEund dass die Agentidentität über die Berechtigung zum Aufrufen des Foundry-Projekts verfügt. Die Plattform setzt FOUNDRY_PROJECT_ENDPOINT; Ihr Code sollte diese Variable auslesen, wenn er in Foundry ausgeführt wird.
Der Konversationsstatus wird nicht fortgeführt
Übergeben Sie beim Antworten-Protokoll in späteren Interaktionen previous_response_id oder eine conversation ID.
Für das Aufrufprotokoll speichert die Plattform keinen Unterhaltungsverlauf.
Verwenden Sie einen agent_session_id Abfrageparameter, um spätere Aufrufe an dieselbe gehostete Sandbox weiterzuleiten.
Nichtübereinstimmung der Protokollversion
Wenn Anforderungen nach einem Upgrade fehlschlagen, vergewissern Sie sich, dass Ihr Manifest und das Hostingpaket beide Protokollversion 2.0.0 verwenden. Protokollversionen 1.0.0 und 2.0.0 sind nicht kompatibel.