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

# Versiebeheer voor agents

Met versiebeheer voor agents kun je experimenteren met verschillende configuraties van je agent zonder je productieconfiguratie in gevaar te brengen. Maak geïsoleerde branches, test wijzigingen en rol updates geleidelijk uit met deployment op basis van trafficpercentages.

> **Note**
>
> Wil je A/B-tests uitvoeren? Zie [Experimenten](/docs/nl/eleven-agents/operate/experiments) voor de aanbevolen workflow om agentwijzigingen te testen met live traffic.

## Overzicht

Het versiebeheersysteem biedt:

* **Onveranderlijke snapshots** van je agentconfiguratie op elk moment
* **Geïsoleerde branches** om wijzigingen te testen voordat je live gaat
* **Trafficverdeling** om wijzigingen geleidelijk uit te rollen naar een percentage van de gebruikers
* **Mergen** om wijzigingen vanuit elke branch naar elke andere branch over te brengen
* **Rebasen** om de nieuwste wijzigingen van de main branch naar een branch over te halen

> **Note**
>
> Zodra versiebeheer voor een agent is ingeschakeld, kan het niet worden uitgeschakeld. Houd hier rekening mee voordat je
> versiebeheer voor bestaande agents inschakelt.

## Kernconcepten

### Versies

Een versie is een onveranderlijke snapshot van de configuratie van een agent op een bepaald moment. Elke versie heeft een unieke ID (indeling: `agtvrsn_xxxx`) en bevat:

* `conversation_config` - Systeemprompt, LLM-instellingen, stemconfiguratie, tools, kennisbank
* `platform_settings` - Versiebeheerde subset met instellingen voor evaluatie, widget, gegevensverzameling en veiligheid
* `workflow` - Volledige workflowdefinitie met nodes en edges

Versies worden automatisch gemaakt wanneer je wijzigingen opslaat in een agent met versiebeheer. Een versie kan na het maken niet meer worden gewijzigd.

### Branches

Branches zijn benoemde ontwikkellijnen, vergelijkbaar met git-branches. Hiermee kun je geïsoleerd aan wijzigingen werken voordat je ze terugmerget naar de main branch.

* Elke agent met versiebeheer heeft een branch **Main** die niet kan worden verwijderd of gearchiveerd
* Aanvullende branches kunnen worden gemaakt vanuit elke versie op elke bestaande branch, niet alleen vanuit main
* Branches kunnen worden gemerged met elke andere branch en niet-main branches kunnen op main worden gerebased om de nieuwste wijzigingen daarvan op te halen
* Elke branch heeft: id (`agtbrch_xxxx`), naam, beschrijving en een lijst met versies
* Branchnamen kunnen bevatten: letters, cijfers en `() [] {} - / .` (maximaal 140 tekens)

### Traffic deployment

Traffic kan per percentage worden verdeeld over meerdere branches, wat geleidelijke uitrol en A/B-tests mogelijk maakt.

* Percentages moeten altijd samen precies **100%** zijn
* Trafficrouting is **deterministisch** op basis van de gespreks-ID (dezelfde gebruiker wordt consequent naar dezelfde branch gerouteerd)
* Alleen niet-gearchiveerde branches met 0% traffic kunnen worden gearchiveerd

### Concepten

Niet-opgeslagen wijzigingen worden als concepten opgeslagen, zodat je aan wijzigingen kunt werken zonder meteen een nieuwe versie te maken.

* Concepten zijn **per gebruiker, per branch** (elk teamlid heeft een eigen concept)
* Concepten worden automatisch verwijderd wanneer een nieuwe versie wordt vastgelegd
* Concepten worden ook verwijderd wanneer er naar een branch wordt gemerged

## Versiebeheer inschakelen

Versiebeheer is opt-in en moet expliciet worden ingeschakeld. Je kunt het inschakelen bij het maken van een nieuwe agent of voor een bestaande agent.

> **Warning**
>
> Zodra versiebeheer is ingeschakeld, kan het niet worden uitgeschakeld. Dit is een permanente wijziging voor je agent.

### Inschakelen bij het maken van een agent

#### Inschakelen via het dashboard

Open je agent in het dashboard, ga naar **Settings** en schakel versiebeheer in. Na inschakeling is het tabblad **Versioning** beschikbaar om branches, concepten, versies en traffic deployment te beheren.

#### Inschakelen via de API

