For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/ai-machine-learning/ai-endpoints-structured-output-langchain4j.md.

AI Endpoints - Utiliser les sorties structurées avec LangChain4j

Voir en Markdown

Apprenez à utiliser les sorties structurées avec Java, LangChain4j et OVHcloud AI Endpoints

Info

AI Endpoints est couvert par les Conditions particulières OVHcloud Public Cloud (voir l’Annexe 10 – « Conditions spécifiques – AI Endpoints »).

Objectif

Dans ce tutoriel, nous allons explorer comment utiliser les sorties structurées avec AI Endpoints d'OVHcloud.

Pour cela, nous allons utiliser LangChain4j, un framework basé sur Java, inspiré de LangChain, conçu pour simplifier l'intégration des LLM (Large Language Models) dans les applications. Notez que LangChain4j n'est pas officiellement maintenu par l'équipe de LangChain, malgré la ressemblance des noms.

Associé à OVHcloud AI Endpoints, qui propose à la fois des modèles LLM et des modèles d'embedding, il devient facile de créer des assistants avancés, prêts pour la production.

Illustration d'un ordinateur portable sur un bureau affichant la photo d'un perroquet coloré à côté d'un gobelet de café noir

Définition

  • Sortie structurée : la sortie structurée vous permet de formater les données de sortie de manière à faciliter leur interprétation et leur traitement par les machines.
  • LangChain4j : un framework basé sur Java, inspiré de LangChain, conçu pour simplifier l'intégration des LLM (Large Language Models) dans les applications. Notez que LangChain4j n'est pas officiellement maintenu par l'équipe de LangChain, malgré la ressemblance des noms.
  • AI Endpoints : plateforme serverless d'OVHcloud offrant un accès simplifié à une variété de modèles d'IA reconnus mondialement, dont Mistral, LLaMA, et bien d'autres. Cette plateforme est conçue pour être simple, sécurisée et intuitive, avec la confidentialité des données comme priorité absolue.

Prérequis

  • Un projet Public Cloud dans votre compte OVHcloud.
  • Un token d'accès pour AI Endpoints d'OVHcloud. Pour créer un token API, suivez les instructions du guide AI Endpoints - Premiers pas.
  • Cet exemple de code utilise JBang, un outil basé sur Java permettant de créer et d'exécuter des programmes Java sous forme de scripts. Pour plus d'informations sur JBang, reportez-vous à la documentation JBang.

En pratique

Voici un extrait de code montrant comment définir un format de sortie structuré pour les réponses du modèle de langage :

// Json schema definition
ResponseFormat responseFormat = ResponseFormat.builder()
         .type(ResponseFormatType.JSON)
         .jsonSchema(JsonSchema.builder()
            .name("Person")
            .rootElement(JsonObjectSchema.builder()
               .addStringProperty("name")
               .addIntegerProperty("age")
               .addNumberProperty("height")
               .addBooleanProperty("married")
               .required("name", "age", "height", "married")
            .build())
         .build())
.build();

Dans cet exemple, nous définissons un format de sortie JSON avec un schéma qui spécifie les propriétés name, age, height et married comme requises.

Cet exemple utilise le modèle Mistral AI hébergé sur AI Endpoints d'OVHcloud.

Pour configurer le modèle, vous devez définir la clé API, l'URL de base et le nom du modèle sous forme de variables d'environnement. N'hésitez pas à utiliser un autre modèle, consultez le catalogue AI Endpoints.

Vous trouverez votre token d'accès, l'URL du modèle et le nom du modèle dans le dashboard des modèles AI Endpoints d'OVHcloud.

// Model definition
ChatModel chatModel = MistralAiChatModel.builder()
        .apiKey(System.getenv("OVH_AI_ENDPOINTS_ACCESS_TOKEN"))
        .baseUrl(System.getenv("OVH_AI_ENDPOINTS_MODEL_URL"))
        .modelName(System.getenv("OVH_AI_ENDPOINTS_MODEL_NAME"))
        .logRequests(false)
        .logResponses(false)
.build();

Appeler le modèle de langage

Grâce au mode JSON du LLM, la réponse du modèle de langage est reçue sous forme de chaîne JSON :

