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.
Questa esercitazione illustra come aggiungere funzionalità agentiche a un'applicazione CRUD FastAPI basata sui dati esistente. A tale scopo, si usano due approcci diversi: LangGraph e Foundry Agent Service.
Se l'applicazione Web ha già funzionalità utili, ad esempio acquisti, prenotazioni di hotel o gestione dei dati, è relativamente semplice aggiungere funzionalità dell'agente all'applicazione Web eseguendo il wrapping di tali funzionalità in un plug-in (per LangGraph) o come endpoint OpenAPI (per il servizio agente Foundry). In questa esercitazione, si inizia con una semplice app di elenco attività. Al termine, si sarà in grado di creare, aggiornare e gestire attività con un agente in un'app di Servizio app.
Sia LangGraph che il servizio agente Foundry consentono di creare applicazioni Web agentic con funzionalità basate su intelligenza artificiale. LangGraph è simile a Microsoft Agent Framework ed è un SDK. La tabella seguente illustra alcune considerazioni e compromessi:
| Considerazione | LangGraph o Microsoft Agent Framework | Servizio Agente Fonderia |
|---|---|---|
| Performance | Veloce (eseguito localmente) | Più lento (gestito, servizio remoto) |
| Sviluppo | Codice completo, massimo controllo | Poco codice, integrazione rapida |
| Testing | Test manuali/unit test nel codice | Playground predefinito per i test rapidi |
| Scalabilità | Gestito dall'app | Gestito da Azure, con scalabilità automatica |
| Protezioni di sicurezza | Implementazione personalizzata richiesta | Sicurezza e moderazione dei contenuti predefiniti |
| Identità | Implementazione personalizzata richiesta | ID e autenticazione predefiniti dell'agente |
| Enterprise | Integrazione personalizzata richiesta | Distribuzione predefinita di Microsoft 365/Teams e chiamate agli strumenti integrati di Microsoft 365. |
In questa esercitazione si apprenderà come:
- Convertire le funzionalità dell'app esistenti in un plug-in per LangGraph.
- Aggiungere il plug-in a un agente LangGraph e usarlo in un'app Web.
- Convertire le funzionalità dell'app esistenti in un endpoint OpenAPI per il servizio agente Foundry.
- Chiamare un agente Foundry in un'applicazione web.
- Assegnare le autorizzazioni necessarie per la connettività dell'identità gestita.
Prerequisiti
- Un account Azure con un abbonamento attivo - Creare gratuitamente un account.
- Account GitHub per l'uso di GitHub Codespaces - Altre informazioni su GitHub Codespaces.
Aprire l'esempio con Codespaces
Il modo più semplice per iniziare consiste nell'usare GitHub Codespaces, che offre un ambiente di sviluppo completo con tutti gli strumenti necessari preinstallati.
Passare al repository GitHub su https://github.com/Azure-Samples/app-service-agentic-langgraph-foundry-python.
Selezionare il pulsante Codice, selezionare la scheda Codespaces, quindi selezionare Crea codespace in main.
Attendere per alcuni istanti l'inizializzazione di Codespace. Quando si è pronti, nel browser si vedrà un ambiente di sviluppo completamente configurato.
Eseguire l'applicazione in locale:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txt uvicorn src.app:app --host 0.0.0.0 --port 3000Quando viene visualizzato L'applicazione in esecuzione sulla porta 3000 è disponibile, selezionare Apri nel browser e aggiungere alcune attività.
Gli agenti non sono completamente configurati, per cui non funzionano ancora. Verranno configurati in un secondo momento.
Esaminare il codice dell'agente
Entrambi gli approcci usano lo stesso modello di implementazione, in cui l'agente viene inizializzato all'avvio dell'applicazione e risponde ai messaggi dell'utente tramite richieste POST.
LangGraphTaskAgent viene inizializzato nel costruttore in src/agents/langgraph_task_agent.py. Il codice di inizializzazione effettua le operazioni seguenti:
- Configura il client AzureChatOpenAI usando variabili di ambiente.
- Crea l'agente ReAct predefinito con memoria e un set di strumenti CRUD per la gestione delle attività (vedere Guida introduttiva a LangGraph).
- Seleziona un thread di conversazione gestito dal server per il campione autenticato.
self.memory = InMemorySaver()
# App Service authentication protects this sample, which intentionally
# keeps one server-managed conversation thread per worker process.
self.thread_id = "authenticated-conversation"
try:
endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
deployment_name = os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME")
if not endpoint or not deployment_name:
print("Azure OpenAI configuration missing for LangGraph agent")
return
# Initialize Azure OpenAI client
credential = DefaultAzureCredential()
azure_ad_token_provider = get_bearer_token_provider(
credential, "https://cognitiveservices.azure.com/.default"
)
self.llm = AzureChatOpenAI(
azure_endpoint=endpoint,
azure_deployment=deployment_name,
azure_ad_token_provider=azure_ad_token_provider,
api_version="2024-10-21"
)
# Define tools
tools = [
self._create_task_tool(),
self._get_tasks_tool(),
self._get_task_tool(),
self._update_task_tool(),
self._delete_task_tool()
]
# Create the agent
self.agent = create_react_agent(self.llm, tools, checkpointer=self.memory)
Quando elabora i messaggi utente, l'agente invoca ainvoke() con l'ID thread gestito dal server:
config = {"configurable": {"thread_id": self.thread_id}}
# Process the message
result = await self.agent.ainvoke(
{"messages": [("user", message)]},
config=config
)
La richiesta del browser contiene solo il messaggio. Non può selezionare un altro thread fornendo un identificatore di sessione o conversazione.
Distribuire l'applicazione di esempio
Il repository di esempio contiene un template Azure Developer CLI (AZD), che crea un'app di App Service e distribuisce la tua applicazione di esempio. L'identità gestita assegnata al sistema App Service viene mantenuta per le chiamate AI Azure in uscita. Un'identità gestita separata assegnata dall'utente e una credenziale di identità federata permettevano all'autenticazione App Service di agire come l'applicazione Microsoft Entra generata senza un segreto client.
Nel terminale, accedi ad Azure usando Azure Developer CLI:
azd auth loginSeguire le istruzioni per completare il processo di autenticazione.
Distribuisci l'app Servizio app di Azure utilizzando il modello AZD:
azd upQuando richiesto, fornire le risposte seguenti:
Domanda Risposta Immettere un nuovo nome ambiente: Digitare un nome univoco. Selezionare un abbonamento di Azure da usare: Selezionare la sottoscrizione. Selezionare un gruppo di risorse da usare: Selezionare Crea un nuovo gruppo di risorse. Selezionare un percorso in cui creare il gruppo di risorse: Selezionare Svezia centrale. Immettere un nome per il nuovo gruppo di risorse: Immettere INVIO. Nell'output AZD, trova l'URL dell'app e accedi ad esso tramite il browser. Copia anche il valore dell'audience di identità gestita da Foundry OpenAPI per più avanti. L'output è simile al seguente:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL> Foundry OpenAPI managed identity audience: api://<generated-client-id>Quando Microsoft ti chiede, accedi usando un account nel tenant di distribuzione e verifica che la lista delle attività si carichi.
Nello stesso browser già autenticato, aggiungi
/openapi.jsonall'endpoint di App Service. Copia o salva lo schema OpenAPI generato per dopo.Annotazioni
L'autenticazione tramite App Service restituisce un reindirizzamento HTTP 302 per le richieste del browser non autenticate. Questo esempio contiene sia un'interfaccia utente del browser che API, quindi il redirect offre un'esperienza di accesso utilizzabile. Le app basate esclusivamente su API usano comunemente invece HTTP 401.
Creare e configurare la risorsa Microsoft Foundry
Nel portale Foundry, crea un progetto.
Distribuire un modello preferito (vedere Avvio rapido di Microsoft Foundry: Creare risorse).
Nella parte superiore del playground del modello copiare il nome del modello.
Nella pagina iniziale, copia l'endpoint di Azure OpenAI per usarlo in seguito.
Assegnare le autorizzazioni necessarie
Nel portale Foundry, seleziona Gestisci nel menu superiore.
In Project details, seleziona la risorsa Genitore per il tuo project, poi seleziona Apri in Azure portal.
Dal portale Azure puoi assegnare l'accesso basato sul ruolo per la risorsa.
Aggiungi il seguente ruolo sia per l'identità gestita dell'app di App Service sia per l'utente che utilizzi con
az login:Risorsa di destinazione Ruolo obbligatorio Necessario per Fonderia Utente di Servizi Cognitivi OpenAI Servizio di completamento della chat in Microsoft Agent Framework. Per istruzioni, vedere Assegnare ruoli di Azure usando il portale di Azure.
Configurare le variabili di connessione nell'applicazione di esempio
Aprire il file con estensione env. Usando i valori copiati in precedenza dal portale foundry, configurare le variabili seguenti:
Variable Description AZURE_OPENAI_ENDPOINTAzure OpenAI endpoint (copiato dalla homepage del portale Foundry). AZURE_OPENAI_DEPLOYMENT_NAMENome del modello nella distribuzione (copiato dall'area di sperimentazione del modello nel nuovo portale Foundry). Annotazioni
Per semplificare l'esercitazione, queste variabili verranno usate in .env invece di sovrascriverle con le impostazioni dell'app nel servizio app.
Annotazioni
Per semplificare l'esercitazione, queste variabili verranno usate in .env invece di sovrascriverle con le impostazioni dell'app nel servizio app.
I valori in .env configurano la connessione in uscita dell'app a Foundry.
AZURE_AI_FOUNDRY_ACCOUNT_CLIENT_IDconfigura la connessione OpenAPI separata in ingresso da Foundry ad App Service e viene memorizzata nell'ambiente AZD.Accedere ad Azure con l'interfaccia della riga di comando di Azure:
az loginCiò consente alla libreria client di Identità di Azure nel codice di esempio di ricevere un token di autenticazione per l'utente connesso. Tenere presente che è stato aggiunto il ruolo necessario per questo utente in precedenza.
Eseguire l'applicazione in locale:
source venv/bin/activate uvicorn src.app:app --host 0.0.0.0 --port 3000Quando viene visualizzato L'applicazione in esecuzione sulla porta 3000 è disponibile, selezionare Apri nel browser.
Valida entrambi i pivot separatamente:
- LangGraph: Seleziona LangGraph Agent e chiedi all'agente di creare un compito. LangGraph chiama lo strumento di task in processo.
-
Servizio Foundry Agent: Seleziona Foundry Agent, e chiedi all'agente di creare un'attività. L'agente remoto di Foundry invoca l'endpoint
/api/tasksdistribuito e protetto usando l'identità gestita.
Il compito creato dall'agente Foundry appare nell'istanza dell'App Service distribuito, non nel database SQLite locale. Lo strumento Foundry OpenAPI utilizza sempre l'URL del server incorporato nello schema OpenAPI.
Tornare nel codespace di GitHub, distribuire le modifiche dell'app.
azd upNaviga di nuovo sull'applicazione distribuita e testa entrambi gli agenti di chat. Il browser invia solo messaggi di testo; non invia un ID sessione o un ID conversazione per nessuno dei due agenti.
Domande frequenti
Come posso aggiungere la generazione aumentata di recupero (RAG) all'agente Foundry?
Queste indicazioni si applicano al percorso Foundry Agent Service in questo tutorial. Non cambia le implementazioni di LangGraph, Kernel semantico o Microsoft Agent Framework mostrate nell'altra scheda.
Crea o seleziona una knowledge base di Foundry IQ, e poi collega la knowledge base all'agente di Foundry Agent Service. La connessione viene esposta all'agente come uno strumento di conoscenza MCP gestito.
Il codice di App Service continua a richiamare lo stesso agente per nome tramite il client Foundry esistente e agent_reference. L'app web non ha bisogno di un'integrazione diretta con Azure AI Search né di un proprio client MCP. Se l'interfaccia mostra le fonti, elabora le annotazioni di citazione restituite dall'agente.
Pulire le risorse
Al termine dell'applicazione, è possibile eliminare le risorse del servizio app per evitare di sostenere ulteriori costi:
azd down --purge
L'hook AZD postdown elimina anche l'applicazione Microsoft Entra a livello di tenant creata per l'autenticazione degli App Service.
Poi, elimina la risorsa Foundry se l'hai creata separatamente.