```python
from elevenlabs.client import ElevenLabs
from elevenlabs.types import *

client = ElevenLabs(api_key="your-api-key")

agent = client.conversational_ai.agents.create(
    conversation_config=ConversationalConfig(
        agent=AgentConfig(
            first_message="Hello! How can I help you today?",
            prompt={"prompt": "You are a helpful assistant."},
        )
    ),
    enable_versioning=True
)

print(f"Agent created with versioning: {agent.agent_id}")
```

```javascript
import { ElevenLabsClient } from '@elevenlabs/elevenlabs-js';

const client = new ElevenLabsClient({ apiKey: 'your-api-key' });

const agent = await client.conversationalAi.agents.create({
  conversationConfig: {
    agent: {
      firstMessage: 'Hello! How can I help you today?',
      prompt: {
        prompt: 'You are a helpful assistant.',
      },
    },
  },
  enableVersioning: true,
});

console.log(`Agent created with versioning: ${agent.agentId}`);
```

### Inschakelen voor een bestaande agent

#### Inschakelen via het dashboard

Open je agent in het dashboard, ga naar **Settings** en schakel versiebeheer in.

#### Inschakelen via de API

```python
agent = client.conversational_ai.agents.update(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    enable_versioning_if_not_enabled=True
)
```

```javascript
const agent = await client.conversationalAi.agents.update('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  enableVersioningIfNotEnabled: true,
});
```

Door versiebeheer in te schakelen, wordt de initiële branch "Main" gemaakt met de eerste versie die de huidige agentconfiguratie bevat.

## Werken met branches

### Een branch maken

Branches kunnen worden gemaakt vanuit elke versie op elke branch, niet alleen vanuit main. Je kunt optioneel configuratiewijzigingen opnemen die worden toegepast op de initiële versie van de nieuwe branch.

```python
branch = client.conversational_ai.agents.branches.create(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    parent_version_id="agtvrsn_xxxx",
    name="experiment-v2",
    description="Testing new prompt and voice settings"
)

print(f"Created branch: {branch.created_branch_id}")
print(f"Initial version: {branch.created_version_id}")
```

```javascript
const branch = await client.conversationalAi.agents.branches.create('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  parentVersionId: 'agtvrsn_xxxx',
  name: 'experiment-v2',
  description: 'Testing new prompt and voice settings',
});

console.log(`Created branch: ${branch.createdBranchId}`);
console.log(`Initial version: ${branch.createdVersionId}`);

```

### Branches weergeven

```python
branches = client.conversational_ai.agents.branches.list(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6"
)

for branch in branches.branches:
print(f"{branch.name}: {branch.id}")

```

```javascript
const branches = await client.conversationalAi.agents.branches.list('agent_7101k5zvyjhmfg983brhmhkd98n6');

for (const branch of branches.branches) {
  console.log(`${branch.name}: ${branch.id}`);
}

```

### Branchdetails ophalen

```python
branch = client.conversational_ai.agents.branches.get(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx"
)

print(f"Branch: {branch.name}")
print(f"Versions: {len(branch.versions)}")

```

```javascript
const branch = await client.conversationalAi.agents.branches.get('agent_7101k5zvyjhmfg983brhmhkd98n6', 'agtbrch_xxxx');

console.log(`Branch: ${branch.name}`);
console.log(`Versions: ${branch.versions.length}`);

```

## Wijzigingen vastleggen

Wanneer je een agent met ingeschakeld versiebeheer bijwerkt, geef je de `branch_id` op om een nieuwe versie op die branch te maken.

#### Bijwerken via het dashboard

Open het tabblad **Versioning** van je agent, schakel over naar de doelbranch, bewerk de configuratie en sla op om een nieuwe versie te maken.

#### Bijwerken via de CLI

Geef de flag `--branch` door om naar een specifieke branch op naam of ID te pushen. De branch moet al bestaan.

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

#### Bijwerken via de API

```python
agent = client.conversational_ai.agents.update(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx",
    conversation_config=ConversationalConfig(
        agent=AgentConfig(
            prompt={"prompt": "You are a friendly customer support agent."},
        )
    )
)
```

```javascript
const agent = await client.conversationalAi.agents.update(
  'agent_7101k5zvyjhmfg983brhmhkd98n6',
  {
    conversationConfig: {
      agent: {
        prompt: {
          prompt: 'You are a friendly customer support agent.',
        },
      },
    },
  },
  { branchId: 'agtbrch_xxxx' }
);
```

Er wordt automatisch een nieuwe versie gemaakt op de opgegeven branch en elk bestaand concept van die gebruiker op die branch wordt verwijderd.

## Traffic deployen

Gebruik het deployments-endpoint om traffic over branches te verdelen. Hiermee kun je geleidelijk uitrollen en A/B-tests uitvoeren.

