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

# Procedimientos de formato libre

## Descripción general

Un procedimiento de formato libre describe una tarea en lenguaje sencillo y natural. El agente interpreta las instrucciones y adapta la redacción y el orden a cada situación. Un procedimiento de formato libre puede llamar a herramientas —incluidas herramientas del sistema, como finalizar una llamada—, consultar documentos de la base de conocimientos y encadenarse con otros procedimientos.

## Cuándo usar un procedimiento de formato libre

Usa un procedimiento de formato libre cuando el agente pueda adaptar la redacción y el orden a la situación, y quieras crearlo rápidamente en lenguaje sencillo. Para saber cómo se compara con los procedimientos estructurados, los workflows y el prompt del sistema, consulta [Cuándo usar procedimientos](/docs/es/eleven-agents/customization/procedures#when-to-use-procedures).

## Anatomía de un procedimiento

Este es un procedimiento de reembolso en el editor:

![Ejemplo de procedimiento
de reembolso](/docs/_fern-img/e1264b7a4f94403453087d30ef0894e72d412ba69378e6b8cb1b675e53e887b7.webp)

Un procedimiento tiene dos partes principales: un activador y contenido. Ambas pueden contener referencias insertadas a otros recursos, que se muestran en la captura de arriba como etiquetas con iconos de llave inglesa. Cada procedimiento también tiene un nombre que se muestra en el panel.

### Nombre

Una etiqueta breve que identifica el procedimiento en el panel. El nombre nunca se envía al LLM, así que no afecta al comportamiento del agente.

### Activador

Una descripción de cuándo debe usar el agente este procedimiento; por ejemplo, *Cuando el usuario pide reembolsar un pedido*.

Deja el activador vacío solo al crear un [subprocedimiento](#sub-procedures).

### Contenido

El cuerpo del procedimiento, escrito en Markdown. El contenido describe lo que debe hacer el agente: hacer una pregunta, consultar un pedido, llamar a una herramienta o finalizar la llamada. Puede ser una secuencia numerada de pasos que seguir o unas indicaciones generales para la situación. Cada paso o pauta puede ser una sola frase (*Pide al usuario su ID de pedido*) o un párrafo breve que explique qué hacer y por qué.

Usa pasos numerados para acciones secuenciales y viñetas para requisitos o subelementos dentro de un paso.

### Referencias insertadas

Los procedimientos pueden incluir referencias a distintos tipos de recursos:

* Herramientas (por ejemplo, consultar un pedido, cobrar una tarjeta, finalizar la llamada o transferir a una persona)
* Documentos de la base de conocimientos
* Otros procedimientos

Usa referencias insertadas siempre que un paso requiera que el agente use una herramienta, un documento de la base de conocimientos u otro procedimiento. Las referencias adjuntan automáticamente el recurso al procedimiento para que el agente pueda usarlo. Las menciones en texto normal (como *usa aquí la herramienta de calculadora*) también funcionan, pero solo si el recurso ya está adjunto al agente.

Inserta una referencia escribiendo `/` en el activador o el contenido y eligiendo el recurso en el menú de barra. Las referencias aparecen como etiquetas en las que puedes hacer clic en el editor. Haz clic en una etiqueta para abrir el recurso subyacente y confirmar su configuración.

Al escribir contenido de formato libre mediante la API, inserta referencias con la siguiente sintaxis:

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

Una referencia insertada a un procedimiento debe usar un procedimiento del mismo agente. Consulta [Limitaciones](/docs/es/eleven-agents/customization/procedures#limitations) para conocer el alcance del agente y el comportamiento de duplicación.

Una referencia en el activador permite que el procedimiento se active según la salida de un recurso; por ejemplo, *Cuando `get_user` devuelve el nivel «gold»*. Una referencia en el contenido indica al agente que invoque o consulte el recurso en ese paso.

![Menú de barra en el editor de procedimientos](/docs/_fern-img/8625ffec0f5584619e6ccb97720fd86f2e8d3cd0061308ad87b57f176e5535e3.webp)

Si más tarde se elimina un recurso referenciado o tu cuenta pierde acceso a él, la etiqueta se mostrará como rota. La insignia **Errores** situada en la parte superior del editor enumera estas referencias: *no válida* si el recurso ya no existe o *no disponible* si existe pero tu cuenta no tiene acceso. Abre la insignia para ver qué paso está afectado y corregir o eliminar la referencia.

![Cuadro de diálogo de errores que enumera
referencias no válidas](/docs/_fern-img/e9ec6b19be2992da80a726883baf53265a5d5b38621373cd7e60375c944674cd.webp)

## Subprocedimientos

Un subprocedimiento tiene un activador vacío. El agente solo puede ejecutarlo desde otro procedimiento que lo incluya como referencia.

Usa subprocedimientos para [compartir pasos](#composing-procedures) dentro de un mismo agente y reducir el número de procedimientos disponibles a la vez. Asigna un activador al procedimiento de entrada, incluye referencias a subprocedimientos relacionados en su contenido y deja sus activadores vacíos.

Un subprocedimiento de escalado puede contener los pasos para transferir la conversación a una persona. Inclúyelo como referencia desde los procedimientos de reembolso y cancelación, y deja su activador vacío. El agente puede escalar como paso de cualquiera de los dos procedimientos, pero fuera de ellos el subprocedimiento seguirá sin estar disponible.

## Importar desde un documento

Puedes partir de un procedimiento operativo estándar (SOP) existente. Elige **Desde SOP** en el menú **+** de la lista de procedimientos y, después, sube un archivo.

Formatos compatibles: `PDF`, `DOCX`, `TXT`, `MD`, `HTML`, `EPUB`. Los archivos deben tener un tamaño máximo de 20 MB.

El importador analiza el documento, identifica hasta 10 procedimientos distintos y crea un borrador para cada uno con un nombre, activador y contenido generados. Abre cada borrador para perfeccionarlo. Si tu documento contiene más de 10 SOP, divídelo en archivos más pequeños antes de subirlo.

![Cuadro de diálogo para subir un SOP](/docs/_fern-img/716601fc90dea757e23971e5aabe063e6a66fc0f75878247dc9f1fc3011f5197.webp)

## Gestionar un procedimiento de formato libre

#### Crear desde el panel

Abre tu agente en el [panel](https://elevenlabs.io/app/agents) y, después, selecciona **Procedimientos**.
Usa **+** para crear un procedimiento de formato libre. Añade un activador y escribe las instrucciones en el
editor de contenido; después, publica los cambios del agente.

#### Gestionar mediante la API

Los procedimientos de formato libre almacenan Markdown en `content`.

### Requisitos previos

* Una clave de API de ElevenLabs en la variable de entorno `ELEVENLABS_API_KEY`.
* Los valores de destino `agent_id` y `branch_id`. Consulta [Versionado de agentes](/docs/es/eleven-agents/operate/versioning) para conocer las operaciones con ramas.
* La versión `2.60.0` o posterior del paquete de Python `elevenlabs` o del paquete de JavaScript `@elevenlabs/elevenlabs-js`.

Los borradores de procedimientos son [por usuario y por rama](/docs/es/eleven-agents/operate/versioning#drafts). Al publicar, tus cambios en los procedimientos
se guardan en una nueva versión del agente en esa rama. Los borradores de otros usuarios no se ven afectados.

### Crear un borrador

```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\"]."
  }'
```

La respuesta incluye el nuevo `procedure_id`. Para actualizar el borrador, llama a
`PATCH /procedures/{procedure_id}/draft` con `name`, `content`, `type` y un valor
`trigger` explícito.

Usa un valor `trigger` no vacío para un procedimiento de entrada. Para un
[subprocedimiento](#sub-procedures), usa una cadena vacía.

### Publicar los cambios

Actualiza el agente en la rama para publicar tus borradores de procedimientos de formato libre en una nueva versión.
La solicitud no necesita campos en el cuerpo; la publicación toma los borradores tal como están.

```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 '{}'
```

Consulta [Gestionar procedimientos](/docs/es/eleven-agents/customization/procedures#manage-procedures) para conocer
cómo eliminar y descartar borradores, o la
[referencia de la API de procedimientos](/docs/es/api-reference/agents/procedures/) para consultar los esquemas
completos de las rutas de API.

## Buenas prácticas

> **Tip**
>
> El agente debe elegir el procedimiento adecuado según su activador y seguir el contenido. Los modelos
> más capaces lo hacen de forma más fiable a medida que aumenta el número de procedimientos. Consulta
> [Modelos](/docs/es/eleven-agents/customization/llm) para ver las opciones.

Escribir bien los procedimientos implica escribir bien dos partes: un activador que ejecute el procedimiento cuando corresponda y un contenido que el agente pueda seguir.

### Iterar en un procedimiento

Recomendamos empezar poco a poco y usar [pruebas de agentes](/docs/es/eleven-agents/customization/agent-testing) para comprobar cada cambio antes de hacer el siguiente:

1. Escribe un activador y un contenido breve.
2. Crea pruebas de simulación para solicitudes que deberían iniciar el procedimiento y para solicitudes similares que no deberían hacerlo.
3. Crea una prueba de simulación que ejecute todo el procedimiento.
4. Ejecuta las pruebas. Cuando una falle, corrige el activador o el contenido.
5. Vuelve a ejecutar las pruebas después de cada cambio.

Cuando falle una prueba o una conversación real, busca conversaciones anteriores con fallos similares antes de cambiar el procedimiento y, después, escribe una instrucción que los cubra todos. La causa también puede estar en la base de conocimientos o en la configuración del agente. [Architect](/docs/es/eleven-agents/operate/architect) puede realizar esta búsqueda: abre la conversación que ha fallado, selecciona **Architect** y pídele que encuentre fallos similares y proponga una solución. Architect también puede convertir la conversación en una prueba.

> **Tip**
>
> Para iterar rápidamente en un activador, pruébalo con una prueba de simulación que tenga **Máximo de turnos
> de conversación** configurado en `1`. La simulación se detiene tras el primer intercambio, lo que basta para mostrar si
> la solicitud inicial inicia el procedimiento adecuado y mantiene cada ejecución breve.

### Escribir activadores

#### Mantén los activadores concretos y diferenciados

Los activadores superpuestos o imprecisos hacen que se ejecute el procedimiento equivocado. Es preferible *Cuando el usuario pide
cancelar una suscripción* a \_Cuando el usuario tiene una pregunta sobre su cuenta \_.

#### Escribe desde la perspectiva del usuario

Describe lo que pide el usuario, no lo que debe hacer el agente. Los activadores formulados como
acciones del agente son menos fiables. Es preferible *Cuando el usuario pide cancelar su suscripción* a \_Cancelar
la suscripción del usuario \_.

#### Cubre cómo lo piden realmente los usuarios

Un activador demasiado limitado puede pasar por alto solicitudes reales si el usuario se expresa de otra forma. Incluye las
variantes que podría usar el usuario. *Cuando el usuario pide reembolsar, devolver o recuperar el dinero de un
pedido* funciona de forma más fiable que \_Cuando el usuario solicita un reembolso \_. [Busca en conversaciones anteriores](/docs/es/eleven-agents/customization/agent-analysis/smart-search) para descubrir cómo formulan los usuarios
la solicitud.

#### Transfiere entre procedimientos relacionados

A veces los usuarios cambian su solicitud a mitad de un procedimiento, y puede que el activador por sí solo no
inicie el correcto. Para un cambio que veas a menudo en conversaciones anteriores, añade una referencia insertada
al otro procedimiento en el contenido del primero. Por ejemplo, escribe *Si el usuario quiere un
reembolso en lugar de un cambio, ejecuta* seguido de una referencia insertada al procedimiento de reembolso. Si
la mayoría de procedimientos necesita una transferencia, diferencia más los activadores.

### Escribir contenido

#### Usa el imperativo

Escribe los pasos como instrucciones para el agente: *Consulta el último pedido del cliente* en lugar de \_Debes
consultar el último pedido del cliente \_. Las instrucciones directas son más fáciles de seguir que las
sugerencias.

#### Explica por qué es importante un paso

El razonamiento se generaliza a casos límite que el procedimiento no enumera. Un breve *porque necesitamos
el ID del pedido para emitir un reembolso* ayuda al agente a gestionar situaciones que los pasos no anticipaban.
Evita los DEBE en mayúsculas y los guiones rígidos cuando una explicación de una línea logre lo mismo.

#### Indica qué hacer en lugar de qué evitar

Describe el comportamiento que quieres. *Si no encuentras el pedido, pide al usuario que confirme el ID del
pedido* funciona mejor que \_No inventes detalles del pedido \_. Para errores con un coste elevado, añade también una
[medida de protección](/docs/es/eleven-agents/best-practices/guardrails).

#### Guarda los datos en la base de conocimientos

Un procedimiento describe lo que debe hacer el agente en una situación. La información específica, como
precios, detalles de planes u horarios de apertura, debe estar en la [base de conocimientos](/docs/es/eleven-agents/customization/knowledge-base). Incluye como referencia el documento desde el
procedimiento que lo necesite. Por ejemplo, en vez de enumerar el precio de cada plan en el procedimiento,
escribe *Indica el precio de* seguido de una referencia insertada a un documento de precios.

### Combinar procedimientos

#### Escribe un procedimiento por situación

Si una situación se divide entre varios procedimientos limitados, el agente tendrá más activadores entre los que
elegir y con más frecuencia iniciará el equivocado. Si dos procedimientos se iniciarían con la misma
solicitud, combínalos. Un contenido de más de unos 3000 caracteres suele abarcar más de una
situación.

#### Extrae los pasos compartidos en un subprocedimiento

Si los mismos pasos aparecen en varios procedimientos (verificar la identidad de un cliente, consultar
un pedido, escalar a una persona), extráelos a un [subprocedimiento](#sub-procedures) e
inclúyelo como referencia en cada procedimiento que lo necesite mediante el menú de barra. Mantener los pasos compartidos en un único
lugar hace que todos los procedimientos que los usan sean coherentes.

#### Usa subprocedimientos para acciones reactivas

Usa un subprocedimiento para una acción que el agente deba ejecutar solo cuando otro procedimiento la solicite,
como la verificación de identidad o el escalado. Sin activador, no compite con los procedimientos de entrada
al inicio de la conversación. Menos opciones de activador permiten mantener el enrutamiento centrado.

#### Incluye referencias a herramientas desde el procedimiento que las usa

Incluye una referencia a una herramienta desde el procedimiento que la use, en lugar de adjuntarla a todo el agente. De este modo,
la herramienta queda fuera de conversaciones no relacionadas. En un procedimiento de formato libre, la herramienta está disponible
solo mientras el procedimiento sea uno de los cinco iniciados más recientemente. Consulta
[Limitaciones](/docs/es/eleven-agents/customization/procedures#limitations).

#### Usa el prompt del sistema para el comportamiento global

El tono, la identidad, las políticas de rechazo y las medidas de protección deben estar en el [prompt del sistema](/docs/es/eleven-agents/best-practices/prompting-guide). Incluye los pasos específicos de cada tarea en los
procedimientos.

#### Los procedimientos se versionan con el agente

Los procedimientos forman parte de la configuración del agente, por lo que se guardan juntos como una instantánea al publicar una
nueva versión del agente. Para volver a un conjunto anterior de procedimientos, restaura una versión anterior del
agente. Consulta [Versionado de agentes](/docs/es/eleven-agents/operate/versioning).

#### Parte de documentación existente

Si tu equipo ya dispone de SOP, usa el importador para convertirlos en borradores y perfecciónalos a partir de ahí.