Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come eseguire la migrazione degli agenti ospitati dall'anteprima pubblica iniziale alla versione più recente del servizio Foundry Agent. La versione più recente introduce un nuovo back-end di hosting, librerie di protocolli, modello di identità e API di gestione.
Importante
Il back-end di hosting dell'anteprima pubblica iniziale viene ritirato. È necessario ridistribuire gli agenti usando il nuovo modello descritto in questo articolo. Le distribuzioni di agenti esistenti nel back-end precedente non vengono migrate automaticamente e sono supportate solo fino al 20 agosto 2026.
Questa guida si applica all'utente se hai distribuito un Hosted Agent prima di aprile 2026 usando i pacchetti azure-ai-agentserver-agentframework o azure-ai-agentserver-langgraph oppure eventuale codice personalizzato che usava le API di hosting della versione di anteprima iniziale.
Se si usa un agente di codifica come GitHub Copilot, la competenza Microsoft Foundry consente di eseguire il mapping della distribuzione di anteprima esistente al modello di hosting più recente e aggiornare i comandi o il codice.
Cosa è cambiato
La versione più recente aggiorna la piattaforma esistente con un modello sandbox basato su sessione. Modifiche chiave:
- Ciclo di vita di calcolo automatico : nessun avvio manuale, arresto o gestione delle repliche. La piattaforma esegue il provisioning delle risorse di calcolo quando arriva una richiesta e ne effettua il deprovisioning dopo il timeout di inattività configurato, che per impostazione predefinita è di 15 minuti. Vedi mappatura dei comandi CLI.
-
Isolamento basato sulla sessione — ogni sessione ottiene la propria sandbox con archiviazione persistente
$HOMEe/filestra turni e periodi di inattività. -
Le librerie di protocollo sostituiscono gli adattatori del framework : i pacchetti di adattatori specifici del framework (
azure-ai-agentserver-agentframework,azure-ai-agentserver-langgraph) vengono sostituiti da librerie specifiche del protocollo (azure-ai-agentserver-responses,azure-ai-agentserver-invocations). Vedere Libreria di protocolli e migrazione del framework. - Identità dell'agente dedicato dal momento della distribuzione : ogni agente ottiene la propria identità Entra al momento della creazione, sostituendo il modello di identità gestita del progetto condiviso. Vedere Modifiche di identità e controllo degli accessi in base al ruolo.
-
Endpoint agente dedicato: ogni agente ottiene il proprio URL dell'endpoint, ad esempio
{project_endpoint}/agents/{name}/endpoint/protocols/openai/responses. Non è più possibile instradare attraverso un endpoint di progetto condiviso conagent_referencenel corpo della richiesta. Vedere Modifiche alla chiamata dell'agente. - Nuovi protocolli : chiamate, attività e protocolli A2A vengono aggiunti al protocollo Risposte esistente. Un singolo agente può esporre più protocolli contemporaneamente.
- API REST per il ciclo di vita completo : copertura REST completa per le operazioni di agente, versione, sessione e file. Vedere Modifiche al metodo SDK.
- La creazione dell'host di funzionalità è stata rimossa : la piattaforma gestisce automaticamente il provisioning dell'infrastruttura. Non è più necessario creare un host di funzionalità a livello di account. Vedere Removed APIs (API rimosse).
Prerequisiti
Azure AI Projects SDK versione 2.3.0 o successiva (2.0.0).
Interfaccia della riga di comando per sviluppatori di Azure versione 1.23.0 o successiva con l'estensione degli agenti Foundry aggiornata:
azd ext install azure.ai.agents
Passaggi di migrazione a colpo d'occhio
La procedura seguente riepiloga la migrazione completa. Ognuno collega alla sezione dettagliata.
- Aggiornare le librerie di protocolli e il codice dell'agente : sostituire gli adattatori del framework con le nuove librerie di protocolli e aggiornare il punto di ingresso dell'agente. Scegliere il percorso: Agent Framework, LangGraph o personalizzato/BYO.
- Aggiornare le chiamate API, interfaccia della riga di comando e SDK : rimuovere i comandi dell'interfaccia della riga di comando ritirati, aggiornare i metodi SDK e passare all'endpoint dell'agente dedicato. Vedere Rimozione delle API, mappatura dei comandi dell'interfaccia a riga di comando, modifiche ai metodi SDK e modifiche all'invocazione dell'agente.
- Aggiornare l'identità e il controllo degli accessi in base al ruolo: concedere alle risorse downstream l'accesso all'identità Entra dedicata dell'agente. Vedere Modifiche di identità e controllo degli accessi in base al ruolo.
-
Aggiornare gli strumenti di Azure Developer CLI -- Installare la versione più recente dell'estensione
azdFoundry Agents e aggiornareazure.yaml. Vedere Modifiche all'interfaccia della riga di comando per sviluppatori di Azure. -
Ridistribuire e verificare : compilare l'immagine del contenitore, eseguire la distribuzione con
azd upo l'SDK e verificare che la versione raggiungaactivelo stato.
Per un riepilogo delle attività per attività, vedere l'elenco di controllo per la migrazione alla fine di questo articolo.
Libreria di protocolli e migrazione del framework
L'anteprima iniziale usava pacchetti di adattatori specifici del framework (azure-ai-agentserver-agentframework, azure-ai-agentserver-langgraph) che eseguivano il wrapping del codice dell'agente. La versione più recente sostituisce questi pacchetti con librerie specifiche del protocollo e pacchetti di integrazione del framework aggiornati.
Il percorso di migrazione dipende dal framework usato:
-
Microsoft Agent Framework : usare i pacchetti aggiornati di Agent Framework con il
ResponsesHostServerbridge. -
LangGraph : usare la
azure-ai-agentserver-responseslibreria di protocolli direttamente conResponsesAgentServerHost. -
CrewAI, Kernel semantico o codice personalizzato : usare direttamente le librerie di protocollo (
azure-ai-agentserver-responsesoazure-ai-agentserver-invocations).
Modifiche del pacchetto
Librerie di protocollo (tutti gli utenti)
| Pacchetto di anteprima iniziale | Sostituzione della versione più recente |
|---|---|
azure-ai-agentserver-core |
azure-ai-agentserver-core 2.0.0b1 : ancora necessario, ora installato automaticamente come dipendenza dei pacchetti di protocollo |
azure-ai-agentserver-agentframework |
Rimosso, vedere i percorsi del framework di agenti o della libreria di protocolli più avanti. |
azure-ai-agentserver-langgraph |
Rimosso: usare azure-ai-agentserver-responses o azure-ai-agentserver-invocations direttamente |
Azure.AI.AgentServer.Core(.NET) |
Azure.AI.AgentServer.Core 1.0.0-beta.21 - ancora obbligatorio come dipendenza |
Azure.AI.AgentServer.AgentFramework(.NET) |
Azure.AI.AgentServer.Responses 1.0.0-beta.1 o Azure.AI.AgentServer.Invocations 1.0.0-beta.1 |
Pacchetti di Agent Framework (solo utenti di Agent Framework)
I pacchetti di Agent Framework vengono aggiornati anche per la versione più recente:
| Anteprima iniziale | Versione più recente |
|---|---|
agent-framework (pacchetto singolo) |
agent-framework-core, agent-framework-openai, agent-framework-foundryagent-framework-orchestrations |
AzureAIAgentClient |
FoundryChatClient (da agent_framework.foundry) |
ChatAgent |
Agent (da agent_framework) |
@ai_function Decoratore |
Decorator @tool con il parametro approval_mode |
| Non disponibile |
agent-framework-foundry-hosting — Bridge tra Agent Framework e la libreria di protocolli |
Eseguire la migrazione degli agenti di Agent Framework
Se l'agente usa Microsoft Agent Framework, usare il ResponsesHostServer bridge da agent-framework-foundry-hosting. Questo approccio mantiene intatto il codice di Agent Framework (definizione dell'agente, strumenti, istruzioni) usando la nuova libreria di protocolli.
Anteprima iniziale:
from azure.ai.agentserver.agentframework import from_agent_framework
from agent_framework import ai_function, ChatAgent
from agent_framework.azure import AzureAIAgentClient
client = AzureAIAgentClient(
project_endpoint=PROJECT_ENDPOINT,
model_deployment_name="gpt-4.1",
credential=DefaultAzureCredential(),
)
@ai_function
def get_weather(location: str) -> str:
"""Get the weather for a location."""
return f"The weather in {location} is sunny."
agent = ChatAgent(
chat_client=client,
instructions="You are a helpful assistant.",
tools=[get_weather],
)
if __name__ == "__main__":
from_agent_framework(agent).run()
Ultima versione:
import os
from agent_framework import Agent, tool
from agent_framework.foundry import FoundryChatClient
from agent_framework_foundry_hosting import ResponsesHostServer
from azure.identity import DefaultAzureCredential
from pydantic import Field
from typing_extensions import Annotated
client = FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["MODEL_DEPLOYMENT_NAME"],
credential=DefaultAzureCredential(),
)
@tool(approval_mode="never_require")
def get_weather(
location: Annotated[str, Field(description="The location to get the weather for.")],
) -> str:
"""Get the weather for a location."""
return f"The weather in {location} is sunny."
agent = Agent(
client=client,
instructions="You are a helpful assistant.",
tools=[get_weather],
default_options={"store": False},
)
server = ResponsesHostServer(agent)
server.run()
Differenze principali:
-
AzureAIAgentClient->FoundryChatClient(daagent_framework.foundry). -
ChatAgent->Agent(daagent_framework). -
@ai_function->@tool(approval_mode="never_require")conAnnotatedindicazioni di tipo nelle descrizioni dei parametri. -
from_agent_framework(agent).run()->ResponsesHostServer(agent).run(). - Aggiungere
default_options={"store": False}perché la cronologia delle conversazioni è gestita dalla piattaforma di hosting.
Per gli strumenti MCP, usare client.get_mcp_tool() invece di definire gli strumenti nell'API create_version :
mcp_tool = client.get_mcp_tool(
name="GitHub",
url="https://api.githubcopilot.com/mcp/",
headers={"Authorization": f"Bearer {github_pat}"},
approval_mode="never_require",
)
agent = Agent(client=client, tools=[mcp_tool], ...)
Per esempi, vedere gli esempi dell'agente ospitato in Agent Framework.
Nota
Per la migrazione di .NET (C#) Agent Framework, il modello usa AddFoundryResponses e MapFoundryResponses ASP.NET estensioni anziché ResponsesHostServer. Per esempi completi, vedere .NET Agent Framework Hosted Agent Samples.
Eseguire la migrazione degli agenti LangGraph
Se l'agente usa LangGraph, sostituire l'adattatore azure-ai-agentserver-langgraph con la libreria di azure-ai-agentserver-responses protocolli. La logica dell'agente LangGraph (definizione del grafo, strumenti, configurazione LLM) rimane invariata, ma solo il punto di ingresso dell'hosting cambia.
Anteprima iniziale:
from azure.ai.agentserver.langgraph import from_langgraph
from langchain_openai import AzureChatOpenAI
from langgraph.prebuilt import create_react_agent
llm = AzureChatOpenAI(azure_endpoint=ENDPOINT, azure_deployment="gpt-4o", ...)
tools = [my_tool_a, my_tool_b]
graph = create_react_agent(llm, tools=tools, prompt=SYSTEM_PROMPT)
if __name__ == "__main__":
from_langgraph(graph).run()
Ultima versione:
import asyncio
import os
import httpx
from azure.ai.agentserver.responses import (
CreateResponse,
ResponseContext,
ResponsesAgentServerHost,
ResponsesServerOptions,
TextResponse,
)
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from langchain_core.messages import AIMessage, HumanMessage
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
FOUNDRY_PROJECT_ENDPOINT = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
MODEL = os.environ.get("FOUNDRY_MODEL_NAME", "gpt-4.1")
_token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://ai.azure.com/.default"
)
# httpx auth hook that injects a fresh Microsoft Entra token on every request.
class _AzureTokenAuth(httpx.Auth):
def auth_flow(self, request):
request.headers["Authorization"] = f"Bearer {_token_provider()}"
yield request
llm = ChatOpenAI(
base_url=f"{FOUNDRY_PROJECT_ENDPOINT}/openai/v1",
api_key="placeholder", # overridden by _AzureTokenAuth
model=MODEL,
use_responses_api=True,
http_client=httpx.Client(auth=_AzureTokenAuth()),
)
tools = [my_tool_a, my_tool_b]
graph = create_react_agent(llm, tools=tools, prompt=SYSTEM_PROMPT)
app = ResponsesAgentServerHost(
options=ResponsesServerOptions(default_fetch_history_count=20)
)
@app.response_handler
async def handle(
request: CreateResponse,
context: ResponseContext,
cancellation_signal: asyncio.Event,
):
async def run_graph():
try:
history = await context.get_history()
except Exception:
history = []
user_input = await context.get_input_text() or ""
# Convert platform history to LangChain messages
lc_messages = []
for item in history:
if hasattr(item, "content"):
for c in item.content:
if hasattr(c, "text") and c.text:
if item.role == "user":
lc_messages.append(HumanMessage(content=c.text))
else:
lc_messages.append(AIMessage(content=c.text))
lc_messages.append(HumanMessage(content=user_input))
result = await graph.ainvoke({"messages": lc_messages})
raw = result["messages"][-1].content
if isinstance(raw, list):
yield "".join(
block.get("text", "") if isinstance(block, dict) else str(block)
for block in raw
)
else:
yield raw or ""
return TextResponse(context, request, text=run_graph())
if __name__ == "__main__":
app.run()
Differenze principali:
-
azure-ai-agentserver-langgraph->azure-ai-agentserver-responses. L'adattatore specifico di LangGraph viene rimosso. -
from_langgraph(graph).run()->ResponsesAgentServerHostesplicito con@app.response_handlerche restituisceTextResponse. - Usa
ChatOpenAIconbase_url=f"{FOUNDRY_PROJECT_ENDPOINT}/openai/v1"invece diAzureChatOpenAI. Viene usato l'endpoint con ambito progetto, che richiede solo autorizzazioni a livello di progetto. - La cronologia delle conversazioni viene recuperata tramite
context.get_history()e convertita in tipi di messaggi LangChain per il supporto a più turni. - La logica dell'agente LangGraph (strumenti, creazione del grafo) rimane invariata. Per il controllo dettagliato sulle chiamate di funzione, sulla logica degli elementi o su più tipi di output, usare
ResponseEventStreamanzichéTextResponse.
Integrazione della casella degli strumenti MCP
Per connettere l'agente LangGraph agli strumenti nella casella degli strumenti Foundry tramite MCP, usare langchain-mcp-adapters all'interno del gestore. Caricare gli strumenti in modo dinamico dall'endpoint MCP:
from langchain_mcp_adapters.tools import load_mcp_tools
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
@app.response_handler
async def handle(request, context, cancellation_signal):
user_input = await context.get_input_text()
endpoint = os.environ["TOOLBOX_ENDPOINT"]
token = DefaultAzureCredential().get_token("https://ai.azure.com/.default").token
headers = {
"Authorization": f"Bearer {token}",
"Foundry-Features": "Toolsets=V1Preview",
}
async with streamablehttp_client(endpoint, headers=headers) as (r, w, _):
async with ClientSession(r, w) as session:
await session.initialize()
tools = await load_mcp_tools(session)
graph = create_react_agent(llm, tools=tools, prompt=SYSTEM_PROMPT)
result = await graph.ainvoke(
{"messages": [{"role": "user", "content": user_input}]},
)
# ... extract answer and return TextResponse
Aggiungere questi pacchetti a requirements.txt:
langchain-mcp-adapters>=0.1.0
mcp>=1.0.0
Per esempi completi, consulta gli esempi dell'agente Hosted di LangGraph.
Eseguire la migrazione di agenti BYO (Bring Your Own) o personalizzati
Se si usa CrewAI, Kernel semantico o altro codice personalizzato, usare direttamente la libreria di protocolli. Le librerie di protocolli sono indipendenti dal framework, quindi puoi gestire l'orchestrazione, gli strumenti e la memoria nel tuo codice personalizzato.
Protocollo di risposte : usare ResponsesAgentServerHost per gli agenti di conversazione. Registra il gestore con il decoratore @app.response_handler.
import asyncio
from azure.ai.agentserver.responses import (
CreateResponse,
ResponseContext,
ResponsesAgentServerHost,
TextResponse,
)
app = ResponsesAgentServerHost()
@app.response_handler
async def handler(
request: CreateResponse,
context: ResponseContext,
cancellation_signal: asyncio.Event,
):
text = await context.get_input_text()
return TextResponse(context, request, text=f"Echo: {text}")
app.run()
Per le risposte in streaming, passare un iterabile asincrono a TextResponse. Per il controllo dettagliato sulle chiamate di funzione, sulla logica degli elementi o su più tipi di output, usare ResponseEventStream anziché TextResponse.
Protocollo chiamate : usare InvocationAgentServerHost per gli agenti che necessitano di payload JSON arbitrari (webhook, elaborazione non conversazionale). Il gestore usa direttamente i tipi Starlette Request/Response :
from azure.ai.agentserver.invocations import InvocationAgentServerHost
from starlette.requests import Request
from starlette.responses import JSONResponse, Response
app = InvocationAgentServerHost()
@app.invoke_handler
async def handle(request: Request) -> Response:
data = await request.json()
return JSONResponse({"greeting": f"Hello, {data['name']}!"})
app.run()
Il protocollo Invocations supporta anche operazioni a esecuzione prolungata con @app.get_invocation_handler e @app.cancel_invocation_handler per il polling e l'annullamento.
Scegliere il protocollo in base al modello di interazione dell'agente. Vedere Che cosa sono gli agenti ospitati - Protocolli per indicazioni su quale protocollo usare.
Modifica del formato della versione del protocollo
Il formato della versione del protocollo è cambiato da "v1" a semver "1.0.0":
# Initial preview
ProtocolVersionRecord(protocol=AgentEndpointProtocol.RESPONSES, version="v1")
# Latest version
ProtocolVersionRecord(protocol=AgentEndpointProtocol.RESPONSES, version="1.0.0")
Protocollo del contenitore 2.0.0
La versione 2.0.0 del protocollo del contenitore modifica il modo in cui l'identità associata a ogni richiesta viene trasmessa al contenitore e alle chiamate ai servizi downstream. La versione 1.0.0 è deprecata. Dopo il periodo di deprecazione, la piattaforma blocca le richieste agli agenti che utilizzano ancora il protocollo 1.0.0.
Il protocollo 2.0.0 consente anche a una sessione di servire in modo sicuro più utenti. Nella versione 1.0.0 una sessione è associata all'identità di un singolo chiamante, quindi gli utenti simultanei nella stessa sessione possono interferire tra loro. Nella versione 2.0.0, ogni richiesta porta con sé il proprio contesto utente, così una sessione può servire molti utenti senza che le loro identità entrino in conflitto.
| Aspetto | Protocollo 1.0.0 (deprecato) | Protocollo 2.0.0 (corrente) |
|---|---|---|
| Identità in uscita | La piattaforma propaga automaticamente l'identità; il contenitore non esegue alcuna operazione. | Il contenitore riceve un'intestazione x-agent-foundry-call-id per ogni richiesta e la inoltra nelle chiamate in uscita ai servizi Foundry. |
| Dati per utente | Definito tramite chiavi di isolamento. | Definito dall'intestazione x-agent-user-id che la piattaforma inserisce. |
| Più utenti per sessione | Non supportato: una sessione è associata all'identità di un chiamante. | Supportato: ogni richiesta contiene il proprio contesto utente. |
Per eseguire una migrazione:
- Impostare la versione del protocollo del contenitore su
2.0.0nel servizioazure.ai.agentinazure.yaml. - Inoltra l'intestazione
x-agent-foundry-call-idper ogni richiesta nelle chiamate in uscita verso i servizi Foundry (Storage, Toolbox e altri agenti). Gli adattatori SDK ufficiali eseguono questa operazione automaticamente quando si chiamano tali servizi tramite i client. Se si effettuano chiamate HTTP non elaborate, leggerex-agent-foundry-call-iddalla richiesta in ingresso e aggiungerla, senza modifiche, alla richiesta in uscita. Non eseguire il parsing del valore: la piattaforma determina l'identità del chiamante a partire da esso. - Per partizionare i dati archiviati dal contenitore per utente, leggere l'intestazione
x-agent-user-id. Per un esempio pratico, vedi Gestire più utenti in un'unica sessione di un agente ospitato.
Per l'elenco completo delle intestazioni della piattaforma e delle variabili di ambiente, consulta il contratto di runtime dell'agente ospitato.
API rimosse
Le API seguenti dell'anteprima iniziale non sono disponibili nella versione più recente:
| L'API è stata rimossa | Motivo |
|---|---|
az cognitiveservices agent start |
Il ciclo di vita di calcolo è automatico: non è necessario avviare manualmente |
az cognitiveservices agent stop |
Eseguire il deprovisioning delle risorse di calcolo automaticamente dopo il timeout di inattività configurato |
az cognitiveservices agent update |
Sostituito da PATCH /agents/{name} per il routing degli endpoint; creare una nuova versione per le modifiche di runtime |
az cognitiveservices agent delete-deployment |
Eliminare direttamente la versione |
az cognitiveservices agent list-versions |
Usare az rest --method GET con l'API REST |
az cognitiveservices agent show |
Usare az rest --method GET o azd ai agent show |
Creazione dell'host di funzionalità (PUT .../capabilityHosts/accountcaphost) |
La piattaforma gestisce automaticamente l'infrastruttura |
tools parametro in create_version |
È possibile accedere agli strumenti tramite l'endpoint MCP della casella degli strumenti Foundry in fase di esecuzione |
Mapping dei comandi dell'interfaccia della riga di comando
| CLI di anteprima iniziale | Equivalente alla versione più recente |
|---|---|
az cognitiveservices agent start --name X --agent-version 1 |
Rimosso: il calcolo viene avviato automaticamente alla prima richiesta |
az cognitiveservices agent stop --name X --agent-version 1 |
Rimosso: il calcolo si arresta automaticamente dopo il timeout di inattività |
az cognitiveservices agent update --min-replicas N --max-replicas M |
Rimosso: nessuna gestione delle repliche |
az cognitiveservices agent show --name X |
az rest --method GET --url "$BASE_URL/agents/X" --resource "https://ai.azure.com" |
az cognitiveservices agent list-versions --name X |
az rest --method GET --url "$BASE_URL/agents/X/versions" --resource "https://ai.azure.com" |
az cognitiveservices agent delete --name X |
az rest --method DELETE --url "$BASE_URL/agents/X" --resource "https://ai.azure.com" |
az cognitiveservices agent delete --name X --agent-version 1 |
az rest --method DELETE --url "$BASE_URL/agents/X/versions/1" --resource "https://ai.azure.com" |
az cognitiveservices agent delete-deployment --name X --agent-version 1 |
Rimosso: eliminare invece la versione |
Dove BASE_URL è https://{account}.services.ai.azure.com/api/projects/{project}.
Modifiche al metodo SDK
| Anteprima iniziale | Versione più recente |
|---|---|
pip install "azure-ai-projects>=2.0.0" |
pip install "azure-ai-projects>=2.3.0" |
project.get_openai_client() Con extra_body={"agent_reference": {"name": ..., "type": "agent_reference"}} |
project.get_openai_client(agent_name="my-agent") — il client è preconfigurato, non è necessario extra_body |
ProtocolVersionRecord(protocol=AgentEndpointProtocol.RESPONSES, version="v1") |
ProtocolVersionRecord(protocol=AgentEndpointProtocol.RESPONSES, version="1.0.0") |
tools=[...] in HostedAgentDefinition |
Rimosso: usare invece l'endpoint MCP della casella degli strumenti Foundry |
| Non disponibile |
project.agents.create_session(agent_name, isolation_key=..., version_indicator=...), .get_session(), .list_sessions().delete_session(isolation_key=...) |
| Non disponibile |
project.agents.download_session_file(path=...), .get_session_files(path=...), .delete_session_file(path=...) |
| Non disponibile |
project.agents.update_details() per pianificazione percorso della versione dell'endpoint |
| Non disponibile |
metadata={"enableVnextExperience": "true"} parametro in client.agents.create_version() |
Modifiche alla chiamata dell'agente
Nell'anteprima iniziale, hai instradato gli agenti tramite un endpoint di progetto condiviso, passando un parametro agent_reference nel corpo della richiesta. Nella versione più recente, ogni agente ottiene un endpoint dedicato e l'SDK viene associato automaticamente.
Anteprima iniziale:
openai_client = project.get_openai_client()
response = openai_client.responses.create(
input=[{"role": "user", "content": "Hello!"}],
extra_body={"agent_reference": {"name": "my-agent", "type": "agent_reference"}}
)
Ultima versione:
openai_client = project.get_openai_client(agent_name="my-agent")
response = openai_client.responses.create(
input="Hello!",
)
print(response.output_text)
Il agent_name parametro indica all'SDK di specificare come destinazione l'endpoint dedicato dell'agente. Per le chiamate REST, usare direttamente l'endpoint dell'agente:
curl -X POST "$BASE_URL/agents/my-agent/endpoint/protocols/openai/responses?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"input": "Hello!", "model": "gpt-4.1", "stream": false}'
Nota
Le versioni di anteprima precedenti richiedono un'intestazione Foundry-Features: HostedAgents=V1Preview nelle chiamate REST agli endpoint dell'agente ospitato. Con la versione azure-ai-projects 2.3.0 dell'API GA v1, gli agenti ospitati sono ora generalmente disponibili e questa intestazione non è più necessaria.
Gli endpoint attivi dipendono dai protocolli dichiarati nella definizione della versione dell'agente. Le risposte e le conversazioni vengono instradate nello spazio dei nomi compatibile con OpenAI in {project_endpoint}/agents/{name}/endpoint/protocols/openai/{responses|conversations}, mentre le chiamate, l'attività e la route A2A vengono indirizzate direttamente a {project_endpoint}/agents/{name}/endpoint/protocols/{invocations|activityprotocol|a2a}.
Modifiche dello stato della versione
Gli stati del ciclo di vita dell'agente passano da uno stato manuale a stati di provisioning automatico:
| Stato di anteprima iniziale | Stato della versione più recente |
|---|---|
Stopped (iniziale) |
Non applicabile - nessuno stato arrestato |
Starting ->Started |
creating ->active |
Failed |
failed |
Running- ->Stopping>Stopped |
Non applicabile - il deprovisioning delle risorse di calcolo avviene automaticamente |
| Non disponibile |
deleting ->deleted |
Modifiche all'identità e al controllo degli accessi in base al ruolo
Il modello di identità è cambiato in modo significativo:
| Aspetto | Anteprima iniziale | Versione più recente |
|---|---|---|
| Identità di runtime dell'agente non pubblicata | Identità gestita del progetto (condivisa) | Identità dedicata dell'agente Entra (per ogni agente) |
| Quando viene creata un'identità dedicata | Solo al momento della pubblicazione | Al momento del rilascio (ogni agente) |
| Ruolo di identità gestita del progetto | Identità di runtime per tutti gli agenti non pubblicati | Solo infrastruttura - per il pull delle immagini del contenitore |
| Ruolo di distribuzione obbligatorio | Foundry Owner (nuovo progetto), Responsabile IA + Collaboratore (nuove risorse), o Lettore + Utente Foundry (progetto esistente) | Responsabile di progetto Foundry nell'ambito del progetto |
| Riconfigurazione del controllo degli accessi in base al ruolo post-pubblicazione | Obbligatorio: le autorizzazioni MI del progetto non vengono trasferite all'identità dell'agente. | Non obbligatorio: l'agente ha la propria identità fin dall'inizio |
Importante
I ruoli di Controllo degli accessi in base al ruolo di Foundry sono stati recentemente rinominati. Foundry User, Foundry Owner, Foundry Account Owner e Foundry Project Manager erano precedentemente denominati Azure AI User, Azure AI Owner, Azure AI Account Owner e Azure AI Project Manager. È possibile che i nomi precedenti vengano visualizzati in alcune posizioni durante l'esecuzione della ridenominazione. Gli ID ruolo e le autorizzazioni di base sono invariati dalla ridenominazione.
Azione richiesta
- Aggiornare le assegnazioni RBAC: l'identità gestita del progetto non è più l'identità di runtime. Concedere invece i ruoli del controllo degli accessi in base al ruolo per le risorse di Azure downstream direttamente all'identità Entra dell'agente.
- Semplificare i ruoli di distribuzione: È necessario un Project Manager di Foundry a livello di progetto per creare e distribuire gli agenti Hosted.
Modifiche all'interfaccia della riga di comando per sviluppatori di Azure
Nota
I manifesti dell'agente (agent.manifest.yaml) e le definizioni degli agenti autonomi (agent.yaml) sono deprecati. A partire dalle estensioni Foundry azd (azure.ai.agents 1.0.0-beta.1), tutta la configurazione dell'agente ospitato si trova in un singolo oggetto azure.yaml. Vedere Creare Azure.yaml per gli agenti ospitati
Comandi aggiornati
| Anteprima iniziale | Versione più recente |
|---|---|
azd init -t https://github.com/Azure-Samples/azd-ai-starter-basic |
azd ai agent init (selezione interattiva del modello) |
azd ai agent init --project-id /subscriptions/.../projects/... |
Stessa sintassi, ancora supportata |
azd up |
Stesso: provisioning, compilazioni, push, creazione versione |
azd down |
Stesso : pulisce le risorse |
| Non disponibile |
azd ai agent show — visualizzare lo stato dell'agente |
| Non disponibile |
azd ai agent monitor — log e stato in tempo reale |
| Non disponibile |
azd ai agent invoke --input "..." — richiamare l'agente |
| Non disponibile |
azd ai agent files upload/list/download/remove — gestione dei file di sessione |
Azione richiesta
Aggiornare l'estensione degli agenti di Foundry:
azd ext install azure.ai.agentsSe il tuo
azure.yamlspecificaversion: "v1"per le versioni del protocollo in un servizioazure.ai.agent, modificalo inversion: "1.0.0".
Modifiche allo streaming dei log
| Aspetto | Anteprima iniziale | Versione più recente |
|---|---|---|
| Endpoint | .../versions/{v}/containers/default:logstream |
.../versions/{v}/sessions/{sessionId}:logstream |
| Formato risposta | Testo normale (a blocchi) | Server-Sent Events (SSE) con payload JSON |
| Parametri di query |
kind=console\|system, tail=20, replica_name |
Semplificato: nessun parametro di query necessario |
| Numero massimo di connessioni | 10 minuti | 30 minuti |
| Timeout di inattività | 1 minuto | 2 minuti |
| azd access | Non disponibile | azd ai agent monitor |
Lacune conosciute
Le funzionalità seguenti dell'anteprima iniziale non sono ancora disponibili nella versione più recente:
| Funzionalità | Stato | Soluzione |
|---|---|---|
az cognitiveservices agent Estensione dell'interfaccia della riga di comando |
Rimosso: nessun comando di interfaccia da riga di comando proprietario | Usare az rest per le chiamate API REST o azd ai agent per i flussi di lavoro per sviluppatori |
| Aggiornamenti dei metadati non con controllo delle versioni (descrizione, tag) | Non ancora disponibile tramite SDK | Usare az rest --method PATCH con l'API REST |
| Ridimensionamento esplicito delle repliche (repliche min/max) | Sostituito dal ridimensionamento automatico basato su sessioni | Le sessioni vengono ridimensionate automaticamente; nessuna configurazione necessaria |
| Eliminare la distribuzione senza eliminare la versione | Non disponibile | Eliminare direttamente la versione; creare una nuova versione quando necessario |
Elenco di controllo per la migrazione
Usare questo elenco di controllo per tenere traccia della migrazione:
- Aggiornare
azure-ai-projectsl'SDK alla versione 2.1.0 o successiva. -
Utenti di Agent Framework: aggiornare i pacchetti di Agent Framework (
agent-framework-core,agent-framework-foundry,agent-framework-foundry-hostinge altri). Sostituirefrom_agent_framework(agent).run()conResponsesHostServer(agent).run(). AggiornaAzureAIAgentClientdaFoundryChatClientaChatAgent,Agentda@ai_functiona@tool. -
Utenti di LangGraph: sostituire
azure-ai-agentserver-langgraphconazure-ai-agentserver-responses. Sostituirefrom_langgraph(graph).run()con un gestoreResponsesAgentServerHostche restituisce un oggettoTextResponse. UsareChatOpenAIcon l'endpoint con ambito di progetto anzichéAzureChatOpenAI. Aggiungerelangchain-mcp-adaptersemcpse si usa la casella degli strumenti Foundry. -
Utenti personalizzati/BYO: sostituire i pacchetti dell'adattatore framework con librerie di protocolli (
azure-ai-agentserver-responsesoazure-ai-agentserver-invocations). Riscrivere i punti di ingresso dell'agente usandoResponsesAgentServerHostoInvocationAgentServerHost. - Aggiornare le stringhe di versione del protocollo da
"v1"a"1.0.0"nel codice eazure.yaml. - Aggiornare
azure.yamlse si usaazd(formato della versione del protocollo e impostazioni dell'agente nelazure.ai.agentservizio). - Rimuovere le chiamate
az cognitiveservices agentCLI dagli script e dalle pipeline CI/CD; sostituire con comandiaz restoazd ai agent. - Rimuovere i passaggi di creazione dell'host di funzionalità dagli script di provisioning.
- Aggiornare il codice di chiamata dell'agente: usare
project.get_openai_client(agent_name=...)invece diextra_bodyconagent_reference. - Rivedere il controllo degli accessi in base al ruolo: concedere l'accesso alle risorse downstream all'identità Entra dedicata dell'agente, non all'identità gestita dal progetto.
- Aggiornare l'estensione degli agenti Foundry
azdalla versione più recente. - Creare un'immagine del contenitore con
--platform linux/amd64(se non è già stato fatto). - Ridistribuire l'agente usando
azd upo il metodo SDKcreate_version. - Verificare che la nuova versione raggiunga lo stato
activeprima di inviare il traffico.