```python
deployment = client.conversational_ai.agents.deployments.create(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    deployments=[
        {"branch_id": "agtbrch_main", "percentage": 90},
        {"branch_id": "agtbrch_xxxx", "percentage": 10}
    ]
)
```

```javascript
const deployment = await client.conversationalAi.agents.deployments.create('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  deployments: [
    { branchId: 'agtbrch_main', percentage: 90 },
    { branchId: 'agtbrch_xxxx', percentage: 10 },
  ],
});
```

> **Warning**
>
> Alle percentages moeten samen precies 100% zijn. De deployment mislukt als dat niet zo is.

Trafficrouting is deterministisch op basis van de gespreks-ID, zodat dezelfde gebruiker in verschillende sessies consequent dezelfde branch bereikt.

## Branches samenvoegen

Wanneer je tevreden bent met wijzigingen in een branch, voeg je deze samen met een andere branch. Elke niet-gearchiveerde branch kan worden samengevoegd met elke andere niet-gearchiveerde branch, niet alleen met main.

> **Note**
>
> Als je de wijzigingen van een branch wilt laten beoordelen voordat ze worden samengevoegd, of een branch wilt bereiken waarvoor je geen
> schrijftoegang hebt, open dan een [merge proposal](/docs/nl/eleven-agents/operate/merge-proposals) in plaats van
> rechtstreeks samen te voegen.

```python
merge = client.conversational_ai.agents.branches.merge(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    source_branch_id="agtbrch_xxxx",
    target_branch_id="agtbrch_main",
    archive_source_branch=True,  # Default: true
    force=False  # Default: false
)
```

```javascript
const merge = await client.conversationalAi.agents.branches.merge('agent_7101k5zvyjhmfg983brhmhkd98n6', 'agtbrch_xxxx', {
  targetBranchId: 'agtbrch_main',
  archiveSourceBranch: true, // Default: true
  force: false, // Default: false
});
```

Samenvoegen:

* Maakt een nieuwe versie in de doelbranch met de configuratie van de bronbranch
* Archiveert optioneel de bronbranch (standaardgedrag)
* Zet verkeer automatisch over van de bronbranch naar de doelbranch

> **Note**
>
> Samenvoegen mislukt met `no_new_changes_to_merge` als de bronbranch is gemaakt vanuit de doelbranch (en geen
> nieuwe commits heeft die verder gaan dan de doelbranch), en met `branch_already_merged` als deze al is samengevoegd
> met die doelbranch.

### Mergeconflicten oplossen

Als een instelling in zowel de bron- als doelbranch is gewijzigd sinds ze uiteenliepen, wordt standaard de waarde
van de branch die het meest recent is bijgewerkt behouden. Stel `force=True` in om altijd de waarde van de
bronbranch te gebruiken, ongeacht timestamps.

Bekijk het resultaat van een merge vooraf, inclusief alle velden die zouden worden overschreven, voordat je deze vastlegt:

```python
preview = client.conversational_ai.agents.branches.preview_merge(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    source_branch_id="agtbrch_xxxx",
    target_branch_id="agtbrch_main",
    force=False
)

print(preview.overridden_fields)
print(preview.conflicts)
```

```javascript
const preview = await client.conversationalAi.agents.branches.previewMerge('agent_7101k5zvyjhmfg983brhmhkd98n6', 'agtbrch_xxxx', {
  targetBranchId: 'agtbrch_main',
  force: false,
});

console.log(preview.overriddenFields);
console.log(preview.conflicts);
```

## Branches rebasen op main

Rebasen haalt de nieuwste wijzigingen uit de main-branch naar een andere branch, vergelijkbaar met een git rebase. Zo blijft een branch die langere tijd bestaat up-to-date met main zonder de eigen wijzigingen van de branch al terug samen te voegen.

```python
client.conversational_ai.agents.branches.rebase(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx"
)
```

```javascript
await client.conversationalAi.agents.branches.rebase('agent_7101k5zvyjhmfg983brhmhkd98n6', 'agtbrch_xxxx');
```

Rebasen:

* Maakt een nieuwe versie in de branch waarin de nieuwste wijzigingen van main zijn opgenomen
* Behoudt de eigen wijzigingen van de branch: als een instelling zowel in de branch als in main is bewerkt, blijft altijd de waarde van de branch behouden
* Mislukt met `branch_already_up_to_date` als de branch al alle wijzigingen uit main bevat

