Este diagrama mostra claramente o projeto arquitetônico de um sistema moderno e complexo de Resposta a Perguntas (QA) ou Geração Aumentada por Recuperação (RAG). Ele começa com um usuário fazendo uma pergunta e continua até a geração final de uma resposta, mostrando em detalhes as principais etapas e as opções de tecnologia entre elas. Podemos decompor todo o processo nos seguintes estágios principais:
1, construção da consulta (Construção da consulta)
Essa é a primeira etapa da interação do usuário com o sistema e o ponto de partida para que o sistema entenda a intenção do usuário. A imagem mostra como as consultas são construídas para diferentes tipos de bancos de dados:
a. Bancos de dados relacionais: para bancos de dados relacionais, uma forma comum de construir consultas é Text-to-SQL, o que significa que o sistema precisa traduzir as perguntas em linguagem natural do usuário em instruções de consulta SQL estruturadas. Isso geralmente envolve técnicas de compreensão de linguagem natural (NLU) e a capacidade de mapear a semântica da linguagem natural para a sintaxe SQL e o esquema do banco de dados. A figura também menciona o SQL w/ PGVector, que pode ser usado em conjunto com bancos de dados vetoriais (PGVector é uma extensão vetorial do PostgreSQL) para aprimorar as consultas SQL, por exemplo, para realizar pesquisas de similaridade semântica e, assim, ser mais flexível ao lidar com consultas difusas ou semanticizadas dos usuários.
b. Bancos de dados de gráficos: para bancos de dados de gráficos, o método de construção de consulta correspondente é o Text-to-Cypher, uma linguagem de consulta para o banco de dados de gráficos Neo4j, semelhante ao SQL, mas mais adequada para consultas estruturadas em gráficos. O Text-to-Cypher requer o entendimento da estrutura dos bancos de dados de grafos e das propriedades das linguagens de consulta de grafos.
c. banco de dados de vetores (Vector DBs): para bancos de dados vetoriais, o Self-query retriever é ilustrado, o que significa que o sistema pode gerar automaticamente filtros de metadados com base na pergunta do usuário e consultar o banco de dados vetorial diretamente. Os bancos de dados vetoriais normalmente armazenam representações vetoriais de texto ou dados, que são recuperados por pesquisa de similaridade. O segredo do Self-query retriever é a capacidade de extrair informações estruturadas para filtragem de perguntas em linguagem natural e combiná-las com a pesquisa de similaridade de vetores para obter uma recuperação mais precisa.
Resumindo a fase de construção da consulta: o objetivo principal dessa fase é transformar as perguntas feitas pelo usuário em linguagem natural em declarações de consulta que possam ser compreendidas e executadas pelo sistema, com diferentes linguagens e técnicas de consulta para diferentes tipos de armazenamentos de dados (relacionais, gráficos, vetores). O suporte do sistema para dados multimodais e modalidades de consulta é demonstrado.
2、Tradução de consultas (Query Translation)
Após a construção da consulta, às vezes é necessário processar e otimizar ainda mais a consulta original do usuário para recuperar e entender a intenção do usuário de forma mais eficiente. Duas estratégias principais de tradução de consultas são ilustradas na Fig:
a. Decomposição da consulta: perguntas complexas podem ser decompostas em subperguntas menores e mais gerenciáveis (subperguntas/perguntas de retorno). Isso pode ser feito usando técnicas como Multi-query, Step-back, RAG-Fusion. - Multi-query pode significar a geração de várias consultas diferentes para explorar a pergunta de diferentes ângulos. - Step-back pode se referir a responder primeiro a perguntas mais básicas e de pré-requisito e, em seguida, resolver progressivamente a pergunta complexa final. - RAG-Fusion pode se referir à combinação de geração aprimorada de recuperação com técnicas de fusão de consultas para entender melhor a intenção do usuário por meio de recuperação e fusão múltiplas. - A ideia central é Decompor ou reformular a pergunta de entrada, ou seja, decompor ou reformular a pergunta de entrada para reduzir a dificuldade de lidar com problemas complexos.
b. Pseudodocumentos: HyDE (Hypothetical Document Embeddings) é um método típico para gerar pseudodocumentos. A ideia é permitir que o modelo gere um "documento hipotético" (pseudodocumento) com base na pergunta. Esse pseudodocumento não precisa ser real, mas deve conter o entendimento inicial do modelo e a previsão da resposta à pergunta. O pseudodocumento é então representado como um vetor junto com o documento real, e uma pesquisa de similaridade é realizada. O HyDE tem como objetivo ajudar o pesquisador de vetores a encontrar melhor o documento real relevante, introduzindo o conhecimento a priori do modelo.
Resumindo a fase de tradução da consulta: essa fase visa otimizar a consulta do usuário para torná-la mais adequada ao processo de recuperação subsequente. A complexidade pode ser tratada por meio da decomposição da consulta, e a precisão da recuperação de vetores pode ser aprimorada por meio da geração de pseudodocumentos, refletindo a flexibilidade e a inteligência do sistema na compreensão e no processamento da intenção do usuário.
3. roteamento
Quando o sistema recebe uma consulta traduzida, ele precisa decidir para qual fonte ou fontes de dados encaminhar a consulta para recuperação. Duas estratégias de roteamento são ilustradas na Fig:
a. Roteamento lógico: permitir que o LLM escolha o banco de dados com base na pergunta, o que significa usar o Modelo de Linguagem Ampla (LLM) para determinar qual banco de dados deve ser consultado com base no conteúdo e nas características da pergunta. Por exemplo, se a pergunta envolver entidades e relacionamentos relacionados a gráficos de conhecimento, ela será encaminhada para um banco de dados de gráficos; se a pergunta envolver consultas de dados estruturados, ela será encaminhada para um banco de dados relacional; se a pergunta for mais voltada para a pesquisa semântica, ela será encaminhada para um banco de dados vetorial.
b. Roteamento semântico: incorporar a pergunta e escolher o prompt com base na similaridade. Essa abordagem primeiro incorpora a pergunta e, em seguida, escolhe um prompt diferente com base na similaridade dos vetores de perguntas (Prompt #1 , Prompt #2). , Prompt #2). Isso significa que, para diferentes tipos de perguntas ou intenções, o sistema predefine diferentes estratégias de Prompt e seleciona automaticamente o Prompt mais adequado por similaridade semântica para orientar o processo subsequente de recuperação ou geração.
Resumir a fase de roteamento: a fase de roteamento é uma etapa fundamental da tomada de decisão inteligente do sistema, que seleciona a fonte de dados e a estratégia de processamento mais adequadas de acordo com o conteúdo e as características do problema, refletindo a inteligência do sistema no gerenciamento de recursos e na programação de tarefas.
4、Indexação (Indexação)
Para uma recuperação eficiente, os dados precisam ser pré-indexados. A área azul da imagem demonstra uma variedade de estratégias para otimização da indexação:
a. Otimização de partes: ao lidar com documentos longos, muitas vezes é necessário dividir o documento em partes e, em seguida, indexar as partes.
- Dividir por caracteres, seções, delimitadores semânticos: diferentes estratégias de fragmentação, por exemplo, por número de caracteres, seções ou delimitadores semânticos.
- Semantic Splitter: enfatiza a importância da fragmentação semântica, otimiza o tamanho do bloco usado para incorporação, torna cada bloco semanticamente mais completo e independente e, portanto, melhora a qualidade dos resultados de incorporação e recuperação.
b. Indexação de várias representações: Summary -> {} -> Relational DB / Vectorstore Isso significa que é possível criar várias representações de um documento para indexação, por exemplo, além do bloco de texto original do documento, também é possível gerar um resumo do documento ( Isso significa que várias representações do documento podem ser criadas para indexação, por exemplo, um resumo do documento pode ser gerado além do bloco de texto original do documento, e o resumo pode ser indexado. Isso permite que diferentes representações sejam usadas para atender a diferentes requisitos de consulta. A figura indica que o resumo pode ser armazenado em um banco de dados relacional ou em um banco de dados vetorial.
- Documento pai, Dense X: pode se referir à indexação de um documento juntamente com informações sobre seu documento pai, bem como à representação de um documento usando uma representação densa (Dense X), que pode se referir a uma representação vetorial densa.
- Converter documentos em compactos recuperação unidades (por exemplo, um resumo): a ênfase é colocada na conversão de documentos em unidades de recuperação mais compactas, como resumos, para melhorar a eficiência da recuperação.
c. Embeddings especializados: Ajuste fino, CoLBERT, [0, 1, ...] -> Vectorstore. Isso significa que modelos de incorporação especialmente treinados ou com ajuste fino, como o CoLBERT, podem ser usados para gerar representações vetoriais de documentos e armazenar esses vetores em um banco de dados de vetores.
- Modelos de incorporação específicos do domínio e/ou avançados: enfatiza a possibilidade de usar modelos de incorporação específicos do domínio ou mais avançados para obter representações semânticas mais precisas e aprimorar a recuperação.
d. Resumos de indexação heirárquica: Divisões -> cluser -> cluser -> ... -> RAPTOR -> Graph DB. -> O RAPTOR (que pode se referir a um método hierárquico de resumo e indexação de documentos) constrói uma estrutura hierárquica de resumos de documentos por meio de várias camadas de clusters.
- Árvore de resumo de documentos em vários níveis de abstração: a ênfase no RAPTOR constrói uma árvore de resumos de documentos em vários níveis de abstração.
- Armazenado em um banco de dados de gráficos (Graph DB), o banco de dados de gráficos é usado para armazenar e gerenciar essa estrutura de índice hierárquico, facilitando a pesquisa e a navegação em vários níveis.
Resumindo a fase de indexação: a fase de indexação se preocupa em organizar e representar os dados de forma eficiente e eficaz para uma recuperação rápida e precisa. Desde a otimização de chunking, representações múltiplas, incorporação dedicada a resumos de índices hierárquicos, ela reflete a diversidade e a sofisticação das estratégias de indexação.
5. recuperação
Com base nas fontes de dados e índices roteados, o sistema executa o processo de recuperação real. As áreas verdes da imagem mostram os dois principais aspectos da recuperação:
a. Classificação: Pergunta -> {} -> Relevância -> Filtro. os documentos recuperados precisam ser classificados com base em sua relevância para a consulta.
- Re-Rank, RankGPT, RAG-Fusion: algumas técnicas avançadas de classificação são mencionadas, como Re-Rank (reclassificação, que executa uma classificação mais refinada sobre os resultados iniciais da recuperação), RankGPT (classificação com um modelo grande, como o GPT) e RAG-Fusion (que combina classificação com geração de aprimoramento de recuperação).
- Classificar ou filtrar/comprimir documentos com base na relevância: a finalidade da classificação pode ser classificar diretamente e retornar os documentos mais relevantes ou filtrar ou comprimir documentos com base na relevância para processamento posterior. - O CRAG (Context-Relevant Answer Generation) também aparece na sessão de classificação; o processo de classificação também precisa levar em conta as informações contextuais.
b. Recuperação ativa: {} -> CRAG -> Resposta. Recupere novamente e/ou recupere de novas fontes de dados (por exemplo, Web) se os documentos recuperados não forem relevantes. A recuperação ativa significa que o sistema pode recuperar ativamente (Re-retrieve) ou recuperar de novas fontes de dados (por exemplo, Web) se os resultados iniciais da recuperação não forem satisfatórios.
- O CRAG também aparece na recuperação ativa, enfatizando ainda mais a importância da relevância contextual e da recuperação iterativa.
- Técnicas como Self-RAG, RRR (Retrieval-Rewrite-Read) também podem ser relevantes para a recuperação ativa, com o objetivo de otimizar continuamente os resultados da recuperação e a qualidade da resposta por meio de um processo iterativo de recuperação e geração.
Resumindo a fase de recuperação: o objetivo principal da fase de recuperação é encontrar o documento ou a informação mais relevante para a consulta do usuário. Da classificação à recuperação ativa, o sistema reflete o refinamento e a inteligência da estratégia de recuperação e se esforça para fornecer resultados de recuperação de alta qualidade.
6. geração
Por fim, o sistema precisa gerar respostas com base nos documentos recuperados e apresentá-las ao usuário. A área roxa da imagem mostra a tecnologia principal na fase de geração:
a. Recuperação ativa (reaparecimento): {} -> Resposta -> Auto-RAG, RRR -> Reescrita de perguntas e/ou recuperação de documentos. A recuperação ativa também desempenha um papel importante na fase de geração.
- Self-RAG (Self-Retrieval Augmented Generation) é um método de geração aumentada de autorrecuperação que permite que um modelo generativo realize ativamente a recuperação conforme necessário durante o processo de geração de uma resposta e ajuste a estratégia de geração com base nos resultados da recuperação. - RRR (Retrieval-Rewrite-Read) é um processo de geração iterativo que pode incluir etapas como recuperação, reescrita da pergunta e leitura do documento para otimizar a qualidade da resposta por meio de várias iterações.
- Usar a qualidade da geração para informar a reescrita de perguntas e/ou a recuperação de documentos: enfatiza-se que a qualidade das respostas geradas pode ser usada para orientar a reescrita de perguntas e a recuperação de documentos, formando um processo de otimização de ciclo fechado.
Resumindo a fase de geração: a fase de geração é uma etapa fundamental no resultado final das respostas. As tecnologias de recuperação ativa e geração aprimorada por autorrecuperação (Self-RAG, RRR) tornam o processo de geração mais inteligente e controlável e podem gerar respostas mais precisas e fáceis de usar.
Resumo geral: este diagrama demonstra claramente a complexidade e a granularidade de um sistema RAG moderno. Ele abrange todo o processo, desde a compreensão da consulta, o roteamento de dados, a otimização da indexação, a recuperação eficiente até a geração da resposta final, e mostra as diversas técnicas e estratégias avançadas que podem ser empregadas em cada etapa.
Principais destaques e tendências.
- Suporte a vários bancos de dados: o sistema suporta banco de dados relacional, banco de dados gráfico e banco de dados vetorial, que podem lidar com diferentes tipos de dados e requisitos de consulta.
- Otimização e tradução de consultas: aprimore a capacidade do sistema de lidar com consultas complexas e semânticas por meio de técnicas como decomposição de consultas e geração de pseudodocumentos.
- Roteamento inteligente: decisões de roteamento usando LLM e similaridade semântica para seleção inteligente de fontes de dados e agendamento de tarefas.
- Diversidade de otimização de indexação: de Chunking, representações múltiplas, incorporação dedicada a resumos de índices hierárquicos, refletindo a diversidade de estratégias de indexação e otimização profunda.
- Refinamento e proatividade da pesquisa: dos algoritmos de classificação à pesquisa proativa, o sistema se esforça para fornecer resultados de pesquisa relevantes e de alta qualidade.
- Integração profunda de geração e recuperação: Self-RAG, RRR e outras técnicas mostram que a fase de geração não é mais uma simples emenda de informações, mas uma integração profunda com o processo de recuperação, formando um ciclo fechado de otimização iterativa.
Esse diagrama representa uma tendência importante no desenvolvimento dos sistemas RAG atuais, ou seja, o foco maior na inteligência, modularidade e dimensionamento do sistema. O futuro sistema RAG não será apenas uma simples "recuperação + geração", mas se desenvolverá em uma direção mais inteligente, que pode entender melhor a intenção do usuário, fazer uso mais eficaz de dados multimodais, realizar a recuperação e a geração com mais precisão e, por fim, proporcionar uma experiência de usuário melhor e mais personalizada. Esse diagrama fornece uma estrutura de referência muito valiosa para compreender e criar a próxima geração de sistemas RAG.
Referências:
[1] GitHub: https://github.com/bRAGAI/bRAG-langchain/
[2] https://bragai.dev/