Skip to content

AI Backend — Introducción

apps/ai-backend es un microservicio NestJS independiente que actúa como motor de IA de la academia. Es la única pieza del sistema que habla directamente con los proveedores LLM (Anthropic, OpenAI, Gemini).

Regla absoluta (CLAUDE.md): NUNCA llamar LLMs directamente desde apps/api o apps/web. Toda IA pasa por apps/ai-backend.

graph LR
Web["apps/web\n(React)"] -->|REST| API["apps/api\n(NestJS :3000)"]
API -->|HTTP interno\n+ AIBACKEND_API_KEY| AIB["apps/ai-backend\n(NestJS :3001)"]
AIB -->|SDK| Anthropic["Anthropic\nclaude-sonnet-4-5"]
AIB -->|SDK| OpenAI["OpenAI\ngpt-4o / gpt-4o-mini"]
AIB -->|SDK| Gemini["Gemini\ngemini-1.5-pro / flash"]
AIB -->|REST| Qdrant["Qdrant\nVector DB"]
API -->|Prisma| DB["Neon PostgreSQL"]
AIB -->|Lee credenciales| API
ParámetroValor
Puerto3001 (configurable con PORT)
AuthHeader x-internal-key: $AIBACKEND_API_KEY
GuardInternalAuthGuard en todos los endpoints

El AIBACKEND_API_KEY es un secret compartido entre apps/api y apps/ai-backend. Mínimo 32 caracteres.

DependenciaVersiónUso
@anthropic-ai/sdk^0.36.0Cliente Anthropic Claude
openai^4.77.0Cliente OpenAI GPT + Embeddings
@google/generative-ai^0.21.0Cliente Gemini
@qdrant/js-client-rest^1.13.0Cliente Qdrant Vector DB
@nestjs/axios^4.0.0HTTP para llamar a Fluency API
Terminal window
PORT=3001
NODE_ENV=development
# Secret compartido con apps/api (mínimo 32 caracteres)
AIBACKEND_API_KEY=internal-secret-min-32-chars-here
# Clave maestra AES-256-GCM para cifrado de credenciales (64 chars hex)
# Generar: openssl rand -hex 32
# IMPORTANTE: misma clave en apps/api y apps/ai-backend
AI_CREDENTIALS_MASTER_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# URL de Fluency API (para leer AIRouteConfig y AICredential)
FLUENCY_API_URL=http://localhost:3000
# URL de Qdrant (la API key va en BD, no aquí)
QDRANT_URL=https://your-cluster.qdrant.io
PROVIDER_TIMEOUT_MS=15000
FALLBACK_TIMEOUT_MS=10000