Inteligência Artificial (IA)

Como criei um aplicativo Plant RAG com o Couchbase Vector Search no iOS

Sabe aquela sensação de quando você vê uma planta linda na loja, mas não tem ideia do que seja ou de como cuidar dela? Foi exatamente isso que aconteceu comigo na última primavera, e isso me fez pensar: e se eu pudesse apontar meu telefone para qualquer planta e saber instantaneamente tudo sobre ela?

Por isso, criei o PlantPal, um aplicativo para iOS que identifica plantas a partir de fotos e fornece conselhos de cuidados com base em IA. A parte legal? Tudo é executado no dispositivo usando a pesquisa vetorial do Couchbase. Não é necessário usar a Internet, não há fotos enviadas para servidores, apenas a pura magia da identificação local de plantas.

O que eu construí

O PlantPal acabou se tornando uma aventura técnica e tanto. É basicamente um aplicativo RAG que pode identificar plantas a partir da sua câmera e, em seguida, conversar com você sobre instruções de cuidados. Mas aqui está o que o torna diferente de outros aplicativos de plantas:

Tudo isso é executado localmente em seu telefone. Aponte sua câmera para uma planta cobra e ela saberá instantaneamente que se trata de uma planta cobra. Pergunte a ele "com que frequência devo regar isso?", e ele lhe dará conselhos específicos para aquela planta exata - tudo sem enviar um único byte para a nuvem.

Ah, e consegui reduzir o aplicativo inteiro de ridículos 800 MB para apenas 14 MB. Mais sobre esse desastre mais tarde.

Vídeo de demonstração

A pilha tecnológica (ou: como aprendi a gostar de bancos de dados vetoriais)

A construção desse produto exigiu algumas peças:

    • iOS + Swift - Obviamente, como eu queria usá-lo em meu iPhone
    • Pesquisa vetorial do Couchbase Lite - Isso foi um divisor de águas para a identificação de plantas locais
    • MobileCLIP - Modelo de visão computacional da Apple para transformar imagens em números
    • Núcleo ML - Para executar tudo localmente
    • Modelos de fundaçãoEstrutura de IA no dispositivo da Apple para a funcionalidade de bate-papo, fornecendo recursos de LLM que priorizam a privacidade sem dependências de nuvem

Toda a filosofia era "manter tudo local." Sem APIs de nuvem, sem envio de fotos de plantas para servidores aleatórios, sem pesadelos de privacidade. Apenas você, seu telefone e uma matemática muito inteligente.


Parte 1: Pesquisa de vetores - não é tão assustador quanto parece

Por que a maioria dos aplicativos de plantas é ruim

Vamos ser honestos: a maioria dos aplicativos de identificação de plantas é bastante frustrante. Você tira uma foto, espera de 3 a 5 segundos enquanto ela é carregada em algum servidor e, em seguida, recebe de volta um resultado que pode ou não ser preciso. Além disso, você está basicamente enviando fotos de suas plantas domésticas para sabe-se lá onde.

Eu queria algo que funcionasse instantaneamente, como apontar a câmera para uma planta e saber imediatamente o que ela é. Sem espera, sem necessidade de internet, sem preocupações com a privacidade.

Pesquisa de vetores. Eu sei, eu sei - parece muito técnico e intimidador. Mas, na verdade, é uma solução bastante elegante, uma vez que você a compreenda.

A mágica dos embeddings vetoriais

Aqui está a parte louca: você pode transformar qualquer imagem em uma lista de números. Não como valores de pixel, mas números realmente significativos que representam o que está na imagem.

O mais interessante é que plantas semelhantes acabam tendo números semelhantes. Duas fotos de rosas terão vetores muito semelhantes, enquanto uma rosa e um cacto serão completamente diferentes.

Quando tive essa percepção, a solução se tornou óbvia: basta comparar os números! O Couchbase Vector Search faz todo o trabalho pesado de encontrar vetores semelhantes de forma eficiente.

A implementação real acabou sendo surpreendentemente limpa:


Parte 2: a grande migração do MobileCLIP

Quando o Vision Framework não foi suficiente

Então foi aqui que as coisas ficaram interessantes. Comecei com a estrutura Vision da Apple porque, bem, ela está integrada ao iOS e parecia ser a escolha óbvia. Em meu teste inicial com 47 fotos de plantas, ele funcionou perfeitamente bem. Eu estava me sentindo muito bem comigo mesmo.

Depois, fiquei ambicioso. E se eu pudesse criar um banco de dados com mais de 15.000 espécies de plantas? Foi aí que tudo desmoronou.

