Home › Fóruns › Domine LLMs com LangChain › Documentos relevantes retornados pelo retriever
- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 1 mês, 1 semana atrás por
Gabriel Alves.
- AutorPosts
- 5 de março de 2025 às 20:02 #48323
Sobre o projeto 03, durante o debug, percebi que o history_aware_retriever sempre retorna documentos, independentemente da pergunta do usuário estar ou não relacionada ao conteúdo do PDF. Gostaria de saber se é possível configurar o retriever para retornar apenas documentos que tenham real similaridade ou relevância com a pergunta.
Uma abordagem que considerei foi implementar um Agent e transformar o retriever em uma Tool, de forma que ele fosse acionado somente quando a pergunta estivesse relacionada ao conteúdo do documento. Essa seria uma boa estratégia ou existe outra abordagem recomendada?
7 de março de 2025 às 13:16 #48407Olá Michael!
O history_aware_retriever sempre retorna documentos porque seu comportamento padrão é recuperar informações mesmo que a similaridade com a consulta seja baixa, e como o objetivo do projeto é conversar com documentos então é esperado que sempre haja algum PDF para ser consultado como referência. Para filtrar apenas documentos realmente relevantes, você pode alterar parâmetros do search_kwargs do retriever: ajustar k (número de documentos retornados) e fetch_k (número de documentos inicialmente buscados) pode ajudar a filtrar melhor as respostas (por exemplo, diminuir k para 1 retornaria apenas o documento mais relevante). O código usa o método mmr para recuperação, mas você pode customizar os parâmetros para melhorar a relevância dos resultados. Você pode ainda testar outros métodos de busca, como similarity ou similarity_score_threshold, dependendo do comportamento desejado para o retriever.
Outra opção seria filtrar a resposta com base na pontuação de similaridade (score) que é obtida entre a pergunta e os documentos. Você poderia definir um limiar (threshold) de similaridade para filtrar apenas os documentos que tenham uma pontuação acima de um determinado valor.
Exemplo:
query = "A pergunta aqui..." docs_and_scores = faiss_index.similarity_search_with_score(query, k=5) threshold = 0.7 # ajuste conforme necessário relevant_docs = [doc for doc, score in docs_and_scores if score > threshold]
Quanto a transformar o retriever em uma Tool dentro de um Agent, isso pode ser uma abordagem válida, especialmente se você implementar um mecanismo de decisão que primeiro classifique a intenção da pergunta antes de buscar documentos. Outra alternativa seria adicionar um filtro semântico antes de exibir os resultados, como um reranker (ex: Cohere Rerank) ou um modelo de classificação treinado para validar se os documentos são realmente úteis para a consulta. Ou ainda, simplesmente pedir para a própria LLM classificar se é uma pergunta que deve ser consultada em arquivos ou não. Isso pode evitar buscas irrelevantes sem precisar modificar toda a estrutura do pipeline.
- AutorPosts
- Você deve fazer login para responder a este tópico.