chapi-ai

Chatbot de IA con RAG: multi-proveedor (Anthropic/OpenAI/Google/Groq), grounding no configurable, adaptadores de backend (Express/Next.js/Convex/serverless) y widget de UI en Vue.
775
Install
npm install chapi-ai
Latest Version:0.3.1
Vue:3
License:Apache-2.0
Last Updated:Sep 17, 2026
Links: npm
Maintainer: fcojacob

chapi-ai

Paquete reutilizable de chatbot de IA con RAG (Retrieval-Augmented Generation): se instala en distintos proyectos para dar a los usuarios finales un chat que responde preguntas ancladas estrictamente a una fuente de conocimiento propia (un PDF), nunca con conocimiento general del modelo. Cada proyecto que lo instale puede darle su propia personalidad y elegir su propio proveedor de IA.

Documentación completa y guiada paso a paso: docs/README.md.

Características

  • Multi-proveedor de IA: Anthropic, OpenAI, Google y Groq vía el Vercel AI SDK, sin adaptadores hechos a mano por proveedor.
  • Grounding no configurable: las reglas de "no salirse de la fuente" están fijas en el núcleo — ningún proyecto que instale el paquete puede desactivarlas.
  • RAG desde PDF: extracción de texto, chunking, embeddings (Voyage AI) y recuperación semántica, todo incluido.
  • Adaptadores de backend: Express, Next.js, Convex y cualquier runtime serverless basado en la Fetch API, todos hablando el mismo contrato HTTP simple, con un helper opcional de CORS (chapi-ai/adapters/cors) para cuando frontend y backend viven en orígenes distintos.
  • Widget de UI en Vue: un Web Component (<chapi-chat>) con Shadow DOM, en tres modos (embebido, botón flotante arrastrable, pantalla completa), con modo claro/oscuro automático y Markdown mínimo en las respuestas.
  • i18n: español e inglés, extensible.

Requisitos

  • Node.js ≥ 26 (fijado en .nvmrc; con nvm: nvm use)
  • pnpm ≥ 12 (el packageManager en package.json fija la versión exacta usada en desarrollo)

Instalación

pnpm add chapi-ai

Además, instala el SDK del proveedor de IA que vayas a usar (solo ese — los otros tres son peerDependencies opcionales, no se instalan si no los pides):

pnpm add @ai-sdk/anthropic   # o @ai-sdk/openai, @ai-sdk/google, @ai-sdk/groq

Esto es deliberado: así no arrastras los SDKs de los tres proveedores que no vas a usar. Ver docs/03-providers.md para el detalle.

Uso rápido

import { createBot, createKnowledgeStore, ingestPdf } from 'chapi-ai';
import { readFile } from 'node:fs/promises';

// 1. Ingiere tu fuente de conocimiento (una sola vez, o cuando cambie el PDF)
const pdf = await readFile('./manual-de-producto.pdf');
const chunks = await ingestPdf(new Uint8Array(pdf), { apiKey: process.env.VOYAGE_API_KEY! });

const knowledgeStore = createKnowledgeStore();
knowledgeStore.add(chunks);

// 2. Crea el bot
const bot = createBot({
  provider: { provider: 'anthropic', apiKey: process.env.ANTHROPIC_API_KEY!, model: 'claude-sonnet-5' },
  persona: {
    name: 'Chapi',
    description: 'Eres el asistente de soporte de una tienda de bicicletas online.',
    language: 'es',
  },
  knowledgeStore,
  embedding: { apiKey: process.env.VOYAGE_API_KEY! },
});

// 3. Chatea (streaming)
const result = await bot.streamChat('¿Cuántos días tengo para devolver un producto?');
for await (const part of result.textStream) {
  process.stdout.write(part);
}

Si la pregunta no está cubierta por el PDF ingerido, el bot responde con un mensaje de fallback fijo en vez de inventar una respuesta — eso es el grounding, y no se puede desactivar desde fuera del núcleo.

Para el detalle de cada pieza (proveedores, RAG, persona, adaptadores, widget), ve a docs/README.md.