> **Note**
>
> Alleen niet-main-branches kunnen worden gerebased, en alleen op main. Het rebasen van de main-branch zelf
> geeft een foutmelding `cannot_rebase_main`.

Bekijk het resultaat van een rebase vooraf voordat je deze vastlegt:

```python
preview = client.conversational_ai.agents.branches.preview_rebase(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx"
)

print(preview.overridden_fields)
```

```javascript
const preview = await client.conversationalAi.agents.branches.previewRebase('agent_7101k5zvyjhmfg983brhmhkd98n6', 'agtbrch_xxxx');

console.log(preview.overriddenFields);
```

## Branches archiveren

Archiveer branches die je niet langer nodig hebt. Zo houd je je branchlijst overzichtelijk.

```python
client.conversational_ai.agents.branches.update(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx",
    archived=True
)
```

```javascript
await client.conversationalAi.agents.branches.update('agent_7101k5zvyjhmfg983brhmhkd98n6', 'agtbrch_xxxx', {
  archived: true,
});
```

> **Warning**
>
> Je kunt geen branch archiveren waaraan verkeer is toegewezen. Verwijder al het verkeer voordat je archiveert.

Je kunt gearchiveerde branches dearchiveren door `archived=False` in te stellen.

## Een geversioneerde agent dupliceren

Door een agent te dupliceren maak je een nieuwe agent die een kopie bevat van elke niet-gearchiveerde branch van de bronagent, niet alleen van de main-branch.

```python
duplicate = client.conversational_ai.agents.duplicate(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    name="Copy of my agent"
)

print(duplicate.agent_id)
```

```javascript
const duplicate = await client.conversationalAi.agents.duplicate('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  name: 'Copy of my agent',
});

console.log(duplicate.agentId);
```

In de gedupliceerde agent:

