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

# Procedures in vrije vorm

## Overzicht

Een vrije procedure beschrijft één taak in eenvoudige, natuurlijke taal. De agent interpreteert de instructies en past de formulering en volgorde aan de situatie aan. Een vrije procedure kan tools aanroepen (inclusief systeemtools zoals een gesprek beëindigen), kennisbankdocumenten raadplegen en procedures aan elkaar koppelen.

## Wanneer je een vrije procedure gebruikt

Gebruik een vrije procedure wanneer de agent de formulering en volgorde aan de situatie kan aanpassen en je deze snel in gewone taal wilt opstellen. Zie [Wanneer je procedures gebruikt](/docs/nl/eleven-agents/customization/procedures#when-to-use-procedures) voor een vergelijking met gestructureerde procedures, workflows en de systeemprompt.

## Opbouw van een procedure

Hier is een terugbetalingsprocedure in de editor:

![Voorbeeld van een
terugbetalingsprocedure](/docs/_fern-img/e1264b7a4f94403453087d30ef0894e72d412ba69378e6b8cb1b675e53e887b7.webp)

Een procedure bestaat uit twee hoofdonderdelen: een trigger en content. Beide kunnen inlineverwijzingen naar andere resources bevatten, die in de bovenstaande screenshot worden weergegeven als tags met moersleutelpictogrammen. Elke procedure heeft ook een naam die in het dashboard wordt weergegeven.

### Naam

Een kort label dat de procedure in het dashboard identificeert. De naam wordt nooit naar de LLM gestuurd en heeft dus geen invloed op het gedrag van de agent.

### Trigger

Een beschrijving van wanneer de agent deze procedure moet gebruiken, bijvoorbeeld *Wanneer de gebruiker vraagt om een bestelling terug te betalen*.

Laat de trigger alleen leeg wanneer je een [subprocedure](#sub-procedures) maakt.

### Content

De hoofdtekst van de procedure, geschreven in markdown. Content beschrijft wat de agent moet doen: een vraag stellen, een bestelling opzoeken, een tool aanroepen of het gesprek beëindigen. Het kan een genummerde reeks stappen zijn die de agent moet volgen, of algemene richtlijnen voor de situatie. Elke stap of richtlijn kan uit één zin bestaan (*Vraag de gebruiker om het bestel-ID*) of uit een korte alinea die uitlegt wat er moet gebeuren en waarom.

Gebruik genummerde stappen voor opeenvolgende acties en opsommingstekens voor vereisten of subitems binnen een stap.

### Inlineverwijzingen

Procedures kunnen inline naar verschillende soorten resources verwijzen:

* Tools (bijv. een bestelling opzoeken, een kaart belasten, het gesprek beëindigen, doorverbinden met een medewerker)
* Kennisbankdocumenten
* Andere procedures

Gebruik inlineverwijzingen wanneer een stap vereist dat de agent een tool, kennisbankdocument of andere procedure gebruikt. Verwijzingen koppelen de resource automatisch aan de procedure, zodat de agent deze kan gebruiken. Verwijzingen in gewone tekst (zoals *gebruik hier de calculatortool*) werken ook, maar alleen als de resource al aan de agent is gekoppeld.

Voeg een verwijzing in door `/` te typen in de trigger of content en de resource in het slashmenu te kiezen. Verwijzingen verschijnen als aanklikbare tags in de editor. Klik op een tag om de onderliggende resource te openen en de configuratie te controleren.

Wanneer je vrije content via de API schrijft, voeg je verwijzingen in met de volgende syntaxis:

```text focus={1-5}
[tool id="tool_abc123"]
[kb id="kb_abc123"]
[procedure id="agtprc_abc123"]
[system_tool id="end_call"]
{{customer_id}}
```

Een inlineprocedureverwijzing moet een procedure van dezelfde agent gebruiken. Zie [Beperkingen](/docs/nl/eleven-agents/customization/procedures#limitations) voor de reikwijdte van agents en duplicatiegedrag.

Met een verwijzing in de trigger kan de procedure worden gestart op basis van de uitvoer van een resource, bijvoorbeeld \_Wanneer `get_user` tier 'gold' retourneert \_. Een verwijzing in content vertelt de agent om de resource in die stap aan te roepen of te raadplegen.

![Slashmenu in de procedure-editor](/docs/_fern-img/8625ffec0f5584619e6ccb97720fd86f2e8d3cd0061308ad87b57f176e5535e3.webp)

Als een resource waarnaar wordt verwezen later wordt verwijderd, of je account er geen toegang meer toe heeft, wordt de tag als kapot weergegeven. De badge **Fouten** bovenaan de editor vermeldt deze verwijzingen: *ongeldig* als de resource niet meer bestaat, of *niet beschikbaar* als deze wel bestaat maar je account er geen toegang toe heeft. Open de badge om te zien welke stap is getroffen en herstel of verwijder de verwijzing.

![Foutendialoog met ongeldige
verwijzingen](/docs/_fern-img/e9ec6b19be2992da80a726883baf53265a5d5b38621373cd7e60375c944674cd.webp)

## Subprocedures

Een subprocedure heeft een lege trigger. De agent kan deze alleen uitvoeren vanuit een andere procedure die ernaar verwijst.

Gebruik subprocedures om [stappen te delen](#composing-procedures) binnen één agent en het aantal procedures dat tegelijk beschikbaar is te verminderen. Geef de hoofdprocedure een trigger, verwijs vanuit de content naar gerelateerde subprocedures en laat de triggers daarvan leeg.

Een subprocedure voor escalatie kan de stappen bevatten om het gesprek aan een medewerker over te dragen. Verwijs ernaar vanuit de terugbetalings- en annuleringsprocedures en laat de trigger leeg. De agent kan escaleren als stap van beide procedures, maar buiten deze procedures blijft de subprocedure niet beschikbaar.

## Importeren uit een document

Je kunt beginnen met een bestaande standaardwerkwijze (SOP). Kies **Van SOP** in het menu **+** van de procedurelijst en upload vervolgens een bestand.

Ondersteunde indelingen: `PDF`, `DOCX`, `TXT`, `MD`, `HTML`, `EPUB`. Bestanden moeten 20 MB of kleiner zijn.

De importfunctie analyseert het document, identificeert maximaal 10 afzonderlijke procedures en maakt voor elk een concept met een gegenereerde naam, trigger en content. Open elk concept om het te verfijnen. Als je document meer dan 10 SOP's bevat, splits het dan op in kleinere bestanden voordat je het uploadt.

![Dialoogvenster voor SOP uploaden](/docs/_fern-img/716601fc90dea757e23971e5aabe063e6a66fc0f75878247dc9f1fc3011f5197.webp)

## Een vrije procedure beheren

#### Maken via het dashboard

Open je agent in het [dashboard](https://elevenlabs.io/app/agents) en selecteer vervolgens **Procedures**.
Gebruik **+** om een vrije procedure te maken. Voeg een trigger toe en schrijf de instructies in de
contenteditor. Publiceer vervolgens de wijzigingen van de agent.

#### Beheren via de API

Vrije procedures slaan markdown op in `content`.

### Vereisten

* Een ElevenLabs API-sleutel in de omgevingsvariabele `ELEVENLABS_API_KEY`.
* De doelwaarden voor `agent_id` en `branch_id`. Zie [Agentversiebeheer](/docs/nl/eleven-agents/operate/versioning) voor branchbewerkingen.
* Versie `2.60.0` of nieuwer van het Python-pakket `elevenlabs` of het JavaScript-pakket `@elevenlabs/elevenlabs-js`.

Procedureconcepten zijn [per gebruiker, per branch](/docs/nl/eleven-agents/operate/versioning#drafts). Door te publiceren sla je je procedurewijzigingen
op in een nieuwe agentversie op die branch. Concepten van andere gebruikers blijven ongewijzigd.

### Een concept maken

```python focus={1,5-15}
from elevenlabs import CreateProcedureRequestModel, ElevenLabs

elevenlabs = ElevenLabs()

procedure = elevenlabs.conversational_ai.agents.procedures.create(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbranch_0901k4aafjxxfxt93gd841r7tv5t",
    request=CreateProcedureRequestModel(
        name="Refund request",
        type="free_form",
        trigger="When the user asks to refund, return, or get money back for an order",
        content="Ask for the order ID, then look it up with [tool id=\"tool_abc123\"].",
    ),
)

print(procedure.procedure_id)
```

```typescript focus={5-15}
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const elevenlabs = new ElevenLabsClient();

const procedure = await elevenlabs.conversationalAi.agents.procedures.create(
  "agent_7101k5zvyjhmfg983brhmhkd98n6",
  "agtbranch_0901k4aafjxxfxt93gd841r7tv5t",
  {
    name: "Refund request",
    type: "free_form",
    trigger: "When the user asks to refund, return, or get money back for an order",
    content: "Ask for the order ID, then look it up with [tool id=\"tool_abc123\"].",
  }
);

console.log(procedure.procedureId);
```

```bash focus={1-8}
curl -X POST "https://api.elevenlabs.io/v1/convai/agents/agent_7101k5zvyjhmfg983brhmhkd98n6/branches/agtbranch_0901k4aafjxxfxt93gd841r7tv5t/procedures" \
  -H "xi-api-key: $ELEVENLABS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Refund request",
    "type": "free_form",
    "trigger": "When the user asks to refund, return, or get money back for an order",
    "content": "Ask for the order ID, then look it up with [tool id=\"tool_abc123\"]."
  }'
```

Het antwoord bevat de nieuwe `procedure_id`. Roep voor het bijwerken van het concept
`PATCH /procedures/{procedure_id}/draft` aan met `name`, `content`, `type` en een expliciete
`trigger`.

Gebruik een niet-lege `trigger` voor een hoofdprocedure. Gebruik voor een
[subprocedure](#sub-procedures) een lege tekenreeks.

### De wijzigingen publiceren

Werk de agent op de branch bij om je concepten voor vrije procedures in een nieuwe versie te publiceren.
De request heeft geen bodyvelden nodig; bij het publiceren worden de concepten gebruikt zoals ze zijn.

```python focus={5-8}
from elevenlabs import ElevenLabs

elevenlabs = ElevenLabs()

elevenlabs.conversational_ai.agents.update(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    branch_id="agtbranch_0901k4aafjxxfxt93gd841r7tv5t",
)
```

```typescript focus={5-7}
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const elevenlabs = new ElevenLabsClient();

await elevenlabs.conversationalAi.agents.update("agent_7101k5zvyjhmfg983brhmhkd98n6", {
  branchId: "agtbranch_0901k4aafjxxfxt93gd841r7tv5t",
});
```

```bash focus={1-5}
curl -X PATCH \
  "https://api.elevenlabs.io/v1/convai/agents/agent_7101k5zvyjhmfg983brhmhkd98n6?branch_id=agtbranch_0901k4aafjxxfxt93gd841r7tv5t" \
  -H "xi-api-key: $ELEVENLABS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

Zie [Procedures beheren](/docs/nl/eleven-agents/customization/procedures#manage-procedures) voor
het verwijderen en negeren van concepten, of de
[API-referentie voor procedures](/docs/nl/api-reference/agents/procedures/) voor volledige endpointschema's.

## Best practices

> **Tip**
>
> De agent moet op basis van de trigger de juiste procedure kiezen en de content volgen. Capabelere
> modellen doen dit betrouwbaarder naarmate het aantal procedures groeit. Zie
> [Modellen](/docs/nl/eleven-agents/customization/llm) voor opties.

Procedures goed schrijven betekent twee onderdelen goed schrijven: een trigger die de procedure uitvoert wanneer dat nodig is, en content die de agent kan volgen.

### Een procedure itereren

We raden aan klein te beginnen en [agenttests](/docs/nl/eleven-agents/customization/agent-testing) te gebruiken om elke wijziging te controleren voordat je de volgende doorvoert.

#### Schrijf een korte procedure

Schrijf een trigger en korte content. Breid de content alleen uit als een test laat zien dat de agent
meer instructies nodig heeft.

#### Voeg triggertests toe

Maak simulatietests voor verzoeken die de procedure moeten starten en voor soortgelijke verzoeken
die dat niet moeten doen. De meeste fouten komen door de trigger, dus schrijf hiervan meer dan van volledige
simulaties.

#### Voeg een volledige simulatie toe

Maak een simulatietest die de hele procedure uitvoert en de uitkomst controleert.

#### Voer de tests uit en los fouten op

Als een test mislukt, herstel dan de trigger of de content en voer vervolgens alle tests opnieuw uit.

> **Tip**
>
> Om snel op een trigger te itereren, maak je een simulatietest waarvan de [chatgeschiedenis](/docs/nl/eleven-agents/customization/agent-testing#simulation-testing)
> eindigt met het verzoek van de gebruiker en stel je **Maximumaantal gespreksbeurten** in op `1`. De agent
> antwoordt één keer, wat genoeg is om te zien of het verzoek de juiste procedure start, en elke uitvoering blijft
> kort. Schrijf de succescriteria als *De agent heeft de terugbetalingsprocedure gestart*. Zonder chatgeschiedenis besteedt
> een agent met een eerste bericht de enige beurt aan de begroeting en controleert de test niets.

Zoek bij een mislukte test of livegesprek naar de categorie fout erachter. Als de agent iets verkeerds zei, lost *Zeg dat niet* één gesprek op. Zoek in eerdere gesprekken naar soortgelijke fouten en schrijf één instructie die ze allemaal dekt. De oorzaak kan ook in de kennisbank of de agentconfiguratie liggen. [Architect](/docs/nl/eleven-agents/operate/architect) kan deze zoekopdracht uitvoeren: open het mislukte gesprek, selecteer **Architect** en vraag om soortgelijke fouten te vinden en een oplossing voor te stellen. Architect kan het gesprek ook omzetten in een test.

### Triggers schrijven

#### Houd triggers concreet en gescheiden

Overlappende of vage triggers zorgen ervoor dat de verkeerde procedure wordt uitgevoerd. Geef de voorkeur aan *Wanneer de gebruiker vraagt om
een abonnement te annuleren* boven \_Wanneer de gebruiker een vraag heeft over diens account \_.

#### Schrijf vanuit het perspectief van de gebruiker

Beschrijf waar de gebruiker om vraagt, niet wat de agent moet doen. Triggers die als acties van de agent
zijn geformuleerd, zijn minder betrouwbaar. Geef de voorkeur aan *Wanneer de gebruiker vraagt om het abonnement te annuleren* boven \_Annuleer
het abonnement van de gebruiker \_.

#### Houd rekening met hoe gebruikers het echt vragen

Een beperkte trigger kan echte verzoeken missen wanneer de gebruiker het anders formuleert. Neem de
varianten op die de gebruiker kan zeggen. *Wanneer de gebruiker vraagt om een bestelling terug te betalen, terug te sturen of geld terug te krijgen voor een
bestelling* werkt betrouwbaarder dan \_Wanneer de gebruiker om een terugbetaling vraagt \_. [Doorzoek eerdere gesprekken](/docs/nl/eleven-agents/customization/agent-analysis/smart-search) om te ontdekken hoe gebruikers
het verzoek formuleren.

#### Draag over tussen gerelateerde procedures

Gebruikers veranderen soms halverwege een procedure hun verzoek en de trigger alleen start dan mogelijk niet
de juiste procedure. Voeg voor een wissel die je vaak ziet in eerdere gesprekken een inlineverwijzing
naar de andere procedure toe in de content van de eerste procedure. Schrijf bijvoorbeeld *Als de gebruiker een
terugbetaling wil in plaats van een omruiling, voer dan* gevolgd door een inlineverwijzing naar de terugbetalingsprocedure. Als
de meeste procedures een overdracht nodig hebben, maak de triggers dan juist duidelijker verschillend.

### Content schrijven

#### Gebruik de gebiedende wijs

Schrijf stappen als instructies voor de agent: *Zoek de laatste bestelling van de klant op* in plaats van \_Je
moet de laatste bestelling van de klant opzoeken \_. Directe instructies zijn makkelijker te volgen dan
suggesties.

#### Leg uit waarom een stap belangrijk is

Redeneringen zijn ook toepasbaar op uitzonderingsgevallen die de procedure niet opsomt. Een korte *omdat we
het bestel-ID nodig hebben om een terugbetaling uit te voeren* helpt de agent situaties af te handelen die de stappen niet voorzagen.
Vermijd MUSTs in hoofdletters en rigide scripts wanneer een uitleg van één regel hetzelfde werk doet.

#### Zeg wat je moet doen in plaats van wat je moet vermijden

Beschrijf het gedrag dat je wilt. *Als je de bestelling niet kunt vinden, vraag de gebruiker dan het bestel-ID te bevestigen*
werkt beter dan *Verzin geen bestelgegevens*. Voeg voor fouten met hoge kosten ook een
[guardrail](/docs/nl/eleven-agents/best-practices/guardrails) toe.

#### Gebruik stappen wanneer de volgorde belangrijk is

Genummerde stappen helpen wanneer de agent dingen in een vaste volgorde moet doen. Voor afwegingen werken een paar
zinnen met richtlijnen vaak beter, vooral met capabelere modellen.

#### Bewaar feiten in de kennisbank

Een procedure beschrijft wat de agent in een situatie moet doen. Specifieke informatie, zoals
prijzen, abonnementsdetails of openingstijden, hoort in de [kennisbank](/docs/nl/eleven-agents/customization/knowledge-base).
Verwijs vanuit de procedure die het nodig heeft naar het document. In plaats van bijvoorbeeld de prijs van elk abonnement
in de procedure op te sommen, schrijf je *Noem de prijs uit* gevolgd door een inlineverwijzing naar een prijsdocument.

### Procedures samenstellen

#### Schrijf één procedure per situatie

Als één situatie is opgesplitst in meerdere beperkte procedures, heeft de agent meer triggers om uit
te kiezen en start deze vaker de verkeerde. Als twee procedures bij hetzelfde
verzoek zouden starten, voeg ze dan samen. Content van meer dan ongeveer 3.000 tekens omvat doorgaans meer dan één
situatie.

#### Haal gedeelde stappen naar een subprocedure

Als dezelfde stappen in meerdere procedures voorkomen (de identiteit van een klant verifiëren, een bestelling
opzoeken, escaleren naar een medewerker), haal ze dan naar een [subprocedure](#sub-procedures) en
verwijs er vanuit elke procedure die deze nodig heeft via het slashmenu naar. Door de gedeelde stappen op één
plek te onderhouden, blijven alle procedures die ze gebruiken consistent.

#### Gebruik subprocedures voor reactieve acties

Gebruik een subprocedure voor een actie die de agent alleen moet uitvoeren wanneer een andere procedure dit vraagt,
zoals identiteitsverificatie of escalatie. Zonder trigger concurreert deze niet met hoofdprocedures bij de start van een gesprek. Minder
triggerkeuzes houden de routering gericht.

#### Verwijs naar tools vanuit de procedure die ze gebruikt

Verwijs naar een tool vanuit de procedure die deze gebruikt in plaats van deze aan de hele agent te koppelen. De
tool blijft dan buiten niet-gerelateerde gesprekken. In een vrije procedure is de tool
alleen beschikbaar zolang de procedure een van de vijf meest recent gestarte procedures is. Noem de taak van de tool dus ook
in de trigger, bijvoorbeeld *of wanneer je een bestelling moet opzoeken*. Zie
[Beperkingen](/docs/nl/eleven-agents/customization/procedures#limitations).

#### Gebruik de systeemprompt voor globaal gedrag

Toon, identiteit, weigeringsbeleid en guardrails horen in de [systeemprompt](/docs/nl/eleven-agents/best-practices/prompting-guide).
Zet taakspecifieke stappen in procedures.

#### Procedures worden met de agent versiebeheerd

Procedures maken deel uit van de configuratie van de agent en worden daarom samen vastgelegd wanneer je een
nieuwe agentversie publiceert. Herstel een eerdere agentversie om terug te keren naar een eerdere set procedures.
Zie [Agentversiebeheer](/docs/nl/eleven-agents/operate/versioning).

#### Begin met bestaande documentatie

Als je team al SOP's heeft, gebruik dan de importfunctie om deze in concepten om te zetten en verfijn ze van daaruit.