Configure
Procedures
Instrucciones por tarea, que el agente sigue cuando su disparador coincide.
Un procedure son las instrucciones de una tarea concreta, que el agente sigue
cuando su disparador coincide en vez de reconstruirlas desde el prompt en cada
llamada. Se administran en Procedures, dentro de cada agente.
Por qué no es simplemente más prompt
Un system prompt largo funciona bien mientras el agente hace una cosa. Cuando hace ocho, empieza a competir consigo mismo: las instrucciones de devoluciones estorban a las de facturación, y las dos se pagan en cada turno aunque la conversación no vaya de ninguna de las dos.
Un procedure separa las dos cosas. El catálogo —el nombre y el disparador de cada uno— sí viaja en el prompt, porque es lo que el agente lee para decidir cuál aplica. El cuerpo no: se carga solo cuando entra.
Los dos tipos
Se elige al crearlo y no se puede cambiar después, porque cada uno guarda algo distinto.
Libre es Markdown que el agente interpreta y adapta. Sirve cuando el orden importa poco y quieres que module el tono según la conversación. Es una instrucción, no una garantía: el prompt le dice que siga el que coincida sin improvisar su propia versión, y normalmente lo hace.
Estructurado es una lista de pasos que el runtime ejecuta. Ahí "no improvisa" deja de ser una instrucción y pasa a ser el mecanismo: el orden lo decide el intérprete, no el modelo.
Lo que sigue siendo un juicio del modelo, en los dos casos, es si entra. Cuál procedure aplica es una pregunta sobre lo que quiso decir una persona, y no hay forma de hacer eso determinista.
El disparador
Descríbelo como lo diría quien escribe, no como lo llamas internamente: «quiere devolver algo que compró» funciona mejor que «flujo RMA».
Dejarlo vacío tiene un significado propio: el procedure pasa a ser un sub-procedure, alcanzable solo desde el cuerpo de otro y nunca por sí solo. Es la forma de tener un trozo compartido —verificar identidad, por ejemplo— sin que el agente lo elija por su cuenta.
Modo
A demanda es el normal: el cuerpo se carga cuando el disparador coincide.
Siempre en el prompt mete el cuerpo entero en cada turno, se use o no. Es útil
para algo que aplica a toda conversación, y es la opción que cuesta tokens en
cada llamada — el carril marca esos procedures con una etiqueta por esa razón.
Los pasos de un procedure estructurado
Cada tipo de paso cuesta algo distinto, y esa es la razón de que haya varios en lugar de uno:
| Paso | Qué hace | Coste |
|---|---|---|
Texto exacto | Emite unas palabras tal cual | Cero llamadas al modelo |
Di | Cuenta algo, con sus propias palabras | Una llamada |
Pregunta | Pregunta y termina el turno, esperando respuesta | Una llamada |
Herramienta | Ejecuta una herramienta concreta | Una llamada |
Si | Ramifica según una condición | Cero, o una si la juzga el modelo |
Sub-procedure | Entra en otro procedure | Cero |
Texto exacto es el único que garantiza las palabras, precisamente porque no
pasa por el modelo. Si necesitas una frase legal literal, ese es el paso.
Referencias dentro del cuerpo
En un procedure libre puedes apuntar a otros recursos por id:
[tool id="..."] una herramienta
[kb id="..."] un documento de la base de conocimiento
[procedure id="..."] otro procedure
Y a variables dinámicas con {{nombre}}.
Límites
Hasta 64 procedures por agente. No es un límite de la base de datos: el catálogo se renderiza en el prompt de cada turno y el modelo tiene que elegir entre las entradas. Pasado ese punto la respuesta honesta deja de ser una lista más larga y pasa a ser un workflow.
El cuerpo admite hasta 50 000 caracteres y el disparador 1 000.
Borrar
Es un borrado suave. El cuerpo de otro procedure puede seguir apuntando a este
con [procedure id="..."], y «ese procedure ya no existe» es mejor respuesta que
un uuid que nadie puede consultar.
