Aller au contenu principal
K
Kodixar
Solutions IA 1 décembre 2024 12 min de lecture

Intégrer l'API ChatGPT dans vos applications : Guide pratique

Apprenez à intégrer l'API OpenAI dans vos projets : authentification, prompts efficaces, gestion des erreurs et optimisation des coûts.

K
Kodixar

L’IA générative transforme la façon dont on développe des applications. Dans ce guide, on va voir comment intégrer l’API ChatGPT de manière professionnelle.

Prérequis

  • Un compte OpenAI avec des crédits API
  • Node.js 18+ ou Python 3.8+
  • Connaissances basiques en programmation

Configuration initiale

1. Obtenir une clé API

  1. Rendez-vous sur platform.openai.com
  2. Créez une nouvelle clé API
  3. Important : Ne partagez jamais votre clé !

2. Installation du SDK

# Node.js
npm install openai

# Python
pip install openai

3. Configuration sécurisée

Stockez votre clé dans les variables d’environnement :

# .env (ne jamais committer ce fichier !)
OPENAI_API_KEY=sk-...votre-clé...

Premier appel API

Avec Node.js

import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});

async function askGPT(prompt: string) {
  const completion = await openai.chat.completions.create({
    model: 'gpt-4-turbo-preview',
    messages: [
      {
        role: 'system',
        content: 'Tu es un assistant technique expert.',
      },
      {
        role: 'user',
        content: prompt,
      },
    ],
    max_tokens: 1000,
    temperature: 0.7,
  });

  return completion.choices[0].message.content;
}

Avec Python

from openai import OpenAI

client = OpenAI()

def ask_gpt(prompt: str) -> str:
    completion = client.chat.completions.create(
        model="gpt-4-turbo-preview",
        messages=[
            {"role": "system", "content": "Tu es un assistant technique expert."},
            {"role": "user", "content": prompt}
        ],
        max_tokens=1000,
        temperature=0.7
    )
    return completion.choices[0].message.content

Paramètres importants

ParamètreDescriptionValeur recommandée
modelModèle à utilisergpt-4-turbo-preview
temperatureCréativité (0-2)0.7 pour équilibré
max_tokensLongueur max réponseSelon besoin
top_pDiversité vocabulaire1.0 par défaut

Techniques avancées

Streaming des réponses

Pour une meilleure UX, streamer les réponses :

async function* streamGPT(prompt: string) {
  const stream = await openai.chat.completions.create({
    model: 'gpt-4-turbo-preview',
    messages: [{ role: 'user', content: prompt }],
    stream: true,
  });

  for await (const chunk of stream) {
    const content = chunk.choices[0]?.delta?.content;
    if (content) yield content;
  }
}

// Usage
for await (const text of streamGPT('Explique le machine learning')) {
  process.stdout.write(text);
}

Function Calling

GPT peut appeler vos fonctions :

const tools = [
  {
    type: 'function' as const,
    function: {
      name: 'get_weather',
      description: 'Obtenir la météo actuelle',
      parameters: {
        type: 'object',
        properties: {
          location: {
            type: 'string',
            description: 'La ville (ex: Paris)',
          },
        },
        required: ['location'],
      },
    },
  },
];

const response = await openai.chat.completions.create({
  model: 'gpt-4-turbo-preview',
  messages: [{ role: 'user', content: 'Quel temps fait-il à Lyon ?' }],
  tools,
  tool_choice: 'auto',
});

Gestion des erreurs

Implémentez toujours une gestion robuste :

import { RateLimitError, APIError } from 'openai';

async function safeAskGPT(prompt: string, retries = 3) {
  for (let i = 0; i < retries; i++) {
    try {
      return await askGPT(prompt);
    } catch (error) {
      if (error instanceof RateLimitError) {
        // Attendre et réessayer
        await new Promise(r => setTimeout(r, 2000 * (i + 1)));
        continue;
      }
      if (error instanceof APIError) {
        console.error(`API Error: ${error.status} - ${error.message}`);
        throw error;
      }
      throw error;
    }
  }
  throw new Error('Max retries reached');
}

Optimisation des coûts

1. Choisir le bon modèle

ModèleCoût (input/1K)Use case
gpt-3.5-turbo$0.0005Tâches simples
gpt-4-turbo$0.01Raisonnement complexe
gpt-4o$0.005Équilibre qualité/coût

2. Optimiser les prompts

// ❌ Prompt inefficace
const badPrompt = `
  Peux-tu s'il te plaît me donner une liste de 10 idées
  pour améliorer mon site web ? J'aimerais des idées
  créatives et innovantes si possible. Merci !
`;

// ✅ Prompt optimisé
const goodPrompt = `
  Liste 10 améliorations UX pour un site e-commerce.
  Format: numérotation, 1 phrase par idée.
`;

3. Implémenter du caching

import NodeCache from 'node-cache';

const cache = new NodeCache({ stdTTL: 3600 }); // 1h

async function cachedAskGPT(prompt: string) {
  const cacheKey = `gpt:${Buffer.from(prompt).toString('base64')}`;
  const cached = cache.get<string>(cacheKey);

  if (cached) return cached;

  const response = await askGPT(prompt);
  cache.set(cacheKey, response);
  return response;
}

Sécurité

Validation des entrées

function sanitizePrompt(userInput: string): string {
  // Limite la longueur
  const maxLength = 4000;
  let sanitized = userInput.slice(0, maxLength);

  // Supprime les tentatives d'injection
  sanitized = sanitized.replace(/ignore previous instructions/gi, '');

  return sanitized;
}

Rate limiting

import Bottleneck from 'bottleneck';

const limiter = new Bottleneck({
  minTime: 100,      // 100ms entre requêtes
  maxConcurrent: 5,  // Max 5 requêtes simultanées
});

const limitedAskGPT = limiter.wrap(askGPT);

Conclusion

L’intégration de l’API ChatGPT ouvre d’immenses possibilités pour vos applications. Les points clés à retenir :

  1. Sécurisez vos clés API
  2. Gérez les erreurs et les rate limits
  3. Optimisez vos coûts avec le bon modèle
  4. Streamez pour une meilleure UX
  5. Cachez les réponses répétitives

Besoin d’aide ? Chez Kodixar, j’accompagne les entreprises dans l’intégration de solutions IA. Contactez-moi pour en discuter.

Dans un prochain article, on explorera les RAG (Retrieval Augmented Generation) pour créer des chatbots qui utilisent vos propres données.

Besoin d'aide sur ce sujet ?

Contactez-nous pour discuter de votre projet et voir comment nous pouvons vous aider.

Prendre contact