Neste tutorial, usaremos o framework Ragas para avaliação de geração aumentada de recuperação (RAG) em Python usando LangChain.
RAG é uma técnica de processamento de linguagem natural (NLP) que combina recuperação de informações e modelos generativos para produzir respostas mais precisas, relevantes e contextualmente conscientes. Em tarefas tradicionais de geração de linguagem, os grandes modelos de linguagem (LLMs), como o GPT-4 (Generative Pre-trained Transformer) da OpenAI ou os modelos Granite da IBM, são usados para construir respostas com base em um prompt de entrada. Casos de uso comuns do mundo real desses grandes modelos de linguagem são chatbots. Esses modelos lutam para produzir respostas que sejam contextualmente relevantes, factualmente precisas ou atualizadas.
As aplicações de RAG lidam com essa limitação incorporando uma etapa de recuperação antes da geração da resposta. Durante a recuperação, fragmentos de texto adicionais relevantes para o prompt são extraídos de uma base de conhecimento, como documentos relevantes de um grande corpus de texto, normalmente armazenados em um banco de dados de vetores. Por fim, um LLM é usado para gerar respostas com base no prompt original ampliado com o contexto recuperado.
Há muitos frameworks de avaliação e métricas de avaliação diferentes da RAG. Além do Ragas, outros frameworks incluem o Unitxt da IBM e o Evals da OpenAI. Ao contrário dos outros frameworks, o Ragas usa outro LLM como juiz para avaliar o desempenho de um pipeline da RAG.
Existem várias métricas de avaliação disponíveis para medir o desempenho do nosso pipeline da RAG. As métricas que usaremos no framework de código aberto Ragas podem ser divididas em duas partes:
Essas métricas devem ser proxies subjetivos de quão bem um pipeline da RAG recupera informações relevantes de sua base de conhecimento para formar uma resposta. É importante observar que não há um ideal para dados, prompts ou LLMs. Mesmo o contexto que tem uma context_relevance de pontuação baixa não é necessariamente um contexto ruim. A pontuação baixa pode se deve a alguma quantidade de "ruído", ou informações menos relevantes, ou simplesmente porque a tarefa em si está aberta a múltiplas interpretações. O ruído também não é necessariamente ruim. Nós, como humanos, produzimos uma certa quantidade de ruído em nossas respostas, ao mesmo tempo em que somos inteligíveis ao responder perguntas.
Há também vieses que afetam a avaliação de um pipeline da RAG, como a preferência por respostas mais curtas ou mais longas, também conhecida como viés de comprimento. Esse tipo de viés pode levar a que uma resposta seja avaliada mais altamente do que outra devido ao seu comprimento e não à sua substância.
Por esses motivos, é uma melhor prática realizar várias avaliações. Este exercício pode ser realizado alterando o modelo de prompt, as métricas, a sequência de avaliação e muito mais do LLM. Se você estiver criando seu próprio conjunto de dados para o pipeline da RAG, também é recomendável usar modelos diferentes para o LLM que gera as respostas e o LLM que critica as respostas. Se o mesmo modelo é usado para ambos, há maior potencial para viés de autoavaliação. Como essas métricas são subjetivas, os resultados produzidos por esses frameworks também devem ser verificados por juízes humanos.
Neste tutorial, não criamos um sistema de RAG. Em vez disso, estamos usando o Ragas para avaliar a saída de um sistema de RAG criado anteriormente. Para obter mais informações sobre como construir seu sistema de RAG usando o LangChain, consulte nosso tutorial de RAG detalhado.
Você precisa de uma conta do IBM Cloud para criar um projeto do watsonx.ai . Inscreva-se para criar uma conta gratuita aqui.
Embora você possa escolher entre várias ferramentas, este tutorial explica como configurar uma conta da IBM para usar um Jupyter Notebook.
Faça login no watsonx.ai usando sua conta do IBM Cloud.
Criar um projeto do watsonx.ai.
Você pode obter a ID do projeto a partir de seu projeto. Clique na guia Gerenciar. Em seguida, copie a ID do projeto da seção Detalhes da páginaGeral. Você precisa dessa ID para este tutorial.
Crie um Jupyter Notebook.
Essa etapa abre um ambiente de bloco de notas onde é possível copiar o código deste tutorial para implementar sua própria avaliação da RAG. Ou então, você pode baixar esse Notebook em seu sistema local e carregá-lo como um ativo em seu projeto do watsonx.ai. Para ver mais tutoriais do Granite, consulte a Comunidade IBM Granite. Esse Jupyter Notebook também está disponível no GitHub.
Crie uma instância do serviço watsonx.ai Runtime (selecione a região apropriada e escolha o plano Lite, que é uma instância gratuita).
Gere uma chave de API.
Associe a instância do serviço do watsonx.ai Runtime ao projeto que você criou no watsonx.ai.
Precisamos de algumas bibliotecas e módulos para este tutorial. Certifique-se de importar os listados e, se não estiverem instalados, uma instalação rápida de pip resolve o problema. Este tutorial foi criado no Python 3.11.9.
Configure suas credenciais. Insira sua chave de API e a ID do projeto como strings. Dependendo da sua instância de serviço provisionada, use uma das regiões listadas como URL do watsonx:
A avaliação do Ragas requer um conjunto de dados contendo execuções de pipeline da RAG de vários prompts diferentes. Além das próprias perguntas, o conjunto de dados precisa conter as respostas esperadas conhecidas como "verdades fundamentais", as respostas produzidas pelo LLM e a lista de peças de contexto recuperadas pelo pipeline da RAG ao responder a cada pergunta. Você pode criar seu próprio conjunto de dados de ponta a ponta, mas para os fins deste tutorial, o conjunto de dados que estamos usando neste tutorial está disponível no Hugging Face. Vamos carregar o conjunto de dados.
Saída:
Os dados são carregados como um DatasetDict, e as funcionalidades que estamos interessados estão dentro da divisão "eval" .
Saídas:
Agora, carregue os dados em um dataframe do Pandas. Para ver um exemplo de uma entrada neste conjunto de dados, consulte a documentação do HuggingFace.
Os conjuntos de dados para avaliação da RAG podem ser criados de várias maneiras. Um elemento fundamental para a criação desse conjunto de dados foi a base de conhecimento externa fornecida a um LLM. Esse conhecimento pode ser obtido a partir de uma página da web coletada, um arquivo de texto básico, um documento importado e outros. Neste caso, são utilizados relatórios obtidos junto à Anistia Internacional. O conteúdo do conjunto de dados pode ter sido criado de ponta a ponta ou usando uma abordagem de geração de dados sintéticos, como o TestsetGenerator do Ragas. O uso do TestsetGenerator requer os documentos carregados, um LLM gerador, um LLM crítico e um modelo de embedding.
Por sua vez, a abordagem de ponta a ponta envolve várias etapas. Vamos supor que essa abordagem tenha sido usada para a criação deste conjunto de dados. Isso significa que um LLM ou um usuário humano armazenou as perguntas na coluna de perguntas. Para gerar as verdades básicas para cada pergunta, o usuário pode ter criado manualmente ou gerado usando um LLM com o modelo de prompt apropriado. Essas respostas são consideradas as respostas ideais e são armazenadas na coluna ground_truth. Por último, um pipeline da RAG foi usado para gerar as respostas vistas na coluna de respostas. Ao construir o pipeline da RAG, a base de conhecimento externa foi vetorizada. Em seguida, ao consultar o sistema de RAG, os fragmentos de texto relevantes que o LLM usou para gerar cada resposta foram obtidos do armazenamento de vetores usando um algoritmo de similaridade, como o algoritmo de recuperação top-k. Esses conjuntos de dados foram armazenados na coluna de contextos.
Neste tutorial, estamos usando um modelo IBM Granite como juiz.
O Ragas usa modelos de IA por padrão. O watsonxLLM é o wrapper para os modelos de base do IBM watsonx IA. Um wrapper WatsonxLLM compatível com o Ragas é um trabalho em andamento e ainda não está disponível. Por enquanto, para usar o Ragas com os modelos Granite, precisamos alterar as propriedades do wrapper.
Para este tutorial, sugerimos usar o IBM Granite-3.0-8B-Instruct como o LLM para alcançar resultados semelhantes. Você é livre para usar qualquer modelo de IA de sua escolha para comparar com esse benchmark e escolher o mais adequado para sua aplicação. Os modelos de base disponíveis no watsonx.ai podem ser encontrados aqui. O objetivo desses modelos nas aplicações de LLMs é servir como o mecanismo de raciocínio que decide quais ações adotar e respostas produzir. Para usar o wrapper WatsonxLLM com o Ragas, precisamos usar um LangchainLLMWrapper.
O modelo Granite é usado como modelo de avaliação. Não vamos usar um modelo para gerar nenhuma resposta porque as respostas já estão armazenadas na coluna de resposta do conjunto de dados.
O modelo de embedding que estamos usando é um modelo IBM Slate por meio de um wrapper watsonx.ai LangChain. Se nenhum modelo de embedding for definido, o Ragas usará os embeddings do OpenAI por padrão. O modelo de embeddings é essencial para a avaliação, pois é usado para incorporar os dados das colunas separadas para medir a distância entre eles.
Por fim, agora podemos executar a avaliação do Ragas no conjunto de dados. Aqui, passamos o conjunto de dados, as métricas para avaliação, o LLM e o embedding como parâmetros.
Se forem exibidas mensagens de aviso, desconsidere-as, permita que a avaliação seja concluída e imprima o resultado conforme mostrado.
Saída:
E isso é tudo. Uma avaliação do pipeline da RAG foi concluída. Conforme mencionado, você pode executar várias avaliações, experimentar modelos diferentes e alterar parâmetros. Quanto mais avaliações são realizadas, mais podemos avaliar de forma abrangente a precisão e a eficácia de um sistema LLM usando a RAG.
Neste tutorial, você usou o Ragas para avaliar seu pipeline da RAG. Sua saída incluiu as métricas context_precision , faithfulness , answer_relevancy e context_recall . O LLM utilizado para a avaliação foi um modelo IBM Granite, e o embedding utilizado foi um modelo IBM Slate acessado por meio da API de embeddings do watsonx.ai.
A avaliação realizada é importante, pois pode ser aplicada a futuros fluxos de trabalho de IA generativa para avaliar o desempenho de seus sistemas de RAG e melhorá-los.
Incentivamos você a verificar a página de documentação do Ragas para ter mais informações sobre as métricas e o processo de avaliação.
Treine, valide, ajuste e implemente recursos de IA generativa, modelos de base e recursos de aprendizado de máquina com o IBM watsonx.ai, um estúdio empresarial de última geração para construtores de IA. Crie aplicações de IA em uma fração do tempo com uma fração dos dados.
Use a IA a serviço de sua empresa com a experiência e o portfólio de soluções líder do setor da IBM à sua disposição.
Reinvente os fluxos de trabalho e operações críticos adicionando IA para maximizar experiências, tomadas de decisão em tempo real e valor de negócios.