Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Faça como eu fiz: implementar embeddings

A implementação de embeddings começa pela conversão dos dados brutos em textos organizados, que depois são enviados a um modelo de embeddings, proprietário ou open source. Esse modelo transforma cada trecho de texto em um vetor numérico, capaz de representar semanticamente o conteúdo.

Após essa conversão, os vetores são armazenados em uma VectorStore, junto com o texto original e seus metadados. Isso permite que, quando uma pessoa usuária fizer uma pergunta, essa consulta também seja transformada em embedding e comparada com os vetores armazenados.

A comparação pode ser feita por meio de métricas como a similaridade de cosseno, que mede a proximidade entre os vetores. Quanto mais próximos semanticamente, maior a chance de aquele documento ser relevante para responder à pergunta.

A escolha entre embeddings pagos ou open source deve considerar fatores como custo, desempenho, facilidade de integração e sensibilidade dos dados. Em cenários corporativos com dados internos, sigilosos ou sensíveis, pode ser mais adequado utilizar modelos open source executados em ambiente controlado. Já em cenários com menor restrição de privacidade e necessidade de maior praticidade, modelos proprietários podem acelerar a implementação.

Por fim, é importante testar o sistema com diferentes tipos de consulta para validar se os trechos recuperados realmente correspondem ao contexto esperado, ajustando tamanho dos chunks, quantidade de resultados retornados e modelo de embeddings utilizado.

https://github.com/Moquiuti/Arquiteturas-RAG-com-LLMs-embeddings-busca-sem-ntica-e-cria-o-de-agentes-com-LangChain/blob/main/embeddings.ipynb

Para fixar o conceito, implementei um exemplo simples no Google Colab utilizando um modelo open source de embeddings. Criei uma pequena base de documentos simulando políticas de venda, garantia e suporte. Em seguida, converti esses textos em vetores e também transformei a pergunta do usuário em embedding.

Com os vetores gerados, utilizei similaridade de cosseno para comparar a consulta com os documentos armazenados. O objetivo foi validar se o sistema conseguia recuperar o trecho mais próximo semanticamente, mesmo quando a pergunta não utilizava exatamente as mesmas palavras do documento.

Esse teste ajudou a visualizar a base de uma arquitetura RAG: antes de o LLM gerar uma resposta, o sistema precisa conseguir localizar o contexto mais relevante por meio dos embeddings e da busca semântica.

2 respostas

Oi, Leandro! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

A aplicação prática de busca semântica com o modelo all-MiniLM-L6-v2 ficou excelente, pois demonstra claramente como a similaridade de cosseno identifica o contexto além das palavras exatas. Sua iniciativa de testar o sistema com perguntas sobre garantia e suporte é necessária para validar a eficácia da arquitetura RAG.

Uma dica interessante para o futuro é o uso do método argmax do NumPy, que ajuda a identificar rapidamente o índice do documento com a maior similaridade sem precisar ordenar toda a lista. Veja este exemplo:


import numpy as np
indice_top = np.argmax(similaridades)
print(f'Documento mais relevante: {documentos[indice_top]}')

O código acima utiliza a função argmax para encontrar a posição do maior valor numérico dentro de um array de similaridades, retornando o resultado mais assertivo.

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

Olá Rafaela, gostei da sugestão sobre o argmax, irei considerá-lo, obrigado!