Este guia destina-se a quem possui um Mac, tem autorização para instalar aplicações e pode utilizar um ficheiro de teste próprio sem informação sensível. Vai transferir um modelo para o Ollama, ligar um chat persistente do Open WebUI no navegador e a extensão Continue do VS Code ao mesmo serviço e examinar uma alteração proposta antes de decidir se a conserva. Os comandos e verificações seguem a documentação atual dos responsáveis pelos programas; a BIG CHANGE não executou esta configuração nem mediu a velocidade, o custo ou o tráfego de rede.

A grande mudança

  • O que muda: Um modelo Ollama transferido pode servir tanto um chat no navegador como um assistente de edição no VS Code através da API local. Cada cliente continua a precisar da sua própria verificação de ligação.
  • Porque importa: Uma única instalação do modelo pode apoiar uma conversa e uma alteração de código revista no mesmo Mac, mantendo o proprietário do ficheiro a decisão final.
  • O que observar: O nome de um modelo num menu não demonstra qual foi o servidor que respondeu. Verifique a ligação ao fornecedor e as respostas reais, sobretudo se estiverem configurados outros fornecedores ou funções na nuvem.

1. Verifique o Mac e escolha um modelo

Precisa de macOS 14 ou posterior para o Ollama, Docker Desktop para Mac, VS Code com a extensão Continuee Python 3 para as pequenas verificações de JSON e ficheiros abaixo. O Ollama suporta execução em CPU e GPU Apple M; para Macs Intel, a documentação refere apenas CPU. Instale o Ollama a partir da página para Mac, mova a aplicação para Applications, abra-a e permita a ligação da linha de comandos, caso seja solicitada. Instale e inicie o Docker Desktop e depois o Continue através da vista Extensions do VS Code. Instale Python 3 a partir de Python.org se python3 não estiver disponível. No Mac, o VS Code não acrescenta automaticamente code ao caminho de pesquisa da shell. Siga as instruções de configuração para Mac: abra Command Palette com Cmd+Shift+P, execute Shell Command: Install 'code' command in PATHe reinicie Terminal. Confirme que as ferramentas necessárias estão disponíveis:

Terminal
sw_vers -productVersion
ollama --version
docker version
code --version
python3 --version

Registe as versões instaladas. Pare se alguma aplicação não estiver em execução ou se faltar espaço no Mac para o modelo e os dados do Docker. A página do modelo qwen2.5-coder:7b apresenta atualmente uma transferência de 4,7 GB e a licença Apache 2.0. Essa dimensão não corresponde à totalidade da memória necessária para executar o modelo. É um exemplo concreto, não uma recomendação para todos os Macs. Se necessário, escolha uma etiqueta local mais pequena e documentada, substituindo qwen2.5-coder:7b por essa etiqueta exata em cada comando, seleção do navegador e campo YAML abaixo. Verifique também a licença do modelo de substituição.

Transfira o modelo e confirme que o Ollama apresenta a etiqueta exata:

Terminal
ollama pull qwen2.5-coder:7b
ollama list
curl --fail-with-body --silent --show-error http://127.0.0.1:11434/api/tags | python3 -c 'import json,sys; d=json.load(sys.stdin); print([m["name"] for m in d["models"]])'

A lista deve conter qwen2.5-coder:7b. Em seguida, peça à API de chat local uma resposta curta. O comando falha perante um erro HTTP e verifica o modelo devolvido e o conteúdo não vazio do assistente; as palavras exatas da resposta não importam. A opção de execução do Ollama num_predict limita esta verificação a 64 tokens gerados. Uma frase cortada pode ainda mostrar que houve conteúdo devolvido; uma resposta vazia falha a verificação e exige investigação.

Terminal
set -o pipefail
curl --fail-with-body --silent --show-error http://127.0.0.1:11434/api/chat \
  -H 'Content-Type: application/json' \
  -d '{"model":"qwen2.5-coder:7b","messages":[{"role":"user","content":"Reply with one short sentence about checking a local connection."}],"stream":false,"options":{"num_predict":64}}' \
  | python3 -c 'import json,sys; d=json.load(sys.stdin); assert d.get("model")=="qwen2.5-coder:7b",d.get("model"); assert d.get("message",{}).get("content","").strip(); print("Model:",d["model"],"Reply:",d["message"]["content"])'

Se a etiqueta não aparecer, conclua a transferência e consulte novamente a lista. Se a API estiver inacessível, inicie o Ollama e consulte o registo do servidor no Mac em ~/.ollama/logs/server.log. Uma etiqueta transferida e uma resposta local bem-sucedida completam a primeira de três verificações.

2. Inicie o Open WebUI com dados locais persistentes

