1
resposta

[Dúvida] Associação Semântica dos Metadados

Olá,

Após a última aula, fiquei com uma dúvida com relação aos metadados adicionados no projeto de bulas dos medicamentos. Como funciona esse mecanismo de recuperação de informações com os chunks mais relevantes quando os metadados são adicionados a eles? Esses metadados também são transformados em embeddings juntamente com o conteúdo dos chunks? Ou a pergunta do usuário é convertida em embeddings e, antes mesmo de serem comparados aos chunks, são calculadas às similaridades com os embeddings dos metadados?

1 resposta

Ooi, Nelson! Que excelente observação sobre a arquitetura do seu projeto.

Pra esclarecer como esse mecanismo funciona na prática, vamos dividir o processo em partes:

O papel dos metadados vs. conteúdo do chunk

De forma direta: os metadados não costumam ser transformados em embeddings junto com o texto do chunk.

O processo de busca semântica tradicional funciona assim:

  1. Apenas o conteúdo textual (page_content) do seu chunk é enviado para o modelo da OpenAI (text-embedding-3-small) para gerar o vetor (embedding).
  2. O banco vetorial (Chroma) armazena esse vetor e vincula a ele um "dicionário" de metadados (como o nome do medicamento ou a categoria).
  3. Quando o usuário faz uma pergunta, ela é convertida em embedding e comparada apenas com os vetores do conteúdo textual.

Então, para que servem os metadados na busca?

Se eles não estão no "mapa matemático" (embedding), eles servem como filtros lógicos. Existem duas formas principais de usá-los para melhorar a recuperação:

  • Filtragem prévia ou posterior (Metadata Filtering): No seu código atual, você define search_kwargs={"k": 4}. Se você quisesse que o agente buscasse apenas na bula do Paracetamol, você passaria um filtro para o Chroma. O sistema primeiro descartaria tudo o que não é Paracetamol e, só depois, faria a comparação semântica entre a pergunta e os chunks restantes.
  • Contexto adicional para o LLM: Note que no seu código de teste, você imprime a categoria e o medicamento. Quando o RetrievalQA recupera os 4 chunks, ele entrega ao GPT-4 não apenas o texto, mas pode ser configurado para entregar os metadados também. Isso ajuda o modelo a não confundir uma instrução de dosagem da dipirona com a do paracetamol, pois ele "lê" a etiqueta do que está analisando.

Os metadados podem ser embutidos no vetor?

Embora não seja o padrão automático do LangChain, existe uma técnica chamada Self-Querying. Nela, usamos um LLM para transformar a pergunta do usuário em uma consulta estruturada.

Exemplo: Se o usuário pergunta "Qual a dose de paracetamol?", o Self-Querying percebe que "paracetamol" é um metadado de medicamento e "dose" remete à categoria posologia. Ele então faz uma busca vetorial filtrada especificamente por esses campos, o que torna o sistema muito mais preciso e seguro.

Em resumo

  1. Embeddings: Geralmente representam apenas o texto bruto.
  2. Metadados: Funcionam como etiquetas de organização que permitem filtrar a base de dados antes ou durante a busca, além de dar "consciência" ao LLM sobre a origem daquela informação.

No seu projeto, enriquecer os chunks com a categoria "contraindicação" ou "posologia" é o que permitirá, no futuro, que seu agente seja mais assertivo ao separar informações técnicas de orientações de uso.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!