ThiagoAlla/rag_slm-AI

0

stars

61

commits

Jupyter Notebook

primary language

Aug 3, 2026

updated

README

🌾 AgroRAG / AgroAI — Modelo de Linguagem 100% Offline para Dispositivos Móveis no Agronegócio

React Native Expo LiteRT-LM License: MIT

[!IMPORTANT] 🚀 DOWNLOAD DIRETO DO APLICATIVO (APK): Baixe o aplicativo compilado e otimizado para Android diretamente pelo link abaixo: 👉 Download AgroAI-release.apk (50 MB)

O AgroRAG é uma solução inovadora de assistência técnica agrícola projetada para operar em cenários com restrição extrema de conectividade (zonas de sombra rural). Trata-se de um sistema de Retrieval-Augmented Generation (RAG) de ponta a ponta, executado de forma 100% offline diretamente em dispositivos móveis Android de gama média.

O projeto elimina a dependência de APIs em nuvem e conexão à internet ao rodar modelos de linguagem (SLMs) e buscas vetoriais nativamente no smartphone utilizando o motor de alto desempenho LiteRT-LM (TensorFlow Lite para LLMs) com aceleração gráfica nativa de GPU.


🗺️ 1. Arquitetura do Sistema e Fluxo de Dados

A arquitetura do AgroRAG foi projetada de forma modular, dividindo as tarefas pesadas de processamento em duas grandes etapas: o pipeline de ingestão de dados em lote (Python) e o aplicativo móvel interativo de execução local (React Native).

📊 Diagrama de Fluxo de Execução (RAG Local)

O fluxo de processamento de uma dúvida técnica enviada pelo produtor rural segue o ciclo ilustrado no diagrama abaixo:

Diagrama de Fluxo de Execução RAG Local

🛠️ Ver Diagrama de Sequência Detalhado (Mermaid)
sequenceDiagram
    autonumber
    actor Produtor as Produtor Rural (App)
    participant UI as Interface de Usuário
    participant Embed as Nomic Embed Service
    participant DB as SQLite + sqlite-vec (OP-SQLite)
    participant Engine as LiteRT-LM Engine
    participant Model as Gemma 4 E2B IT (.litertlm)

    Produtor->>UI: Digita pergunta (Ex: "Como combater a lagarta da soja?")
    UI->>Embed: Envia pergunta para vetorização
    Note over Embed: Executa modelo local de embeddings<br/>(Nomic Embed v1.5)
    Embed-->>UI: Retorna Vetor de Consulta (768 dimensões)
    UI->>DB: Executa busca híbrida (Vetor + Boosts SQL)
    Note over DB: Filtra cultura + Boost de palavras-chave<br/>+ Penalidade de ruídos acadêmicos
    DB-->>UI: Retorna Top 5 Chunks de contexto (Texto + Metadados)
    UI->>Engine: Inicializa prompt montado (Fatos + Pergunta)
    Note over Engine, Model: Carrega pesos na GPU do celular (OpenCL/Vulkan)<br/>Temperatura = 0.0 (Greedy Decoding)
    Engine->>Model: Processa Prompt
    Model-->>Engine: Stream de tokens gerados
    Engine-->>UI: Renderiza resposta em tempo real
    UI-->>Produtor: Exibe resposta factual e lista fontes (Doc / Pág)

🧠 2. Fundamentos Conceituais do Gemma 4 E2B

A escolha do Gemma 4 E2B (versão Instruction Tuned, otimizada para o runtime LiteRT-LM do Google) como o modelo de linguagem principal do aplicativo baseia-se em conceitos técnicos de processamento de linguagem de borda (Edge AI):

  1. Dimensão Paramétrica e Eficiência de Borda: Com aproximadamente 2 bilhões de parâmetros ativos, o modelo oferece capacidade cognitiva avançada de raciocínio de contexto longo, mantendo uma pegada de memória RAM física inferior a 3 GB quando quantizado.
  2. O Formato .litertlm: Desenvolvido pela comunidade do TensorFlow Lite (LiteRT), o formato empacota os pesos do modelo de forma otimizada para execução em dispositivos móveis. Ele compila operações matemáticas complexas diretamente para instruções nativas ARM e otimiza a alocação de buffers na memória RAM nativa do celular. Para mais informações técnicas sobre a estrutura de seções, o pipeline de compilação do compilador litert-torch e as lições aprendidas sobre a compatibilidade de assinaturas de embedders, consulte o Guia Detalhado do Formato .litertlm.
  3. Inferência Determinística (Greedy Decoding): Configurado estritamente com Temperatura = 0.0, o modelo adota o método de busca gananciosa (Greedy Search). A cada passo de geração, o modelo escolhe o token com maior probabilidade absoluta, eliminando variações criativas ("alucinações") e garantindo que o mesmo contexto da Embrapa resulte sempre na mesma resposta exata.
  4. Integração com GPU Móvel: O LiteRT-LM utiliza drivers OpenCL e Vulkan para realizar a computação tensorial de forma paralela na GPU integrada do processador do smartphone (Ex: Adreno 642L), permitindo velocidades de geração contínua superiores a 18 tokens por segundo.

