Arquitetura do Nanobot e Motor de Inferência
O Nanobot é uma solução de assistente de IA altamente otimizada, projetada para operar com uma base de código mínima (aproximadamente 4.000 linhas). Sua arquitetura integra nativamente o vLLM como motor de inferência, garantindo alta taxa de transferência para modelos de linguagem. O pacote padrão inclui o modelo Qwen3-4B-Instruct, ajustado para seguir instruções complexas, e utiliza o Chainlit para fornecer uma interface de usuário web interativa. Além disso, sua arquitetura de "canais" permite a integração nativa com plataformas de mensagens externas.
Mapeamento de Hardware e Parâmetros do vLLM
A eficiência da inferência depende diretamente do ajuste fino dos parâmetros do vLLM de acordo com a VRAM e a capacidade de computação da GPU disponível. A tabela abaixo detalha as configurações ideais para o Qwen3-4B-Instruct em hardware NVIDIA comum, evitando estouro de memória (OOM) e maximizando a utilização dos tensores.
| Hardware | VRAM | Paralelismo de Tensor (tp) |
Contexto Máximo (max_len) |
Notas de Desempenho |
|---|---|---|---|---|
| NVIDIA L4 | 24 GB | 1 | 8192 | Operação estável em chip único para diálogos prolongados. |
| NVIDIA A10 | 24 GB | 1 | 8192 | Equivalente ao L4, ideal para processamento de textos longos. |
| NVIDIA RTX 4090 | 24 GB | 1 | 8192 | Excelente para ambientes de desenvolvimento e testes locais. |
| NVIDIA A100 (40G) | 40 GB | 1 | 16384 | Permite janelas de contexto expandidas para análise de documentos. |
| NVIDIA A100 (80G) | 80 GB | 1 | 32768 | Suporta contextos massivos e alto volume de requisições simultâneas. |
| Dual A10/L4 | 48 GB | 2 | 16384 | Distribuição de camadas em dois chips para latência reduzida. |
Para aplicar essas configurações de forma programática, você pode encapsular a inicialização do servidor vLLM em um script Python, permitindo a injeção dinâmica de parâmetros:
import subprocess
import sys
def start_inference_engine(model_dir, tensor_parallel, max_context):
engine_config = [
sys.executable, "-m", "vllm.entrypoints.openai.api_server",
"--model", model_dir,
"--tensor-parallel-size", str(tensor_parallel),
"--max-model-len", str(max_context),
"--served-model-name", "nanobot_core",
"--gpu-memory-utilization", "0.90"
]
subprocess.run(engine_config)
# Exemplo para NVIDIA A10
start_inference_engine("/data/models/qwen3-4b-instruct", 1, 8192)
Validação do Serviço e Interface Web
Após a alocação do modelo na VRAM, é crucial verificar a integridade do processo de inferência antes de expor a interface.
Utilize o comando abaixo para filtrar os logs do sistema e confirmar que o servidor Uvicorn está ativo e escutando requisições:
tail -n 100 /var/log/nanobot/inference.log | grep -E "Uvicorn running|Application startup complete"
Com o backend validado, inicie o front end baseado em Chainlit. O comando abaixo força a recarga automática e define uma porta personalizada:
chainlit run frontend_ui.py -w --port 8080 --host 0.0.0.0
Acesse http://localhost:8080 no navegador. Para validar a execução de ferramentas (tool-calling), insira um prompt que exija interação com o sistema operacional, como:
Execute o comando nvidia-smi e resuma a utilização atual da VRAM.
Integração com Mensageiro (QQ Bot)
A arquitetura de canais do Nanobot permite transformar o modelo em um bot para plataformas de mensagens. Para integrar com o QQ, é necessário registrar um aplicativo na plataforma de desenvolvedores do QQ e obter o AppID e o AppSecret.
Em vez de editar manualmente o arquivo de configuração, utilize um script para injetar as credenciais de forma segura e estruturada:
import json
import os
config_file = "/etc/nanobot/channels.json"
# Carrega a configuração existente ou cria um dicionário vazio
if os.path.exists(config_file):
with open(config_file, "r") as f:
settings = json.load(f)
else:
settings = {"channels": {}}
# Injeta as credenciais do QQ
settings["channels"]["qq"] = {
"enabled": True,
"appId": os.getenv("QQ_APP_ID", "SEU_APP_ID_AQUI"),
"secret": os.getenv("QQ_APP_SECRET", "SEU_APP_SECRET_AQUI"),
"allowFrom": [] # Lista branca de IDs de grupos ou usuários
}
# Salva as alterações
with open(config_file, "w") as f:
json.dump(settings, f, indent=4)
print("Configuração do canal QQ atualizada com sucesso.")
Por fim, inicie o serviço de gateway que atuará como uma ponte entre a API do QQ e o motor de inferência local:
nanobot start-gateway --config /etc/nanobot/channels.json --log-level info