Saltar para o conteúdo principal

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​

PapelPara que serve
decideDecisões tipificadas sobre um item: que opção, que pontuação, se isto é verdade. Cada resposta vem com uma probabilidade.
completeGeração mais longa, como rascunhos e resumos.
embedVetores de pesquisa.
visionOpcional. 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çoPapelModeloNotas
layadecideconvaiinnovations/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.
ollamacomplete (e vision)qwen3:8bObtenha modelos com docker compose exec ollama ollama pull …
embeddingsembedBAAI/bge-m3Apenas 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) e embed correm bem em CPU. O Laya demora algumas centenas de milissegundos por item num portátil recente.
  • complete funciona 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 deploy no serviço ollama do compose.yaml e instale o NVIDIA Container Toolkit.
  • O Laya usa todos os núcleos de CPU por omissão. Defina LAYA_THREADS no serviço laya para 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 com docker 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__MODEL aceita também convaiinnovations/laya (apenas inglês, 512 tokens) e convaiinnovations/laya-typed-decisions. A imagem pré-carrega apenas o multilingue, por isso defina também LAYA_MODELS no 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.