Compartilhar via


Criar sistemas avançados de geração de recuperação aumentada

Este artigo explica a rag (geração aumentada por recuperação) e o que os desenvolvedores precisam para criar uma solução RAG pronta para produção.

Para saber mais sobre duas maneiras de criar um aplicativo de "chat sobre seus dados", um dos principais casos de uso de IA para empresas, consulte Aumentar LLMs com RAG ou ajuste fino.

O diagrama a seguir mostra as principais etapas do RAG:

Diagrama que ilustra um fluxo RAG simples, com caixas que representam etapas ou processos e setas conectando cada caixa.

Esse processo é chamado de RAG ingênuo. Ele ajuda você a entender as partes básicas e as funções em um sistema de chat baseado em RAG.

Os sistemas RAG do mundo real precisam de mais pré-processamento e pós-processamento para lidar com artigos, consultas e respostas. O próximo diagrama mostra uma configuração mais realista, chamada RAG avançado:

Diagrama que ilustra o fluxo rag avançado da lógica como uma série de caixas com setas entre elas.

Este artigo fornece uma estrutura simples para entender as principais fases em um sistema de chat baseado em RAG do mundo real:

  • Fase de ingestão
  • Fase do pipeline de inferência
  • Fase de avaliação

Ingestão

Ingestão significa salvar os documentos da sua organização para que você possa encontrar rapidamente respostas para os usuários. O principal desafio é localizar e usar as partes dos documentos que melhor correspondem a cada pergunta. A maioria dos sistemas usa inserções de vetor e pesquisa de similaridade de cosseno para corresponder perguntas ao conteúdo. Você obtém melhores resultados quando entende o tipo de conteúdo (como padrões e formato) e organiza bem seus dados no banco de dados vetor.

Ao configurar a ingestão, concentre-se nestas etapas:

  • Pré-processamento e extração de conteúdo
  • Estratégia de agrupamento
  • Organização em partes
  • Estratégia de atualização

Pré-processamento e extração de conteúdo

A primeira etapa na fase de ingestão é pré-processar e extrair o conteúdo de seus documentos. Essa etapa é crucial porque garante que o texto esteja limpo, estruturado e pronto para indexação e recuperação.

O conteúdo limpo e preciso faz com que um sistema de chat baseado em RAG funcione melhor. Comece examinando a forma e o estilo dos documentos que você deseja indexar. Eles seguem um padrão definido, como documentação? Caso contrário, quais perguntas esses documentos poderiam responder?

No mínimo, configure o pipeline de ingestão para:

  • Padronizar formatos de texto
  • Lidar com caracteres especiais
  • Remover conteúdo não relacionado ou antigo
  • Acompanhar diferentes versões de conteúdo
  • Manipular conteúdo com guias, imagens ou tabelas
  • Extrair metadados

Algumas dessas informações, como metadados, podem ajudar durante a recuperação e a avaliação se você mantê-la com o documento no banco de dados de vetor. Você também pode combiná-lo com a parte de texto para melhorar a inserção de vetor da parte.

Estratégia de agrupamento

Como desenvolvedor, decida como dividir documentos grandes em partes menores. O agrupamento ajuda a enviar o conteúdo mais relevante para a LLM para que ele possa responder melhor às perguntas do usuário. Além disso, pense em como você usará as partes depois de obtê-las. Experimente métodos comuns do setor e teste sua estratégia de agrupamento em sua organização.

Ao agrupar, pense em:

  • Otimização do tamanho da parte: escolha o melhor tamanho da parte e como dividi-la por seção, parágrafo ou frase.
  • Partes de janela sobrepostas e deslizantes: decida se as partes devem ser separadas ou sobrepostas. Você também pode usar uma abordagem de janela deslizante.
  • Small2Big: se você dividir por frase, organize o conteúdo para encontrar frases próximas ou o parágrafo completo. Dar esse contexto extra ao LLM pode ajudá-lo a responder melhor. Para obter mais informações, consulte a próxima seção.

Organização em partes

