Ir para o conteúdo principal
Saúde e ciências da vida

Una seus dados de pacientes com RAG Multimodal

Entenda como usar o AI Search da Databricks com embeddings multimodais para aprimorar seus aplicativos RAG com capacidades multimodais

por Austin Choi e Jordan Soldo

  • Superpoderes Cross-Modal: Modelos de embedding multimodais permitem que você pesquise entre diferentes modalidades usando consultas de texto sem tags ou metadados, colocando diferentes tipos de dados em um espaço semântico compartilhado.
  • Crie, Pesquise, Implante: Aprenda a criar um sistema RAG multimodal completo na Databricks convertendo imagens em embeddings, armazenando-os em tabelas Delta e habilitando buscas de similaridade poderosas com AI Search.
  • Conexões de Conteúdo Contínuas: Aprimore seus aplicativos RAG preenchendo a lacuna entre as modalidades, tornando até mesmo documentos complexos como PDFs com tipos de conteúdo mistos totalmente pesquisáveis e contextualmente relevantes.

Introdução: Dados Diversos Habilitam IA

A recuperação multimodal representa um desafio significativo nos sistemas modernos de IA. Sistemas de recuperação tradicionais lutam para pesquisar efetivamente entre diferentes tipos de dados sem metadados ou marcações extensivas. Isso é particularmente problemático para empresas de saúde que gerenciam grandes volumes de conteúdo diverso, incluindo texto, imagens, áudio e mais, muitas vezes resultando em fontes de dados não estruturadas.

Uma imagem comparando dados não estruturados e estruturados.
Figura 1: Essas fontes não se comunicam bem entre si, especialmente se originadas de sistemas diferentes

Qualquer pessoa que trabalhe na área da saúde entende a dificuldade de mesclar dados não estruturados com dados estruturados. Um exemplo comum disso é a documentação clínica, onde notas clínicas manuscritas ou resumos de alta de pacientes são frequentemente submetidos em PDFs, imagens e formatos semelhantes. Isso precisa ser convertido manualmente ou processado usando Reconhecimento Óptico de Caracteres (OCR) para encontrar as informações necessárias. Mesmo após essa etapa, você precisa mapear os dados aos seus dados estruturados existentes para utilizá-los de forma eficaz.

Para este blog, revisaremos o seguinte:

  1. Como carregar modelos multimodais de código aberto para Databricks
  2. Usar o modelo de código aberto para gerar embeddings em dados não estruturados
  3. Armazenar esses embeddings em um índice de busca vetorial (AWS | Azure | GCP)
  4. Usar Genie Spaces (AWS | Azure | GCP) para consultar nossos dados estruturados
  5. Usar DSPy para criar um agente de chamada multi-ferramenta que usa o Genie Space e o AI Search Index para responder à entrada

Ao final deste blog, você verá como os embeddings multimodais possibilitam o seguinte para a área da saúde:

  1. Dados mais diversos usando tudo em um PDF, não apenas o texto
  2. A flexibilidade de usar qualquer dado em conjunto. Na área da saúde, isso é especialmente valioso, pois você pode não saber com que tipo de dados precisará trabalhar
  3. Unificação de dados por meio de um Agente, permitindo uma resposta mais abrangente
Uma ideia conceitual de como seus dados podem ser unificados por meio de Agentes e Embeddings Multimodais
Figura 2: Uma ideia conceitual de como seus dados podem ser unificados por meio de Agentes e Embeddings Multimodais

O que é um Embedding?

Um espaço de embedding (AWS | Azure | GCP) é uma representação matemática n-dimensional de registros que permite que uma ou mais modalidades de dados sejam armazenadas como vetores de números de ponto flutuante. O que torna isso útil é que, em um espaço de embedding bem construído, registros de significado semelhante ocupam um espaço semelhante. Por exemplo, imagine que tivéssemos uma foto de um cavalo, a palavra “caminhão” e uma gravação de áudio de um cachorro latindo. Passamos esses três pontos de dados completamente diferentes em nosso modelo de embedding multimodal e obtemos o seguinte:

  • Foto de cavalo: [0.92, 0.59, 0.17]
  • “Caminhão”: [0.19, 0.93, 0.81]
  • Latido de cachorro: [0.94, 0.11, 0.86]

Aqui está uma representação visual de onde os números existiriam em um espaço de embedding:

Uma representação 2D de pontos de dados de alta dimensão em um espaço de embedding.

Na prática, as dimensões do espaço de embedding estarão na casa das centenas ou milhares, mas para ilustração, vamos usar um espaço de 3 dimensões. Podemos imaginar que a primeira posição nesses vetores representa “animalidade”, a segunda é “transporte” e a terceira é “barulhento”. Isso faria sentido dadas as embeddings, mas normalmente não sabemos o que cada dimensão representa. O importante é que elas representam o significado semântico dos registros.

