Partager via


Présentation de l'échantillon d'IA Java PetClinic dans les applications conteneurisées

L'exemple Spring PetClinic est une application de référence classique qui démontre l'utilisation de Spring Boot avec Java. Ce didacticiel présente une version améliorée par l’IA basée sur Azure Container Apps qui étend le système de gestion PetClinic traditionnel avec des fonctionnalités d’IA modernes.

L'application que vous créez dans ce didacticiel est un assistant de conversation IA qui utilise la génération augmentée de récupération (RAG). Pour se connecter à Azure OpenAI Service, l’application utilise les SDK Spring AI pour prendre en charge l’application Web. Pour plus d’informations sur RAG, consultez Implémenter la génération augmentée de récupération (RAG) avec Azure OpenAI Service.

L'application propose de nombreux services différents fonctionnant ensemble pour introduire les fonctionnalités liées à l'IA dans l'exemple Spring PetClinic.

Architecture de l'application IA dans Azure Container Apps

Le diagramme suivant montre l’architecture de l’application d’IA dans Azure Container Apps :

Diagramme de l'architecture de l'application IA, qui comprend un environnement Container Apps, une passerelle API, Entra ID pour l'authentification et d'autres composants.

La passerelle API de l’application, hébergée dans l’environnement Azure Container Apps, sert de point d’entrée central pour toutes les demandes externes.

Cette passerelle remplit les fonctions suivantes :

  • Achemine et gère la communication entre les composants de l'application.
  • Authentifie les utilisateurs via Microsoft Entra ID.
  • Sécurise l’accès à Azure Container Registry et aux services cognitifs à l’aide d’identités gérées.
  • Gère toutes les demandes entrantes des utilisateurs externes.

La passerelle fonctionne au sein d'un réseau virtuel dédié, garantissant une communication sécurisée et isolée entre l'application et les systèmes externes.

Le tableau suivant décrit les principaux composants et services proposés dans l'application :

Service ou fonctionnalité Descriptif
Azure Container Apps Une plateforme de conteneurs entièrement gérée et serverless pour la création et le déploiement d'applications modernes. Gère la mise à l'échelle automatique, la répartition du trafic et la gestion des révisions des applications conteneurisées.
Environnement Azure Container Apps Une limite sécurisée autour d'un groupe d'applications conteneurs qui partagent des configurations de mise en réseau, de mise à l'échelle et de gestion. Fournit l'environnement d'exécution fondamental pour le déploiement d'applications de conteneur.
Azure OpenAI Service Fournit un accès API REST à ChatGPT d'OpenAI, aux intégrations et aux modèles de langage puissants comme GPT-4. Permet des capacités d'IA avec des fonctionnalités de sécurité et de conformité de niveau entreprise.
Azure Container Registry Un service de registre Docker privé pour stocker et gérer les images de conteneurs. Prend en charge les créations de conteneurs automatisées, l'analyse des vulnérabilités et la géo-réplication.
Identités managées Fournit des services Azure avec des identités gérées automatiquement dans Azure AD. Élimine le besoin de gestion des informations d’identification en permettant une authentification sécurisée de service à service sans stocker les informations d’identification dans le code.
IA printanière Framework Spring pour l'ingénierie de l'IA qui applique les principes de conception de l'IA à l'écosystème Spring. Sinon, Langchain4j est une autre infrastructure IA avec son propre échantillon PetClinic dans spring-petclinic-langchain4j. Pour plus d'informations, consultez API du client de conversation.

Pour plus d’informations sur les éléments d’infrastructure en tant que code de l’application, consultez les scripts bicep dans le référentiel Apportez votre première application IA dans Azure Container Apps.

Implémentation du code

Les sections suivantes fournissent une introduction au code pour vous aider à comprendre le flux de cette première application d’IA.

Effectuer des appels REST

Le contrôleur ChatClient est responsable de la communication avec le point de terminaison du client de conversation. La syntaxe de soumission d'une invite dans PetclinicChatClient.java inclut l'objet chatClient permettant de soumettre la saisie utilisateur.

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

Personnalisations de conversation

La classe ChatConfiguration personnalise les requêtes envoyées à chatClient. La liste suivante décrit certains paramètres de configuration clés de chatClient :

  • Authentification des connexions : le client se connecte à Azure OpenAI. L’authentification par clé API et l’authentification par identité gérée sont toutes deux prises en charge.
  • Emplacement des paramètres de configuration : Pour ChatModel, le déploiement gpt-4o et la température 0.7 sont définis dans le fichier de configuration.
  • Base de données vectorielles : La base de données vectorielles stocke des représentations mathématiques de documents sources, appelées intégrations. Les données vectorielles sont utilisées par l'API de conversation pour trouver des documents pertinents à la question d'un utilisateur.
  • Invite de commande système : personnalisez le comportement de l’IA et améliorez les performances.
  • Points de terminaison d’API : l’application dispose de points de terminaison Azure Functions personnalisés afin qu’OpenAI puisse interagir avec l’application.
  • Conseillers : les conseillers offrent un moyen flexible et puissant d'intercepter, de modifier et d'améliorer les interactions pilotées par l'IA dans vos applications Spring.

Exemple

L'exemple de code suivant montre comment la classe ChatClientCustomizer charge les informations de configuration :

@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));
}

Points de terminaison d’API

Les beans définis sous java.util.Function sont des fonctions définies dans le contexte de l'application. Ces fonctions constituent l'interface entre les modèles d'IA et l'application PetClinic.

Il existe des exemples de fonctions dans AIFunctionConfiguration.java qui communiquent avec l'application PetClinic. Gardez à l’esprit les détails suivants concernant ces fonctions :

  • Les annotations @Description aux fonctions aident les modèles d’IA à comprendre les fonctions dans un langage naturel.
  • Le corps de la fonction varie en fonction des besoins de votre entreprise.

Conseillers

Les conseillers sont des composants qui modifient ou améliorent les instructions de l'IA, faisant office de middleware pour le traitement des instructions.

Cette application utilise deux conseillers différents :

  • QuestionAnswerAdvisor appelle les modèles d'IA pour générer une nouvelle requête utilisateur qui inclut les résultats du vecteur de recherche, avant de finaliser l'invite.
  • PromptChatMemoryAdvisor ajoute une mémoire de conversation dans l'invite et fournit un historique de conversation au modèle de conversation. Avec ce contexte, le modèle d’IA peut mémoriser le contexte de la conversation et améliorer la qualité de la conversation.

Pour plus d'informations, consultez l'API Advisors.

Étapes suivantes