Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använd värdpaket för Microsoft Agent Framework för att göra en Agent Framework-agent tillgänglig via protokoll för Foundry-värdbaserade agenter. Med värdpaketen kan du behålla agentlogik i kod medan Foundry hanterar värdbaserade slutpunkter för körning, sessioner, skalning, identitet och protokoll.
I den här artikeln skapar du en minimal Agent Framework-agent, exponerar den via protokollet Svar eller anrop, testar den via HTTP och distribuerar den till Foundry med Azure Developer CLI.
Microsoft Foundry Skill kan hjälpa dig att implementera adaptern, testa protokollen och distribuera med azd.
Förutsättningar
- Ett Azure-abonnemang. Skapa en kostnadsfritt.
- Ett Foundry-projekt.
- En distribuerad chattmodell, till exempel
gpt-4.1ellergpt-4o. - Rollen Foundry Project Manager i projektet för att driftsätta en hostad agent. Mer information finns i Distribuera en värdbaserad agent.
- Azure CLI inloggad (
az login) såDefaultAzureCredentialkan autentisera.
- Python 3.10 eller senare.
- .NET 10 SDK eller senare.
Installera programvarupaketen
Installera Agent Framework och Foundry-värdpaketet:
pip install -U agent-framework agent-framework-foundry-hosting azure-identity python-dotenv
Paketet agent_framework_foundry_hosting tillhandahåller värdservrarna för Foundry-protokollen:
-
ResponsesHostServerför den OpenAI-kompatibla/responsesändpunkten. -
InvocationsHostServerför den generiska/invocationsslutpunkten.
Lägg till Agent Framework- och Foundry-värdpaketen i ditt projekt:
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ör protokollet Anrop lägger du även till serverpaketet Anrop:
dotnet add package Azure.AI.AgentServer.Invocations
Dessa paket tillhandahåller värdtilläggen för Foundry-protokollen:
-
AddFoundryResponsesochMapFoundryResponsesför den OpenAI-kompatibla/responsesslutpunkten. -
AddInvocationsServerochMapInvocationsServerför den generiska/invocationsslutpunkten.
Välj ett värdprotokoll
Värdagenter kan tillhandahålla ett eller flera protokoll. Börja med Svar för de flesta konversationsagenter.
| Protokoll | Endpoint | Använd när |
|---|---|---|
| Responses | /responses |
Du vill ha OpenAI-kompatibel chatt, direktuppspelning, svarshistorik och konversationstrådning. |
| Anrop | /invocations |
Du vill ha en anpassad JSON-struktur, en webhook-liknande endpoint eller bearbetning som inte är konversationsbaserad. |
Bakgrund om protokollbeteende och sessioner finns i Värdbaserade agenter och Hantera värdbaserade agentsessioner.
Konfigurera miljövariabler
Ange projektets slutpunkt och modelldistributionsnamn för lokal utveckling:
export FOUNDRY_PROJECT_ENDPOINT="https://<resource>.services.ai.azure.com/api/projects/<project>"
export AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-4.1"
I PowerShell:
$env:FOUNDRY_PROJECT_ENDPOINT="https://<resource>.services.ai.azure.com/api/projects/<project>"
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-4.1"
När samma kod körs som en värdagent i Foundry injicerar plattformen FOUNDRY_PROJECT_ENDPOINT och AZURE_AI_MODEL_DEPLOYMENT_NAME vid körning.
Svarsprotokoll
Använd protokollet Svar när du vill ha en OpenAI-kompatibel chattslutpunkt med direktuppspelning, svarshistorik och konversationstrådar.
Skapa en Responses-värd
Skapa en fil med namnet main.py med en minimal Agent Framework-agent som använder en Foundry-modell.
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()
Vad det här kodfragmentet gör: Skapar en Agent Framework-agent som backas upp av en Foundry-modell via FoundryChatClientoch skickar sedan agenten till ResponsesHostServer. Värddatorn startar en HTTP-server och gör agenten tillgänglig via POST /responses. Som standard binder servern till port 8088.
Referens: dokumentation om Microsoft Agent Framework
Kör appen lokalt:
python main.py
Skapa en Program.cs fil med en minimal Agent Framework-agent som använder en Foundry-modell via protokollet Svar.
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();
Vad det här kodfragmentet gör: Skapar en AIAgent från Foundry-projektklienten, registrerar den som en Foundry Responses-värd med AddFoundryResponsesoch mappar POST /responses slutpunkten med MapFoundryResponses. Som standard lyssnar värdservern på port 8088.
Referens: AIProjectClient | DefaultAzureCredential
Kör appen lokalt:
dotnet run
Testa svarsslutpunkten
Skicka en begäran om icke-direktuppspelningssvar till den lokala servern.
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"
Servern svarar med ett JSON-objekt som innehåller svarstexten och ett svars-ID. För strömningssvar anger du stream till true. Värden skickar serverutskickade händelser från Responses API, till exempel response.created, response.output_text.delta och response.completed.
Konversationer med flera omgångar
Om du vill fortsätta en konversation skickar du föregående svars-ID i previous_response_id fältet för nästa begäran:
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}'
När agenten körs i Foundry fungerar samma mönster via den värdbaserade agentens svarsslutpunkt. Om senare interaktioner också behöver samma hostade sandbox-filsystem inkluderar du agent_session_id eller använder ett conversation-ID. Mer information finns i Hantera värdbaserade agentsessioner.
Anropsprotokoll
Använd anropsprotokollet när dina anropare inte kan använda formen För svars-API-begäran eller när ditt scenario inte är en chattkonversation. Invocations-värden hanterar sessionstillstånd via en frågeparameter, agent_session_id, och ett svarshuvud.
Skapa en värd för anrop
Använd samma agentkonfiguration som exemplet Svar, men starta InvocationsHostServer i stället för 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()
Vad det här kodfragmentet gör: Är värd för Agent Framework-agenten via POST /invocations. Värdenheten hanterar sessionstillstånd via frågeparametern agent_session_id och svarshuvudet.
Anropsprotokollet använder en InvocationHandler som du implementerar för att bearbeta varje begäran. Registrera anropsservern och hanteraren och mappa sedan slutpunkterna.
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();
Vad det här kodfragmentet gör: Registrerar servertjänsterna för anrop och implementeringen InvocationHandler och mappar /invocations sedan slutpunkterna. Du implementerar MyInvocationHandler för att definiera hur varje begäran bearbetas. Ett fullständigt exempel på en hanterare finns i exemplet .NET-anrop.
Referens: AddInvocationsServer
Testa slutpunkten för anrop
Skicka en begäran till den lokala servern:
curl -sS -X POST http://localhost:8088/invocations \
-H "Content-Type: application/json" \
-d '{"message":"My name is Alice.","stream":false}'
För konversationer med flera turer återanvänder du agent_session_id värdet från svarshuvudet som agent_session_id frågeparameter i nästa begäran:
curl -sS -X POST "http://localhost:8088/invocations?agent_session_id=<session-id>" \
-H "Content-Type: application/json" \
-d '{"message":"What is my name?"}'
Plattformen lagrar inte konversationshistorik för anropsprotokollet.
agent_session_id Använd frågeparametern för att dirigera senare anrop till samma värdbaserade sandbox-miljö.
Deploy
Distribuera med hjälp av Azure Developer CLI (azd). Flödet använder exempel på manifest och Docker för att bygga agentens containeravbildning och driftsätta den i Foundrys värdbaserade agentkörningsmiljö.
Distribution av värdbaserad agent kräver rollen Foundry Project Manager i projektet. Mer information finns i Distribuera en värdbaserad agent.
Installera CLI-tillägget Azure Developer
Installera AI-agenttillägget och logga in innan du initierar ett exempel:
azd ext install azure.ai.agents
azd auth login
Docker måste köras lokalt eftersom azd ai agent run skapar containeravbildningen som deklarerats i exemplets Dockerfile. Mer information om kommandon finns i cli-referensen Azure Developer.
Initiera från ett exempelmanifest
Skapa en ny mapp och initiera den från ett exempelmanifest. Ersätt manifest-URL:en med det exempel som du vill använda.
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
Följ anvisningarna från azd ai agent init. Om du inte redan har ett Foundry-projekt och en modelldistribution kan initieringsflödet vägleda dig genom att skapa dem.
Etablera Azure-resurser
Om det initierade projektet använder ett nytt Foundry-projekt och en ny modelldistribution etablerar du först Azure-resurserna:
azd provision
Det här kommandot skapar en resursgrupp som bland annat innehåller en Foundry-instans, ett Foundry-projekt med en modelldistribution, en Application Insights-instans och ett containerregister för värdbaserade agentavbildningar.
Kör containern lokalt
Kör värden för agenten lokalt via azd:
azd ai agent run
Värden fungerar på http://localhost:8088. I en annan terminal anropar du slutpunkten för det lokala protokollet:
azd ai agent invoke --local "Hello!"
Du kan också anropa slutpunkten direkt med curl:
curl -X POST http://localhost:8088/responses \
-H "Content-Type: application/json" \
-d '{"input": "Hello!"}'
Distribuera till Foundry
Distribuera agenten:
azd deploy
Driftsättningen paketerar agenten i en containeravbild, överför den till det etablerade containerregistret och distribuerar den till den Foundry-värdbaserade agentkörmiljön.
Foundrys värdinfrastruktur injicerar miljövariabler för körningsmiljön i agenten, inklusive:
-
FOUNDRY_PROJECT_ENDPOINT: Slutpunkts-URL:en för Foundry-projektet där agenten distribueras. -
AZURE_AI_MODEL_DEPLOYMENT_NAME: Namnet på modelldistributionen som valdes underazd ai agent init. -
APPLICATIONINSIGHTS_CONNECTION_STRING: Connection string för projektets Application Insights-instans.
Fullständiga distributionsbegrepp, behörigheter och hanteringsinformation finns i Distribuera en värdbaserad agent och Hantera värdbaserad agentlivscykel.
Felsökning
Använd den här checklistan för att diagnostisera vanliga problem när du utvecklar värdbaserade agenter med Agent Framework.
Det går inte att nå modellen i den värdbaserade containern
Bekräfta att den värdbaserade agentversionen innehåller AZURE_AI_MODEL_DEPLOYMENT_NAMEoch att agentidentiteten har behörighet att anropa Foundry-projektet. Plattformen anger FOUNDRY_PROJECT_ENDPOINT; din kod ska läsa den variabeln när den körs i Foundry.
Konversationstillståndet fortsätter inte
För Responses-protokollet ska du skicka med previous_response_id eller ett conversation-ID i senare omgångar.
För protokollet Anrop lagrar plattformen inte konversationshistorik.
Använd en agent_session_id frågeparameter för att dirigera senare anrop till samma värdbaserade sandbox-miljö.
Felmatchning av protokollversion
Om begäranden misslyckas efter en uppgradering kontrollerar du att både manifestet och värdpaketet använder protokollversion 2.0.0. Protokollversionerna 1.0.0 och 2.0.0 är inte kompatibla.