sexta-feira, 28 de agosto de 2026

Configurando um Assistente de IA Local no Raspberry Pi

Este guia explica como configurar um Raspberry Pi 5 com Raspberry para funcionar como um assistente de programação baseado em Inteligência Artificial, executando o modelo localmente.

A solução utiliza:

  • Ollama para executar o modelo de IA localmente.
  • Qwen2.5-Coder 1.5B como modelo de programação.
  • Continue como extensão do VS Code.
  • VS Code como ambiente de desenvolvimento.

Como funciona

A arquitetura final é simples:

VS Code
   │
   │ Continue
   ▼
Ollama
http://localhost:11434
   │
   ▼
Qwen2.5-Coder 1.5B

O modelo é executado diretamente no Raspberry Pi. O Continue se comunica com o servidor Ollama através da API local, portanto não é necessário utilizar uma API key de um serviço externo ... ou pagar por isto 😏.

Requisitos

Para seguir este guia, você precisará de:

  • Um Raspberry Pi 5.
  • Ubuntu instalado no Raspberry Pi.
  • Uma conexão com a Internet durante a instalação.
  • VS Code instalado.
  • Acesso ao Raspberry Pi por SSH ou através do ambiente gráfico.
  • Espaço de armazenamento suficiente para o modelo.

Os comandos abaixo assumem um sistema Ubuntu/Debian executando em ARM64.

Instalando o Ollama

O primeiro passo é instalar o Ollama. No terminal do Raspberry Pi, execute:

curl -fsSL https://ollama.com/install.sh | sh

Depois da instalação, verifique a versão:

ollama --version

Se a instalação foi realizada corretamente, o comando deverá mostrar a versão instalada do Ollama.

Verificando o serviço do Ollama

O instalador do Ollama normalmente cria um serviço systemd. Verifique seu estado com:

sudo systemctl status ollama

O resultado deverá indicar que o serviço está ativo, por exemplo:

Active: active (running)

Para garantir que o Ollama seja iniciado automaticamente sempre que o Raspberry Pi for ligado, execute:

sudo systemctl enable ollama

É possível verificar se o serviço está configurado para iniciar automaticamente:

sudo systemctl is-enabled ollama

O resultado esperado é:

enabled

Também podemos verificar se o servidor HTTP do Ollama está funcionando:

curl http://localhost:11434

Uma resposta semelhante a:

Ollama is running

indica que o servidor está disponível.

Baixando o modelo de programação

Para este exemplo, utilizaremos o Qwen2.5-Coder 1.5B.

Execute:

ollama pull qwen2.5-coder:1.5b

O modelo será baixado e armazenado localmente no Raspberry Pi.

Para verificar os modelos instalados:

ollama list

Você deverá encontrar uma entrada semelhante a:

qwen2.5-coder:1.5b

O modelo de 1.5 bilhões de parâmetros foi escolhido porque modelos maiores podem exigir uma quantidade consideravelmente maior de memória e processamento, tornando-os menos adequados para execução em um Raspberry Pi.

Testando o modelo

Antes de configurar o VS Code, é recomendável verificar se o modelo está funcionando:

ollama run qwen2.5-coder:1.5b

Você pode testar com um prompt simples, por exemplo:

Write a Python function that calculates the Fibonacci sequence.

Se o modelo responder, significa que o Ollama e o modelo estão funcionando corretamente.

Para sair do modelo, utilize:

/bye

É importante observar que ollama run não precisa ficar sendo executado permanentemente. O servidor Ollama será executado como um serviço do sistema. O Continue poderá utilizar diretamente a API do Ollama.

Garantindo que o Ollama seja iniciado automaticamente

Para garantir que o serviço esteja habilitado e iniciado:

sudo systemctl enable ollama
sudo systemctl start ollama

Verifique o estado:

sudo systemctl status ollama

Depois de reiniciar o Raspberry Pi, você pode confirmar que o serviço foi iniciado automaticamente:

sudo systemctl is-active ollama

O resultado esperado é:

active