Existem várias maneiras de criar um espaço de embedding multimodal, incluindo treinar múltiplos codificadores simultaneamente (como CLIP), usar mecanismos de atenção cruzada (como DALL-E) ou usar vários métodos de alinhamento pós-treinamento. Esses métodos permitem que o significado do registro transcenda a modalidade original e ocupe um espaço compartilhado com outros registros ou formatos díspares.

Esse espaço semântico compartilhado é o que permite recursos poderosos de busca cross-modal. Quando uma consulta de texto e uma imagem compartilham representações vetoriais semelhantes, elas provavelmente compartilham significados semânticos semelhantes, permitindo-nos encontrar imagens relevantes com base em descrições textuais sem tags ou metadados explícitos.

Modelos de Embedding Multimodal: Compartilhando Espaços de Embedding

Para implementar efetivamente a busca multimodal, precisamos de modelos que possam gerar embeddings para diferentes tipos de dados dentro de um espaço vetorial compartilhado. Esses modelos são projetados especificamente para entender as relações entre diferentes modalidades e representá-las em um espaço matemático unificado.

Vários modelos poderosos de embedding multimodal estão disponíveis a partir de junho de 2025:

  • Multimodal Embed 4 da Cohere: Um modelo versátil que se destaca na geração de embeddings para dados de texto e imagem com alta precisão e desempenho.
  • Nomic-Embed: Oferece fortes capacidades para gerar embeddings de vários tipos de dados em um espaço unificado. É um dos poucos modelos totalmente de código aberto.
  • Meta ImageBind: Um modelo impressionante que pode lidar com seis modalidades diferentes, incluindo imagens, texto, áudio, profundidade, térmico e dados IMU.
  • CLIP (Contrastive Language-Image pretraining): Desenvolvido pela OpenAI, o CLIP é treinado em uma ampla gama de pares de imagem-texto e pode efetivamente preencher a lacuna entre dados visuais e textuais.

Principais Considerações Arquitetônicas

Na Databricks, fornecemos a infraestrutura e as ferramentas para hospedar, avaliar e desenvolver uma solução ponta a ponta, personalizável ao seu caso de uso. Considere os seguintes cenários ao começar a implantar este caso de uso:

Escalabilidade e Desempenho

  • As opções de processamento devem ser selecionadas com base no tamanho do conjunto de dados: processamento em memória para conjuntos de dados menores ou trabalho de desenvolvimento, versus Model Serving (AWS | Azure | GCP) para cargas de trabalho de produção que exigem alta taxa de transferência
  • Endpoints Databricks Vector Storage Otimizados vs. Endpoints Padrão (AWS | Azure | GCP). Se você tem muitos vetores, considere os otimizados para armazenamento para guardar mais vetores (cerca de 250M+)

Considerações de Custo

  • Para implementações em larga escala, servir modelos de embedding e usar AI Query (AWS | Azure | GCP) para inferência em lote é mais eficiente do que o processamento em memória.
  • Determine se você precisa de uma atualização acionada ou contínua para seu Índice de Busca Vetorial (AWS | Azure | GCP)
  • Novamente, considere Endpoints Otimizados para Armazenamento vs. Endpoints Padrão.
  • Você pode rastrear esses custos com o SKU de Inferência em Tempo Real Serverless
  • Considere usar Políticas de Orçamento (AWS | Azure | GCP) para garantir que você está rastreando com precisão seu consumo

Excelência Operacional

  • Use pipelines e fluxos de trabalho (AWS | Azure | GCP) e Databricks Asset Bundles (AWS | Azure | GCP) no Databricks para detectar alterações nos dados de origem e atualizar os embeddings de acordo
  • Use AI Search Delta Sync (AWS | Azure | GCP) para automatizar completamente a sincronização com seu índice, sem necessidade de gerenciar pipelines
  • O AI Search lida com falhas, novas tentativas e otimizações automaticamente para garantir a confiabilidade.

Considerações de Rede e Segurança

  • Use Perfis de Conformidade do Databricks (AWS | Azure | GCP) para conformidade com HIPAA em seu workspace
  • Use o Gerenciador de Segredos do Databricks ou Sistemas de Gerenciamento de Chaves para gerenciar seus segredos
  • Por favor, revise a explicação de confiança e segurança (AWS | Azure | GCP) em nossa documentação sobre como o Databricks lida com seus dados para serviços gerenciados de IA.

Detalhamento da Solução Técnica

Para a implementação completa desta solução, visite este repositório aqui: Link do Github

Este exemplo usará informações sintéticas de pacientes como nossos dados estruturados e exemplos de explicações de benefícios em formato PDF como nossos dados não estruturados. Primeiro, dados sintéticos são gerados para uso com um Genie Space. Em seguida, o modelo de embedding multimodal Nomic, um modelo de embedding multimodal open source de última geração, é carregado no Databricks Model Serving para gerar embeddings em exemplos de explicações de benefícios encontrados online.