🔍 3. Estratégia de Busca Híbrida e Boosts

Para otimizar a recuperação de informações agrícolas e evitar que dados técnicos de culturas diferentes se misturem, o AgroRAG implementa uma query de busca vetorial avançada (Busca Híbrida) no SQLite:

  1. Filtro de Contexto Estrito: Analisa a pergunta do usuário. Se contiver termos sobre "soja" e não "milho" (ou vice-versa), o banco exclui preventivamente os chunks associados a documentos da outra cultura.
  2. Keyword Boost (Termos Técnicos): Chunks que contêm termos chave relevantes (ex: lagarta, percevejo, inseto, praga) ganham um acréscimo de relevância na ordenação ($-,0.15$ na distância L2).
  3. Document Boost (Cultura Alvo): Dá um boost de relevância ($-,0.20$) a documentos cujo nome combina com a cultura de interesse mencionada pelo usuário.
  4. Category Boost: Se o usuário pergunta sobre "pragas", o sistema dá um boost adicional ($-,0.30$) a manuais especializados de controle fitossanitário.
  5. Academic Noise Penalty: Trechos contendo termos comuns de rodapés bibliográficos e editoriais (ex: ISSN, telefax, cx. postal, e-mail, editoração) sofrem uma forte penalidade de distância ($+,0.25$), empurrando ruídos de formatação para o fim da lista e garantindo que apenas texto técnico vá para o prompt do LLM.

🛠️ 4. Roteiro para a Conclusão do Sistema (Roadmap)

Embora o núcleo de RAG vetorial e a inferência local com Gemma 4 E2B estejam totalmente funcionais, o AgroRAG necessita das seguintes implementações planejadas para atingir robustez de produção:

🔄 A. Protocolo de Sincronização Bidirecional e Telemetria Offline

  • Problema: Os feedbacks de uso dos produtores (likes/dislikes nas respostas) e novas perguntas não catalogadas ficam presos na memória local do smartphone.
  • Solução: Implementar uma fila de escrita local (SQLite) para telemetria. Criar um serviço periódico em segundo plano que detecta conectividade à internet (via NetInfo) e realiza o sincronismo assíncrono dos dados e feedbacks dos usuários para um servidor central, baixando simultaneamente atualizações incrementais do banco de dados de conhecimento (agro_rag-v3.db).

💾 B. Gerenciamento de Histórico e Memória de Conversa Local

  • Problema: Atualmente, a inferência roda com resetConversation(), impedindo que o produtor faça perguntas de acompanhamento mantendo o histórico de mensagens anteriores.
  • Solução: Criar uma tabela relacional de histórico de mensagens associadas a sessões de chat. Na inferência, injetar as últimas 3 interações convertidas em formato resumido de prompt como contexto complementar no buffer do LiteRT-LM, respeitando o limite máximo de tokens do buffer de entrada.

📸 C. Módulo Multimodal de Identificação Visual (YOLOv8 Nano)

  • Problema: O produtor muitas vezes não sabe identificar a praga por texto, necessitando de imagens.
  • Solução: Compilar e embarcar um modelo de visão computacional leve (YOLOv8-Nano) no aplicativo móvel. Quando o produtor capturar uma foto de uma folha doente, o modelo realiza a inferência visual localmente para classificar a patologia (ex: "ferrugem-asiática") e injeta essa etiqueta classificada como boost textual imediato na busca vetorial do RAG.

🧪 D. Interface de Calibração de Similaridade Dinâmica

  • Problema: O limiar fixo de distância euclidiana para barrar perguntas fora do escopo pode ser excessivamente rígido ou permissivo dependendo da cultura.
  • Solução: Implementar uma tela administrativa oculta para técnicos agrícolas ajustarem dinamicamente a distância de corte da busca vetorial (limiar de falha segura), permitindo sintonizar a tolerância de recuperação do retriever local.