Em um sistema RAG, a forma como você organiza seus dados no banco de dados vetor torna mais fácil e rápido encontrar as informações certas. Aqui estão algumas maneiras de configurar seus índices e pesquisas:

  • Índices hierárquicos: use camadas de índices. Um índice de resumo de nível superior localiza rapidamente um pequeno conjunto de partes prováveis. Um índice de segundo nível aponta para os dados exatos. Essa configuração acelera as pesquisas restringindo as opções antes de examinar detalhadamente.
  • Índices especializados: escolha índices que se ajustem aos seus dados. Por exemplo, use índices baseados em grafo se suas partes se conectarem entre si, como em redes de citação ou grafos de conhecimento. Use bancos de dados relacionais se os dados estiverem em tabelas e filtre com consultas SQL.
  • Índices híbridos: combinar diferentes métodos de indexação. Por exemplo, use primeiro um índice de resumo e, em seguida, um índice baseado em grafo para explorar conexões entre partes.

Otimização de alinhamento

Torne as partes recuperadas mais relevantes e precisas, correspondendo-as aos tipos de perguntas que elas respondem. Uma maneira é criar uma pergunta de exemplo para cada parte que mostra qual pergunta ela responde melhor. Essa abordagem ajuda de várias maneiras:

  • Correspondência aprimorada: durante a recuperação, o sistema compara a pergunta do usuário com essas perguntas de exemplo para encontrar a melhor parte. Essa técnica melhora a relevância dos resultados.
  • Dados de treinamento para modelos de machine learning: esses pares de blocos de perguntas ajudam a treinar os modelos de machine learning no sistema RAG. Os modelos aprendem quais partes respondem quais tipos de perguntas.
  • Tratamento de consulta direta: se a pergunta de um usuário corresponder a uma pergunta de exemplo, o sistema poderá localizar e usar rapidamente a parte certa, acelerando a resposta.

A pergunta de exemplo de cada parte atua como um rótulo que orienta o algoritmo de recuperação. A pesquisa se torna mais focada e consciente do contexto. Esse método funciona bem quando partes abrangem vários tópicos ou tipos de informações diferentes.

Estratégias de atualização

Se sua organização atualizar documentos com frequência, você precisará manter seu banco de dados atualizado para que o recuperador sempre possa encontrar as informações mais recentes. O componente retriever é a parte do sistema que pesquisa o banco de dados vetor e retorna resultados. Aqui estão algumas maneiras de manter seu banco de dados vetor atualizado:

  • Atualizações incrementais

    • Intervalos regulares: defina as atualizações para serem executadas em um agendamento (como diário ou semanal) com base na frequência com que os documentos são alterados. Essa ação mantém o banco de dados atualizado.
    • Atualizações baseadas em gatilho: configurar atualizações automáticas quando alguém adicionar ou alterar um documento. O sistema reinicializa apenas as partes afetadas.
  • atualizações parciais:

    • Reindexação seletiva: atualize apenas as partes do banco de dados que foram alteradas, não a coisa toda. Essa técnica economiza tempo e recursos, especialmente para grandes conjuntos de dados.
    • Codificação delta: armazene apenas as alterações entre documentos antigos e novos, o que reduz a quantidade de dados a serem processados.
  • Controle de versão.

    • Instantâneo: salve as versões do seu conjunto de documentos em horários diferentes. Essa ação permite que você volte ou restaure versões anteriores, se necessário.
    • Controle de versão do documento: use um sistema de controle de versão para controlar as alterações e manter um histórico de seus documentos.
  • Atualizações em tempo real

    • Processamento de fluxo: use o processamento de fluxo para atualizar o banco de dados de vetor em tempo real à medida que os documentos são alterados.
    • Consulta ao vivo: use consultas dinâmicas para obter respostas up-to-date, às vezes misturando dados dinâmicos com resultados armazenados em cache para obter velocidade.
  • técnicas de otimização :

    • Processamento em lote: agrupe as alterações e aplique-as juntas para salvar recursos e reduzir a sobrecarga.
    • Abordagens híbridas: misturar estratégias diferentes:
      • Use atualizações incrementais para pequenas alterações.
      • Use a reindexação completa para atualizações significativas.
      • Acompanhe e documente as principais alterações em seus dados.

Escolha a estratégia de atualização ou a combinação que atenda às suas necessidades. Pense em:

  • Tamanho do corpus do documento
  • Frequência de atualização
  • Necessidades de dados em tempo real
  • Recursos disponíveis