A partir deste momento, não é necessário iniciar manualmente o Ollama sempre que o Raspberry Pi for ligado.

Instalando o Continue no VS Code

O próximo passo é instalar a extensão Continue no VS Code.

Se o VS Code estiver disponível através do comando code, execute:

code --install-extension Continue.continue

Também é possível instalar a extensão diretamente através do painel de extensões do VS Code.

Configurando o Continue

O Continue utiliza um arquivo de configuração para definir quais modelos devem ser utilizados.

Primeiro, crie o diretório de configuração:

mkdir -p ~/.continue

Depois abra o arquivo:

nano ~/.continue/config.yaml

Adicione o seguinte conteúdo:

name: Raspberry Pi Local AI
version: 1.0.0
schema: v1

models:
  - name: Qwen Coder
    provider: ollama
    model: qwen2.5-coder:1.5b
    apiBase: http://localhost:11434
    roles:
      - chat
      - edit
      - apply
      - autocomplete

O parâmetro:

provider: ollama

informa ao Continue que o modelo será fornecido pelo Ollama.

Já:

apiBase: http://localhost:11434

indica o endereço do servidor Ollama local.

Finalmente, o parâmetro:

model: qwen2.5-coder:1.5b

define qual modelo instalado pelo Ollama será utilizado.

Reiniciando o VS Code

Depois de alterar a configuração do Continue, reinicie o VS Code.

Uma alternativa é utilizar o Command Palette:

Ctrl + Shift + P

e selecionar:

Developer: Reload Window

Abrindo o Continue

No VS Code, procure pelo ícone do Continue na barra lateral esquerda.

Ao abrir o Continue, o modelo configurado deverá aparecer como:

Qwen Coder

A partir desse momento, é possível utilizar o modelo para interagir com o código diretamente dentro do VS Code.

Por exemplo, podemos perguntar:

Explain this function.

Ou:

Add error handling to this Python function.

Também é possível selecionar um trecho de código e pedir ao Continue para modificá-lo.

Testando a instalação completa

Podemos verificar cada componente da instalação.

Primeiro, confirme que o Ollama está executando:

sudo systemctl is-active ollama

O resultado esperado é:

active

Depois, verifique se o modelo está instalado:

ollama list

O modelo deverá aparecer na lista:

qwen2.5-coder:1.5b

Também podemos verificar diretamente a API:

curl http://localhost:11434

O resultado esperado é:

Ollama is running

Por fim, abra o VS Code, abra o Continue, selecione Qwen Coder e envie um prompt.

Problemas comuns

O Continue não consegue conectar ao Ollama

Primeiro, verifique o serviço:

sudo systemctl status ollama

Se ele não estiver executando:

sudo systemctl start ollama

Depois teste novamente a API:

curl http://localhost:11434

O Continue não encontra o modelo

Verifique os modelos instalados:

ollama list

O nome do modelo deve ser exatamente:

qwen2.5-coder:1.5b

E o mesmo nome deve aparecer no arquivo ~/.continue/config.yaml:

model: qwen2.5-coder:1.5b

Se o modelo não estiver instalado, execute:

ollama pull qwen2.5-coder:1.5b

O Continue não aparece no VS Code

Verifique se a extensão está instalada:

code --list-extensions | grep -i continue

O resultado esperado é:

Continue.continue

Se necessário, reinstale:

code --install-extension Continue.continue

Comandos úteis

# Verificar o Ollama
sudo systemctl status ollama

# Iniciar o Ollama
sudo systemctl start ollama

# Parar o Ollama
sudo systemctl stop ollama

# Habilitar inicialização automática
sudo systemctl enable ollama

# Verificar inicialização automática
sudo systemctl is-enabled ollama

# Listar modelos instalados
ollama list

# Baixar um modelo
ollama pull qwen2.5-coder:1.5b

# Testar um modelo
ollama run qwen2.5-coder:1.5b

# Verificar a API do Ollama
curl http://localhost:11434

Instalação completa

