Herramientas y adaptadores
Herramientas
Sección titulada «Herramientas»| Herramienta | Disponible si | Hace |
|---|---|---|
buscar_catalogo |
Hay adaptador catalogo y herramientas.buscar_catalogo !== false |
Busca productos/servicios; si no hay coincidencias devuelve la lista de nombres |
buscar_documentos |
Hay adaptador documentos |
Busca fragmentos de documentos subidos |
guardar_datos_lead |
Siempre | Guarda lo que dijo el cliente. Su esquema sale de flujo.campos_lead |
traspasar_a_humano |
Siempre | Registra lead + motivo + resumen y detiene el agente (parada hasToolCall) |
Los resultados de herramientas se vuelven fuentes permitidas para los guardrails: un precio que vino del catálogo pasa; uno inventado no.
Adaptadores
Sección titulada «Adaptadores»type Adaptadores = { catalogo?: { buscar(texto: string): Promise<ProductoCatalogo[]>; listar(): Promise<ProductoCatalogo[]> }; documentos?: { buscar(texto: string): Promise<{ documento: string; contenido: string }[]> }; leads: { guardarDatos(datos: Record<string, string>): Promise<void>; traspasar(p: { motivo: string; resumen: string; datos: Record<string, string> }): Promise<{ leadId?: string }>; };};- El servidor decide la empresa, la conversación y los permisos al construir los adaptadores. El modelo nunca recibe IDs ni elige alcance.
- En el simulador (
origen: "prueba") los adaptadores no escriben:guardarDatosytraspasarno tocan la base. - Catálogo pequeño en memoria: usa
buscarEnCatalogo(lista, texto)(búsqueda por palabras sin tildes). Catálogo grande: implementabuscarcon tu base (full-text o embeddings).
Campos del lead
Sección titulada «Campos del lead»flujo.campos_lead = ["nombre", "telefono", "cantidad_m3", "Dirección de entrega"] genera un esquema con claves
nombre, telefono, cantidad_m3, direccion_de_entrega. Guárdalos en un jsonb (ia_leads.datos); las columnas
fijas son opcionales.