Examine esses fatores para seu aplicativo. Cada método tem compensações na complexidade, no custo e na rapidez com que as atualizações são exibidas.

Pipeline de inferência

Seus artigos agora são agrupados, vetoriais e armazenados em um banco de dados de vetor. Em seguida, concentre-se em obter as melhores respostas do seu sistema.

Para obter resultados precisos e rápidos, pense nessas principais perguntas:

  • A pergunta do usuário é clara e provavelmente obterá a resposta certa?
  • A pergunta quebra alguma regra da empresa?
  • Você pode reescrever a pergunta para ajudar o sistema a encontrar correspondências melhores?
  • Os resultados do banco de dados correspondem à pergunta?
  • Você deve alterar os resultados antes de enviá-los para o LLM para verificar se a resposta é relevante?
  • A resposta da LLM aborda totalmente a pergunta do usuário?
  • A resposta segue as regras da sua organização?

Todo o pipeline de inferência funciona em tempo real. Não há uma única maneira correta de configurar suas etapas de pré-processamento e pós-processamento. Você usa uma combinação de chamadas llm e código. Uma das maiores compensações é equilibrar a precisão e a conformidade com o custo e a velocidade.

Vamos examinar estratégias para cada estágio do pipeline de inferência.

Etapas de pré-processamento de consulta

O pré-processamento de consulta é iniciado logo após o usuário enviar uma pergunta:

Diagrama que repete as etapas avançadas do RAG, com ênfase nas etapas de processamento de consulta rotuladas por caixa.

Essas etapas ajudam a garantir que a pergunta do usuário se ajuste ao seu sistema e esteja pronta para encontrar as melhores partes de artigo usando a similaridade cosseno ou a pesquisa "vizinho mais próximo".

Verificação de política: use a lógica para detectar e remover ou sinalizar conteúdo indesejado, como dados pessoais, linguagem incorreta ou tentativas de violar regras de segurança (chamada de "jailbreaking").

Reescrita de consulta: altere a pergunta, se necessário, expanda acrônimos, remova gírias ou retraia-a para se concentrar em ideias maiores (solicitação de retrocesso).

Uma versão especial da solicitação de step-back é HyDE (Hipotéticos Document Embeddings). O HyDE tem o LLM que responde à pergunta, faz uma inserção a partir dessa resposta e, em seguida, pesquisa o banco de dados vetor com ele.

Subconsultas

As subconsultas dividem uma pergunta longa ou complexa em perguntas menores e mais fáceis. O sistema responde a cada pergunta pequena e combina as respostas.

Por exemplo, se alguém perguntar: "Quem fez contribuições mais importantes para a física moderna, Albert Einstein ou Niels Bohr?" você pode dividi-la em:

  • Subconsulta 1: "O que Albert Einstein contribuiu para a física moderna?"
  • Subconsulta 2: "O que Niels Bohr contribuiu para a física moderna?"

As respostas podem incluir:

  • Para Einstein: a teoria da relatividade, o efeito fotoelétrico e E=mc^2.
  • Para Bohr: o modelo de átomo de hidrogênio, trabalhar na mecânica quântica e o princípio da complementaridade.

Em seguida, você pode fazer perguntas de acompanhamento:

  • Subconsulta 3: "Como as teorias de Einstein mudaram a física moderna?"
  • Subconsulta 4: "Como as teorias de Bohr mudaram a física moderna?"

Esses acompanhamentos analisam o efeito de cada cientista, como:

  • Como o trabalho de Einstein levou a novas idéias em cosmologia e teoria quântica
  • Como o trabalho de Bohr nos ajudou a entender os átomos e a mecânica quântica

O sistema combina as respostas para dar uma resposta completa à pergunta original. Esse método facilita a resposta de perguntas complexas dividindo-as em partes claras e menores.

Roteador de consulta

Às vezes, seu conteúdo reside em vários bancos de dados ou sistemas de pesquisa. Nesses casos, use um roteador de consulta. Um roteador de consulta escolhe o melhor banco de dados ou índice para responder a cada pergunta.

Um roteador de consulta funciona depois que o usuário faz uma pergunta, mas antes que o sistema pesquise respostas.