Para instalar tudo em um Raspberry Pi novo, a sequência principal de comandos é:

# Instalar Ollama
curl -fsSL https://ollama.com/install.sh | sh

# Habilitar inicialização automática
sudo systemctl enable ollama
sudo systemctl start ollama

# Baixar o modelo
ollama pull qwen2.5-coder:1.5b

# Testar o Ollama
ollama run qwen2.5-coder:1.5b

# Instalar o Continue
code --install-extension Continue.continue

# Criar o diretório de configuração
mkdir -p ~/.continue

# Editar a configuração
nano ~/.continue/config.yaml

Depois, coloque no arquivo ~/.continue/config.yaml:

name: Raspberry Pi Local AI
version: 1.0.0
schema: v1

models:
  - name: Qwen Coder
    provider: ollama
    model: qwen2.5-coder:1.5b
    apiBase: http://localhost:11434
    roles:
      - chat
      - edit
      - apply
      - autocomplete

Depois de reiniciar o VS Code e abrir o Continue, o modelo Qwen Coder estará disponível.

Considerações sobre a escolha do modelo

Este guia utiliza o qwen2.5-coder:1.5b como configuração padrão para o Raspberry Pi. Durante testes, também pode ser interessante experimentar modelos maiores. Para um Raspberry Pi 5, o modelo de 1.5B oferece uma configuração muito mais realista para executar um assistente de programação local.

Resultado final

Ao final da configuração, o Raspberry Pi estará executando o Ollama automaticamente como um serviço do sistema. O Continue, dentro do VS Code, utilizará a API local do Ollama para executar o Qwen2.5-Coder.

Assim, o Raspberry Pi pode funcionar como um assistente de programação local, sem depender de um serviço de IA externo para as tarefas suportadas pelo modelo instalado.

 


terça-feira, 25 de novembro de 2025

Desabilitar ModemManager no Ubuntu

 ModemManager provides a unified, high-level interface to control all kinds of modems:

  • 4G/5G modems (LTE/NR)
  • 3G modems
  • NB-IoT / Cat-M1 modules
  • USB dongles and embedded PCIe modems
  • Serial, QMI, MBIM, Qualcomm, Sierra, Huawei, Fibocom, Quectel…


Contudo as vezes você está rodando uma instalação que não precisa disto, por exemplo, dentro de uma máquina virtual. Você pode desativar o ModemManager no Ubuntu sem problemas, caso não precise dele.

A maneira mais comun de desativá-lo é utilizando os comandos:

$ sudo systemctl stop ModemManager
$ sudo systemctl disable ModemManager


Instalar o pyenv no Ubuntu

 O pyenv é uma ferramenta popular de linha de comando que permite instalar, gerenciar e alternar entre várias versões do Python no mesmo sistema sem depender de ambientes virtuais.


O que o pyenv resolve

Seu sistema operacional (linux ou Mac) geralmente vem com uma versão padrão do Python. Contudo ele vem com uma versão específica instalada. Por exemplo, você pode precisar do Python 3.8 para um projeto, do 3.12 para outro e talvez também do PyPy ou Miniconda.

Instalar várias versões do Python manualmente é trabalhoso. Além disto, alterar a versão global do Python geralmente quebra as ferramentas do sistema.

O pyenv resolve tudo isso permitindo que você:

  • Instale várias versões: pyenv install 3.12.1
  • Defina a versão global: pyenv global 3.10.0
  • Defina uma versão local (por projeto): pyenv local 3.9.18
  • Use automaticamente a versão correta com base no arquivo .python-version


Instalação passo a passo do PyENV no Ubuntu

As instruções a seguir irão ajudar na instalação do PyENV no Ubuntu. Estes passos foram testados no Ubuntu 22 e 24.

1) Atualizar pacotes do sistema: Comece atualizando a lista de pacotes do sistema para garantir o acesso às versões mais recentes dos softwares:

sudo apt update


2) Instalar dependências necessárias: O PyENV pode exigir certas dependências para funcionar de forma otimizada. Você pode instalar esses pacotes usando o seguinte comando:

sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev


3) Instalando o PyENV: Use o comando abaixo para fazer o download e executar o script de instalação do PyENV:

curl https://pyenv.run | bash


Nota: pode ser que você precise instalar git no seu computador

sudo apt install git


4) Configurando o ambiente: Você precisa alterar .bashrc como mostrado abaixo. Estas instruções irão aparecer ao final do script acima.

echo -e 'export PYENV_ROOT="$HOME/.pyenv"\nexport PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'eval "$(pyenv init --path)"\neval "$(pyenv init -)"' >> ~/.bashrc





quinta-feira, 15 de maio de 2025

Como usar o Windsurf com VSCode via conexão SSH

A combinação Vscode com Windsurf é muito boa pois permite autocorreção de alta qualidade do seu código. Contudo, estou acessando uma VM remotamente via SSH e o Windsurf não consegue fazer login. Se acesso diremente a GUI da VM, o Vscode abre e o Windsurf loga normalmente, excluindo assim algum problema de configuração ou instalação dos dois.

Note que ao solicitar o login do Windsurf, aparece na tela da console SSH a seguinte mensagem de erro: "X11 connection rejected because of wrong authentication.".

Esse erro geralmente significa que há um problema com a autenticação de encaminhamento do X11.

O que fazer então?

1. Verifique seu arquivo .Xauthority

Execute ls -al ~/.Xauthority para ver se o arquivo existe. Se estiver ausente ou tiver permissões incorretas, você pode regenerá-lo executando: xauth generate $DISPLAY. Se for isto, faça a correção e reinicie a sessão SSH.

2. Garanta que o encaminhamento (forwarding) está habilitado tanto no servidor como no cliente.

- No servidor, você precisa conferir no arquivo /etc/ssh/sshd_config se as linha abaixo existem:

X11Forwarding yes
X11UseLocalhost yes

Faça a correção se necessário e reinicie o serviço SSH com o comando sudo systemctl restart sshd.

- No cliente, abra o arquivo /etc/ssh/ssh_config e confira as seguinte linhas:

ForwardX11 yes
ForwardX11Trusted yes

3. Garanta que exista a variável de ambiente XAUTHORITY. Você pode usar o comando `env` para listar todas. Se não existir, abra o arquivo ~/.bashrc com um editor de textos e acrescente a seguinte linha ao final do arquivo.

export XAUTHORITY=$HOME/.Xauthority


No meu caso, faltavam as configurações de ForwardX11Trusted e XAUTHORITY.
Acrescentando as duas opções, o Windsurf foi capaz de abrir a tela de login corretamente.

Permitir que o shell em WSL possa acessar uma VM do Hyper-V

Se você tentar acessar uma VM do Hyper-V utilizando a console do WSL no Windows, você verá que não irá funcionar, mesmo que o Powershell você consiga pingar a VM. O WSL 2 roda em uma máquina virtual leve e tem seu próprio endereço IP interno. Para acessar serviços rodando no WSL a partir da VM (ou vice-versa), você precisa garantir que as duas faixas de IP conversem entre si. 

Por exemplo, minha VM é um Ubuntu e o IP retornado pelo comando `ip address` é mostrado abaixo:


Se tento acessar via shell do WSL, o ping não funciona


Para resolver isto entre o command prompt do Windows ou no powershell e entre com o comando `ipconfig`. Você verá um conjunto de adaptadores de rede com diversos endereços. No meu caso, a informação importante estava no final da lista, como mostrado abaixo. O primeiro adaptador é do Hyper-V e o segundo é para o WSL.



São necessários dois comandos para liberar o acesso à estas redes. Você precisa entrar comandos abaixo no PowerShell em modo administrador para ter as permissões de liberação.

Set-NetIPInterface -ifAlias "vEthernet (Default Switch)" -Forwarding enable
Set-NetIPInterface -ifAlias "vEthernet (WSL (Hyper-V firewall))" -Forwarding enable


Estes dois comandos não retornam nenhum informação indicando que eles funcionaram (veja abaixo).