Este processo parece complicado, mas o Databricks fornece ferramentas integradas que permitem uma solução completa e ponta a ponta. Em um nível geral, o processo se parece com o seguinte:

  1. Ingestão via Autoloader (AWS | Azure | GCP)
  2. ETL com Lakeflow Declarative Pipelines (AWS | Azure | GCP)
  3. Criação de Embeddings com modelos de embedding multimodais hospedados no Databricks
  4. Hospede os embeddings em um índice de Busca Vetorial (AWS | Azure | GCP)
  5. Servindo com Model Serving (AWS | Azure | GCP)
  6. Framework de Agente para proteger, implantar e governar o Agente

Criação do Genie Space

Este Genie Space será usado como uma ferramenta para converter linguagem natural em uma consulta SQL para consultar nossos dados estruturados.

Etapa 1: Gerar Dados Sintéticos de Pacientes

Neste exemplo, a biblioteca Faker será usada para gerar informações aleatórias de pacientes. Criaremos duas tabelas para diversificar nossos dados: Visitas de Pacientes e Locais de Consultório, com colunas como motivos da visita, provedores de seguro e tipos de seguro.

Passo 2: Crie um Espaço Genie de Informações do Paciente

Para consultar dados usando linguagem natural, podemos utilizar um Databricks Genie Space (AWS | Azure | GCP) para converter nossa consulta em linguagem natural e recuperar dados relevantes do paciente. Na interface do Databricks, basta clicar na aba Genie na barra esquerda → Novo → selecionar as tabelas patient_visits e practice_locations.

Usuários de negócios interagindo com dados usando linguagem natural em um espaço Genie.

Precisamos do ID do Espaço Genie para capturar o número que vem depois de rooms. Você pode ver um exemplo abaixo:

Passo 3: Crie a função que representará a Ferramenta Genie que nosso Agente usará.

Como estamos usando DSPy, tudo o que precisamos fazer é definir uma função Python.

É isso! Vamos configurar o fluxo de trabalho de Geração Multi-Modal agora.

Geração de Embedding Multi-Modal

Para esta etapa, usaremos o modelo totalmente aberto colNomic-embed-multimodal-7b no HuggingFace para gerar embeddings para nossos dados não estruturados, neste caso, PDFs. Selecionamos o modelo da Nomic devido à sua licença Apache 2.0 e alto desempenho em benchmarks.

O método para gerar seus embeddings variará dependendo do seu caso de uso e modalidade. Revise as Melhores Práticas de Busca Vetorial do Databricks (AWS | Azure | GCP) para entender o que é melhor para o seu caso de uso.

Passo 1: Carregue, Registre e Sirva o modelo no Databricks

Precisamos que este modelo esteja disponível dentro do Unity Catalog (UC) do Databricks, então usaremos o MLflow para carregá-lo do Huggingface e registrá-lo. Em seguida, podemos implantar o modelo em um endpoint de serviço de modelo.

O modelo Python inclui lógica adicional para lidar com entradas de imagem, que pode ser encontrada no repositório completo.

Volumes UC são projetados como sistemas de arquivos para hospedar qualquer arquivo e é onde armazenamos nossos dados não estruturados. Você pode usá-los no futuro para armazenar outros arquivos, como imagens, e repetir o processo conforme necessário. Isso inclui o modelo acima. No repositório, você verá que o cache se refere a um volume.

Passo 2: Carregue nossos PDFs em uma lista

Você terá uma pasta chamada sample_pdf_sbc contendo alguns resumos de benefícios e cobertura de exemplo. Precisamos preparar esses PDFs para incorporá-los.

Passo 3: Converta seus PDFs em Imagens para serem incorporados pelo modelo colNomic.

O modelo colNomic-embed-multimodal-7b é treinado especificamente para reconhecer texto e imagens dentro de uma imagem, uma entrada comum de PDFs. Isso permite que o modelo tenha um desempenho excepcionalmente bom na recuperação dessas páginas.

Este método permite que você utilize todo o conteúdo dentro de um PDF sem precisar de uma estratégia de divisão de texto para garantir que a recuperação funcione de forma eficaz. O próprio modelo pode incorporar essas imagens bem em seu próprio espaço de embedding.

Usaremos pdf2image para converter cada página do PDF em uma imagem, preparando-a para incorporação.

Passo 4: Gere os Embeddings

Agora que temos as imagens dos PDFs, podemos gerar os embeddings. Ao mesmo tempo, podemos salvar os embeddings em uma tabela Delta com colunas adicionais que recuperaremos juntamente com nossa Busca Vetorial, como o caminho do arquivo para a localização do Volume.