O problema era a precisão. Quando testei o Vision embeddings em conjuntos de dados maiores, as plantas que pareciam semelhantes continuavam sendo confundidas umas com as outras. Por exemplo, o aplicativo achava que uma Snake Plant era uma ZZ Plant, o que... não é muito bom quando se está tentando dar conselhos sobre rega.

Acontece que as incorporações da estrutura do Vision não eram suficientemente distintas para o meu caso de uso. Os vetores de plantas de aparência semelhante estavam muito próximos uns dos outros, de modo que o aplicativo não conseguia distingui-los de forma confiável.

MobileCLIP

Depois de algumas pesquisas (e muita frustração), descobri o MobileCLIP. Ele foi projetado especificamente para tarefas de similaridade de imagens, e a diferença foi da noite para o dia. De repente, as plantas semelhantes passaram a ter embeddings muito mais distintos, e minha precisão aumentou muito.

A migração deu um pouco de trabalho - tive que reescrever o pipeline de geração de incorporação - mas valeu totalmente a pena. Agora eu poderia escalar com confiança para milhares de espécies de plantas sem que a precisão caísse em um precipício.


Parte 3: O desastre de 800 MB (e como eu o consertei)

Quando seu aplicativo se torna maior do que a maioria dos jogos

Lembra-se de quando mencionei o desastre de 800 MB? Sim, sobre isso...

Minha primeira versão era absolutamente ridícula. Eu estava enviando o banco de dados completo da planta com imagens de alta resolução, além de vários modelos do MobileCLIP (S0, S1, S2, BLT - porque por que escolher, certo?), além de todos os modelos de texto que eu achava que poderia precisar algum dia. O aplicativo tinha basicamente o tamanho de um jogo para celular AAA.

Ninguém vai baixar um aplicativo de identificação de plantas de 800 MB. Quer dizer, você faria isso?

O avanço da pré-computação

Foi quando tive o que gosto de chamar de meu momento "duh". Por que eu estava gerando embeddings para as mesmas 47 plantas toda vez que o aplicativo era iniciado? Isso é simplesmente... um desperdício.

O que eu estava fazendo (mal):

    • Pacote de aplicativos: Imagens da planta (10 MB) + Todos os modelos (800 MB) = 810 MB
    • Cada inicialização de aplicativo: Gerar embeddings para todas as plantas de referência
    • Resultado: Inicialização lenta, tamanho de arquivo ridículo

O que eu deveria estar fazendo:

    • Tempo de construção: Gerar embeddings uma vez a partir de imagens de plantas
    • Pacote de aplicativos: Embeddings pré-computados (500 KB) + 1 modelo (14 MB) = 14 MB
    • Tempo de execução: Gerar embeddings apenas para novas fotos da câmera
    • Resultado: Inicialização instantânea, aplicativo de tamanho normal

Aqui está o carregador de incorporação pré-computado:

Benefícios:

    • Inicialização instantânea do aplicativo: Não é necessária a geração de incorporação
    • 98% armazenamento menor: Embeddings versus imagens
    • Melhor duração da bateria: Menos computação em tempo de execução

Parte 4: fazendo com que o Couchbase faça o trabalho pesado

Configuração do banco de dados (mais fácil do que eu esperava)

Vou ser sincero: quando ouvi falar em "banco de dados vetorial" pela primeira vez, achei que seria algo enorme e complicado. Mas o Couchbase Lite o tornou surpreendentemente simples:

O SQL++ que mudou tudo

É aqui que o Couchbase realmente se destaca. Em vez de escrever algoritmos de similaridade complexos, posso simplesmente usar o SQL++ com uma função vetorial especial. É quase fácil demais:

O DISTÂNCIA_APROXIMADA_DO_VETOR calcula a distância aproximada entre um vetor de destino e os vetores no banco de dados, permitindo uma pesquisa híbrida eficiente com consultas SQL++ e suporte para várias métricas de distância.


Parte 5: ensinando a IA sobre plantas

Tornar o bate-papo realmente útil

Ok, então eu conseguia identificar plantas. Legal. Mas e depois? Eu queria que os usuários pudessem fazer perguntas como "com que frequência devo regar isso?" e obter respostas realmente úteis, não conselhos genéricos sobre cuidados com as plantas.

É aqui que entra o RAG (Retrieval-Augmented Generation). Basicamente, eu precisava dar à IA um contexto específico sobre qualquer planta que acabasse de ser identificada. Veja como estruturei todo esse conhecimento sobre as plantas:

Quando uma planta é identificada, eu crio um contexto rico para a IA a partir de dados locais:

Isso fornece respostas de IA ricas e contextuais usando as informações de cuidados específicos da planta identificada.

Integração de modelos de fundação

A funcionalidade de bate-papo aproveita Modelos de base da Apple para processamento de linguagem natural no dispositivo, garantindo que todas as conversas permaneçam privadas e, ao mesmo tempo, fornecendo orientação inteligente sobre os cuidados com as plantas por meio de respostas sensíveis ao contexto.


Parte 6: otimizações de desempenho

Jornada de redução de tamanho

    • Iniciado com: 8 modelos do MobileCLIP (800 MB)
    • Otimizado para: 1 modelo MobileCLIP-S1 (120 MB)
    • Resultado: Redução do tamanho do 85% com melhor precisão!

Parte 7: o que aprendi (da maneira mais difícil)

Coisas que realmente funcionaram

    • Embeddings pré-computados - Essa foi provavelmente a minha maior vitória. Deixar de gerar embeddings a cada inicialização para pré-computá-los economizou tempo de inicialização e 98% do tamanho do aplicativo.
    • MobileCLIP - Muito melhor do que a estrutura do Vision para distinguir entre plantas semelhantes. Vale totalmente a pena a dor de cabeça da migração.
    • Pesquisa vetorial do Couchbase - Ter SQL para operações vetoriais é um divisor de águas. Não é mais necessário escrever algoritmos de similaridade personalizados.
    • Mantendo tudo local - Os usuários adoram não ter que se preocupar com a conectividade com a Internet ou com a privacidade.

Coisas que não foram bem-sucedidas

    • Otimização do tamanho do modelo - Passei por muitas iterações tentando encontrar o equilíbrio certo entre precisão e tamanho do arquivo. Enviar 8 modelos diferentes não foi... nada inteligente.
    • Limites de similaridade - Demorou uma eternidade para ajustá-los corretamente. Muito rígidos e nada combina, muito soltos e tudo combina.
    • Criar automação - Configurar o pipeline de geração de incorporação para ser executado durante as compilações foi mais complicado do que o esperado.

Se eu estivesse começando de novo

    • Pense no tamanho do aplicativo desde o primeiro dia - Não envie aplicativos de 800 MB, as pessoas não farão download deles
    • Teste seu modelo de incorporação em escala - O que funciona para 50 plantas pode não funcionar para 5000
    • O Couchbase Vector Search é seu amigo - Não reinvente a correspondência de similaridade de vetores
    • Otimização do tempo de construção > otimização do tempo de execução - Faça o trabalho pesado durante as compilações, não quando os usuários estiverem esperando
    • Os dados reais revelam tudo - Seu algoritmo pode funcionar perfeitamente em imagens de teste selecionadas e falhar completamente em fotos reais de usuários

O que vem a seguir?

    • Expansão para mais espécies de plantas
    • Adição de lembretes de cuidados com a planta e acompanhamento do progresso
    • Recursos comunitários para compartilhamento de plantas

Concluindo

A criação do PlantPal acabou sendo muito mais educativa do que eu esperava. Entrei pensando "quão difícil pode ser a identificação de plantas?" e saí com um profundo conhecimento sobre bancos de dados vetoriais, modelos de incorporação e a arte da otimização móvel.

A parte mais legal? Agora posso apontar meu telefone para literalmente qualquer planta e saber instantaneamente o que ela é e como cuidar dela. Sem necessidade de internet, sem preocupações com privacidade, apenas pura magia local.

Do que mais me orgulho:

    • Passando de uma monstruosidade de 800 MB para um aplicativo elegante de 14 MB
    • Obtenção de respostas instantâneas com pré-computação inteligente
    • Criar algo que realmente funcione de forma confiável no mundo real
    • Provando que a IA complexa não precisa de servidores em nuvem

A pesquisa vetorial acabou sendo o ponto ideal entre simplicidade e potência. O Couchbase tornou tudo muito mais fácil do que eu imaginava - poder usar SQL para operações vetoriais é quase como uma trapaça.

Se estiver pensando em criar algo semelhante, comece aos poucos e repita. Minha primeira versão era terrível, mas cada iteração me ensinou algo novo. E, definitivamente, não envie um aplicativo de 800 MB em sua primeira tentativa. Confie em mim.


Você já criou alguma coisa com a pesquisa vetorial? Gostaria muito de ouvir sobre isso! E se você tentar criar seu próprio aplicativo de identificação de plantas, entre em contato comigo - sempre fico curioso para ver o que outras pessoas criam.

Recursos:

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Pulkit Midha - Desenvolvedor Evangelista

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.