IA local
O Campbooks pede um papel de IA, nunca um fornecedor. Você escolhe o que serve cada papel. As predefinições fornecidas usam apenas modelos de pesos abertos, por isso todos os modelos podem correr no seu hardware.
Os papéis
| Papel | Para que serve |
|---|---|
decide | Decisões tipificadas sobre um item: que opção, que pontuação, se isto é verdade. Cada resposta vem com uma probabilidade. |
complete | Geração mais longa, como rascunhos e resumos. |
embed | Vetores de pesquisa. |
vision | Opcional. Imagens e documentos digitalizados. |
Um papel não definido fica simplesmente indisponível. As funcionalidades que dele precisam não correm.
Arranque os serviços locais
O perfil ai acrescenta três serviços, um por cada papel que serve.
docker compose --profile ai up -d
| Serviço | Papel | Modelo | Notas |
|---|---|---|---|
laya | decide | convaiinnovations/laya-multilingual (Apache-2.0, 322M) | Construído a partir de deploy/laya. Cerca de 680 MB de transferência no primeiro arranque. Cerca de 2 GB de RAM. |
ollama | complete (e vision) | qwen3:8b | Obtenha modelos com docker compose exec ollama ollama pull … |
embeddings | embed | BAAI/bge-m3 | Apenas linux/amd64. Em arm64 use o bge-m3 do Ollama. |
1. Defina a chave de API do decide
O serviço laya recusa-se a arrancar sem chave, porque o laya-serve responde a qualquer pessoa quando não tem nenhuma. O servidor envia o mesmo valor. O serviço não tem porta publicada, por isso só os contentores da rede do compose lhe chegam.
openssl rand -hex 32
Coloque o resultado no .env:
CAMPBOOKS_AI__DECIDE__API_KEY=<o valor que gerou>
2. Obtenha o modelo complete uma vez
O Laya e o servidor de embeddings descarregam eles próprios os seus modelos. O Ollama precisa de um pull.
docker compose exec ollama ollama pull qwen3:8b
CPU ou GPU
decide(Laya) eembedcorrem bem em CPU. O Laya demora algumas centenas de milissegundos por item num portátil recente.completefunciona em CPU, mas é lento. Use uma máquina com GPU, ou um fornecedor alojado que sirva modelos de pesos abertos, e defina o respetivo URL no.env.- Para usar uma GPU NVIDIA com o Ollama, retire o comentário ao bloco
deployno serviçoollamadocompose.yamle instale o NVIDIA Container Toolkit. - O Laya usa todos os núcleos de CPU por omissão. Defina
LAYA_THREADSno serviçolayapara o limitar.
Use outro endpoint
Cada papel é configurado por três definições: CAMPBOOKS_AI__<ROLE>__BASE_URL, CAMPBOOKS_AI__<ROLE>__MODEL e CAMPBOOKS_AI__<ROLE>__API_KEY. Aponte um papel para qualquer endpoint compatível com OpenAI (Ollama, vLLM, um fornecedor alojado que sirva modelos de pesos abertos):
CAMPBOOKS_AI__COMPLETE__BASE_URL=https://llm.example.com/v1
CAMPBOOKS_AI__COMPLETE__MODEL=your-model
CAMPBOOKS_AI__COMPLETE__API_KEY=...
Para decide, defina CAMPBOOKS_AI__DECIDE__PROTOCOL=openai para usar um modelo de instruções em vez do Laya. Responde às mesmas perguntas com saída em JSON Schema. As probabilidades vêm das log-probabilidades dos tokens quando o servidor as devolve. Sem elas, as respostas não trazem confiança, pelo que nada que precise de uma age sozinho. Defina CAMPBOOKS_AI__DECIDE__LOGPROBS=false para servidores que rejeitam o parâmetro logprobs.
CAMPBOOKS_AI__DECIDE__PROTOCOL=openai
CAMPBOOKS_AI__DECIDE__BASE_URL=http://ollama:11434/v1
CAMPBOOKS_AI__DECIDE__MODEL=qwen3:8b
Em arm64, retire o serviço embeddings e aponte embed para o Ollama:
CAMPBOOKS_AI__EMBED__BASE_URL=http://ollama:11434/v1
CAMPBOOKS_AI__EMBED__MODEL=bge-m3
Sobre o Laya
- Não existe imagem oficial, por isso o compose constrói uma a partir de
deploy/laya/Dockerfile. Depois de uma atualização, reconstrua-a comdocker compose --profile ai build laya. - No primeiro arranque descarrega o checkpoint multilingue para o volume
laya-models. Os arranques seguintes carregam-no de lá. CAMPBOOKS_AI__DECIDE__MODELaceita tambémconvaiinnovations/laya(apenas inglês, 512 tokens) econvaiinnovations/laya-typed-decisions. A imagem pré-carrega apenas o multilingue, por isso defina tambémLAYA_MODELSno serviço.- De origem, os modelos são demasiado confiantes. As definições
CAMPBOOKS_AI__DECIDE__CALIBRATION__*suavizam as probabilidades. Por omissão valem 1.0.
Apenas modelos de pesos abertos
Só aparecem modelos de pesos abertos no catálogo fornecido. Podem ser alojados por si (vLLM, llama.cpp, Ollama, Text Embeddings Inference) ou usados através de qualquer endpoint alojado que sirva pesos abertos. Todos os papéis falam a API HTTP compatível com OpenAI, exceto o protocolo tipificado próprio do Laya para decide.
Se mudar o modelo de embeddings, os vetores guardados ficam ligados ao modelo antigo. Os embeddings registam o seu id de modelo e dimensões, e uma tarefa de re-embedding faz parte do desenho.