// Model call with JSON mode
UserMessage userMessage = UserMessage.from("""
        John is 42 years old.
        He stands 1.75 meters tall.
        Currently unmarried.
        """);

ChatRequest chatRequest = ChatRequest.builder()
        .responseFormat(responseFormat)
        .messages(userMessage)
        .build();

ChatResponse chatResponse = chatModel.chat(chatRequest);

String output = chatResponse.aiMessage().text();
System.out.println("Response: \n" + output); 


// Person is a simple record: record Person(String name, int age, double height, boolean married) {}
Person person = new ObjectMapper().readValue(output, Person.class);
System.out.println(person); 

Le code source complet

///usr/bin/env jbang "$0" "$@" ; exit $?
//JAVA 21+
//PREVIEW
//DEPS dev.langchain4j:langchain4j:1.0.1 dev.langchain4j:langchain4j-mistral-ai:1.0.1-beta6

import com.fasterxml.jackson.databind.ObjectMapper;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.request.ChatRequest;
import dev.langchain4j.model.chat.request.ResponseFormat;
import dev.langchain4j.model.chat.request.ResponseFormatType;
import dev.langchain4j.model.chat.request.json.JsonObjectSchema;
import dev.langchain4j.model.chat.request.json.JsonSchema;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.mistralai.MistralAiChatModel;
import dev.langchain4j.model.chat.ChatModel;

record Person(String name, int age, double height, boolean married) {
}

void main() throws Exception {
    ResponseFormat responseFormat = ResponseFormat.builder()
            .type(ResponseFormatType.JSON)
            .jsonSchema(JsonSchema.builder()
                    .name("Person")
                    .rootElement(JsonObjectSchema.builder()
                            .addStringProperty("name")
                            .addIntegerProperty("age")
                            .addNumberProperty("height")
                            .addBooleanProperty("married")
                            .required("name", "age", "height", "married")
                            .build())
                    .build())
            .build();

    UserMessage userMessage = UserMessage.from("""
            John is 42 years old.
            He stands 1.75 meters tall.
            Currently unmarried.
            """);

    ChatRequest chatRequest = ChatRequest.builder()
            .responseFormat(responseFormat)
            .messages(userMessage)
            .build();

    ChatModel chatModel = MistralAiChatModel.builder()
            .apiKey(System.getenv("OVH_AI_ENDPOINTS_ACCESS_TOKEN"))
            .baseUrl(System.getenv("OVH_AI_ENDPOINTS_MODEL_URL"))
            .modelName(System.getenv("OVH_AI_ENDPOINTS_MODEL_NAME"))
            .logRequests(false)
            .logResponses(false)
            .build();

    ChatResponse chatResponse = chatModel.chat(chatRequest);

    System.out.println("Prompt: \n" + userMessage.singleText());
    String output = chatResponse.aiMessage().text();
    System.out.println("Response: \n" + output); 

    Person person = new ObjectMapper().readValue(output, Person.class);
    System.out.println(person); 
}

Exécuter l'application

jbang HelloWorld.java
[jbang] Building jar for HelloWorld.java...

Prompt: 
John is 42 years old.
He stands 1.75 meters tall.
Currently unmarried.

Response: 
{"age": 42, "height": 1.75, "married": false, "name": "John"}
Person[name=John, age=42, height=1.75, married=false]

Conclusion

Dans cet article, nous avons vu comment utiliser les sorties structurées avec AI Endpoints d'OVHcloud et LangChain4J.

Aller plus loin

Vous trouverez l'exemple de code complet dans le dépôt GitHub.

Parcourez la documentation AI Endpoints complète pour mieux comprendre les concepts principaux et démarrer.

Pour découvrir comment créer des applications complètes et puissantes à l'aide d'AI Endpoints, explorez nos guides AI Endpoints dédiés.

Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.

Votre avis nous intéresse !

N’hésitez pas à nous faire part de vos questions, retours et suggestions concernant AI Endpoints et ses fonctionnalités :

  • Dans le canal #ai-endpoints du serveur Discord OVHcloud, où vous pouvez échanger avec la communauté et les équipes OVHcloud.

Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.

Cette page vous a-t-elle aidé ?