Ir al contenido

Herramientas y adaptadores

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.

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: guardarDatos y traspasar no tocan la base.
  • Catálogo pequeño en memoria: usa buscarEnCatalogo(lista, texto) (búsqueda por palabras sin tildes). Catálogo grande: implementa buscar con tu base (full-text o embeddings).

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.