MAISON CODE .
/ AI · LLM · RAG · Vectors

Optimisation LLM : RAG, recherche de vecteurs et Edge

Exécuter un modèle de paramètres 70B sur une vitrine est un suicide. Comment concevoir des fonctionnalités d'IA rapides, bon marché et réellement utiles.

AB
Alex B.

En 2024, tous les PDG du commerce électronique se demandaient : « Comment ajouter l’IA ? En 2025, chaque CTO répond : « Idéalement, sans faire faillite ». Les grands modèles linguistiques (LLM) sont lourds, lents et hallucinés. Les clients ne veulent pas discuter avec un robot qui pense qu’un grille-pain est un micro-ondes. Ils veulent de la Recherche sémantique et de l’Hyper-personnalisation. Cela nécessite une architecture spécifique : RAG (Retrieval-Augmented Generation) en Edge.

Pourquoi Maison Code en parle

Chez Maison Code Paris, nous agissons comme la conscience architecturale de nos clients. Nous héritons souvent de piles « modernes » qui ont été construites sans une compréhension fondamentale de l’échelle. Nous voyons des API simples qui mettent 4 secondes à répondre en raison de problèmes de requête N+1, et des « microservices » qui coûtent 5 000 €/mois en frais de cloud inactif.

Nous abordons ce sujet car il représente un point pivot critique dans la maturité de l’ingénierie. La mise en œuvre correcte de cela différencie un MVP fragile d’une plate-forme résiliente de niveau entreprise qui peut gérer le trafic du Black Friday sans transpirer.

Le problème : latence et coût

Exemple : un utilisateur demande : « Avez-vous des robes d’été idéales pour un mariage en Italie ? »

  • Approche naïve : envoyez l’intégralité du catalogue de produits (CSV) vers la fenêtre contextuelle GPT-4.

    • Coût : 2,00 € par requête (jetons d’entrée).
    • Latence : 15 secondes.
    • Résultat : l’utilisateur quitte avant le chargement de la réponse.
  • Approche technique : recherche de vecteurs + RAG.

    • Coût : 0,002 € par requête.
    • Latence : 400 ms.
    • Résultat : Conversion.

L’architecture : le pipeline RAG

Nous ne demandons pas au LLM de « connaître » nos produits. Nous lui demandons de « résumer » nos résultats de recherche.

diagramme de séquence
    Utilisateur participant
    participant Edge comme fonction Edge (Vercel)
    Participant Vector en tant que Vector DB (Pinecone)
    participant LLM en tant que GPT-4o-mini

    Utilisateur->>Edge : "Robe rouge pour un mariage en Italie"
    
    Remarque sur Edge : 1. Générer des intégrations
    Edge->>LLM : demande d'intégration (text-embedding-3-small)
    LLM-->>Bord : [0,12, 0,98, -0,4...]
    
    Remarque sur Edge : 2. Recherche sémantique
    Edge->>Vector : requête des vecteurs les plus proches (Top 5)
    Vector-->>Edge : renvoie 5 JSON de produit
    
    Note sur Edge : 3. Synthèse
    Edge->>LLM : "Voici 5 robes. Recommandez-en une pour l'Italie."
    LLM-->>Edge : "La robe en soie Amalfi est parfaite parce que..."
    
    Edge ->> Utilisateur : réponse JSON (produit + texte)

Étape 1 : Vectoriser le catalogue

Vous ne pouvez pas rechercher de texte. Vous devez rechercher « Signification ». Nous convertissons chaque description de produit en Vector Embedding (un tableau de 1536 nombres à virgule flottante). “Red Dress” et “Crimson Gown” ont un texte différent mais des vecteurs similaires (distance < 0,2).

Le script d’ingestion (Node.js)

Nous exécutons cela sur une tâche cron tous les soirs.

importer { OpenAI } depuis "openai" ;
importer { Pinecone } depuis "@pinecone-database/pinecone" ;

const openai = new OpenAI();
const pomme de pin = new pomme de pin ();

fonction asynchrone vectorizeProduct (produit) {
  // 1. Créer une "Chaîne Sémantique"
  // Nous combinons le titre, la description et les avis
  contenu const = `
    Titre : ${product.title}
    Description : ${product.description}
    Tissu : ${product.tags.join(', ')}
    Ambiance : ${product.metafields.custom.vibe}
  `.trim();

  // 2. Générer l'intégration
  const intégration = attendre openai.embeddings.create({
    modèle : "text-embedding-3-small",
    entrée : contenu,
  });

  // 3. Insertion dans la base de données vectorielle
  wait pinecone.index("maison-products").upsert([{
    identifiant : produit.id,
    valeurs : embedding.data[0].embedding,
    métadonnées : {
      titre : produit.titre,
      prix : produit.prix,
      poignée: produit.poignée,
      image : produit.image
    }
  }]);
}

Étape 2 : La requête Edge

La vitesse est essentielle. Nous utilisons Vercel Edge Functions ou Cloudflare Workers. Nous n’utilisons PAS de backend Python. C’est trop lent pour démarrer à froid. Nous utilisons TypeScript strictement typé sur Edge.