📚 5. Projetos Correlatos e Referências Científicas

A concepção do AgroRAG alinha-se a recentes pesquisas científicas globais em RAG de borda (On-Device RAG):

🔬 Projetos Acadêmicos Correlatos

  • Pocket RAG (Socorro Médico Offline): Trabalho pioneiro de 2026 ("Pocket RAG: On-Device RAG for First Aid Guidance in Offline Mobile Environments") que avaliou a execução de SLMs na área médica de primeiros socorros em cenários pós-desastre naturais sem conectividade, alcançando 97% de acurácia factual rodando 100% no celular Android.
  • AgroLLM (Apoio Digital ao Agricultor): O projeto "AgroLLM: Connecting Farmers and Agricultural Practices" propõe o uso de uma camada de processamento de conhecimento domínio-específico (DKPL) sobre manuais acadêmicos para blindar o modelo contra a alucinação de termos químicos, demonstrando que a vinculação a livros de agronomia oficiais é a única forma segura de prover assistência técnica digital.

📄 Referências Bibliográficas Relevantes

  1. DUBEY, A. et al. The Llama 3 Herd of Models. arXiv preprint arXiv:2407.21783, 2024. (Análise sobre a capacidade e limites paramétricos de modelos de pequeno porte sob quantização).
  2. GAO, Y. et al. Retrieval-Augmented Generation for Large Language Models: A Survey. arXiv preprint arXiv:2312.10995, 2023. (Conceitos teóricos fundamentais do ciclo do Retriever e Generator).
  3. GOOGLE AI EDGE. LiteRT: TensorFlow Lite for Large Language Models. Google Developer Documentation, 2026. Disponível em: https://ai.google.dev/edge/litert. (Guia oficial de otimização de execução de inferência local).
  4. GREENE, Alex S. sqlite-vec: A vector search extension for SQLite written in C. GitHub Repository, 2024. Disponível em: https://github.com/asg017/sqlite-vec. (Arquitetura do banco de dados relacional-vetorial de baixo acoplamento).

👥 Contribuidores


📝 Licença

Este projeto está licenciado sob os termos da licença MIT.

Contributors

ThiagoAlla

44 commits

agemilsonn

17 commits

ThiagoAlla/rag_slm-AI

0

stars

61

commits

Jupyter Notebook

primary language

Aug 3, 2026

updated

README

🌾 AgroRAG / AgroAI — Modelo de Linguagem 100% Offline para Dispositivos Móveis no Agronegócio

React Native Expo LiteRT-LM License: MIT

[!IMPORTANT] 🚀 DOWNLOAD DIRETO DO APLICATIVO (APK): Baixe o aplicativo compilado e otimizado para Android diretamente pelo link abaixo: 👉 Download AgroAI-release.apk (50 MB)

O AgroRAG é uma solução inovadora de assistência técnica agrícola projetada para operar em cenários com restrição extrema de conectividade (zonas de sombra rural). Trata-se de um sistema de Retrieval-Augmented Generation (RAG) de ponta a ponta, executado de forma 100% offline diretamente em dispositivos móveis Android de gama média.

O projeto elimina a dependência de APIs em nuvem e conexão à internet ao rodar modelos de linguagem (SLMs) e buscas vetoriais nativamente no smartphone utilizando o motor de alto desempenho LiteRT-LM (TensorFlow Lite para LLMs) com aceleração gráfica nativa de GPU.


🗺️ 1. Arquitetura do Sistema e Fluxo de Dados

A arquitetura do AgroRAG foi projetada de forma modular, dividindo as tarefas pesadas de processamento em duas grandes etapas: o pipeline de ingestão de dados em lote (Python) e o aplicativo móvel interativo de execução local (React Native).

📊 Diagrama de Fluxo de Execução (RAG Local)

O fluxo de processamento de uma dúvida técnica enviada pelo produtor rural segue o ciclo ilustrado no diagrama abaixo:

Diagrama de Fluxo de Execução RAG Local