O guia de início rápido do Open WebUI guarda contas, definições e chats em /app/backend/data e exige um valor fixo de WEBUI_SECRET_KEY. Utilizamos a versão estável v0.12.3 em vez da etiqueta continuamente atualizada main . O Docker selecionará a imagem para a arquitetura do Mac; registe a identidade da imagem depois da transferência.

Examine primeiro os nomes aqui utilizados. Se algum já existir, inspecione esse contentor ou volume e determine se pertence a uma configuração anterior. Não substitua um contentor existente nem elimine o seu volume apenas para fazer funcionar este comando.

Terminal
docker ps -a --filter name=^/bc-open-webui$ 
docker volume inspect bc-open-webui-data

Na primeira configuração, é normal o segundo comando indicar que o volume não existe. Os passos seguintes guardam uma chave gerada num ficheiro privado da sua conta do Mac. Guarde-o em segurança para recriar o contentor. Não envie o seu conteúdo para um repositório, não o cole nem partilhe. Se já tiver uma chave para esta instância, continue a usar a mesma.

Terminal
mkdir -p "$HOME/.config/bc-open-webui"
chmod 700 "$HOME/.config/bc-open-webui"
umask 077
if [ ! -s "$HOME/.config/bc-open-webui/webui-secret" ]; then
  openssl rand -hex 32 > "$HOME/.config/bc-open-webui/webui-secret"
fi
chmod 600 "$HOME/.config/bc-open-webui/webui-secret"
export WEBUI_SECRET_KEY="$(cat "$HOME/.config/bc-open-webui/webui-secret")"
docker pull ghcr.io/open-webui/open-webui:v0.12.3
docker image inspect ghcr.io/open-webui/open-webui:v0.12.3 --format '{{json .RepoDigests}}'
docker volume create bc-open-webui-data
docker run -d --name bc-open-webui --restart unless-stopped \
  -p 127.0.0.1:3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v bc-open-webui-data:/app/backend/data \
  -e WEBUI_SECRET_KEY \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  ghcr.io/open-webui/open-webui:v0.12.3
unset WEBUI_SECRET_KEY
docker ps --filter name=^/bc-open-webui$ --format 'table {{.Names}}\t{{.Image}}\t{{.Ports}}'

A saída relativa às portas deve apresentar 127.0.0.1:3000->8080/tcp. O volume com nome mantém chats e definições ao recriar o contentor. A chave protege a continuidade das sessões e os valores cifrados da aplicação, pelo que deve manter a sua cópia privada. Quem tem acesso ao Docker pode ver valores de ambiente na configuração do contentor; esta é uma configuração local para um único utilizador, não um cofre de segredos para um anfitrião partilhado.

Abra http://127.0.0.1:3000 no navegador. No primeiro início, crie a conta de administrador. No menu do avatar, abra Settings → Admin → Connections. Inspecione Manage Ollama API Connections e deixe apenas uma ligação ativada para http://host.docker.internal:11434; remova ou desative ligações de fornecedores não previstos nesta verificação. O Open WebUI pode distribuir pedidos por várias ligações Ollama, pelo que um nome coincidente na lista não basta. Selecione qwen2.5-coder:7b num novo chat e pergunte: «Como posso verificar que foi um modelo local a responder?» Confirme que aparece uma resposta não vazia e reabra o chat guardado. Registe o modelo selecionado e o URL da ligação. Esta é a verificação no navegador; não existe uma resposta predeterminada.

Se a página não carregar, examine docker logs bc-open-webui e a associação da porta. Se a lista de modelos estiver vazia, verifique se o Ollama continua a responder a /api/tags, reveja a ligação guardada do Open WebUI e teste se esta versão do Docker Desktop alcança o serviço do Mac anfitrião. host.docker.internal é o endereço do anfitrião no Docker Desktop, enquanto localhost dentro do contentor se refere ao próprio contentor. O Ollama associa-se a 127.0.0.1 por predefinição; o encaminhamento entre anfitrião e contentor pode variar consoante a configuração. Não considere uma ligação falhada como um sucesso nem exponha o Ollama em 0.0.0.0 como reparação habitual. Resolva o percurso de rede local segundo a sua política de segurança antes de continuar. Preserve o volume e os chats existentes durante o diagnóstico.

3. Ligue o Continue à mesma etiqueta Ollama

O Continue é executado no VS Code no Mac; assim, o endereço da API Ollama é http://localhost:11434. Abra o Continue, use a lista de configurações no canto superior direito do campo de chat e clique na roda dentada junto de Local Config. Isto abre ~/.continue/config.yaml; a referência atual do Continue utiliza YAML. Guarde uma cópia da configuração existente e preserve os modelos ou regras de que ainda precisa. Para uma configuração local nova, este é o conteúdo mínimo completo:

YAML
name: Local Ollama check
version: 1.0.0
schema: v1
models:
  - name: Qwen2.5 Coder 7B local
    provider: ollama
    model: qwen2.5-coder:7b
    apiBase: http://localhost:11434
    roles:
      - chat
      - edit

