KAIU’s AI uses Anthropic’s native tool calling (function calling) to interact with the product inventory and knowledge base. The system defines two primary tools that Claude can invoke during conversations.
{ name: "searchInventory", description: "Busca en el inventario actual (catálogo de productos) de KAIU para responder preguntas sobre precios, disponibilidad, y variantes. ÚSALA SIEMPRE que el cliente pregunte por un producto específico, precios o si 'tienen' algo.", input_schema: { type: "object", properties: { query: { type: "string", description: "El nombre del producto, ingrediente o variante a buscar (Ej: 'Lavanda', 'Gotero 10ml', 'Árbol de Té'). Omitir saludos. Omitir conectores.", } }, required: ["query"], },}
{ name: "searchKnowledgeBase", description: "Busca en el 'Cerebro RAG' manuales de la empresa, tiempos de envío, costos de envío a ciudades, y políticas generales de la marca.", input_schema: { type: "object", properties: { query: { type: "string", description: "La pregunta o concepto a buscar en la base de políticas (Ej: 'Tiempos de envío Bogotá', 'Manejan contra entrega').", } }, required: ["query"], },}
async function executeSearchKnowledgeBase(query) { console.log(`🧠 (OOM Protection) Executing Tool: searchKnowledgeBase for query: "${query}"`); return JSON.stringify({ info: "Políticas y RAG desactivado temporalmente por limites de Memoria RAM en servidor Cloud gratuito original. Dile al cliente que te repita la pregunta directa o solicite agendamiento humano si la duda es sobre politicas de envios. No trates de inventar politicas.", original_query: query });}
Currently disabled for memory optimization. See RAG System for production implementation.
// Truncate history to last 4 messages to prevent tool hallucinations// Force the model to query the database again instead of relying on long-term contextconst recentHistory = chatHistory.slice(-4);
Short history forces Claude to use tools instead of relying on potentially stale conversation context.
// Anti-hallucination hook for imageslet finalUserQuestion = userQuestion;if (/(foto|imagen|imágen|ver|mostrar)/i.test(finalUserQuestion)) { finalUserQuestion += "\n[SISTEMA: Obligatorio ejecutar searchInventory ahora mismo para obtener los IDs reales (UUID) de las imágenes. NO inventes IDs aleatorios.]";}
Prevents Claude from making up product UUIDs when users request images.
REGLAS DE ORO:1. ESTRICTAMENTE PROHIBIDO ADIVINAR O ALUCINAR DATOS. NUNCA respondas sobre la existencia, precios, variantes o imágenes de un producto basándote en tu memoria. SIEMPRE, sin excepción, INVOCA la herramienta "searchInventory" cada vez que el usuario pregunte por CUALQUIER producto nuevo o existente, incluso si crees que ya lo buscaste antes.2. LOS PRECIOS ESTÁN EN PESOS COLOMBIANOS (COP). Responde usando el símbolo "$" y formato amigable (Ej: "$45.000").3. Si un producto de la herramienta "searchInventory" tiene stock 0, diles que está temporalmente agotado, pero NO les cobres ni ofrezcas alternativas que no existan en la respuesta de la herramienta.4. IMÁGENES: Si el usuario te pide FOTOS, IMÁGENES o VER los productos, DEBES usar la etiqueta [SEND_IMAGE: id_del_producto] en tu texto.5. Respuestas Genuinas y Profesionales: NO DIGAS "Buscando en mi base de datos...". Eres directo y comercial.
const tools = [ // ... existing tools { name: "checkOrderStatus", description: "Verifica el estado de un pedido usando el número de orden.", input_schema: { type: "object", properties: { orderId: { type: "string", description: "Número de orden (Ej: '1024' o UUID completo)" } }, required: ["orderId"] } }];