> ## Documentation Index
> Fetch the complete documentation index at: https://docs.innochat.ch/llms.txt
> Use this file to discover all available pages before exploring further.

# Pourquoi mon chatbot ne répond-il pas correctement aux questions ?

> Découvrez pourquoi les chatbots basés sur LLM répondent parfois de manière incorrecte et comment fonctionne la Retrieval Augmented Generation (RAG).

Lorsque les chercheurs de Google ont présenté pour la première fois le concept de **Transformer**[](https://arxiv.org/pdf/1706.03762.pdf), il a suscité beaucoup d’attention dans la communauté NLP.\
Il a constitué la base de nouveaux réseaux neuronaux pour le traitement et la compréhension du langage naturel.

Peu après, OpenAI a popularisé les **modèles GPT** et, avec ChatGPT, a lancé l’ère des **Large Language Models (LLM)**.\
Les performances conversationnelles de ces modèles ont conduit beaucoup de gens à croire que l’IA était sur le point d’atteindre l’intelligence humaine.

Pourtant, malgré leur comportement « humain », les LLM ne voient, n’interprètent et ne comprennent **pas** le monde comme les humains.\
Ce ne sont pas des machines à raisonner logiquement, mais plutôt des **simulateurs conversationnels probabilistes**.\
Leur comportement repose sur la **reconnaissance de motifs** et les **corrélations sémantiques**, et non sur la logique ou la compréhension.

INNOCHAT est propulsé par les LLM d’OpenAI et utilise la **Retrieval Augmented Generation (RAG)** pour adapter les réponses en fonction de vos données téléchargées.

## Qu’est-ce que la Retrieval Augmented Generation (RAG) ?

Les LLM sont entraînés sur d’énormes quantités de texte.\
Ils reconnaissent des motifs et génèrent de nouveaux textes en se basant sur la probabilité que certains « tokens » (mots ou parties de mots) se suivent.

C’est pourquoi OpenAI nomme beaucoup de ses endpoints **Chat Completions** — le modèle « complète » le prompt.

<Note>
  Une explication détaillée des tokens est disponible dans la documentation officielle OpenAI :\
  [https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them)
</Note>

Mais : **les motifs ne signifient pas la vérité.**\
Les LLM peuvent très facilement **halluciner** lorsqu’aucune donnée pertinente n’est disponible.

La RAG tente de résoudre ce problème en ajoutant au prompt un contexte supplémentaire qui influence les probabilités.

### Exemple

Prompt sans contexte :

```
Was ist INNOCHAT?
```

Cette requête repose entièrement sur les motifs sémantiques présents dans les données d’entraînement de base du modèle. Il n’y a aucune garantie que la réponse soit correcte ou fiable.\
Mais que se passe-t-il si le prompt devient :

```
Répondez à la question suivante en utilisant le contexte ci-dessous :
INNOCHAT est un puissant framework No-Code / Low-Code qui vous permet de créer des chatbots multi-agents dotés de capacités d’appel de fonctions, en utilisant vos propres données. Il est conçu pour être convivial et polyvalent, avec de nombreuses options de personnalisation et une intégration avec les plateformes courantes.
Qu’est-ce qu’INNOCHAT ?
```

Le modèle est alors fortement orienté vers les informations fournies.\
Le contexte influence la génération des tokens et conduit à une réponse beaucoup plus précise.

C’est cela la **RAG** : enrichir le prompt avec des sources de connaissance pertinentes, sans modifier le modèle lui-même.

### Pourquoi ne pas simplement envoyer *toutes* les données en même temps ?

Parce qu’il existe des **limites de tokens**.

Un modèle OpenAI comme gpt-3.5-16k peut gérer environ **10 000 mots** de contexte.\
Votre base de connaissances comporte souvent des centaines de pages ou des milliers de documents — bien plus que ce qui rentre dans une seule fenêtre LLM.

C’est pourquoi :

1. Les documents sont découpés en **chunks**
2. Chaque chunk est « encodé » (embedding)
3. Les embeddings sont stockés dans une **base de données vectorielle**
4. À chaque requête utilisateur, on recherche les **chunks les plus pertinents**
5. Ces chunks sont insérés dans le prompt
6. Le LLM répond sur la base de ce prompt contextualisé

Un embedding est une **représentation mathématique du sens** d’un extrait de texte.\
Des phrases similaires se trouvent « plus proches » dans l’espace vectoriel.

Une bonne introduction aux embeddings :\
[https://stackoverflow.blog/2023/11/09/an-intuitive-introduction-to-text-embeddings/](https://stackoverflow.blog/2023/11/09/an-intuitive-introduction-to-text-embeddings/)

### Exemple : requête « What is innoChat ? »

Le chunk le plus pertinent est :

```
Qu’est-ce qu’INNOCHAT ?
```

La partie la plus pertinente, probablement extraite de notre base de données vectorielle, est :

```
innoChat est un puissant framework No-Code / Low-Code qui vous permet de créer des chatbots multi-agents dotés de capacités d’appel de fonctions, en utilisant vos propres données. Il est conçu pour être convivial et polyvalent, avec de nombreuses options de personnalisation et une intégration avec les plateformes courantes.
```

Avec ce contexte, le LLM peut générer une réponse correcte.

AWS propose une bonne vue d’ensemble visuelle du processus RAG :

<Frame caption="https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-rag.html">
  <img src="https://mintcdn.com/innoq/Kfwv40RbqRH1R9h2/images/help-1.png?fit=max&auto=format&n=Kfwv40RbqRH1R9h2&q=85&s=4b02dd6691c46eefe6792ed241217949" width="898" height="532" data-path="images/help-1.png" />
</Frame>

## Quels types de questions fonctionnent bien ?

| Type de requête         | Description                                           | Exemple                                                            |
| ----------------------- | ----------------------------------------------------- | ------------------------------------------------------------------ |
| Recherche d’information | Recherche d’informations concrètes dans les documents | « Quelle est la politique de congés payés de Paladin Max, Inc. ? » |
| Résumés thématiques     | Résumé d’un domaine thématique                        | « Résumez les derniers développements en IA générative »           |

## Quels types de questions fonctionnent mal ?

| Type de requête                      | Description                                               | Exemple                                                                       |
| ------------------------------------ | --------------------------------------------------------- | ----------------------------------------------------------------------------- |
| Comparaison de documents             | Comparaison sans critères clairs                          | « Trouve les incohérences dans tous les arguments de mes documents. »         |
| Comptage ou calculs mathématiques    | Analyse quantitative basée sur les données d’entraînement | « Combien de fois John est-il mentionné dans tous les contrats ? »            |
| Instructions de niveau méta          | Référence à la structure / numérotation des pages         | « Résumez la section 3 (pages 33–37) de ce rapport. »                         |
| Requêtes statistiques sur l’ensemble | Questions statistiques sur plusieurs documents            | « Combien de documents mentionnent le sujet X et liste-les dans un tableau. » |
| Génération de texte long             | Textes très longs basés sur les documents fournis         | « Rédige une revue de littérature de 5000 mots. »                             |

Si votre cas d’usage nécessite ces tâches plus complexes, vous pouvez utiliser :

* une architecture multi-agents
* le function calling

— cela nécessite toutefois une configuration avancée.

***

Il est possible d’améliorer les performances de votre chatbot en optimisant vos données d’entraînement.\
Consultez à ce sujet :

👉 **[Bonnes pratiques pour la préparation des données d’entraînement](/best-practices)**
