-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Um embedding é basicamente uma representação matemática de um texto, imagem ou outro dado, feita de forma que o significado (semântico) do conteúdo seja preservado — mas transformado em números que o computador consegue comparar e processar rapidamente.
Palavras e frases não têm “número” naturalmente.
Para a IA conseguir buscar, comparar e encontrar conteúdo parecido, ela precisa converter isso para um formato matemático — um vetor.
Esse vetor é um embedding: uma lista de números (geralmente entre -1 e 1) que captura o “sentido” do conteúdo.
Você dá um texto, por exemplo:
"ventilação natural"O modelo de embeddings (como all-MiniLM-L6-v2 que você está usando) processa esse texto e devolve algo assim:
[0.12, -0.53, 0.87, ..., -0.05] # Pode ter 384, 768 ou até milhares de dimensõesTextos com significado parecido terão vetores próximos no espaço matemático.
"ventilação natural" e "entrada de ar" → vetores próximos
"ventilação natural" e "compressor scroll" → vetores distantes
-
Quando o usuário faz uma pergunta, você gera um embedding dessa pergunta.
-
Busca no seu banco vetorial (Chroma) os chunks cujo embedding é mais próximo.
-
Isso traz só o conteúdo semântico relevante para responder, mesmo que as palavras não sejam exatamente iguais.
-
O que é: vetor numérico que representa o significado de um conteúdo.
-
Pra que serve: comparar e buscar por similaridade sem depender só de palavras exatas.
-
Por que importa pra você: é a base do RAG — sem embeddings, seu chatbot não saberia quais partes do PDF buscar.
O Chroma é um banco de dados vetorial (vector database) — ou seja, um sistema feito para armazenar embeddings e permitir buscas rápidas por similaridade entre eles.
Nesse caso, ele é o lugar onde você guarda o “conhecimento” do chatbot em forma de vetores.
-
Recebe documentos (ou resumos deles).
-
Converte cada parte do documento em um embedding (lista de números).
-
Armazena esses embeddings junto com metadados (nome do arquivo, página, tipo — texto, imagem, tabela etc.).
-
Na busca, você passa um novo embedding (da pergunta do usuário), e ele devolve os embeddings mais próximos no espaço vetorial.
No seu código, por exemplo:
vectorstore = Chroma(collection_name="multi_modal_rag", embedding_function=embedding_function)Você está dizendo:
Quero um banco vetorial chamado "multi_modal_rag"
Ele vai usar essa função embedding_function (no seu caso HuggingFaceEmbeddings) para transformar textos em vetores.
Quando o usuário perguntar:
"Qual a norma NBR para ventilação em cozinhas?"O fluxo será:
-
Criar o embedding dessa pergunta.
-
O Chroma procura no seu banco vetorial os embeddings mais próximos.
-
Retorna os trechos do PDF que mais se parecem semanticamente com a pergunta.
-
Esses trechos são passados para o modelo (Groq LLaMA, por exemplo) junto com a pergunta.
-
O modelo responde com base só nesses trechos.
-
Gratuito e open source
-
Fácil de integrar com LangChain
-
Funciona em memória ou com persistência em disco (persist_directory)
-
Rápido para coleções pequenas e médias
-
Aceita texto, imagens (via metadados) e outros formatos