Num ficheiro existente, acrescente esta entrada de modelo à lista models: e mantenha a configuração superior existente. Guarde, selecione Local Config e o modelo local com nome, e faça uma pergunta curta no Continue Chat. Confirme que devolve conteúdo. Isto verifica a ligação da extensão, mas uma resposta de chat não é uma edição de ficheiro. As funções chat e edit ativam as duas ações aqui usadas; esta receita não promete funcionalidades Agent nem conclusão automática.

Crie um diretório e ficheiro de teste próprios com um comportamento simples que possa verificar separadamente. O comando preserva ficheiros e cópias originais existentes; examine-os ou escolha outro diretório se algum nome já estiver em utilização:

Terminal
mkdir -p "$HOME/continue-local-check"
if [ -e "$HOME/continue-local-check/greeting.py" ] || [ -e "$HOME/continue-local-check/greeting.original.py" ]; then
  printf '%s\n' 'Scratch file already exists; inspect it or choose a new directory.'
else
  cat > "$HOME/continue-local-check/greeting.py" <<'PY'
def greeting(name):
    return "Hello, " + name

if __name__ == "__main__":
    assert greeting("Ada") == "Hello, Ada"
    print(greeting("Ada"))
PY
  if python3 "$HOME/continue-local-check/greeting.py"; then
    cp "$HOME/continue-local-check/greeting.py" "$HOME/continue-local-check/greeting.original.py"
  else
    printf '%s\n' 'Original check failed; inspect the file before requesting an edit.'
  fi
fi

A verificação original deve escrever Hello, Ada depois de a asserção passar. Abra greeting.py no VS Code, selecione apenas a função e prima Cmd+I para Continue Edit. Peça uma docstring curta sem alterar o texto devolvido. Compare o diff integrado apresentado progressivamente com greeting.original.py; o Edit aplicado ao código selecionado pode incluir todo o ficheiro no contexto, pelo que deve usar apenas um ficheiro próprio sem dados sensíveis. O modelo pode alterar mais do que pediu. Examine cada linha alterada e aceite uma proposta adequada com Cmd+Opt+Y, ou rejeite-a com Cmd+Opt+N. O Continue também dispõe de controlos para aceitar ou rejeitar tudo, mas um diff pequeno facilita examinar uma alteração de cada vez.

Após aceitar, guarde o ficheiro e execute:

Terminal
diff -u "$HOME/continue-local-check/greeting.original.py" "$HOME/continue-local-check/greeting.py" || true
python3 "$HOME/continue-local-check/greeting.py"

Confirme que o diff contém apenas a alteração pretendida e que a asserção original continua a passar. Se rejeitar a proposta, verifique que o ficheiro corresponde ao original e registe a rejeição; não declare uma edição concluída. O ficheiro, o diff e a verificação independente em Python demonstram o resultado com maior fiabilidade do que a descrição do modelo.

4. Mantenha os limites claros

Ollama, Open WebUI e Continue têm definições separadas. Para desativar apenas a nuvem do Ollama, acrescente o campo seguinte ao ~/.ollama/server.jsonda conta que executa o servidor Ollama, preservando os campos JSON existentes. Para um ficheiro novo, este é o conteúdo completo:

JSON
{
  "disable_ollama_cloud": true
}

Reinicie a aplicação Ollama e verifique o registo do servidor:

Terminal
grep 'Ollama cloud disabled: true' "$HOME/.ollama/logs/server.log"

A FAQ do Ollama documenta essa linha do registo. Se não aparecer, verifique novamente qual a conta do Mac que executa o Ollama, o JSON e o reinício antes de afirmar que as funções de nuvem estão desativadas. Esta definição não inspeciona outros fornecedores do Open WebUI, funções opcionais em linha nem o tráfego do Continue. O guia sem ligação à internet do Continue indica que deve desativar Allow Anonymous Telemetry, usar modelos locais e reiniciar o VS Code. Reveja as ligações de cada aplicação antes de usar material sensível. Um URL de loopback, só por si, não constitui uma auditoria de rede.

Verifique a licença do Docker Desktop para a sua utilização real. É gratuito para utilização pessoal, educativa e de código aberto não comercial, além de pequenas empresas com menos de 250 trabalhadores E receita anual inferior a 10 milhões de dólares. A utilização profissional em organizações maiores e na administração pública exige uma subscrição paga. A licença Apache 2.0 do modelo é separada. Espaço em disco, memória, largura de banda e eletricidade continuam a ser necessários; não foram medidos custos nem desempenho para este guia.

Para um roteiro limitado ao terminal e à API do Ollama, consulte Execute um modelo Ollama local e verifique a sua API de chat. Faça uma alteração verificada no Claude Code com um modelo Ollama local aborda outro cliente de programação.

Fontes e leituras adicionais