Configuración (variables de entorno)

Cada proveedor de IA necesita su propia API key. Solo hacen falta las de los proveedores que realmente uses:

Proveedor Variable de entorno Se usa para
Anthropic ANTHROPIC_API_KEY Chat
OpenAI OPENAI_API_KEY Chat
Google GOOGLE_GENERATIVE_AI_API_KEY Chat
Groq GROQ_API_KEY Chat
Voyage AI VOYAGE_API_KEY Embeddings (RAG)

Crea un .env en tu proyecto (nunca lo subas a git) con las que necesites:

ANTHROPIC_API_KEY=sk-ant-...
VOYAGE_API_KEY=pa-...

Más detalle sobre cada proveedor, cómo elegir modelo, y errores comunes: docs/03-providers.md.

Backends soportados

Backend Import
Next.js (App Router) chapi-ai/adapters/nextjs
Serverless (Vercel Functions, Cloudflare Workers, Deno…) chapi-ai/adapters/serverless
Express / Node chapi-ai/adapters/express
Convex chapi-ai/adapters/convex

Todos hablan el mismo contrato: POST con { "message": string }, respuesta en streaming de texto plano. Ninguno añade cabeceras CORS por defecto — si tu frontend y tu backend viven en orígenes distintos (el caso normal si usas el widget), envuelve el handler con withCors de chapi-ai/adapters/cors. Detalle completo: docs/07-backend-adapters.md.

Widget de UI

<script type="module" src="ruta/a/chapi-chat.js"></script>
<chapi-chat endpoint="/api/chat" persona-name="Chapi" locale="es" mode="inline"></chapi-chat>

mode acepta inline (se ajusta al contenedor), launcher (botón flotante arrastrable) o fullscreen. Sigue automáticamente el modo claro/oscuro del sistema operativo del visitante (personalizable con variables CSS), y renderiza Markdown mínimo (negrita, cursiva, código inline) en las respuestas. Detalle completo: docs/08-widget.md.

Scripts de desarrollo

Comando Qué hace
pnpm build Compila el núcleo (TypeScript → dist/)
pnpm build:widget Compila el widget de Vue (Vite → dist/widget/chapi-chat.js)
pnpm test Corre la suite de tests (Vitest)
pnpm lint Corre ESLint (incluye .ts y .vue)
pnpm format Formatea todo el proyecto con Prettier
pnpm dev Ejecuta scripts/try-claude.ts (llamada manual de prueba a un proveedor)
pnpm dev:widget Servidor de desarrollo del widget (Vite)
pnpm dev:widget-server Backend de prueba local para el widget

Documentación

  • docs/README.md — manual completo, pensado para quien se une al proyecto sin contexto previo.
  • CONTRIBUTING.md — cómo levantar el entorno, convenciones de código y cómo contribuir.
  • SKILL.md — guía paso a paso para que un asistente de IA (Claude, u otro) integre chapi-ai en tu proyecto de principio a fin. Se publica dentro del propio paquete (node_modules/chapi-ai/SKILL.md), así que sigue disponible aunque solo hayas instalado la dependencia sin clonar este repo.

Licencia

Apache License 2.0 — ver LICENSE.

Related Packages

nuxt-auto-translate

Automatic i18n translations for Nuxt using LLMs (OpenAI, Anthropic, Gemini, Groq...

2,009 2
@aibind/vue

AI SDK bindings for Vue 3 — reactive composables for streaming, structured outpu...

1,366 19
@aibind/nuxt

AI SDK bindings for Nuxt — composables with defaults, server handlers, and agent...

1,296 19
netstar-ai-chat

AI Chat Panel component for Vue 3 — 可复用的人工智能对话面板组件

3,624
ai-elements-nuxt

Nuxt/Vue complement to Vercel AI Elements — headless AI UI components for the AI...

1,389 0

Version History

Version Released Vue License
0.3.1 ^3.5.42 Apache-2.0
0.3.0 ^3.5.42 Apache-2.0
0.2.1 ^3.5.42 Apache-2.0
0.1.0 ^3.5.42 Apache-2.0