A geração aumentada de recuperação (RAG) revolucionou a forma como interagimos com os dados, oferecendo desempenho incomparável em pesquisas por similaridade. É excelente na recuperação de informações relevantes com base em consultas simples. No entanto, o RAG geralmente falha ao lidar com tarefas mais complexas, como consultas baseadas em tempo ou consultas complexas a bancos de dados relacionais. Isso ocorre porque o RAG foi projetado principalmente para geração de texto aumentado com informações relevantes de fontes externas, em vez de realizar recuperações exatas baseadas em condições. Estas limitações restringem a sua aplicação em cenários que requerem recuperação de dados precisa e condicional.
Nosso modelo RAG avançado, baseado em um banco de dados vetorial SQL, gerenciará com eficiência vários tipos de consulta. Ele não apenas lida com pesquisas simples de similaridade, mas também se destaca em consultas baseadas em tempo e consultas relacionais complexas.
Vamos discutir como superamos essas limitações do RAG criando um assistente de IA usando MyScale e LangChain, melhorando a precisão e a eficiência do processo de recuperação de dados. Extrairemos as últimas histórias do Hacker News enquanto o guiaremos pelo processo para demonstrar como seu aplicativo RAG pode ser aprimorado com consultas vetoriais SQL avançadas.
Ferramentas e tecnologias
Usaremos várias ferramentas, incluindo MyScaleDB, OpenAI, LangChain, Hugging Face e a API HackerNews para desenvolver este aplicativo útil.
MyScaleDB: MyScale é um banco de dados vetorial SQL que armazena e processa dados estruturados e não estruturados com eficiência.
OpenAI: Usaremos o modelo de chat da OpenAI para gerar consultas de texto para SQL.
LangChain: LangChain ajudará a construir o fluxo de trabalho e a integrar-se perfeitamente com MyScale e OpenAI.
Hugging Face: Usaremos o modelo de incorporação do Hugging Face para obter embeddings de texto, que serão armazenados no MyScale para análise posterior.
API HackerNews: Esta API irá buscar dados em tempo real do HackerNews para processamento e análise.
Preparação
Configurando o Ambiente
Antes de começarmos a escrever o código, devemos garantir que todas as bibliotecas e dependências necessárias estejam instaladas. Você pode instalá-los usando pip:
Esse pip comando deve instalar todas as dependências necessárias neste projeto.
Importar bibliotecas e definir funções auxiliares
Primeiro, importaremos as bibliotecas necessárias e definiremos as funções auxiliares que serão usadas para buscar e processar dados do Hacker News.
Essas funções buscam IDs de histórias, obtêm detalhes de itens específicos, buscam comentários recursivamente e convertem comentários em uma única string.
Buscar e processar histórias
Em seguida, buscamos as notícias mais recentes e principais do Hacker News e as processamos para extrair dados relevantes.
Buscamos as notícias mais recentes e principais do Hacker News usando as funções auxiliares definidas acima. Processamos as histórias buscadas para extrair informações relevantes como título, URL, pontuação, horário, escritor e comentários. Também convertemos a lista de comentários em uma única string.
Inicialize o modelo de rosto abraçado para incorporação
Agora geraremos embeddings para os títulos e comentários das histórias usando um modelo pré-treinado. Esta etapa é crucial para a criação de um sistema RAG.
Carregaremos um modelo pré-treinado para gerar embeddings usando a biblioteca de transformadores Hugging Face e geraremos embeddings para os títulos e comentários das histórias.
Lidando com comentários longos
Para lidar com comentários longos que excedem o comprimento máximo do token do modelo, iremos dividi-los em partes gerenciáveis.
Esta função divide comentários longos em partes que cabem no comprimento máximo do token do modelo.
Histórias de processo para incorporações
Por fim, processaremos cada história para gerar embeddings para títulos e comentários e criar um Pandas DataFrame final.
Nesta etapa, processamos cada história para gerar embeddings para títulos e comentários, tratamos comentários longos se necessário e criamos um DataFrame final com todos os dados processados.
Conectando-se ao MyScaleDB e criando a tabela
MyScaleDB é um banco de dados vetorial SQL avançado que aprimora modelos RAG ao lidar com consultas complexas e pesquisas de similaridade de maneira eficiente, como pesquisa de texto completo e pesquisa vetorial filtrada.
Vamos nos conectar ao MyScaleDB usando clickhouse-connect e crie uma tabela para armazenar as histórias raspadas.
Este código importa o clickhouse-connect biblioteca e estabelece uma conexão com MyScaleDB usando as credenciais fornecidas. Ele elimina a tabela existente default.posts se existir, e cria uma nova tabela com o esquema especificado.
Observação: MyScaleDB fornece um pod gratuito para armazenamento vetorial de 5 milhões de vetores. Assim, você pode começar a usar MyScaleDB em seu aplicativo RAG sem nenhum pagamento inicial.
Inserindo dados e criando um índice vetorial
Agora, inserimos os dados processados na tabela MyScaleDB e criamos um índice para permitir a recuperação eficiente dos dados.
Este código insere os dados no default.posts tabela em lotes para gerenciar grandes quantidades de dados com eficiência. O índice vetorial é criado no Title_Embedding coluna.
Configurando o modelo de prompt para geração de consulta
Configuraremos um modelo de prompt para converter consultas de linguagem natural em consultas SQL MyScaleDB.
Este código configura um modelo de prompt que orienta o LLM para gerar consultas MyScaleDB corretas com base nas perguntas de entrada.
Configurando parâmetros de consulta
Configuraremos os parâmetros para a geração da consulta.
Este código define o número de resultados principais a serem recuperados (top_k), define as informações da tabela (table_info) e define uma string de entrada vazia (input) para a pergunta.
Configurando o modelo
Nesta etapa, configuraremos o modelo OpenAI para converter entradas do usuário em consultas SQL.
Converter texto em SQL
Este método primeiro gera um prompt final com base na entrada do usuário e nas informações da tabela e, em seguida, usa o modelo OpenAI para converter o texto em uma consulta vetorial SQL.
Após esta etapa, obteremos uma consulta como esta:
Mas MyScaleDB DISTANCE esperar DISTANCE(column, array) . Então, precisamos converter o Embeddings('AI domain') parte para incorporações de vetores.
Processando e substituindo embeddings em uma string de consulta
Este método será usado para substituir Embeddings(“Extracted keywords”) com uma matriz de float32.
Este método leva a consulta como input e retorna a consulta atualizada se houver alguma Embeddings método presente na string de consulta.
Executando uma consulta
Finalmente, executaremos uma consulta para recuperar as histórias relevantes do banco de dados vetorial.
Além disso, você pode pegar a consulta retornada pelo modelo, extrair as colunas especificadas e usá-las para buscar colunas, conforme mostrado acima. Esses resultados podem então ser repassados a um modelo de chat, criando um assistente de chat de IA completo. Dessa forma, o assistente pode responder dinamicamente às dúvidas dos usuários com dados relevantes extraídos diretamente dos resultados, garantindo uma experiência contínua e interativa.
Conclusão
O RAG simples tem uso limitado devido ao seu foco em pesquisas diretas de similaridade. No entanto, quando combinados com ferramentas avançadas como MyScaleDB, LangChain, etc., os aplicativos RAG podem não apenas atender, mas também superar as demandas do gerenciamento de big data em grande escala. Eles podem lidar com uma gama mais ampla de consultas, incluindo consultas relacionais complexas e baseadas em tempo, melhorando significativamente o desempenho e a eficiência de seus sistemas atuais.
Se você tiver alguma sugestão, entre em contato conosco através do X/Twitter ou Discord.
YOUTUBE.COM/THENEWSTACK
A tecnologia avança rápido, não perca um episódio. Inscreva-se em nosso canal no YouTube para transmitir todos os nossos podcasts, entrevistas, demonstrações e muito mais.
SE INSCREVER
Usama Jamil, defensor do desenvolvedor na MyScale, traz consigo uma vasta experiência e um profundo interesse em ciência de dados. Com paixão por explorar novas tendências no domínio de IA/ML, Usama se esforça para tornar conceitos complexos acessíveis a…
Este site utiliza cookies para melhorar sua experiência de navegação. Ao continuar, você concorda com o uso de cookies. Para mais informações, consulte nossa Política de Privacidade.
Funcional
Sempre ativo
O armazenamento ou acesso técnico é estritamente necessário para a finalidade legítima de permitir a utilização de um serviço específico explicitamente solicitado pelo assinante ou utilizador, ou com a finalidade exclusiva de efetuar a transmissão de uma comunicação através de uma rede de comunicações eletrónicas.
Preferências
O armazenamento ou acesso técnico é necessário para o propósito legítimo de armazenar preferências que não são solicitadas pelo assinante ou usuário.
Estatísticas
O armazenamento ou acesso técnico que é usado exclusivamente para fins estatísticos.O armazenamento técnico ou acesso que é usado exclusivamente para fins estatísticos anônimos. Sem uma intimação, conformidade voluntária por parte de seu provedor de serviços de Internet ou registros adicionais de terceiros, as informações armazenadas ou recuperadas apenas para esse fim geralmente não podem ser usadas para identificá-lo.
Marketing
O armazenamento ou acesso técnico é necessário para criar perfis de usuário para enviar publicidade ou para rastrear o usuário em um site ou em vários sites para fins de marketing semelhantes.