GUÍA DE IMPLEMENTACIÓN

Construye con el SDK TypeScript

Una interfaz pequeña y tipada sobre la API kAI. Incluye idempotencia, reintentos, streaming, sesiones seguras y paginación sin dependencias de runtime.

Actualizado sep 2026Lectura de 8 min

Instalación

El paquete funciona en cualquier runtime con fetch y streams web: navegador, Node 18+, Bun, Deno y entornos edge.

Terminal
npm install @talktokai/agents
# o con Bun
bun add @talktokai/agents
0

Cero dependencias

El entry point principal usa solo APIs de la plataforma.

TS

Tipos incluidos

Requests, respuestas, eventos y errores de extremo a extremo.

Seguro al reintentar

Cada mensaje recibe una clave de idempotencia.

Uso en backend

Crea una instancia por agente y compártela entre requests. El cliente no guarda estado de conversación localmente; todo el contexto vive en el servidor.

server.ts
import { Agent } from "@talktokai/agents";

const agent = new Agent({
  agentId: "mi-agente",
  apiKey: process.env.KAI_API_KEY,
});

const reply = await agent.sendMessage({
  userId: "cliente_123",
  profileName: "Ana",
  message: "¿Qué horarios manejan?",
});

console.log(reply.reply);
!
La key secreta pertenece al servidor

Guárdala en variables de entorno o Secret Manager. El constructor rechaza por defecto una apiKey literal cuando detecta un navegador.

Respuestas en streaming

stream() consume SSE y llama tus handlers cuando el agente entrega una parte o ejecuta una tool. Al finalizar devuelve el mismo AgentReply que sendMessage().

streaming.ts
const reply = await agent.stream(
  { userId: "cliente_123", message: "Cotiza mi pedido" },
  {
    onMessage(part) {
      renderPart(part);
    },
    onTool(tool) {
      setActiveTool(tool.name, tool.status);
    },
  },
);
EVENTOmessage
EVENTOtool started
EVENTOtool completed
FINALdone

Una interfaz por conversación

agent.conversation(userId) fija la identidad para no repetirla en cada llamada. Puedes enviar, hacer streaming y recorrer el historial con paginación automática.

conversation.ts
const chat = agent.conversation("cliente_123", {
  profileName: "Ana",
});

await chat.send("Hola");
await chat.stream("¿Abren el sábado?", { onMessage: appendBubble });

// Requiere el permiso conversations:read
for await (const message of chat.history()) {
  console.log(message);
}

Con una sesión, usa await agent.me(): toma la identidad firmada del token y evita que el frontend pueda cambiarla.

Integración con React

El entry point opcional incluye useChat, que maneja mensajes optimistas, la burbuja progresiva del agente, tools activas, cancelación y errores. React permanece como peer dependency opcional.

Chat.tsx
import { useChat } from "@talktokai/agents/react";

function Chat() {
  const { messages, send, isLoading, activeTool, stop } = useChat({
    agent,
    userId: "cliente_123",
  });

  // Renderiza messages y llama send(text) desde tu formulario.
}

Qué automatiza el SDK

CAPACIDADCOMPORTAMIENTO
IdempotenciaGenera sdk-<uuid> si no envías un id
ReintentosRed, 5xx y conversación ocupada; 2 por defecto
Timeout130 segundos para permitir tools de larga duración
SesionesEmisión, persistencia y renovación coordinada
ErroresClases tipadas bajo KaiAgentError
REFERENCIAEntender el contrato de la API