- Motivação para o despliegue offline
Em setores como finanças e governo, onde a segurança de dados é primordial, os servidores frequentemente operam em redes internas rigorosamente isoladas. Durante a implementação de um sistema de conhecimento corporativo para uma instituição financeira, encontramos o desafio de fornecer uma ferramenta de automação para documentos e relatórios sem acesso à internet pública.
Serviços de IA baseados em nuvem são inviáveis nesses cenários. A combinação das capacidades localizáveis do OpenClaw com o modelo ollama-QwQ-32B oferece uma solução viável. Após validação em ambiente de produção, estabelecemos um fluxo de trabalho automatizado eficiente.
- Preparação do ambiente offline
2.1 Transferência de dependências
Para instalar o OpenClaw em rede isolada, preparamos um pacote completo de dependências npm em um ambiente com acesso externo.
mkdir pacote-openclaw
cd pacote-openclaw
npm install --cache ./cache_npm --prefix . openclaw@latest
tar -czvf pacote-openclaw.tar.gz .
No serviodr interno, após descompactar, realizamos a instalação local:
npm install --cache ./cache_npm --prefix . openclaw@latest
npm link ./lib/node_modules/openclaw
É crucial verificar a árvore de dependências com npm ls --depth=99 para garantir integridade.
2.2 Implantação do modelo
O modelo QwQ-32B (cerca de 24GB) deve ser transferido previamente. Para iniciar o servidor ollama com otimização NUMA:
ollama serve --model qwq-32b --numa
Verificamos a disponibilidade do serviço com uma solicitação simples:
curl -X POST http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d '{"model":"qwq-32b","prompt":"Teste de conexão"}'
- Configuração do OpenClaw
3.1 Ajuste do modelo
No arquivo ~/.openclaw/config.json, configuramos a referência ao serviço local e desativamos verificações online:
{
"engine": {
"modelProvider": {
"id": "ollama-local",
"endpoint": "http://192.168.1.10:11434",
"authToken": "unused",
"protocol": "openai-compatible",
"activeModels": [
{
"name": "qwq-32b",
"alias": "Modelo Interno",
"maxTokens": 32768
}
]
},
"autoUpdate": false
}
}
3.2 Integração com sistemas de mensagens
Para comunicação via Feishu em rede isolada, registramos a aplicação externamente e configuramos um proxy WebSocket interno:
{
"messaging": {
"feishuBot": {
"status": "active",
"applicationId": "id_da_aplicacao",
"secretKey": "chave_secreta",
"transport": "websocket",
"websocketEndpoint": "ws://proxy-interno:8080"
}
}
}
- Casos de uso validados
Implementamos com sucesso três automações no setor financeiro:
- Extração de tabelas de PDFs: Transformação de relatórios em estruturas JSON usando um script auxiliar:
import re
def estruturar_tabela(dados_brutos):
padrao_celula = r'\|\s*(.*?)\s*(?=\||$)'
linhas = [re.findall(padrao_celula, linha) for linha in dados_brutos.split('\n') if '|' in linha]
cabecalhos = linhas[0]
return [dict(zip(cabecalhos, linha)) for linha in linhas[1:]]
- Conformidade regulatória: Comparação automatizada entre documentos e normas atualizadas.
- Atas de reunião: Síntese de decisões a partir de transcrições.
Este fluxo reduziu o tempo de processamento de 2 horas para 15 minutos com precisão superior a 92%.
- Solução de problemas comuns
- Timeout do modelo: Aumentar o limite de tempo na configuração do OpenClaw para 120 segundos.
- Falha de comunicação bidirecional: Garantir resolução DNS interna para domínios do Feishu.
- Instalação de extensões: Transferir pacotes manualmente e instalar com
clawhub install ./pacote.tgz.
- Medidas de segurança
mkdir -p /var/opt/openclaw/seguro
chown openclaw:openclaw /var/opt/openclaw/seguro
chmod 700 /var/opt/openclaw/seguro
Bloqueamos comandos potencialmente perigosos na configuração:
"protecao": {
"comandos_bloqueados": ["rm -rf", "mkfs", "reboot"]
}
Ativamos logs detalhados para auditoria:
openclaw gateway start --log-level=info --audit-log=/var/log/openclaw/audit.log