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-memory-chatbot-langchain4j.md.

AI Endpoints - Développer un chatbot avec mémoire en utilisant LangChain4j

Voir en Markdown

Apprenez à mettre en œuvre la mémoire dans un chatbot de discussion Java à l'aide de LangChain4j

Info

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

Introduction

Dans nos autres tutoriels, les chatbots répondaient à une question à la fois sans se souvenir de rien de la conversation. C’est suffisant pour de simples questions-réponses, mais ce n’est pas idéal pour des interactions réelles.

En effet, voici une conversation simple sans mémoire :

💬: My name is Stéphane.
🤖: Hello Stéphane, how can I assist you today?
💬: What is my name?
🤖: I'm not capable of knowing your personal information...

Ce n’est pas très pratique.

Dans ce tutoriel, nous allons utiliser LangChain4j pour construire un chatbot doté d’une prise en charge de la mémoire, lui permettant de se souvenir des messages précédents et de fournir des réponses plus naturelles et contextuelles.

Définitions

  • LangChain4j : framework en 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 : une plateforme serverless d’OVHcloud offrant un accès facile à une variété de modèles d’IA mondialement reconnus, notamment Mistral, LLaMA, et 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

En pratique

Configurer pom.xml

Ajoutez la configuration suivante à votre fichier Maven pom.xml :

`<properties>`
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
    <maven.compiler.release>21</maven.compiler.release>
    <langchain4j.version>0.31.0</langchain4j.version>
  </properties>

  `<dependencies>`
    `<dependency>`
      `<groupId>dev.langchain4j</groupId>`
      `<artifactId>langchain4j</artifactId>`
      `<version>${langchain4j.version}</version>`
    </dependency>

    `<dependency>`
      `<groupId>dev.langchain4j</groupId>`
      `<artifactId>langchain4j-mistral-ai</artifactId>`
      `<version>${langchain4j.version}</version>`
    </dependency>
    
    {/* ... */}
 </dependencies>

Créer un chatbot avec mémoire

package com.ovhcloud.examples.aiendpoints;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import dev.langchain4j.memory.ChatMemory;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.mistralai.MistralAiStreamingChatModel;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.TokenStream;

public class MemoryStreamingChatbot {

  private static final Logger _LOG = LoggerFactory.getLogger(MemoryStreamingChatbot.class);
  private static final String OVH_AI_ENDPOINTS_ACCESS_TOKEN = System.getenv("OVH_AI_ENDPOINTS_ACCESS_TOKEN");
  private static final String OVH_AI_ENDPOINTS_MODEL_NAME = System.getenv("OVH_AI_ENDPOINTS_MODEL_NAME");
  private static final String OVH_AI_ENDPOINTS_MODEL_URL = System.getenv("OVH_AI_ENDPOINTS_MODEL_URL");

  interface Assistant {
    TokenStream chat(String message);
  }

  public static void main(String[] args) {
    MistralAiStreamingChatModel streamingChatModel = MistralAiStreamingChatModel.builder()
        .apiKey(OVH_AI_ENDPOINTS_ACCESS_TOKEN)
        .modelName(OVH_AI_ENDPOINTS_MODEL_NAME)
        .baseUrl(OVH_AI_ENDPOINTS_MODEL_URL)
        .maxTokens(1500)
        .build();

    ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(10);

    Assistant assistant = AiServices.builder(Assistant.class)
        .streamingChatLanguageModel(streamingChatModel)
        .chatMemory(chatMemory)
        .build();

    _LOG.info("💬: My name is Stéphane.\n");
    TokenStream tokenStream = assistant.chat("My name is Stéphane.");
    _LOG.info("🤖: ");
    tokenStream
        .onNext(_LOG::info)
        .onComplete(token -> {
          _LOG.info("\n💬: What is my name?\n");
          _LOG.info("🤖: ");
          assistant.chat("What is my name?")
              .onNext(_LOG::info)
              .onError(Throwable::printStackTrace).start();
        })
        .onError(Throwable::printStackTrace).start();



  }
}

Exécuter votre chatbot

Assurez-vous que vos variables d’environnement sont bien définies :

export OVH_AI_ENDPOINTS_MODEL_NAME=Mistral-7B-Instruct-v0.3
export OVH_AI_ENDPOINTS_MODEL_URL=https://oai.endpoints.kepler.ai.cloud.ovh.net/v1
export OVH_AI_ENDPOINTS_ACCESS_TOKEN=`<your-access-token>`

Veillez à remplacer la valeur du token (OVH_AI_ENDPOINTS_ACCESS_TOKEN) par la vôtre. Si vous n’en possédez pas encore, suivez les instructions du guide AI Endpoints - Premiers pas.

Exécutez ensuite votre application Java :

💬: My name is Stéphane.
🤖: Hello Stéphane, how can I assist you today?

💬: What is my name?
🤖: Your name is Stéphane.

Conclusion

En quelques étapes seulement, vous avez créé votre propre chatbot IA propulsé par LangChain4j, Quarkus, et OVHcloud AI Endpoints.

Aller plus loin

Si vous souhaitez aller plus loin et déployer votre application web dans le cloud, en rendant votre interface accessible à tous, consultez les articles et tutoriels suivants :

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.
Cette page vous a-t-elle aidé ?