Documentos relevantes retornados pelo retriever

Home Fóruns Domine LLMs com LangChain Documentos relevantes retornados pelo retriever

Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #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?

    #48407
    Gabriel Alves
    Moderador

      Olá 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.

    Visualizando 2 posts - 1 até 2 (de 2 do total)
    • Você deve fazer login para responder a este tópico.