🛠️ Ver Diagrama de Sequência Detalhado (Mermaid)
sequenceDiagram
    autonumber
    actor Produtor as Produtor Rural (App)
    participant UI as Interface de Usuário
    participant Embed as Nomic Embed Service
    participant DB as SQLite + sqlite-vec (OP-SQLite)
    participant Engine as LiteRT-LM Engine
    participant Model as Gemma 4 E2B IT (.litertlm)

    Produtor->>UI: Digita pergunta (Ex: "Como combater a lagarta da soja?")
    UI->>Embed: Envia pergunta para vetorização
    Note over Embed: Executa modelo local de embeddings<br/>(Nomic Embed v1.5)
    Embed-->>UI: Retorna Vetor de Consulta (768 dimensões)
    UI->>DB: Executa busca híbrida (Vetor + Boosts SQL)
    Note over DB: Filtra cultura + Boost de palavras-chave<br/>+ Penalidade de ruídos acadêmicos
    DB-->>UI: Retorna Top 5 Chunks de contexto (Texto + Metadados)
    UI->>Engine: Inicializa prompt montado (Fatos + Pergunta)
    Note over Engine, Model: Carrega pesos na GPU do celular (OpenCL/Vulkan)<br/>Temperatura = 0.0 (Greedy Decoding)
    Engine->>Model: Processa Prompt
    Model-->>Engine: Stream de tokens gerados
    Engine-->>UI: Renderiza resposta em tempo real
    UI-->>Produtor: Exibe resposta factual e lista fontes (Doc / Pág)

🧠 2. Fundamentos Conceituais do Gemma 4 E2B

A escolha do Gemma 4 E2B (versão Instruction Tuned, otimizada para o runtime LiteRT-LM do Google) como o modelo de linguagem principal do aplicativo baseia-se em conceitos técnicos de processamento de linguagem de borda (Edge AI):

  1. Dimensão Paramétrica e Eficiência de Borda: Com aproximadamente 2 bilhões de parâmetros ativos, o modelo oferece capacidade cognitiva avançada de raciocínio de contexto longo, mantendo uma pegada de memória RAM física inferior a 3 GB quando quantizado.
  2. O Formato .litertlm: Desenvolvido pela comunidade do TensorFlow Lite (LiteRT), o formato empacota os pesos do modelo de forma otimizada para execução em dispositivos móveis. Ele compila operações matemáticas complexas diretamente para instruções nativas ARM e otimiza a alocação de buffers na memória RAM nativa do celular. Para mais informações técnicas sobre a estrutura de seções, o pipeline de compilação do compilador litert-torch e as lições aprendidas sobre a compatibilidade de assinaturas de embedders, consulte o Guia Detalhado do Formato .litertlm.
  3. Inferência Determinística (Greedy Decoding): Configurado estritamente com Temperatura = 0.0, o modelo adota o método de busca gananciosa (Greedy Search). A cada passo de geração, o modelo escolhe o token com maior probabilidade absoluta, eliminando variações criativas ("alucinações") e garantindo que o mesmo contexto da Embrapa resulte sempre na mesma resposta exata.
  4. Integração com GPU Móvel: O LiteRT-LM utiliza drivers OpenCL e Vulkan para realizar a computação tensorial de forma paralela na GPU integrada do processador do smartphone (Ex: Adreno 642L), permitindo velocidades de geração contínua superiores a 18 tokens por segundo.

🔍 3. Estratégia de Busca Híbrida e Boosts

Para otimizar a recuperação de informações agrícolas e evitar que dados técnicos de culturas diferentes se misturem, o AgroRAG implementa uma query de busca vetorial avançada (Busca Híbrida) no SQLite:

  1. Filtro de Contexto Estrito: Analisa a pergunta do usuário. Se contiver termos sobre "soja" e não "milho" (ou vice-versa), o banco exclui preventivamente os chunks associados a documentos da outra cultura.
  2. Keyword Boost (Termos Técnicos): Chunks que contêm termos chave relevantes (ex: lagarta, percevejo, inseto, praga) ganham um acréscimo de relevância na ordenação ($-,0.15$ na distância L2).
  3. Document Boost (Cultura Alvo): Dá um boost de relevância ($-,0.20$) a documentos cujo nome combina com a cultura de interesse mencionada pelo usuário.
  4. Category Boost: Se o usuário pergunta sobre "pragas", o sistema dá um boost adicional ($-,0.30$) a manuais especializados de controle fitossanitário.
  5. Academic Noise Penalty: Trechos contendo termos comuns de rodapés bibliográficos e editoriais (ex: ISSN, telefax, cx. postal, e-mail, editoração) sofrem uma forte penalidade de distância ($+,0.25$), empurrando ruídos de formatação para o fim da lista e garantindo que apenas texto técnico vá para o prompt do LLM.

🛠️ 4. Roteiro para a Conclusão do Sistema (Roadmap)

Embora o núcleo de RAG vetorial e a inferência local com Gemma 4 E2B estejam totalmente funcionais, o AgroRAG necessita das seguintes implementações planejadas para atingir robustez de produção:

