Lições Práticas da Construção de IA no Dispositivo em React Native

✍️ OpenClawRadar📅 Publicado: February 25, 2026🔗 Source
Lições Práticas da Construção de IA no Dispositivo em React Native
Ad

Geração de Texto com LLMs

Use llama.rn para executar modelos GGUF no React Native. Ele encapsula o llama.cpp e fornece vinculações nativas para Android (JNI) e iOS (Metal). O streaming de tokens via callbacks funciona bem.

O gerenciamento de memória é crítico: um modelo 7B Q4 precisa de ~5,5 GB de RAM em tempo de execução (tamanho do arquivo × 1,5 para cache KV e ativações). Use 60% da RAM do dispositivo como um limite rígido, avise a 50% e bloqueie a 60% para evitar que o sistema operacional encerre o aplicativo.

A aceleração por GPU usa OpenCL no Android (GPUs Adreno) e Metal no iOS. A atenção flash trava com camadas GPU > 0 no Android, então imponha isso no código. A quantização do cache KV (f16/q8_0/q4_0) é mais vantajosa que a GPU para a maioria dos dispositivos; passar de f16 para q4_0 praticamente triplicou a velocidade de inferência nos testes.

Geração de Imagens com Stable Diffusion

Isso é específico da plataforma, sem uma única biblioteca que cubra ambas.

  • Android: Use MNN (framework da Alibaba, CPU, funciona em todos os dispositivos ARM64) e QNN (Qualcomm AI Engine, acelerado por NPU, apenas Snapdragon 8 Gen 1+). O QNN é 3× mais rápido, mas só funciona em chips Qualcomm recentes. Implemente detecção em tempo de execução com fallback automático.
  • iOS: Use o pipeline ml-stable-diffusion da Apple com aceleração Core ML e Neural Engine. Modelos paletizados (~1 GB, 6 bits) são ótimos para dispositivos com memória limitada; a precisão total (~4 GB, fp16) é mais rápida no ANE, mas precisa de margem.

Benchmarks do mundo real: 5–10 segundos no NPU Snapdragon, 15 segundos CPU em flagship, 8–15 segundos iOS ANE para 512×512 em 20 passos. Mostre uma prévia em tempo real a cada N passos de remoção de ruído para evitar que os usuários pensem que o aplicativo travou.

Transcrição de Voz com Whisper

whisper.rn encapsula o whisper.cpp e é simples de integrar. Ofereça vários tamanhos de modelo (Tiny/Base/Small) e deixe os usuários escolherem entre velocidade e precisão. A transcrição parcial em tempo real (palavras aparecendo conforme falam) faz parecer nativo.

Armazene o áudio em buffer no código nativo e limpe-o após a transcrição; não grave arquivos de áudio no disco se a privacidade for importante.

Ad

Visão com Modelos Multimodais

Modelos de visão precisam de dois arquivos: o GGUF principal e um acompanhante mmproj (projetor multimodal). Lide com isso de forma transparente: detecte automaticamente modelos de visão, faça o download automático do mmproj, rastreie-os como uma única unidade e pesquise o diretório do modelo em tempo de execução se o link quebrar. Faça o download de ambos os arquivos em paralelo para reduzir o tempo de download quase pela metade para um modelo de visão de 2B.

SmolVLM em 500M é o ponto ideal para dispositivos móveis, com ~7 segundos em dispositivos flagship, capaz de leitura de documentos e descrição de cenas.

Chamada de Ferramentas para Loops de Agente no Dispositivo

Modelos que suportam chamada de funções podem usar ferramentas (busca na web, calculadora, data/hora, informações do dispositivo) através de um loop automático: LLM gera, analisa chamadas de ferramentas, executa-as, injeta os resultados de volta no contexto, LLM continua. Limite a no máximo 3 iterações, 5 chamadas no total para evitar loops infinitos.

Suporte dois caminhos de análise: modelos maiores geram chamadas de ferramentas JSON estruturadas nativamente através do llama.rn, enquanto modelos menores geram XML como <tool_call>. Detecte suporte a ferramentas no carregamento do modelo inspecionando o template de chat jinja; se o modelo não suportar ferramentas, não injete definições de ferramentas no prompt do sistema para evitar alucinações. A calculadora usa um analisador de descida recursiva—nunca eval().

Classificação de Intenção

Se seu aplicativo faz tanto geração de texto quanto de imagens, você precisa decidir o que o usuário quer com base na análise da entrada.

📖 Leia a fonte completa: r/LocalLLaMA

Ad

👀 See Also