> 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.

# Retrieval-Augmented Generation

## Übersicht

**Retrieval-Augmented Generation (RAG)** ermöglicht Ihrem Agenten, während Gesprächen auf große Wissensdatenbanken zuzugreifen und diese zu nutzen. Statt ganze Dokumente in das Kontextfenster zu laden, ruft RAG nur die relevantesten Informationen für jede Nutzeranfrage ab. So kann Ihr Agent:

* Auf deutlich größere Wissensdatenbanken zugreifen, als in einen Prompt passen würden
* Genauere, wissensbasierte Antworten geben
* Halluzinationen reduzieren, indem er sich auf Quellmaterial bezieht
* Wissen skalieren, ohne mehrere spezialisierte Agenten zu erstellen

RAG eignet sich ideal für Agenten, die auf große Dokumente, technische Handbücher oder umfangreiche
Wissensdatenbanken zugreifen müssen, welche die Kontextfenster-Limits herkömmlicher Prompts überschreiten.
RAG erhöht die Antwortzeit Ihres Agenten geringfügig, um etwa 250 ms.

> **Note**
>
> Dieses Video wurde mit einer früheren Version des Dashboards aufgenommen. Die Schritte zur RAG-Konfiguration
> sind unverändert, aber einige Oberflächenelemente können anders aussehen.

## So funktioniert RAG

Wenn RAG aktiviert ist, verarbeitet Ihr Agent Nutzeranfragen in diesen Schritten:

1. **Anfrageverarbeitung**: Die Frage des Nutzers wird analysiert und für einen optimalen Abruf neu formuliert.
2. **Embedding-Erstellung**: Die verarbeitete Anfrage wird in ein Vektor-Embedding umgewandelt, das die Frage des Nutzers darstellt.
3. **Abruf**: Das System findet die semantisch ähnlichsten Inhalte aus Ihrer Wissensdatenbank.
4. **Antworterstellung**: Der Agent erstellt eine Antwort anhand des Gesprächskontexts und der abgerufenen Informationen.

Dieser Prozess stellt sicher, dass für die Anfrage des Nutzers relevante Informationen an das LLM übergeben werden, um eine sachlich korrekte Antwort zu erzeugen.

## Anleitung

### Voraussetzungen

* Ein [ElevenLabs-Konto](https://elevenlabs.io)
* Ein konfigurierter ElevenLabs-[Conversational Agent](/docs/de/eleven-agents/quickstart)
* Mindestens ein Dokument in der Wissensdatenbank Ihres Agenten

### RAG für Ihren Agenten aktivieren

#### Über das Dashboard aktualisieren

Navigieren Sie in den Einstellungen Ihres Agenten zum Abschnitt **Knowledge Base** und aktivieren Sie die Option **Use RAG**. Konfigurieren Sie bei Bedarf unter dem Tab **Advanced** das Embedding-Modell, die maximale Anzahl an Dokument-Chunks und die maximale Vektordistanz.

![RAG-Konfigurationsoptionen einschließlich Auswahl des Embedding-Modells](/docs/_fern-img/6e8a6273d26090d92a2ed237ffbc488f44e5e9a408aca6511afa94461d177c86.webp)

#### Über die CLI aktualisieren

#### Agentenkonfiguration abrufen

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

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

Setzen Sie `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
        }
      }
    }
  }
}
```

#### Änderungen übertragen

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

#### Über die API aktualisieren

Im Abschnitt [API-Implementierung](#api-implementation) unten finden Sie den vollständigen Code, der die RAG-Indizierung eines Dokuments auslöst und die Agentenkonfiguration aktualisiert.

### Indizierung der Wissensdatenbank

Jedes Dokument in Ihrer Wissensdatenbank muss indiziert werden, bevor es mit RAG verwendet werden kann. Dieser
Prozess erfolgt automatisch, wenn ein Dokument zu einem Agenten mit aktiviertem RAG hinzugefügt wird.

> **Info**
>
> Die Indizierung großer Dokumente kann einige Minuten dauern. Sie können den Indizierungsstatus in der
> Wissensdatenbankliste prüfen.

### Dokumentnutzungsmodi konfigurieren (optional)

Für jedes Dokument in Ihrer Wissensdatenbank können Sie festlegen, wie es verwendet wird:

* **Auto (Standard)**: Das Dokument wird nur abgerufen, wenn es für die Anfrage relevant ist
* **Prompt**: Das Dokument wird unabhängig von seiner Relevanz immer in den System-Prompt aufgenommen

![Optionen für den Dokumentnutzungsmodus in der Wissensdatenbank](/docs/_fern-img/265aa612b4ad2da915b617552312b47c965892559b2a8615ecb42551763de4a5.webp)

> **Warning**
>
> Wenn zu viele Dokumente auf den Modus „Prompt“ gesetzt werden, können Kontextlimits überschritten werden. Verwenden Sie diese Option sparsam
> für wichtige Informationen.

### Ihren RAG-fähigen Agenten testen

Testen Sie Ihren Agenten nach dem Speichern der Konfiguration mit Fragen zu Ihrer Wissensdatenbank. Der Agent sollte nun spezifische Informationen aus Ihren Dokumenten abrufen und darauf verweisen können.

## Nutzungslimits

Um eine faire Ressourcenverteilung zu gewährleisten, begrenzt ElevenLabs je Workspace die Gesamtgröße der für RAG indizierbaren Dokumente. Die Limits richten sich nach dem Abonnement.

Die Limits sind wie folgt:

| Abonnement | Limit für die Gesamtdokumentgröße | Hinweise                                                |
| :--------- | :-------------------------------- | :------------------------------------------------------ |
| Free       | 1 MB                              | Indizes können nach Inaktivität gelöscht werden.        |
| Starter    | 2 MB                              |                                                         |
| Creator    | 20 MB                             |                                                         |
| Pro        | 100 MB                            |                                                         |
| Scale      | 500 MB                            |                                                         |
| Business   | 1 GB                              |                                                         |
| Enterprise | 1 GB                              | Höhere Limits je nach Tarif und Vereinbarung verfügbar. |

**Hinweis:**

* Diese Limits gelten für die gesamte **Originaldateigröße** der für RAG indizierten Dokumente, nicht für die interne Speichergröße des RAG-Index selbst (die deutlich größer sein kann).
* Dokumente mit weniger als 500 Bytes können nicht für RAG indiziert werden und werden stattdessen automatisch im Prompt verwendet.

## API-Implementierung

Sie können RAG auch über die [API](/docs/de/api-reference/knowledge-base/compute-rag-index) implementieren:

```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));
```