Veja como funciona um roteador de consulta:

  1. Análise de consulta: a LLM ou outra ferramenta analisa a pergunta para descobrir que tipo de resposta é necessária.
  2. Seleção de índice: o roteador escolhe um ou mais índices que se encaixam na pergunta. Alguns índices são melhores para fatos, outros para opiniões ou tópicos especiais.
  3. Expedição de consulta: o roteador envia a pergunta para o índice ou índices escolhidos.
  4. Agregação de resultados: o sistema coleta e combina as respostas dos índices.
  5. Geração de respostas: o sistema cria uma resposta clara usando as informações encontradas.

Use índices ou mecanismos de pesquisa diferentes para:

  • Especialização de tipo de dados: alguns índices se concentram em notícias, outros em artigos acadêmicos ou em bancos de dados especiais, como informações médicas ou legais.
  • Otimização de tipo de consulta: alguns índices são rápidos para fatos simples (como datas), enquanto outros lidam com perguntas complexas ou de especialistas.
  • Diferenças algorítmicas: diferentes mecanismos de pesquisa usam métodos diferentes, como pesquisa de vetor, pesquisa de palavra-chave ou pesquisa semântica avançada.

Por exemplo, em um sistema de aconselhamento médico, você pode ter:

  • Um índice de artigo de pesquisa para detalhes técnicos
  • Um índice de estudo de caso para exemplos do mundo real
  • Um índice de integridade geral para perguntas básicas

Se alguém perguntar sobre os efeitos de uma nova droga, o roteador enviará a pergunta ao índice do artigo de pesquisa. Se a pergunta for sobre sintomas comuns, ela usará o índice de saúde geral para uma resposta simples.

Etapas de processamento pós-recuperação

O processamento pós-recuperação ocorre depois que o sistema localiza partes de conteúdo no banco de dados de vetor:

Diagrama que repete as etapas avançadas do RAG, com ênfase na caixa rotulada com as etapas de processamento pós-recuperação.

Em seguida, verifique se essas partes são úteis para o prompt llm antes de enviá-las para a LLM.

Lembre-se do seguinte:

  • Informações extras podem ocultar os detalhes mais importantes.
  • Informações irrelevantes podem piorar a resposta.

Cuidado com a agulha em um problema de palheiro : as LLMs muitas vezes prestam mais atenção ao início e ao fim de um prompt do que ao meio.

Além disso, lembre-se da janela de contexto máximo da LLM e do número de tokens necessários para prompts longos, especialmente em escala.

Para lidar com esses problemas, use um pipeline de processamento pós-recuperação com etapas como:

  • Filtrando os resultados: mantenha apenas partes que correspondam à consulta. Ignore o restante ao compilar o prompt llm.
  • Rees classificação: coloque as partes mais relevantes no início e no final do prompt.
  • Compactação de prompt: use um modelo pequeno e barato para resumir e combinar partes em um único prompt antes de enviá-lo para a LLM.

Etapas de processamento pós-conclusão

O processamento pós-conclusão ocorre após a pergunta do usuário e todas as partes de conteúdo vão para a LLM:

Diagrama que repete as etapas avançadas do RAG, com ênfase nas etapas de processamento pós-conclusão rotuladas na caixa.

Depois que o LLM fornecer uma resposta, verifique sua precisão. Um pipeline de processamento pós-conclusão pode incluir:

  • Verificação de fatos: procure instruções na resposta que afirmam ser fatos e, em seguida, verifique se são verdadeiras. Se uma verificação de fatos falhar, você poderá perguntar à LLM novamente ou mostrar uma mensagem de erro.
  • Verificação de política: verifique se a resposta não inclui conteúdo prejudicial para o usuário ou sua organização.

Avaliação

Avaliar um sistema como esse é mais complexo do que executar testes regulares de unidade ou integração. Pense nessas perguntas:

  • Os usuários estão satisfeitos com as respostas?
  • As respostas são precisas?
  • Como você coleta comentários do usuário?
  • Há regras sobre quais dados você pode coletar?
  • Você pode ver cada etapa que o sistema deu quando as respostas estão erradas?
  • Você mantém logs detalhados para análise de causa raiz?
  • Como você atualiza o sistema sem piorar as coisas?

Capturando e agindo de acordo com o feedback dos usuários

