Chapitre 14: Gestion du Contexte dans les Conversations

14.1 Introduction

La gestion du contexte est essentielle pour maintenir des conversations cohérentes et pertinentes avec l'API Chat GPT. Le modèle doit pouvoir se souvenir des informations échangées lors des précédents tours de la conversation pour répondre de manière appropriée. Ce chapitre explore comment gérer efficacement le contexte des conversations en utilisant des exemples en JavaScript (Node.js).

14.2 Structure des Conversations dans l'API Chat GPT

Les conversations avec l'API Chat GPT sont structurées sous forme de messages échangés entre l'utilisateur et le modèle. Chaque message est un objet avec les propriétés suivantes :

  • role : Le rôle du message (par exemple, "user" pour l'utilisateur, "assistant" pour le modèle).
  • content : Le contenu textuel du message.

14.3 Exemple de Structure de Conversation

Voici un exemple de structure de conversation avec plusieurs tours d'échanges :

[
  { "role": "user", "content": "Bonjour, comment vas-tu?" },
  { "role": "assistant", "content": "Je vais bien, merci. Et vous?" },
  { "role": "user", "content": "Je vais bien aussi. Peux-tu me parler de l'importance de la biodiversité?" },
  { "role": "assistant", "content": "La biodiversité est cruciale pour maintenir l'équilibre des écosystèmes. Elle permet une plus grande résilience face aux changements environnementaux." }
]

14.4 Maintien du Contexte

Pour maintenir le contexte dans une conversation, il est important de conserver l'historique des messages et de les inclure dans chaque nouvelle requête envoyée à l'API.

14.4.1 Exemple de Code pour Maintenir le Contexte

const { Configuration, OpenAIApi } = require("openai");
require('dotenv').config();

// Configuration de l'API avec la clé API
const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});

const openai = new OpenAIApi(configuration);

let conversationHistory = [
  { role: "user", content: "Bonjour, comment vas-tu?" },
  { role: "assistant", content: "Je vais bien, merci. Et vous?" },
];

async function sendMessage(message) {
  conversationHistory.push({ role: "user", content: message });

  try {
    const response = await openai.createChatCompletion({
      model: "gpt-4",
      messages: conversationHistory,
      max_tokens: 150,
      temperature: 0.7,
    });

    const assistantMessage = response.data.choices[0].message.content.trim();
    conversationHistory.push({ role: "assistant", content: assistantMessage });

    console.log("Assistant :", assistantMessage);
  } catch (error) {
    console.error("Erreur lors de la communication avec l'API :", error);
  }
}

// Exemple d'utilisation
sendMessage("Peux-tu me parler de l'importance de la biodiversité?");

14.5 Gestion de Conversations Longues

Lorsque les conversations deviennent longues, il peut être nécessaire de gérer la longueur totale des messages pour rester dans les limites des tokens autorisés par l'API.

14.5.1 Limitation du Nombre de Messages

Vous pouvez limiter le nombre de messages en ne conservant que les plus récents :

const MAX_TOKENS = 2048; // Limite de tokens pour GPT-4
const MAX_MESSAGES = 10; // Limite du nombre de messages à conserver

async function sendMessageWithLimit(message) {
  conversationHistory.push({ role: "user", content: message });

  if (conversationHistory.length > MAX_MESSAGES) {
    conversationHistory = conversationHistory.slice(-MAX_MESSAGES);
  }

  try {
    const response = await openai.createChatCompletion({
      model: "gpt-4",
      messages: conversationHistory,
      max_tokens: 150,
      temperature: 0.7,
    });

    const assistantMessage = response.data.choices[0].message.content.trim();
    conversationHistory.push({ role: "assistant", content: assistantMessage });

    console.log("Assistant :", assistantMessage);
  } catch (error) {
    console.error("Erreur lors de la communication avec l'API :", error);
  }
}

// Exemple d'utilisation
sendMessageWithLimit("Peux-tu me parler de l'importance de la biodiversité?");

14.6 Utilisation des Tokens de Contexte

En plus de limiter le nombre de messages, vous pouvez utiliser des tokens de contexte pour fournir des informations importantes au modèle sans inclure toute l'historique de la conversation.

14.6.1 Exemple de Code avec Tokens de Contexte

const CONTEXT = "Vous êtes un assistant intelligent qui aide l'utilisateur avec des informations précises et utiles.";

async function sendMessageWithContext(message) {
  conversationHistory.push({ role: "user", content: message });

  if (conversationHistory.length > MAX_MESSAGES) {
    conversationHistory = conversationHistory.slice(-MAX_MESSAGES);
  }

  const messagesWithContext = [{ role: "system", content: CONTEXT }, ...conversationHistory];

  try {
    const response = await openai.createChatCompletion({
      model: "gpt-4",
      messages: messagesWithContext,
      max_tokens: 150,
      temperature: 0.7,
    });

    const assistantMessage = response.data.choices[0].message.content.trim();
    conversationHistory.push({ role: "assistant", content: assistantMessage });

    console.log("Assistant :", assistantMessage);
  } catch (error) {
    console.error("Erreur lors de la communication avec l'API :", error);
  }
}

// Exemple d'utilisation
sendMessageWithContext("Peux-tu me parler de l'importance de la biodiversité?");

14.7 Utilisation des Fonctionnalités de Conversation Persistante

Pour certaines applications, il peut être utile de stocker l'historique des conversations de manière persistante (par exemple, dans une base de données) afin de permettre aux utilisateurs de reprendre les conversations là où ils les ont laissées.

14.7.1 Exemple de Stockage dans une Base de Données (Pseudocode)

const saveConversationHistory = async (userId, conversationHistory) => {
  // Implémentez la logique de sauvegarde dans votre base de données
};

const loadConversationHistory = async (userId) => {
  // Implémentez la logique de chargement depuis votre base de données
  return [];
};

async function sendMessageWithPersistence(userId, message) {
  let conversationHistory = await loadConversationHistory(userId);
  conversationHistory.push({ role: "user", content: message });

  try {
    const response = await openai.createChatCompletion({
      model: "gpt-4",
      messages: conversationHistory,
      max_tokens: 150,
      temperature: 0.7,
    });

    const assistantMessage = response.data.choices[0].message.content.trim();
    conversationHistory.push({ role: "assistant", content: assistantMessage });

    await saveConversationHistory(userId, conversationHistory);

    console.log("Assistant :", assistantMessage);
  } catch (error) {
    console.error("Erreur lors de la communication avec l'API :", error);
  }
}

// Exemple d'utilisation
sendMessageWithPersistence("user123", "Peux-tu me parler de l'importance de la biodiversité?");

Conclusion

La gestion du contexte dans les conversations est cruciale pour maintenir des interactions naturelles et cohérentes avec l'API Chat GPT. En conservant l'historique des messages, en limitant la longueur des conversations et en utilisant des tokens de contexte, vous pouvez améliorer la qualité des réponses générées. Ce chapitre vous a fourni les outils et techniques nécessaires pour gérer efficacement le contexte des conversations dans vos applications.

Modifié le: lundi 1 juillet 2024, 05:59