Condividi tramite


Esempio di intelligenza artificiale PetClinic Java in Panoramica di App contenitore

L'esempio Spring PetClinic è un'applicazione di riferimento classica che illustra l'uso di Spring Boot con Java. Questa esercitazione include una versione avanzata dell'intelligenza artificiale basata su App contenitore di Azure che estende il tradizionale sistema di gestione PetClinic con funzionalità di intelligenza artificiale moderne.

L'applicazione compilata in questa esercitazione è un assistente chat di intelligenza artificiale che usa La generazione aumentata di recupero (RAG). Per connettersi al servizio Azure OpenAI, l'applicazione usa gli SDK Spring AI per supportare l'applicazione Web. Per altre informazioni su RAG, vedere Implementare la generazione aumentata di recupero con il servizio OpenAI di Azure.

L'applicazione offre molti servizi diversi che interagiscono per introdurre le funzionalità correlate all'intelligenza artificiale all'esempio Spring PetClinic.

Architettura dell'app per intelligenza artificiale nelle app Azure Container

Il diagramma seguente illustra l'architettura dell'applicazione di intelligenza artificiale in App Azure Container:

Diagramma dell'architettura dell'applicazione di intelligenza artificiale, che include un ambiente Container Apps, un gateway API, Entra ID per l'autenticazione e altri componenti.

Il gateway API dell'applicazione, ospitato nell'ambiente App Contenitore di Azure, funge da punto di ingresso centrale per tutte le richieste esterne.

Questo gateway esegue le funzioni seguenti:

  • Indirizza e gestisce la comunicazione tra i componenti dell'applicazione.
  • Autentica gli utenti tramite Microsoft Entra ID.
  • Protegge l'accesso a Registro Azure Container e servizi cognitivi usando le identità gestite.
  • Gestisce tutte le richieste utente esterne in ingresso.

Il gateway opera all'interno di una rete virtuale dedicata, garantendo comunicazioni sicure e isolate tra l'applicazione e i sistemi esterni.

La tabella seguente descrive i componenti e i servizi principali presenti nell'applicazione:

Servizio o funzionalità Descrizione
App contenitore di Azure Piattaforma contenitore serverless completamente gestita per la creazione e la distribuzione di app moderne. Gestisce la scalabilità automatica, la suddivisione del traffico e la gestione delle revisioni delle applicazioni in contenitori.
Ambiente di App Azure Container Limite sicuro intorno a un gruppo di app contenitore che condividono configurazioni di rete, scalabilità e gestione. Fornisce il runtime di base per una distribuzione di app contenitore.
Servizio OpenAI di Azure Fornisce l'accesso all'API REST a ChatGPT, incorporamenti e modelli di linguaggio avanzati come GPT-4 di OpenAI. Abilita le funzionalità di intelligenza artificiale con funzionalità di sicurezza e conformità di livello aziendale.
Registro Container di Azure Servizio registro Docker privato per l'archiviazione e la gestione delle immagini del contenitore. Supporta compilazioni di contenitori automatizzate, analisi delle vulnerabilità e replica geografica.
Identità gestite Fornisce servizi di Azure con identità gestite automaticamente in Azure AD. Elimina la necessità di gestire le credenziali consentendo l'autenticazione sicura da servizio a servizio senza archiviare le credenziali nel codice.
Primavera AI Spring Framework per la progettazione di intelligenza artificiale che applica i principi di progettazione dell'intelligenza artificiale all'ecosistema Spring. In alternativa, Langchain4j è un altro framework di intelligenza artificiale con il proprio esempio PetClinic in spring-petclinic-langchain4j. Per altre informazioni, vedere API client chat.

Per ulteriori informazioni sugli elementi Infrastructure as Code dell'applicazione, vedere gli script bicep nel repository Porta la tua prima app IA in App contenitore di Azure.

Implementazione del codice

Le sezioni seguenti forniscono un'introduzione al codice per comprendere il flusso di questa prima applicazione di intelligenza artificiale.

Esecuzione di chiamate REST

Il ChatClient controller è responsabile della comunicazione con l'endpoint client di chat. La sintassi per l'invio di una richiesta in PetclinicChatClient.java include l'oggetto chatClient per inviare l'input dell'utente.

return this.chatClient.prompt().user(u -> u.text(query)).call().content();

Personalizzazioni della chat

La ChatConfiguration classe personalizza le richieste inviate a chatClient. L'elenco seguente descrive alcune impostazioni di configurazione chiave di chatClient:

  • Autenticazione delle connessioni: il client si connette ad Azure OpenAI. Sono supportati sia l'autenticazione della chiave API che l'autenticazione dell'identità gestita.
  • Percorso delle impostazioni di configurazione: per ChatModel, la distribuzione gpt-4o e la temperatura 0.7 vengono impostate nel file di configurazione.
  • Database vettoriale: il database vettoriale archivia rappresentazioni matematiche dei documenti di origine, noti come incorporamenti. I dati vettoriali vengono usati dall'API di chat per trovare documenti rilevanti per la domanda di un utente.
  • Richiesta di sistema: personalizzare il comportamento dell'intelligenza artificiale e migliorare le prestazioni.
  • Endpoint API: le funzionalità dell'applicazione sono personalizzate Funzioni di Azure endpoint in modo che OpenAI possa interagire con l'applicazione.
  • Advisor: gli advisor offrono un modo flessibile e potente per intercettare, modificare e migliorare le interazioni guidate dall'intelligenza artificiale nelle applicazioni Spring.

Esempio

L'esempio di codice seguente mostra come la classe carica le ChatClientCustomizer informazioni di configurazione:

@Bean
public ChatClientCustomizer chatClientCustomizer(VectorStore vectorStore, ChatModel model) {
    ChatMemory chatMemory = new InMemoryChatMemory();

    return b -> b.defaultSystem(systemResource)
        .defaultFunctions("listOwners", "listVets", "addPetToOwner", "addOwnerToPetclinic")
        .defaultAdvisors(new PromptChatMemoryAdvisor(chatMemory),
            new ModeledQuestionAnswerAdvisor(vectorStore, SearchRequest.defaults(), model));
}

Endpoint API

I fagioli definiti in java.util.Function sono funzioni definite nel contesto dell'applicazione. Queste funzioni sono l'interfaccia tra i modelli di intelligenza artificiale e l'applicazione PetClinic.

Esistono funzioni di esempio in AIFunctionConfiguration.java che comunicano con l'applicazione PetClinic. Tenere presenti i dettagli seguenti su queste funzioni:

  • Le @Description annotazioni per le funzioni consentono ai modelli di intelligenza artificiale di comprendere le funzioni in un linguaggio naturale.
  • Il corpo della funzione varia a seconda dei requisiti aziendali.

Advisor

Gli advisor sono componenti che modificano o migliorano le richieste di intelligenza artificiale, che fungono da middleware per l'elaborazione delle richieste.

Questa applicazione usa due diversi advisor:

  • QuestionAnswerAdvisor chiama i modelli di intelligenza artificiale per generare una nuova query utente che include i risultati del vettore di ricerca, prima di finalizzare la richiesta.
  • PromptChatMemoryAdvisor aggiunge la memoria della chat al prompt e fornisce una cronologia delle conversazioni al modello di chat. Con questo contesto, il modello di intelligenza artificiale può ricordare il contesto della chat e migliorare la qualità della chat.

Per ulteriori informazioni, vedere Advisors API.

Passaggi successivi