> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Génération augmentée par récupération

## Vue d’ensemble

La **génération augmentée par récupération (RAG)** permet à votre agent d’accéder à de vastes bases de connaissances et de les utiliser lors des conversations. Au lieu de charger des documents entiers dans la fenêtre de contexte, le RAG récupère uniquement les informations les plus pertinentes pour chaque requête utilisateur, ce qui permet à votre agent de :

* Accéder à des bases de connaissances bien plus vastes que ce qui tiendrait dans un prompt
* Fournir des réponses plus précises, fondées sur les connaissances
* Réduire les hallucinations en s’appuyant sur les documents sources
* Faire évoluer les connaissances sans concevoir plusieurs agents spécialisés

Le RAG est idéal pour les agents qui doivent consulter de grands documents, des manuels techniques ou de vastes
bases de connaissances qui dépasseraient les limites de la fenêtre de contexte du prompting traditionnel.
Le RAG ajoute une légère latence au temps de réponse de votre agent, d’environ 250 ms.

> **Note**
>
> Cette vidéo a été enregistrée avec une version antérieure du Dashboard. Les étapes de configuration du RAG restent
> inchangées, mais certains éléments de l’interface peuvent être différents.

## Fonctionnement du RAG

Lorsque le RAG est activé, votre agent traite les requêtes utilisateur selon les étapes suivantes :

1. **Traitement de la requête** : la question de l’utilisateur est analysée et reformulée afin d’optimiser la récupération.
2. **Génération de l’embedding** : la requête traitée est convertie en embedding vectoriel représentant la question de l’utilisateur.
3. **Récupération** : le système trouve le contenu le plus similaire sur le plan sémantique dans votre base de connaissances.
4. **Génération de la réponse** : l’agent génère une réponse à partir du contexte de la conversation et des informations récupérées.

Ce processus garantit que les informations pertinentes pour la requête de l’utilisateur sont transmises au LLM afin de générer une réponse factuellement correcte.

## Guide

### Prérequis