Etapa 5: Criar um Índice e um Endpoint de Pesquisa Vetorial

A criação de um índice de Pesquisa Vetorial pode ser feita pela interface do usuário ou pela API. O método da API é mostrado abaixo.

Agora, só precisamos juntar tudo com um Agente.

Unindo os Dados com DSPy

Usamos o DSPy para isso devido ao seu design declarativo e em Python puro. Ele nos permite iterar e desenvolver rapidamente, testando vários modelos para ver quais funcionarão melhor para nosso caso de uso. Mais importante ainda, a natureza declarativa nos permite modularizar nosso Agente para que possamos isolar a lógica do Agente das ferramentas e nos concentrar em definir COMO o agente deve realizar sua tarefa.

E a melhor parte? Sem engenharia manual de prompts!

Etapa 1: Definir suas dspy.Signatures

Essa assinatura especifica e impõe as entradas e saídas, ao mesmo tempo que explica como a assinatura deve funcionar.

Etapa 2: Adicionar sua assinatura a um dspy.module

O módulo receberá as instruções da assinatura e criará um prompt ideal para enviar ao LLM. Para este caso de uso específico, construiremos um módulo personalizado chamado `MultiModalPatientInsuranceAnalyzer()`.

Este módulo personalizado dividirá as assinaturas em etapas, quase como “encadear” chamadas, no método forward. Seguimos este processo:

  1. Pegue as assinaturas definidas acima e inicialize-as na classe
  2. Defina suas ferramentas. Elas só precisam ser uma função Python
    1. Para este post, você criará uma ferramenta de Pesquisa Vetorial e uma ferramenta Genie Space. Ambas as ferramentas usarão o SDK da Databricks para fazer uma chamada de API para esses serviços.
    2. Defina sua lógica no método forward. No nosso caso, sabemos que precisamos extrair palavras-chave, acessar o índice de Pesquisa Vetorial e, em seguida, passar tudo para a chamada final do LLM para obter uma resposta.

Etapa 3: Tudo pronto! Agora execute!

Revise quais ferramentas o Agente usou e o raciocínio que o Agente seguiu para responder à pergunta.

Próximas Etapas

Depois de ter um Agente funcionando, recomendamos o seguinte:

  1. Use os Agentes Personalizados do Agent Bricks para implantar seus agentes em endpoints de agente e gerenciá-los/versioná-los usando o Unity Catalog
  2. Use o Databricks Agent Eval Framework (AWS | Azure | GCP) para fazer avaliações e garantir que seus agentes estejam performando de acordo com suas expectativas

O framework de avaliação será crucial para entender a eficácia com que o índice AI Search recupera informações relevantes para seu agente RAG. Ao seguir essas métricas, você saberá onde fazer ajustes, desde a alteração do modelo de embedding até o ajuste dos prompts que interagem com o LLM.

Você também deve monitorar para ver se a API de Modelo Fundamental (AWS | Azure | GCP) é suficiente para seu caso de uso. Em certo ponto, você atingirá os limites da API para as APIs de Modelo Fundamental, então precisará fazer a transição para Provisioned Throughput (AWS | Azure | GCP) para ter um endpoint mais confiável para seu LLM.

Além disso, fique de olho em seus custos em relação ao serving de modelos serverless (AWS | Azure | GCP). A maioria desses custos se originará do SKU de serving de modelos serverless do Databricks e poderá crescer à medida que você escala.

Confira estes blogs para entender como fazer isso no Databricks.

Além disso, os Arquitetos de Soluções de Entrega (DSAs) da Databricks Delivery Solutions Architects (DSAs) ajudam a acelerar iniciativas de Dados e IA em organizações. Os DSAs fornecem liderança arquitetônica, otimizam plataformas para custo e desempenho, aprimoram a experiência do desenvolvedor e impulsionam a execução bem-sucedida de projetos. Eles preenchem a lacuna entre a implantação inicial e as soluções de nível de produção, trabalhando em estreita colaboração com várias equipes, incluindo engenharia de dados, líderes técnicos, executivos e outras partes interessadas para garantir soluções personalizadas e um tempo de valorização mais rápido. Entre em contato com sua Equipe de Conta Databricks para saber mais.


Comece construindo seu próprio aplicativo GenAI! Confira a documentação para começar.

No Databricks, você tem todas as ferramentas necessárias para desenvolver essa solução de ponta a ponta. Confira os blogs abaixo para saber mais sobre como gerenciar e trabalhar com seu novo Agente com os Agentes Personalizados do Agent Bricks.

(Esta publicação no blog foi traduzida utilizando ferramentas baseadas em inteligência artificial) Publicação original

Receba os posts mais recentes na sua caixa de entrada

Assine nosso blog e receba os posts mais recentes diretamente na sua caixa de entrada.