Contudo, você verá que o ping no WSL irá começar a responder.





terça-feira, 7 de janeiro de 2025

Apt mostra que acesso a IP é proibido

Ao tentar atualizar os pacotes instalados no ubuntu, a mensagem de erro mostrada abaixo foi gerada pelo apt. Nenhuma alteração havia sido feita no servidor que pudesse ter causado o problema.


root@server:/etc# apt -y upgrade

Lendo listas de pacotes... Pronto

Construindo árvore de dependências... Pronto

Lendo informação de estado... Pronto

Calculando atualização... Pronto

Os pacotes a seguir serão atualizados:

  apparmor apt apt-utils base-files language-pack-en language-pack-en-base language-pack-gnome-en

  language-pack-gnome-en-base language-pack-gnome-pt language-pack-gnome-pt-base language-pack-pt

  language-pack-pt-base libapparmor1 libapt-pkg6.0 libmm-glib0 libpcap0.8 modemmanager python-apt-common python3-apt

  python3-distupgrade python3-update-manager ubuntu-advantage-tools ubuntu-desktop ubuntu-desktop-minimal

  ubuntu-drivers-common ubuntu-minimal ubuntu-pro-client ubuntu-pro-client-l10n ubuntu-release-upgrader-core

  ubuntu-release-upgrader-gtk ubuntu-standard update-manager update-manager-core

33 pacotes atualizados, 0 pacotes novos instalados, 0 a serem removidos e 0 não atualizados.

É preciso baixar 13,3 MB de arquivos.

Depois desta operação, 303 kB adicionais de espaço em disco serão usados.

Err:1 http://br.archive.ubuntu.com/ubuntu jammy-updates/main amd64 base-files amd64 12ubuntu4.7

  403  Forbidden [IP: 208.91.112.55 80]

Err:2 http://br.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libapt-pkg6.0 amd64 2.4.13

  403  Forbidden [IP: 208.91.112.55 80]



A primeira providencia foi verificar a conectividade com o site. O dns resolvia o endereço corretamente e o endereço respondia a ping.

Depois de um tempo, a conclusão foi que algo estava corrompido no meu repositório apt local. 

A sulução é simples. Bastou remover as listas do repositório, usando

sudo rm -fr /var/lib/apt/lists/*


e fazendo a atualização novamente

sudo apt -y update

sudo apt -y upgrade



quinta-feira, 26 de setembro de 2024

Forçar o apt a utilizar somente IPv4

 Neste post mostramos como configurar o apt-get para usar somente IPv4 (ou IPv6).

Os passos mostrados aqui foram testados no Ubuntu.


Opção de linha de comando

Se você quiser forçar o apt-get a usar IPv4 ou IPv6 somente uma vez, você pode usar um parametro no comando apt-get. Este recurso está disponível após a versão 0.9.7.9~exp1 do apt-get.

Para verificar se sua versão do apt-get é mais recente, execute:

sudo apt-get --version


Se a versão for igual ou superior, você pode forçar o IPv4 com:

sudo apt-get -o Acquire::ForceIPv4=true update


ou forçar o IPv6 com:

sudo apt-get -o Acquire::ForceIPv6=true update


Isso atualizará os repositórios, resolvendo as URLs em /etc/apt/sources.list para IPv4  (ou IPv6) somente.


Opção persistente alterando a configuração

Para tornar a configuração, crie o arquivo 99force-ipv4 em /etc/apt/apt.conf.d/. Você precisa ser `root` para editá-lo. Coloque o seguinte conteúdo no arqivo:

Acquire::ForceIPv4 "true";


Salve o arquivo e pronto. 

Se quiser forçar o IPv6, altere o nome do arquivo de 99force-ipv4 para 99force-ipv4 e o método para ForceIPv6 nas configurações.


Configurando um Assistente de IA Local no Raspberry Pi

Este guia explica como configurar um Raspberry Pi 5 com Raspberry para funcionar como um assistente de programação baseado em Inteligência ...