* Un [compte ElevenLabs](https://elevenlabs.io)
* Un [agent conversationnel](/docs/fr/eleven-agents/quickstart) ElevenLabs configuré
* Au moins un document ajouté à la base de connaissances de votre agent

### Activer le RAG pour votre agent

#### Mise à jour via le Dashboard

Dans les paramètres de votre agent, ouvrez **Base de connaissances**, puis sélectionnez l’onglet **Récupération**. Sous **Mode de récupération**, choisissez **À chaque tour** pour rechercher dans la base de connaissances à chaque tour, ou **À la demande** pour permettre à l’agent de rechercher uniquement lorsqu’il estime en avoir besoin. **Prompt uniquement** désactive la récupération.

Configurez le modèle d’embedding, la limite de distance vectorielle et le nombre de candidats sous **Recherche sémantique**, ainsi que les limites de caractères et de segments sous **Limites de récupération**.

#### Mise à jour via la CLI

#### Récupérer la configuration de l’agent

```bash
elevenlabs agents pull --agent "<agent-name>"
```

#### Modifier \`agent_configs/\<agent-name>.json\`

Définissez `conversation_config.agent.prompt.rag` :

```json
{
  "conversation_config": {
    "agent": {
      "prompt": {
        "rag": {
          "enabled": true,
          "embedding_model": "e5_mistral_7b_instruct",
          "max_vector_distance": 0.6,
          "max_documents_length": 50000,
          "max_retrieved_rag_chunks_count": 20
        }
      }
    }
  }
}
```

#### Envoyer vos modifications

```bash
elevenlabs agents push --agent "<agent-name>"
```

#### Mise à jour via l’API

Consultez la section [Implémentation de l’API](#api-implementation) ci-dessous pour obtenir le code complet qui déclenche l’indexation RAG d’un document et met à jour la configuration de l’agent.

### Indexation de la base de connaissances

Chaque document de votre base de connaissances doit être indexé avant de pouvoir être utilisé avec le RAG. Ce
processus s’exécute automatiquement lorsqu’un document est ajouté à un agent avec le RAG activé.

> **Info**
>
> L’indexation de documents volumineux peut prendre რამდენიმე minutes. Vous pouvez vérifier l’état de l’indexation dans la
> liste de la base de connaissances.

### Configurer les modes d’utilisation des documents (facultatif)

Pour chaque document de votre base de connaissances, vous pouvez choisir son mode d’utilisation :

* **Auto (par défaut)** : le document est récupéré uniquement lorsqu’il est pertinent pour la requête
* **Prompt** : le document est toujours inclus dans le prompt système, quelle que soit sa pertinence

![Options de mode d’utilisation des documents dans la base de connaissances](/docs/_fern-img/265aa612b4ad2da915b617552312b47c965892559b2a8615ecb42551763de4a5.webp)

> **Warning**
>
> Définir trop de documents en mode « Prompt » peut dépasser les limites de contexte. Utilisez cette option avec parcimonie
> pour les informations critiques.

### Tester votre agent avec RAG activé

Après avoir enregistré votre configuration, testez votre agent en posant des questions liées à votre base de connaissances. L’agent devrait désormais pouvoir récupérer et citer des informations spécifiques de vos documents.

## Limites d’utilisation

Afin de garantir une répartition équitable des ressources, ElevenLabs applique, pour chaque Workspace, des limites à la taille totale des documents pouvant être indexés pour le RAG, selon le niveau d’abonnement.

Les limites sont les suivantes :

| Niveau d’abonnement | Limite de taille totale des documents | Remarques                                                              |
| :------------------ | :------------------------------------ | :--------------------------------------------------------------------- |
| Gratuit             | 1 Mo                                  | Les index peuvent être supprimés après une période d’inactivité.       |
| Starter             | 2 Mo                                  |                                                                        |
| Creator             | 20 Mo                                 |                                                                        |
| Pro                 | 100 Mo                                |                                                                        |
| Scale               | 500 Mo                                |                                                                        |
| Business            | 1 Go                                  |                                                                        |
| Enterprise          | 1 Go                                  | Des limites plus élevées sont disponibles selon le niveau et l’accord. |

**Remarque :**

* Ces limites s’appliquent à la **taille d’origine des fichiers** des documents indexés pour le RAG, et non à la taille de stockage interne de l’index RAG lui-même, qui peut être nettement plus importante.
* Les documents de moins de 500 octets ne peuvent pas être indexés pour le RAG et seront automatiquement utilisés dans le prompt à la place.

## Implémentation de l’API

Vous pouvez également implémenter le RAG via l’[API](/docs/fr/api-reference/knowledge-base/compute-rag-index) :

```python
from elevenlabs import ElevenLabs
import time

# Initialize the ElevenLabs client
elevenlabs = ElevenLabs(api_key="your-api-key")

# First, index a document for RAG
document_id = "your-document-id"
embedding_model = "e5_mistral_7b_instruct"

# Trigger RAG indexing
response = elevenlabs.conversational_ai.knowledge_base.document.compute_rag_index(
    documentation_id=document_id,
    model=embedding_model
)

# Check indexing status
while response.status not in ["SUCCEEDED", "FAILED"]:
    time.sleep(5)  # Wait 5 seconds before checking status again
    response = elevenlabs.conversational_ai.knowledge_base.document.compute_rag_index(
        documentation_id=document_id,
        model=embedding_model
    )

# Then update agent configuration to use RAG
agent_id = "agent_7101k5zvyjhmfg983brhmhkd98n6"

# Get the current agent configuration
agent_config = elevenlabs.conversational_ai.agents.get(agent_id=agent_id)

# Enable RAG in the agent configuration
agent_config.agent.prompt.rag = {
    "enabled": True,
    "embedding_model": "e5_mistral_7b_instruct",
    "max_documents_length": 10000
}

# Update document usage mode if needed
for i, doc in enumerate(agent_config.agent.prompt.knowledge_base):
    if doc.id == document_id:
        agent_config.agent.prompt.knowledge_base[i].usage_mode = "auto"

# Update the agent configuration
elevenlabs.conversational_ai.agents.update(
    agent_id=agent_id,
    conversation_config=agent_config.agent
)

```

```javascript
// First, index a document for RAG
async function enableRAG(documentId, agentId, apiKey) {
  try {
    // Initialize the ElevenLabs client
    const { ElevenLabsClient } = require("@elevenlabs/elevenlabs-js");
    const elevenlabs = new ElevenLabsClient({
      apiKey: apiKey,
    });

    // Start document indexing for RAG
    let response = await elevenlabs.conversationalAi.knowledgeBase.document.computeRagIndex(
      documentId,
      {
        model: "e5_mistral_7b_instruct",
      }
    );

    // Check indexing status until completion
    while (response.status !== "SUCCEEDED" && response.status !== "FAILED") {
      await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait 5 seconds
      response = await elevenlabs.conversationalAi.knowledgeBase.document.computeRagIndex(
        documentId,
        {
          model: "e5_mistral_7b_instruct",
        }
      );
    }

    if (response.status === "FAILED") {
      throw new Error("RAG indexing failed");
    }

    // Get current agent configuration
    const agentConfig = await elevenlabs.conversationalAi.agents.get(agentId);

    // Enable RAG in the agent configuration
    const updatedConfig = {
      conversation_config: {
        ...agentConfig.agent,
        prompt: {
          ...agentConfig.agent.prompt,
          rag: {
            enabled: true,
            embedding_model: "e5_mistral_7b_instruct",
            max_documents_length: 10000,
          },
        },
      },
    };

    // Update document usage mode if needed
    if (agentConfig.agent.prompt.knowledge_base) {
      agentConfig.agent.prompt.knowledge_base.forEach((doc, index) => {
        if (doc.id === documentId) {
          updatedConfig.conversation_config.prompt.knowledge_base[index].usage_mode = "auto";
        }
      });
    }

    // Update the agent configuration
    await elevenlabs.conversationalAi.agents.update(agentId, updatedConfig);

    console.log("RAG configuration updated successfully");
    return true;
  } catch (error) {
    console.error("Error configuring RAG:", error);
    throw error;
  }
}

// Example usage
// enableRAG('your-document-id', 'agent_7101k5zvyjhmfg983brhmhkd98n6', 'your-api-key')
//   .then(() => console.log('RAG setup complete'))
//   .catch(err => console.error('Error:', err));
```