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.
Hosted-agenter i Microsoft Foundry Agent Service kan du distribuera Agent Framework-agenter som containerbaserade program till Microsoft hanterad infrastruktur. Plattformen hanterar skalning, sessionstillståndsbeständighet, säkerhet och livscykelhantering så att du kan fokusera på agentens logik. Microsoft Foundry Hosted Agents är allmänt tillgänglig.
Med agentramverkets värdintegrering kan du exponera ett Agent, inklusive ett arbetsflöde omslutet med Workflow.as_agent(), via protokollet Foundry Responses eller Invocations med minimal kod.
När värdbaserade agenter ska användas
Välj Foundry-värdbaserade agenter när du vill:
- Hanterad infrastruktur – du behöver inte konfigurera containrar, webbservrar eller skalningsregler själv.
-
Inbyggd sessionshantering – plattformen bevarar
$HOMEoch uppladdade filer över omgångar och inaktiva perioder. - Dedikerad agentidentitet – varje distribuerad agent får sin egen Entra-identitet för säker åtkomst till modeller, verktyg och underordnade tjänster.
- OpenAI-kompatibla slutpunkter – klienter kan interagera med din agent med valfri OpenAI-kompatibel SDK via protokollet Svar.
Anmärkning
Python-integreringen agent-framework-foundry-hosting är en förhandsversion. Microsoft Foundry Hosted Agents, den hanterade värdtjänsten, är allmänt tillgänglig.
Förutsättningar
- En prenumeration på Azure
-
Azure Developer CLI (
azd) med AI-agenttillägget:azd ext install azure.ai.agents
För lokal testning behöver du också:
- Ett Microsoft Foundry projekt med en modelldistribution (till exempel
gpt-4o) -
Azure CLI installerat och autentiserat (
az login)
- .NET 10 SDK eller senare
Installera NuGet-värdpaketet:
dotnet add package Microsoft.Agents.AI.Foundry.Hosting --prerelease
dotnet add package Azure.AI.Projects --prerelease
- Python 3.10 eller senare
Installera värdpaketet för förhandsversion, Foundry-klienten och Azure autentiseringspaketet:
pip install --pre agent-framework-foundry agent-framework-foundry-hosting azure-identity
I Foundry tillhandahåller plattformen anroparens användarkontext och samtalskontext. värdinfrastrukturen använder dem för att isolera tillstånd per användare och vidarebefordra begärandekontext till Foundry-tjänster. Lokala körningar får inte den plattformskontexten, så applikationer måste tillhandahålla egna kontroller för identitet och tillstånd vid behov.
Svarsprotokoll
Protokollet Svar är den rekommenderade startpunkten för de flesta agenter. Den exponerar en OpenAI-kompatibel /responses slutpunkt och plattformen hanterar konversationshistorik, strömning och sessionslivscykel automatiskt.
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();
AgentHost.CreateBuilder skapar ett programvärd som är förkonfigurerat för värdmiljön Foundry.
AddFoundryResponses registrerar din agent med svarsprotokollhanteraren och MapFoundryResponses mappar /responses HTTP-slutpunkten.
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()
Omsluter ResponsesHostServer din agent och exponerar den via protokollet Foundry Responses. Om du anger storeFalse i default_options undviks duplicering av konversationshistorik eftersom värdinfrastrukturen hanterar historiken automatiskt.
Anropsprotokoll
Protokollet Anrop ger dig fullständig kontroll över HTTP-begäran och -svaret. Använd den när du behöver anpassade nyttolaster, icke-konversationsbearbetning eller direktuppspelningsprotokoll som inte är OpenAI-kompatibla.
Med protokollet Anrop i C# implementerar du en anpassad InvocationHandler för att bearbeta inkommande begäranden:
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();
Metoden AddInvocationsServer registrerar protokolltjänsterna för anrop. Du implementerar InvocationHandler för att definiera hur din agent bearbetar varje begäran.
För en enkel installation använder du InvocationsHostServer från agent_framework_foundry_hosting paketet. Den omsluter din agent på samma sätt som ResponsesHostServer och hanterar sessionshantering automatiskt:
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()
För fullständig kontroll över hanteringen av förfrågningar, använder du InvocationAgentServerHost från azure.ai.agentserver.invocations-paketet direkt och implementerar din egen anroparhanterare.
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()
Varning
Minnesinternt sessionsarkiv i exemplet med anpassad hanterare går förlorat vid omstart. Använd varaktig lagring (till exempel Cosmos DB) i produktion.
Anmärkning
Go-stöd för värdbaserade agenter i Foundry blir snart tillgängligt. Se Agent Framework Go-lagringsplatsen för den senaste statusen.
Tips/Råd
Se exemplen Python eller C# för exempel på ett värdbaserat agentprojekt. Eller använd azd ai agent init kommandot för att skapa ett nytt värdbaserat agentprojekt från grunden. I den här snabbstartsguiden finns stegvisa instruktioner.
Körs på lokal nivå
AZURE Developer CLI (azd) är det enklaste sättet att köra och testa din värdbaserade agent lokalt.
Initiera ett projekt
Skapa en ny mapp och initiera från ett exempelmanifest:
mkdir my-hosted-agent && cd my-hosted-agent
azd ai agent init -m <path-to-agent.manifest.yaml>
Tips/Råd
Manifestet kan vara en sökväg till en lokal YAML-fil eller en URL till ett fjärrmanifest.
Ange miljövariabler
export FOUNDRY_PROJECT_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>"
export AZURE_AI_MODEL_DEPLOYMENT_NAME="<your-model-deployment>"
Kör agentvärden
azd ai agent run
Värddator för agenten startar och körs på http://localhost:8088.
Anropa agenten
azd ai agent invoke --local "Hello!"
Eller använd curl:
curl -X POST http://localhost:8088/responses \
-H "Content-Type: application/json" \
-d '{"input": "Hello!"}'
Eller i PowerShell:
(Invoke-WebRequest -Uri http://localhost:8088/responses -Method POST -ContentType "application/json" -Body '{"input": "Hello!"}').Content
Distribuera till Foundry
När du har verifierat din agent lokalt distribuerar du den till Microsoft Foundry:
Etablera resurser (om du inte redan har ett Foundry-projekt):
azd provisionDå skapas en resursgrupp med en Foundry-instans, ett projekt, en modelldistribution, Application Insights och ett containerregister.
Distribuera agenten:
azd deployDetta paketerar din agent som en containeravbildning, push-överför den till Azure Container Registry och distribuerar den till Foundry Agent Service.
Foundry-värdinfrastrukturen matar automatiskt in följande miljövariabler i din agentcontainer vid körning:
| Variabel | Description |
|---|---|
FOUNDRY_PROJECT_ENDPOINT |
Slutpunkts-URL:en för Foundry-projektet. |
AZURE_AI_MODEL_DEPLOYMENT_NAME |
Namnet på modelldistributionen (konfigurerades under azd ai agent init). |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Anslutningssträng för Application Insights-telemetri. |
När agenten har distribuerats är den tillgänglig via sin dedikerade Foundry-slutpunkt och kan även testas från Foundry-portalen.