Trabalhe com a equipe de privacidade da sua organização para criar ferramentas de captura de comentários, dados do sistema e log para análise de causa forense e raiz de uma sessão de consulta.

A próxima etapa é criar um pipeline de avaliação. Um pipeline de avaliação torna mais fácil e rápido revisar os comentários e descobrir por que a IA deu determinadas respostas. Verifique cada resposta para ver como a IA a produziu, se as partes de conteúdo certas foram usadas e como os documentos foram divididos.

Além disso, procure etapas extras de pré-processamento ou pós-processamento que possam melhorar os resultados. Essa análise detalhada geralmente encontra lacunas de conteúdo, especialmente quando não existe uma boa documentação para a pergunta de um usuário.

Você precisa de um pipeline de avaliação para lidar com essas tarefas em escala. Um bom pipeline usa ferramentas personalizadas para medir a qualidade da resposta. Ele ajuda você a ver por que a IA deu uma resposta específica, quais documentos ele usou e quão bem o pipeline de inferência funcionou.

Conjunto de dados dourado

Uma maneira de verificar o funcionamento de um sistema de chat RAG é usar um conjunto de dados dourado. Um conjunto de dados dourado é um conjunto de perguntas com respostas aprovadas, metadados úteis (como tópico e tipo de pergunta), links para documentos de origem e maneiras diferentes de os usuários perguntarem a mesma coisa.

Um conjunto de dados dourado mostra o "melhor cenário de caso". Os desenvolvedores o usam para ver o funcionamento do sistema e executar testes quando adicionam novos recursos ou atualizações.

Avaliação dos danos

A modelagem de danos ajuda você a detectar possíveis riscos em um produto e planejar maneiras de reduzi-los.

Uma ferramenta de avaliação de danos deve incluir estes principais recursos:

  • Identificação de partes interessadas: ajuda você a listar e agrupar todos os afetados pela tecnologia, incluindo usuários diretos, pessoas afetadas indiretamente, gerações futuras e até mesmo o ambiente.
  • Categorias e descrições de danos: lista possíveis danos, como perda de privacidade, sofrimento emocional ou danos econômicos. Orienta você pelos exemplos e ajuda você a pensar em problemas esperados e inesperados.
  • Avaliações de gravidade e probabilidade: ajuda você a julgar o quão sério e provável é cada dano, para que você possa decidir o que corrigir primeiro. Você pode usar dados para dar suporte às suas escolhas.
  • Estratégias de mitigação: sugere maneiras de reduzir riscos, como alterar o design do sistema, adicionar proteções ou usar outra tecnologia.
  • Mecanismos de comentários: permite coletar comentários dos stakeholders para que você possa continuar melhorando o processo conforme aprender mais.
  • Documentação e relatórios: facilita a criação de relatórios que mostram o que você encontrou e o que você fez para reduzir os riscos.

Esses recursos ajudam você a encontrar e corrigir riscos e também ajudam você a criar IA mais ética e responsável pensando em todos os possíveis impactos desde o início.

Para obter mais informações, consulte estes artigos:

Testar e verificar as salvaguardas

O agrupamento vermelho é fundamental, significa agir como um invasor para encontrar pontos fracos no sistema. Esta etapa é especialmente importante para parar a fuga da prisão. Para obter dicas sobre como planejar e gerenciar o agrupamento vermelho para IA responsável, consulte Planejamento de agrupamento vermelho para LLMs (modelos de linguagem grande) e seus aplicativos.

Os desenvolvedores devem testar as proteções do sistema RAG em diferentes cenários para garantir que eles funcionem. Essa etapa torna o sistema mais forte e também ajuda a ajustar as respostas para seguir padrões éticos e regras.

Considerações finais para o design do aplicativo

Aqui estão algumas coisas importantes a serem lembradas deste artigo que podem ajudá-lo a projetar seu aplicativo:

  • Imprevisibilidade de IA generativa
  • O usuário solicita alterações e seu efeito sobre o tempo e o custo
  • Solicitações de LLM paralelas para um desempenho mais rápido

Para criar um aplicativo de IA generativo, confira Introdução ao chat usando seu próprio exemplo de dados para Python. O tutorial também está disponível para .NET, Javae javaScript.