La requête se déroule en deux étapes :

  1. Récupération : recherchez les produits concernés.
    • “Mariage en Italie” -> Carte sémantique -> Lin, Respirant, Floral, Élégant.
    • Vector DB renvoie : Robe Amalfi, Jupe Toscane, Sandales Roma.
  2. Génération : expliquez POURQUOI. * Invite : * “Vous êtes un styliste de mode. Expliquez pourquoi ces 3 éléments correspondent à la demande de l’utilisateur. Soyez bref.”*

Techniques d’optimisation

Le traitement des jetons coûte de l’argent. Voici comment nous réduisons les coûts de 90 %.

1. Filtrage dur (recherche hybride)

Si un utilisateur filtre par « Taille : S », ne recherchez pas tout l’espace vectoriel. Appliquez un filtre de métadonnées à Pinecone FIRST. vector_search(query_vector, filter={ taille : "S", in_stock : true }) Cela réduit l’espace de recherche et améliore la précision.

2. Mise en cache des réponses

80% des utilisateurs posent les mêmes questions. « Quelle est votre politique de retour ? » « Expédiez-vous au Canada ? » Nous mettons en cache la Réponse LLM dans Redis, saisie par une version hachée du vecteur de requête. Si une nouvelle question est sémantiquement similaire (distance < 0,1) à une question mise en cache, renvoie la réponse mise en cache. Latence de 0 ms.

3. Petits modèles (SLM)

Avez-vous besoin de GPT-4 pour cela ? Non. GPT-4o-mini ou Claude Haiku est 20 fois moins cher et plus rapide. Pour les recommandations e-commerce, « l’intelligence » est moins importante que le « contexte ». Si vous fournissez les bons produits dans la fenêtre contextuelle, même un petit modèle donne une excellente réponse.

UI : l’« UI générative »

Ne vous contentez pas de diffuser du texte. Diffusez Composants. Lorsque le LLM suggère une robe, affichez le composant <ProductCard /> directement dans le chat. Nous utilisons le Vercel AI SDK pour diffuser les états de l’interface utilisateur.

// L'interface de discussion
importer { useChat } depuis 'ai/react' ;

fonction d'exportation ShopAssistant() {
  const { messages, entrée, handleInputChange, handleSubmit } = useChat();

  retour (
    <div className="chat-window">
      {messages.map(m => (
        <div key={m.id} className={m.role}>
          {m.contenu}
          {/* Si l'outil appelle les produits renvoyés, affichez-les */}
          {m.toolInvocations?.map(outil => (
             <ProductCarousel products={tool.result} />
          ))}
        </div>
      ))}
    </div>
  );
}

12. Mise en cache sémantique (Redis/Momento)

Si 100 personnes demandent « La chemise est-elle en coton ? », ne payez pas OpenAI 100 fois. Payez-les une fois.

  1. Requête utilisateur -> Vectoriser -> [0.1, 0.2, ...].
  2. Vérifiez Redis : GET vectors:nearest([0.1, 0.2]).
  3. Si la distance <0,05, renvoie la réponse mise en cache. Cela réduit les coûts LLM de 60 % dans les déploiements à fort trafic. Il réduit également la latence de 2 secondes à 50 ms.

13. Mise en cache rapide (Anthropique)

Nouveau en 2025 : Mise en cache des invites. Si vous envoyez une invite système de 50 pages (« Vous êtes un agent commercial… voici notre catalogue… »), vous payez ces jetons à chaque fois. Avec Context Caching, vous payez une fois pour « télécharger » le contexte vers l’API. Les appels suivants font référence au « cache_id ». Cela réduit les coûts des jetons d’entrée de 90 % et double la vitesse (le pré-remplissage est instantané).

14. Quantification (GGUF / AWQ)

Les modèles sont généralement FP16 (virgule flottante 16 bits). Ils sont énormes (14 Go pour les paramètres 7B). La Quantisation les écrase en INT4 (entiers 4 bits). La taille tombe à 4 Go. La perte de précision est négligeable (< 1 %). La vitesse augmente 3x. Nous exécutons des modèles quantifiés 4 bits sur du matériel grand public (MacBook Pros) pour le développement local et l’inférence de périphérie.

15. Décodage spéculatif

Les LLM génèrent un jeton à la fois. C’est en série et lent. Le décodage spéculatif utilise un petit « modèle de brouillon » (rapide) pour deviner les 5 mots suivants. Le Big Model (lent) les vérifie simplement en parallèle. Si le brouillon est correct (il s’agit généralement d’une grammaire simple), vous obtenez 5 jetons pour le prix d’une passe avant. Cela double la vitesse de génération sans modifier les poids du modèle.

16. Conclusion

L’IA n’est pas magique. C’est de l’ingénierie. Cela nécessite des pipelines de données, des bases de données vectorielles et une mise en cache périphérique. Si vous « enveloppez simplement ChatGPT », vous brûlerez de l’argent. Si vous construisez un pipeline RAG, vous construisez un fossé concurrentiel.


Embauchez nos architectes.