Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Hostowane agenty w usłudze Microsoft Foundry Agent umożliwiają wdrażanie agentów programu *Agent Framework* jako konteneryzowanych aplikacji w infrastrukturze zarządzanej przez Microsoft. Platforma obsługuje skalowanie, trwałość stanu sesji, zabezpieczenia i zarządzanie cyklem życia, dzięki czemu można skoncentrować się na logice agenta.
Dzięki integracji hostingu w ramach Agent Framework możesz wziąć dowolny Agent lub przepływ pracy i wystawić go za pośrednictwem protokołu Foundry Responses lub Invocations przy minimalnym kodzie.
Kiedy używać hostowanych agentów
Wybierz hostowane przez Foundry agenty, jeśli chcesz:
- Infrastruktura zarządzana — nie trzeba samodzielnie konfigurować kontenerów, serwerów internetowych ani reguł skalowania.
-
Wbudowane zarządzanie sesjami — platforma utrwala
$HOMEi przesyła pliki przez kolejki i okresy bezczynności. - Tożsamość dedykowanego agenta — każdy wdrożony agent uzyskuje własną tożsamość Entra na potrzeby bezpiecznego dostępu do modeli, narzędzi i usług podrzędnych.
- Punkty końcowe zgodne z interfejsem OpenAI — klienci mogą korzystać z agenta przy użyciu dowolnego zestawu SDK zgodnego z interfejsem OpenAI za pośrednictwem protokołu Odpowiedzi.
Uwaga / Notatka
Hostowani agenci programu Foundry są obecnie w wersji zapoznawczej. Zapoznaj się z dokumentacją agentów hostowanych w usłudze Foundry , aby uzyskać informacje o najnowszej dostępności, limitach i cenach.
Wymagania wstępne
- Subskrypcja platformy Azure
- Azure Developer CLI (
azd) z rozszerzeniem agenta sztucznej inteligencji:
Do testowania lokalnego potrzebne są również następujące elementy:
- Projekt Microsoft Foundry z wdrożeniem modelu (na przykład
gpt-4o) - Zainstalowany i uwierzytelniony interfejs wiersza polecenia platformy Azure (
az login)
- .NET 10 SDK lub nowszy
Zainstaluj pakiet NuGet hostingu:
dotnet add package Microsoft.Agents.AI.Foundry.Hosting --prerelease
dotnet add package Azure.AI.Projects --prerelease
- Python 3.10 lub nowszy
Zainstaluj pakiet Python hostingu:
pip install agent-framework agent-framework-foundry-hosting
Protokół odpowiedzi
Protokół Responses jest zalecanym punktem wyjścia dla większości agentów. Udostępnia punkt końcowy zgodny z interfejsem OpenAI /responses, a platforma automatycznie zarządza historią konwersacji, przesyłaniem strumieniowym oraz cyklem życia sesji.
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();
Obiekt AgentHost.CreateBuilder tworzy wstępnie skonfigurowany serwer aplikacji w środowisku hostingu Foundry.
AddFoundryResponses rejestruje agenta w procedurze obsługi protokołu Responses i MapFoundryResponses mapuje /responses punkt końcowy HTTP.
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()
Element ResponsesHostServer opakowuje instancję agenta i uwidacznia ją za pośrednictwem protokołu Foundry Responses. Ustawienie store na False w default_options pozwala uniknąć duplikowania historii konwersacji, ponieważ historia jest automatycznie zarządzana przez infrastrukturę hostingu.
Protokół wywołań
Protokół Wywołania zapewnia pełną kontrolę nad żądaniem HTTP i odpowiedzią. Użyj go, gdy potrzebujesz niestandardowych ładunków, przetwarzania niekonwersacyjnego lub protokołów przesyłania strumieniowego, które nie są zgodne z OpenAI.
Za pomocą protokołu Invocations w języku C# implementujesz niestandardowy InvocationHandler, aby przetwarzać przychodzące żądania.
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();
Metoda AddInvocationsServer rejestruje usługi protokołu Invocations. Zaimplementowana jest implementacja InvocationHandler w celu zdefiniowania sposobu przetwarzania poszczególnych żądań przez agenta.
Dla uproszczonej konfiguracji użyj InvocationsHostServer z pakietu agent_framework_foundry_hosting. Automatycznie opakowuje agenta w sposób podobny do ResponsesHostServer i zajmuje się zarządzaniem sesjami:
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()
Aby uzyskać pełną kontrolę nad obsługą żądań, użyj InvocationAgentServerHost bezpośrednio z pakietu azure.ai.agentserver.invocations i zaimplementuj własną procedurę obsługi wywołań:
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()
Ostrzeżenie
Magazyn sesji w pamięci w przykładowym niestandardowym programie obsługi jest tracony po ponownym uruchomieniu. Użyj magazynu trwałego (na przykład Cosmos DB) w środowisku produkcyjnym.
Uwaga / Notatka
Obsługa języka Go dla agentów hostowanych w usłudze Foundry będzie wkrótce dostępna. Aktualny status znajdziesz w repozytorium Agent Framework dla Go.
Tip
Zapoznaj się z przykładami Python lub C#, aby zobaczyć projekty hostowanych agentów. Możesz też użyć polecenia azd ai agent init do utworzenia szkieletu projektu agenta hostowanego od podstaw. Zapoznaj się z tym przewodnikiem Szybki start , aby uzyskać instrukcje krok po kroku.
Uruchamianie lokalnie
Interfejs wiersza polecenia dewelopera Azure (azd) zapewnia najprostszy sposób uruchamiania i testowania hostowanego agenta lokalnie.
Inicjowanie projektu
Utwórz nowy folder i zainicjuj go na podstawie przykładowego manifestu:
mkdir my-hosted-agent && cd my-hosted-agent
azd ai agent init -m <path-to-agent.manifest.yaml>
Tip
Manifest może być ścieżką do lokalnego pliku YAML lub adresu URL zdalnego manifestu.
Ustawianie zmiennych środowiskowych
export FOUNDRY_PROJECT_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>"
export AZURE_AI_MODEL_DEPLOYMENT_NAME="<your-model-deployment>"
Uruchom hosta agenta
azd ai agent run
Agent host rozpoczyna działanie na http://localhost:8088.
Wywoływanie agenta
azd ai agent invoke --local "Hello!"
Możesz też użyć curl:
curl -X POST http://localhost:8088/responses \
-H "Content-Type: application/json" \
-d '{"input": "Hello!"}'
Lub w programie PowerShell:
(Invoke-WebRequest -Uri http://localhost:8088/responses -Method POST -ContentType "application/json" -Body '{"input": "Hello!"}').Content
Wdrażanie do platformy Foundry
Po zweryfikowaniu agenta lokalnie wdróż go w usłudze Microsoft Foundry:
Aprowizuj zasoby (jeśli nie masz jeszcze projektu Foundry):
azd provisionTworzy grupę zasobów z instancją Foundry, projektem, implementacją modelu, Application Insights i rejestrem kontenerów.
Wdróż agenta:
azd deploySpakietuje to Twojego agenta jako obraz kontenera, wypchnie go do Azure Container Registry i wdroży w usłudze Foundry Agent Service.
Infrastruktura hostingu rozwiązania Foundry automatycznie wprowadza następujące zmienne środowiskowe do kontenera agenta w czasie wykonywania:
| Zmienna | Description |
|---|---|
FOUNDRY_PROJECT_ENDPOINT |
Adres URL punktu końcowego dla projektu Foundry. |
AZURE_AI_MODEL_DEPLOYMENT_NAME |
Nazwa wdrożenia modelu (skonfigurowana podczas azd ai agent init). |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Usługa Application Insights parametry połączenia na potrzeby telemetrii. |
Po wdrożeniu agent jest dostępny za pośrednictwem dedykowanego punktu końcowego rozwiązania Foundry i można go również przetestować w portalu Foundry.