Saltar al contenido principal

IA local

Campbooks pide un rol de IA, nunca un proveedor. Tú eliges qué sirve cada rol. Los valores por defecto incluidos usan solo modelos de pesos abiertos, así que cada modelo puede ejecutarse en tu propio hardware.

Los roles​

RolPara qué sirve
decideDecisiones tipadas sobre un elemento: qué opción, qué puntuación, si algo es cierto. Cada respuesta viene con una probabilidad.
completeGeneración más larga, como borradores y resúmenes.
embedVectores de búsqueda.
visionOpcional. Imágenes y documentos escaneados.

Un rol sin definir simplemente no está disponible. Las funciones que lo necesitan no se ejecutan.

Inicia los servicios locales​

El perfil ai añade tres servicios, uno por cada rol que sirve.

docker compose --profile ai up -d
ServicioRolModeloNotas
layadecideconvaiinnovations/laya-multilingual (Apache-2.0, 322M)Se construye desde deploy/laya. Descarga de unos 680 MB en el primer arranque. Unos 2 GB de RAM.
ollamacomplete (y vision)qwen3:8bDescarga modelos con docker compose exec ollama ollama pull …
embeddingsembedBAAI/bge-m3Solo linux/amd64. En arm64 usa bge-m3 de Ollama.

1. Define la clave de API de decide​

El servicio laya se niega a arrancar sin clave, porque laya-serve responde a cualquiera cuando no tiene ninguna. El servidor envía el mismo valor. El servicio no publica ningún puerto, así que solo los contenedores de la red de compose llegan a él.

openssl rand -hex 32

Pon el resultado en .env:

CAMPBOOKS_AI__DECIDE__API_KEY=<the value you generated>

2. Descarga el modelo complete una vez​

Laya y el servidor de embeddings descargan sus modelos por sí mismos. Ollama necesita una descarga.

docker compose exec ollama ollama pull qwen3:8b

CPU o GPU​

  • decide (Laya) y embed funcionan bien en CPU. Laya tarda unos cientos de milisegundos por elemento en un portátil reciente.
  • complete funciona en CPU pero es lento. Usa un host con GPU, o un proveedor alojado que sirva modelos de pesos abiertos, y define su URL en .env.
  • Para usar una GPU NVIDIA con Ollama, descomenta el bloque deploy del servicio ollama en compose.yaml e instala el NVIDIA Container Toolkit.
  • Laya usa todos los núcleos de CPU por defecto. Define LAYA_THREADS en el servicio laya para limitarlo.

Usa otro endpoint​

Cada rol se configura con tres ajustes: CAMPBOOKS_AI__<ROLE>__BASE_URL, CAMPBOOKS_AI__<ROLE>__MODEL y CAMPBOOKS_AI__<ROLE>__API_KEY. Apunta un rol a cualquier endpoint compatible con OpenAI (Ollama, vLLM, un proveedor alojado que sirva modelos de pesos abiertos):

CAMPBOOKS_AI__COMPLETE__BASE_URL=https://llm.example.com/v1
CAMPBOOKS_AI__COMPLETE__MODEL=your-model
CAMPBOOKS_AI__COMPLETE__API_KEY=...

Para decide, define CAMPBOOKS_AI__DECIDE__PROTOCOL=openai para usar un modelo instruct en lugar de Laya. Responde a las mismas preguntas con salida JSON-schema. Las probabilidades salen de las log-probabilidades de los tokens cuando el servidor las devuelve. Sin ellas, las respuestas no llevan confianza, así que nada que la necesite actúa por sí solo. Define CAMPBOOKS_AI__DECIDE__LOGPROBS=false para servidores que rechazan el parámetro logprobs.

CAMPBOOKS_AI__DECIDE__PROTOCOL=openai
CAMPBOOKS_AI__DECIDE__BASE_URL=http://ollama:11434/v1
CAMPBOOKS_AI__DECIDE__MODEL=qwen3:8b

En arm64, elimina el servicio embeddings y apunta embed a Ollama:

CAMPBOOKS_AI__EMBED__BASE_URL=http://ollama:11434/v1
CAMPBOOKS_AI__EMBED__MODEL=bge-m3

Sobre Laya​

  • No hay imagen oficial, así que compose construye una desde deploy/laya/Dockerfile. Tras una actualización, reconstrúyela con docker compose --profile ai build laya.
  • En el primer arranque descarga el checkpoint multilingüe en el volumen laya-models. Los arranques siguientes lo cargan desde allí.
  • CAMPBOOKS_AI__DECIDE__MODEL acepta también convaiinnovations/laya (solo inglés, 512 tokens) y convaiinnovations/laya-typed-decisions. La imagen solo precarga el multilingüe, así que define también LAYA_MODELS en el servicio.
  • De fábrica los modelos son demasiado confiados. Los ajustes CAMPBOOKS_AI__DECIDE__CALIBRATION__* suavizan las probabilidades. Por defecto valen 1.0.

Solo modelos de pesos abiertos​

Solo aparecen modelos de pesos abiertos en el catálogo incluido. Pueden autoalojarse (vLLM, llama.cpp, Ollama, Text Embeddings Inference) o usarse mediante cualquier endpoint alojado que sirva pesos abiertos. Todos los roles hablan la API HTTP compatible con OpenAI, salvo el protocolo tipado propio de Laya para decide.

Si cambias el modelo de embeddings, los vectores guardados quedan ligados al modelo anterior. Los embeddings registran el id y las dimensiones de su modelo, y una tarea de reembebido forma parte del diseño.