🔄 A. Protocolo de Sincronização Bidirecional e Telemetria Offline

  • Problema: Os feedbacks de uso dos produtores (likes/dislikes nas respostas) e novas perguntas não catalogadas ficam presos na memória local do smartphone.
  • Solução: Implementar uma fila de escrita local (SQLite) para telemetria. Criar um serviço periódico em segundo plano que detecta conectividade à internet (via NetInfo) e realiza o sincronismo assíncrono dos dados e feedbacks dos usuários para um servidor central, baixando simultaneamente atualizações incrementais do banco de dados de conhecimento (agro_rag-v3.db).

💾 B. Gerenciamento de Histórico e Memória de Conversa Local

  • Problema: Atualmente, a inferência roda com resetConversation(), impedindo que o produtor faça perguntas de acompanhamento mantendo o histórico de mensagens anteriores.
  • Solução: Criar uma tabela relacional de histórico de mensagens associadas a sessões de chat. Na inferência, injetar as últimas 3 interações convertidas em formato resumido de prompt como contexto complementar no buffer do LiteRT-LM, respeitando o limite máximo de tokens do buffer de entrada.

📸 C. Módulo Multimodal de Identificação Visual (YOLOv8 Nano)

  • Problema: O produtor muitas vezes não sabe identificar a praga por texto, necessitando de imagens.
  • Solução: Compilar e embarcar um modelo de visão computacional leve (YOLOv8-Nano) no aplicativo móvel. Quando o produtor capturar uma foto de uma folha doente, o modelo realiza a inferência visual localmente para classificar a patologia (ex: "ferrugem-asiática") e injeta essa etiqueta classificada como boost textual imediato na busca vetorial do RAG.

🧪 D. Interface de Calibração de Similaridade Dinâmica

  • Problema: O limiar fixo de distância euclidiana para barrar perguntas fora do escopo pode ser excessivamente rígido ou permissivo dependendo da cultura.
  • Solução: Implementar uma tela administrativa oculta para técnicos agrícolas ajustarem dinamicamente a distância de corte da busca vetorial (limiar de falha segura), permitindo sintonizar a tolerância de recuperação do retriever local.

📚 5. Projetos Correlatos e Referências Científicas

A concepção do AgroRAG alinha-se a recentes pesquisas científicas globais em RAG de borda (On-Device RAG):

🔬 Projetos Acadêmicos Correlatos

  • Pocket RAG (Socorro Médico Offline): Trabalho pioneiro de 2026 ("Pocket RAG: On-Device RAG for First Aid Guidance in Offline Mobile Environments") que avaliou a execução de SLMs na área médica de primeiros socorros em cenários pós-desastre naturais sem conectividade, alcançando 97% de acurácia factual rodando 100% no celular Android.
  • AgroLLM (Apoio Digital ao Agricultor): O projeto "AgroLLM: Connecting Farmers and Agricultural Practices" propõe o uso de uma camada de processamento de conhecimento domínio-específico (DKPL) sobre manuais acadêmicos para blindar o modelo contra a alucinação de termos químicos, demonstrando que a vinculação a livros de agronomia oficiais é a única forma segura de prover assistência técnica digital.

📄 Referências Bibliográficas Relevantes

  1. DUBEY, A. et al. The Llama 3 Herd of Models. arXiv preprint arXiv:2407.21783, 2024. (Análise sobre a capacidade e limites paramétricos de modelos de pequeno porte sob quantização).
  2. GAO, Y. et al. Retrieval-Augmented Generation for Large Language Models: A Survey. arXiv preprint arXiv:2312.10995, 2023. (Conceitos teóricos fundamentais do ciclo do Retriever e Generator).
  3. GOOGLE AI EDGE. LiteRT: TensorFlow Lite for Large Language Models. Google Developer Documentation, 2026. Disponível em: https://ai.google.dev/edge/litert. (Guia oficial de otimização de execução de inferência local).
  4. GREENE, Alex S. sqlite-vec: A vector search extension for SQLite written in C. GitHub Repository, 2024. Disponível em: https://github.com/asg017/sqlite-vec. (Arquitetura do banco de dados relacional-vetorial de baixo acoplamento).

👥 Contribuidores


📝 Licença

Este projeto está licenciado sob os termos da licença MIT.

Contributors

ThiagoAlla

44 commits

agemilsonn

17 commits

Languages

Jupyter Notebook

66.8%

TypeScript

18.6%

Python

14.0%