* Wordt de main-branch gemaakt op basis van de nieuwste versie in de main-branch van de bronagent
* Wordt elke andere niet-gearchiveerde branch opnieuw gemaakt met dezelfde naam en beschrijving, vanaf de nieuwste versie in die branch
* Begint elke branch met één versie, omdat de versiegeschiedenis niet wordt gekopieerd
* Worden gearchiveerde branches en concepten niet gekopieerd
* Worden verkeersdeployments niet gekopieerd, waardoor al het verkeer naar de main-branch gaat totdat je [verkeer uitrolt](#deploying-traffic) naar andere branches

De branch- en versie-ID's in het duplicaat zijn nieuw, dus werk alle verwijzingen naar de ID's van de bronagent bij.

## Specifieke versies ophalen

Je kunt een agent ophalen bij een specifieke versie of branch tip.

### Agent ophalen bij specifieke versie

```python
agent = client.conversational_ai.agents.get(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    version_id="agtvrsn_xxxx"
)
```

```javascript
const agent = await client.conversationalAi.agents.get('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  versionId: 'agtvrsn_xxxx',
});
```

### Agent ophalen bij branch tip

```python
agent = client.conversational_ai.agents.get(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx"
)
```

```javascript
const agent = await client.conversationalAi.agents.get('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  branchId: 'agtbrch_xxxx',
});
```

### Conceptwijzigingen opnemen

```python
agent = client.conversational_ai.agents.get(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbrch_xxxx",
    include_draft=True
)
```

```javascript
const agent = await client.conversationalAi.agents.get('agent_7101k5zvyjhmfg983brhmhkd98n6', {
  branchId: 'agtbrch_xxxx',
  includeDraft: true,
});
```

## Referentie voor instellingen

### Geversioneerde instellingen

Deze instellingen kunnen verschillen tussen versies en branches:

| Categorie                               | Instellingen                                                                                                                                                                                                                                                                                                                     |
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Gespreksconfiguratie**                | Systeemprompt, agentpersoonlijkheid, LLM-selectie en -parameters, steminstellingen (TTS-model, stem-ID), toolconfiguratie, kennisbank, eerste bericht, taalinstellingen, beurtendetectie, onderbrekingsinstellingen                                                                                                              |
| **Geversioneerde platforminstellingen** | `evaluation` - evaluatiecriteria, `widget` - uiterlijk en gedrag van widget, `data_collection` - extractie van gestructureerde gegevens, `overrides` - overrides voor het starten van gesprekken, `workspace_overrides` - webhookconfiguratie, `testing` - testconfiguraties, `safety` - guardrails (IVC-/niet-IVC-instellingen) |
| **Workflow**                            | Volledige workflowdefinitie (nodes en edges)                                                                                                                                                                                                                                                                                     |

### Instellingen per agent

Deze instellingen horen bij de agent in plaats van bij een versie, dus elke branch deelt ze:

| Instelling                              | Beschrijving                                                                |
| --------------------------------------- | --------------------------------------------------------------------------- |
| `name`, `tags`                          | Agentnaam en tags                                                           |
| `auth`                                  | Authenticatie-instellingen en allowlist                                     |
| `call_limits`                           | Gelijktijdigheids- en dagelijkse limieten                                   |
| `queueing_config`                       | Wachtrij en audio in de wacht voor bellers boven de gelijktijdigheidslimiet |
| `privacy`                               | Bewaarinstellingen, nul-retentiemodus en gebruikersgeheugens                |
| `analysis_llm`                          | LLM voor analyse na een gesprek                                             |
| `topic_discovery`, `sentiment_analysis` | Analyse-instellingen op agentniveau                                         |
| `simulation_library`                    | Instellingen voor de simulatiebibliotheek                                   |
| `alerting`                              | Alert-webhooks en drempelwaarden voor monitoring                            |
| `ban`                                   | Banstatus (alleen admin)                                                    |

> **Warning**
>
> Instellingen per agent kunnen alleen worden gewijzigd in de main-branch. In andere branches toont het dashboard
> ze als alleen-lezen, en bij het publiceren van een versie naar een niet-main-branch worden alle wijzigingen eraan verworpen.
> Ook als je de branch daarna samenvoegt met main, worden ze niet toegepast. Schakel over naar de main-branch om
> ze te wijzigen; zodra ze daar zijn gepubliceerd, geldt de wijziging voor elke branch.

## Best practices

#### Maak tests voordat je een branch maakt

Stel [geautomatiseerde tests](/docs/nl/eleven-agents/customization/agent-testing) in die het
verwachte gedrag vastleggen voordat je een nieuwe branch maakt. Dit creëert een basislijn en helpt
regressies vroeg te ontdekken terwijl je je experiment iteratief verbetert.

#### Gebruik beschrijvende branchnamen

Kies branchnamen die het doel van het experiment duidelijk aangeven. Voeg de naam van de feature,
hypothese of het ticketnummer toe voor eenvoudige referentie (bijv. `feature/new-greeting-flow` of
`experiment/shorter-responses`).

#### Documenteer het doel van branches

Gebruik het beschrijvingsveld van de branch om uit te leggen welke hypothese je test, welke statistieken
succes bepalen en welke afhankelijkheden of overwegingen er zijn. Dit helpt teamleden actieve
experimenten te begrijpen.

#### Gebruik concepten voor werk in uitvoering

Sla concepten regelmatig op terwijl je wijzigingen iteratief verbetert. Zo blijft je werk behouden zonder
onnodige versies te maken. Leg wijzigingen pas vast wanneer je klaar bent om te testen of uit te rollen.

#### Begin met kleine verkeerspercentages

Begin bij het uitrollen van een nieuwe branch met 5-10% van het verkeer. Dit beperkt de impact als er problemen ontstaan,
terwijl je toch bruikbare gegevens krijgt.

#### Monitor belangrijke statistieken voordat je verkeer verhoogt

Gebruik het [analytics dashboard](/docs/nl/eleven-agents/dashboard) om de prestaties van branches te vergelijken.
Let op voltooiingspercentages van gesprekken, gemiddelde gespreksduur, scores voor sucevaluatie en
uitvoeringspercentages van tools. Verhoog het verkeer alleen wanneer de statistieken voldoen aan of beter zijn dan de
basislijn van je main-branch.

#### Verhoog verkeer geleidelijk

Schaal het verkeer stapsgewijs op (10% → 25% → 50% → 100%) naarmate je vertrouwen groeit. Deze aanpak
minimaliseert risico's terwijl je de prestaties in elke fase valideert.

#### Houd branches kortdurend

Voeg succesvolle experimenten snel samen om configuratiedrift te voorkomen. Voor branches die langer
open moeten blijven, rebase je ze periodiek op main zodat ze niet te ver afwijken en moeilijker
samen te voegen worden.

## Volgende stappen

#### [Experimenten](/docs/nl/eleven-agents/operate/experiments)

Voer A/B-tests uit met branches en verkeersdeployment

#### [Testen](/docs/nl/eleven-agents/customization/agent-testing)

Stel geautomatiseerde tests in voor je agentversies

#### [Analytics](/docs/nl/eleven-agents/dashboard)

Monitor prestaties in verschillende branches

#### [CLI](/docs/nl/eleven-agents/operate/cli)

Beheer versiebeheer via de command line