Chapitre 16: Stratégies pour Optimiser l'Utilisation des Tokens

16.1 Introduction

L'optimisation de l'utilisation des tokens est cruciale pour maximiser l'efficacité et minimiser les coûts lors de l'utilisation de l'API Chat GPT d'OpenAI. Ce chapitre explore diverses stratégies pour gérer et optimiser l'utilisation des tokens, afin d'obtenir des réponses de haute qualité tout en restant dans les limites de tokens autorisées et en contrôlant les coûts.

16.2 Comprendre les Tokens

Comme mentionné précédemment, un token peut être aussi petit qu'un caractère ou aussi grand qu'un mot. Les modèles GPT traitent le texte en tokens, et la gestion efficace de ces tokens est essentielle pour une utilisation optimisée de l'API.

16.3 Stratégies d'Optimisation

16.3.1 Utiliser des Prompts Concis et Précis

Un prompt bien rédigé et concis peut réduire considérablement le nombre de tokens nécessaires pour générer une réponse de qualité.

const concisePrompt = "Expliquez l'importance de la biodiversité.";
const response = await openai.createChatCompletion({
  model: "gpt-4",
  messages: [{ role: "user", content: concisePrompt }],
  max_tokens: 100,
  temperature: 0.7,
});

16.3.2 Troncature des Conversations Longues

Lorsque les conversations deviennent longues, tronquez les anciens messages pour rester dans les limites des tokens autorisées.

function truncateMessages(messages, maxTokens) {
  let totalTokens = 0;
  const truncated = [];

  for (let i = messages.length - 1; i >= 0; i--) {
    const messageTokens = countTokens(messages[i].content);
    if (totalTokens + messageTokens > maxTokens) {
      break;
    }
    totalTokens += messageTokens;
    truncated.unshift(messages[i]);
  }

  return truncated;
}

// Exemple d'utilisation
const maxTokens = 8192;
conversationHistory = truncateMessages(conversationHistory, maxTokens);

16.3.3 Utilisation de Modèles Appropriés

Choisir le modèle approprié en fonction de la tâche peut également aider à optimiser l'utilisation des tokens. Par exemple, utiliser gpt-3.5-turbo pour des tâches moins complexes peut être plus économique.

const response = await openai.createChatCompletion({
  model: "gpt-3.5-turbo",
  messages: [{ role: "user", content: prompt }],
  max_tokens: 100,
  temperature: 0.7,
});

16.3.4 Ajustement des Paramètres de Génération

Modifier des paramètres tels que max_tokens, temperature, et top_p peut influencer la longueur et la diversité des réponses, optimisant ainsi l'utilisation des tokens.

const response = await openai.createChatCompletion({
  model: "gpt-4",
  messages: [{ role: "user", content: prompt }],
  max_tokens: 50, // Réduire pour des réponses plus courtes
  temperature: 0.7,
  top_p: 0.9,
});

16.3.5 Utilisation des Pénalités de Fréquence et de Présence

Les pénalités de fréquence (frequency_penalty) et de présence (presence_penalty) peuvent aider à éviter les répétitions et encourager de nouveaux sujets, optimisant ainsi les tokens utilisés.

const response = await openai.createChatCompletion({
  model: "gpt-4",
  messages: [{ role: "user", content: prompt }],
  frequency_penalty: 0.5, // Réduction des répétitions
  presence_penalty: 0.5, // Encouragement de nouveaux sujets
});

16.4 Surveillance et Analyse de l'Utilisation des Tokens

Surveiller et analyser régulièrement l'utilisation des tokens peut aider à identifier les opportunités d'optimisation.

16.4.1 Suivi des Tokens Utilisés

Implémentez un suivi pour surveiller le nombre de tokens utilisés par requête.

const response = await openai.createChatCompletion({
  model: "gpt-4",
  messages: [{ role: "user", content: prompt }],
  max_tokens: 100,
  temperature: 0.7,
});
const usage = response.data.usage;
console.log(`Tokens utilisés : ${usage.total_tokens}`);
console.log(`Tokens du prompt : ${usage.prompt_tokens}`);
console.log(`Tokens de la complétion : ${usage.completion_tokens}`);

16.4.2 Calcul des Coûts

Calculez les coûts associés à l'utilisation des tokens pour mieux gérer votre budget.

const tokenPrice = 0.00008; // Exemple de prix par token
const totalTokens = usage.prompt_tokens + usage.completion_tokens;
const cost = totalTokens * tokenPrice;
console.log(`Coût estimé : $${cost.toFixed(5)}`);

16.5 Exemples de Code Complet

Voici un exemple complet intégrant plusieurs stratégies d'optimisation des tokens.

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

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?" },
];

function countTokens(text) {
  const GPT3Tokenizer = require('gpt-3-encoder');
  const encoded = GPT3Tokenizer.encode(text);
  return encoded.length;
}

function truncateMessages(messages, maxTokens) {
  let totalTokens = 0;
  const truncated = [];

  for (let i = messages.length - 1; i >= 0; i--) {
    const messageTokens = countTokens(messages[i].content);
    if (totalTokens + messageTokens > maxTokens) {
      break;
    }
    totalTokens += messageTokens;
    truncated.unshift(messages[i]);
  }

  return truncated;
}

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

  const maxTokens = 8192;
  conversationHistory = truncateMessages(conversationHistory, maxTokens);

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

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

    const usage = response.data.usage;
    const totalTokens = usage.prompt_tokens + usage.completion_tokens;
    const tokenPrice = 0.00008; // Exemple de prix par token
    const cost = totalTokens * tokenPrice;

    console.log("Assistant :", assistantMessage);
    console.log(`Tokens utilisés : ${totalTokens}`);
    console.log(`Coût estimé : $${cost.toFixed(5)}`);
  } catch (error) {
    console.error("Erreur lors de la communication avec l'API :", error);
  }
}

// Exemple d'utilisation
sendMessage("Parlez-moi de l'importance de la biodiversité.");

Conclusion

L'optimisation de l'utilisation des tokens est essentielle pour tirer le meilleur parti de l'API Chat GPT d'OpenAI tout en minimisant les coûts. En utilisant des stratégies telles que l'écriture de prompts concis, la troncature des conversations longues, le choix du modèle approprié, et l'ajustement des paramètres de génération, vous pouvez améliorer l'efficacité de vos interactions avec l'API. Surveiller et analyser régulièrement l'utilisation des tokens vous aidera à identifier d'autres opportunités d'optimisation et à gérer votre budget plus efficacement.

Last modified: Monday, 1 July 2024, 7:14 AM