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
| Rol | Para qué sirve |
|---|---|
decide | Decisiones tipadas sobre un elemento: qué opción, qué puntuación, si algo es cierto. Cada respuesta viene con una probabilidad. |
complete | Generación más larga, como borradores y resúmenes. |
embed | Vectores de búsqueda. |
vision | Opcional. 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
| Servicio | Rol | Modelo | Notas |
|---|---|---|---|
laya | decide | convaiinnovations/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. |
ollama | complete (y vision) | qwen3:8b | Descarga modelos con docker compose exec ollama ollama pull … |
embeddings | embed | BAAI/bge-m3 | Solo 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) yembedfuncionan bien en CPU. Laya tarda unos cientos de milisegundos por elemento en un portátil reciente.completefunciona 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
deploydel servicioollamaencompose.yamle instala el NVIDIA Container Toolkit. - Laya usa todos los núcleos de CPU por defecto. Define
LAYA_THREADSen el serviciolayapara 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 condocker 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__MODELacepta tambiénconvaiinnovations/laya(solo inglés, 512 tokens) yconvaiinnovations/laya-typed-decisions. La imagen solo precarga el multilingüe, así que define tambiénLAYA_MODELSen 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.