Gerando valor a partir de dados corporativos: Melhores práticas para Text2SQL e IA generativa | Amazon Web Services

Gerando valor a partir de dados corporativos: Melhores práticas para Text2SQL e IA generativa | Amazon Web Services

A IA generativa abriu muito potencial no campo da IA. Estamos vendo vários usos, incluindo geração de texto, geração de código, resumo, tradução, chatbots e muito mais. Uma dessas áreas que está evoluindo é o uso do processamento de linguagem natural (PNL) para desbloquear novas oportunidades de acesso a dados por meio de consultas SQL intuitivas. Em vez de lidar com códigos técnicos complexos, os usuários empresariais e analistas de dados podem fazer perguntas relacionadas a dados e insights em linguagem simples. O objetivo principal é gerar automaticamente consultas SQL a partir de texto em linguagem natural. Para isso, a entrada de texto é transformada em uma representação estruturada e, a partir dessa representação, é criada uma consulta SQL que pode ser utilizada para acessar um banco de dados.

Nesta postagem, fornecemos uma introdução ao texto para SQL (Text2SQL) e exploramos casos de uso, desafios, padrões de design e práticas recomendadas. Especificamente, discutimos o seguinte:

  • Por que precisamos do Text2SQL
  • Componentes principais para texto para SQL
  • Considerações imediatas de engenharia para linguagem natural ou texto para SQL
  • Otimizações e práticas recomendadas
  • Padrões de arquitetura

Por que precisamos do Text2SQL?

Hoje, uma grande quantidade de dados está disponível em análises de dados tradicionais, armazenamento de dados e bancos de dados, que podem não ser fáceis de consultar ou compreender para a maioria dos membros da organização. O objetivo principal do Text2SQL é tornar as consultas aos bancos de dados mais acessíveis para usuários não técnicos, que podem fornecer suas consultas em linguagem natural.

NLP SQL permite que usuários corporativos analisem dados e obtenham respostas digitando ou falando perguntas em linguagem natural, como as seguintes:

  • “Mostrar o total de vendas de cada produto no mês passado”
  • “Quais produtos geraram mais receita?”
  • “Qual porcentagem de clientes é de cada região?”

Rocha Amazônica é um serviço totalmente gerenciado que oferece uma escolha de modelos básicos (FMs) de alto desempenho por meio de uma única API, permitindo criar e dimensionar facilmente aplicativos Gen AI. Ele pode ser aproveitado para gerar consultas SQL com base em perguntas semelhantes às listadas acima e consultar dados estruturados organizacionais e gerar respostas em linguagem natural a partir dos dados de resposta da consulta.

Componentes principais para texto em SQL

Os sistemas texto para SQL envolvem vários estágios para converter consultas de linguagem natural em SQL executável:

  • Processamento de linguagem natural:
    • Analise a consulta de entrada do usuário
    • Extraia os principais elementos e intenções
    • Converter para um formato estruturado
  • Geração SQL:
    • Mapear detalhes extraídos na sintaxe SQL
    • Gere uma consulta SQL válida
  • Consulta de banco de dados:
    • Execute a consulta SQL gerada pela IA no banco de dados
    • Recuperar resultados
    • Retornar resultados ao usuário

Uma capacidade notável dos Large Language Models (LLMs) é a geração de código, incluindo Structured Query Language (SQL) para bancos de dados. Esses LLMs podem ser aproveitados para entender a questão da linguagem natural e gerar uma consulta SQL correspondente como saída. Os LLMs se beneficiarão com a adoção de aprendizagem contextual e configurações de ajuste fino à medida que mais dados forem fornecidos.

O diagrama a seguir ilustra um fluxo Text2SQL básico.

Texto 2 Fluxo de processo SQL de alto nível

Considerações imediatas de engenharia para linguagem natural para SQL

O prompt é crucial ao usar LLMs para traduzir linguagem natural em consultas SQL, e há várias considerações importantes para a engenharia de prompt.

Eficaz engenharia imediata é a chave para o desenvolvimento de linguagem natural para sistemas SQL. Prompts claros e diretos fornecem instruções melhores para o modelo de linguagem. Fornecer o contexto de que o usuário está solicitando uma consulta SQL junto com detalhes relevantes do esquema do banco de dados permite que o modelo traduza a intenção com precisão. A inclusão de alguns exemplos anotados de prompts de linguagem natural e consultas SQL correspondentes ajuda a orientar o modelo para produzir resultados compatíveis com sintaxe. Além disso, a incorporação da Geração Aumentada de Recuperação (RAG), onde o modelo recupera exemplos semelhantes durante o processamento, melhora ainda mais a precisão do mapeamento. Prompts bem projetados que fornecem ao modelo instruções, contexto, exemplos e aumento de recuperação suficientes são cruciais para traduzir de maneira confiável a linguagem natural em consultas SQL.

A seguir está um exemplo de prompt de linha de base com representação de código do banco de dados do white paper Aprimorando os recursos de texto para SQL de modelos de linguagem grande: um estudo sobre estratégias de design de prompt.

/* Given the following database schema : */
CREATE TABLE IF NOT EXISTS " gymnast " ( " Gymnast_ID " int , " Floor_Exercise_Points " real , " Pommel_Horse_Points " real , " Rings_Points " real , " Vault_Points " real , " Parallel_Bars_Points " real , " Horizontal_Bar_Points " real , " Total_Points " real , PRIMARY KEY ( " Gymnast_ID " ) , FOREIGN KEY ( " Gymnast_ID " ) REFERENCES " people " ( " People_ID " ) ) ; CREATE TABLE IF NOT EXISTS " people " ( " People_ID " int , " Name " text , " Age " real , " Height " real , " Hometown " text , PRIMARY KEY ( " People_ID " ) ) ; /* Answer the following : Return the total points of the gymnast with the lowest age .
*/ select t1 . total_points from gymnast as t1 join people as t2 on t1 . gymnast_id = t2 .
people_id order by t2 . age asc limit 1

Conforme ilustrado neste exemplo, o aprendizado rápido baseado em prompt fornece ao modelo alguns exemplos anotados no próprio prompt. Isso demonstra o mapeamento de destino entre linguagem natural e SQL para o modelo. Normalmente, o prompt conteria cerca de 2 a 3 pares mostrando uma consulta em linguagem natural e a instrução SQL equivalente. Esses poucos exemplos orientam o modelo para gerar consultas SQL compatíveis com sintaxe a partir de linguagem natural sem exigir dados de treinamento extensos.

Ajuste fino versus engenharia imediata

Ao construir linguagem natural para sistemas SQL, muitas vezes entramos na discussão sobre se o ajuste fino do modelo é a técnica certa ou se a engenharia imediata eficaz é o caminho a seguir. Ambas as abordagens poderiam ser consideradas e selecionadas com base no conjunto certo de requisitos:

    • Afinação – O modelo de linha de base é pré-treinado em um grande corpus de texto geral e então pode usar ajuste fino baseado em instruções, que usa exemplos rotulados para melhorar o desempenho de um modelo básico pré-treinado em SQL de texto. Isso adapta o modelo à tarefa alvo. O ajuste fino treina diretamente o modelo na tarefa final, mas requer muitos exemplos de SQL de texto. Você pode usar o ajuste fino supervisionado com base em seu LLM para melhorar a eficácia do texto para SQL. Para isso, você pode usar vários conjuntos de dados como Spiders, WikiSQL, CORRER ATRÁS, BIRD-SQLou CoSQL.
    • Engenharia imediata – O modelo é treinado para concluir prompts projetados para solicitar a sintaxe SQL de destino. Ao gerar SQL a partir de linguagem natural usando LLMs, fornecer instruções claras no prompt é importante para controlar a saída do modelo. No prompt para anotar diferentes componentes, como apontar para colunas, esquema e, em seguida, instruir qual tipo de SQL criar. Eles atuam como instruções que informam ao modelo como formatar a saída SQL. O prompt a seguir mostra um exemplo onde você aponta colunas da tabela e instrui para criar uma consulta MySQL:
Table offices, columns = [OfficeId, OfficeName]
Table employees, columns = [OfficeId, EmployeeId,EmployeeName]
Create a MySQL query for all employees in the Machine Learning Department

Uma abordagem eficaz para modelos de texto para SQL é começar primeiro com um LLM de linha de base, sem qualquer ajuste fino específico da tarefa. Prompts bem elaborados podem então ser usados ​​para adaptar e orientar o modelo base para lidar com o mapeamento de texto para SQL. Essa engenharia imediata permite que você desenvolva a capacidade sem precisar fazer ajustes finos. Se a engenharia imediata no modelo base não atingir precisão suficiente, o ajuste fino em um pequeno conjunto de exemplos SQL de texto poderá ser explorado junto com a engenharia imediata adicional.

A combinação de ajuste fino e engenharia imediata pode ser necessária se a engenharia imediata apenas no modelo bruto pré-treinado não atender aos requisitos. No entanto, é melhor tentar inicialmente a engenharia imediata sem ajustes finos, porque isso permite uma iteração rápida sem coleta de dados. Se isso não fornecer um desempenho adequado, o ajuste fino juntamente com a engenharia imediata é o próximo passo viável. Essa abordagem geral maximiza a eficiência e ainda permite a personalização se métodos puramente baseados em prompts forem insuficientes.

Otimização e melhores práticas

A otimização e as melhores práticas são essenciais para aumentar a eficácia e garantir que os recursos sejam utilizados de forma otimizada e que os resultados corretos sejam alcançados da melhor maneira possível. As técnicas ajudam a melhorar o desempenho, controlar custos e alcançar um resultado de melhor qualidade.

Ao desenvolver sistemas texto para SQL usando LLMs, as técnicas de otimização podem melhorar o desempenho e a eficiência. A seguir estão algumas áreas principais a serem consideradas:

  • Cache – Para melhorar a latência, o controle de custos e a padronização, você pode armazenar em cache o SQL analisado e os prompts de consulta reconhecidos do LLM de texto para SQL. Isso evita o reprocessamento de consultas repetidas.
  • do Paciente – Logs e métricas sobre análise de consulta, reconhecimento de prompt, geração de SQL e resultados de SQL devem ser coletados para monitorar o sistema LLM de texto para SQL. Isso fornece visibilidade para o exemplo de otimização, atualizando o prompt ou revisitando o ajuste fino com um conjunto de dados atualizado.
  • Visualizações materializadas versus tabelas – As visualizações materializadas podem simplificar a geração de SQL e melhorar o desempenho para consultas comuns de texto para SQL. Consultar tabelas diretamente pode resultar em SQL complexo e também em problemas de desempenho, incluindo a criação constante de técnicas de desempenho como índices. Além disso, você pode evitar problemas de desempenho quando a mesma tabela é usada para outras áreas de aplicação ao mesmo tempo.
  • Atualizando dados – As visualizações materializadas precisam ser atualizadas de acordo com um cronograma para manter os dados atualizados para consultas de texto para SQL. Você pode usar abordagens de atualização em lote ou incremental para equilibrar a sobrecarga.
  • Catálogo central de dados – A criação de um catálogo de dados centralizado fornece uma visão única das fontes de dados de uma organização e ajudará os LLMs a selecionar tabelas e esquemas apropriados para fornecer respostas mais precisas. Vetor incorporações criados a partir de um catálogo de dados central podem ser fornecidos a um LLM junto com as informações solicitadas para gerar respostas SQL relevantes e precisas.

Ao aplicar as melhores práticas de otimização, como armazenamento em cache, monitoramento, visualizações materializadas, atualização programada e um catálogo central, você pode melhorar significativamente o desempenho e a eficiência dos sistemas de texto para SQL usando LLMs.

Padrões de arquitetura

Vejamos alguns padrões de arquitetura que podem ser implementados para um fluxo de trabalho de texto para SQL.

Engenharia imediata

O diagrama a seguir ilustra a arquitetura para gerar consultas com um LLM usando engenharia imediata.

ilustra a arquitetura para gerar consultas com um LLM usando engenharia imediata

Nesse padrão, o usuário cria um aprendizado rápido baseado em prompt que fornece ao modelo exemplos anotados no próprio prompt, que inclui os detalhes da tabela e do esquema e alguns exemplos de consultas com seus resultados. O LLM usa o prompt fornecido para retornar o SQL gerado pela IA, que é validado e executado no banco de dados para obter os resultados. Este é o padrão mais simples para começar a usar a engenharia imediata. Para isso, você pode usar Rocha Amazônica or modelos de fundação in JumpStart do Amazon SageMaker.

Nesse padrão, o usuário cria um aprendizado rápido baseado em prompt que fornece ao modelo exemplos anotados no próprio prompt, que inclui os detalhes da tabela e do esquema e alguns exemplos de consultas com seus resultados. O LLM usa o prompt fornecido para retornar o SQL gerado pela IA, que é validado e executado no banco de dados para obter os resultados. Este é o padrão mais simples para começar a usar a engenharia imediata. Para isso, você pode usar Rocha Amazônica que é um serviço totalmente gerenciado que oferece uma escolha de modelos básicos (FMs) de alto desempenho de empresas líderes de IA por meio de uma única API, juntamente com um amplo conjunto de recursos necessários para criar aplicativos de IA generativos com segurança, privacidade e IA responsável ou Modelos de base JumpStart que oferece modelos básicos de última geração para casos de uso como escrita de conteúdo, geração de código, resposta a perguntas, redação, resumo, classificação, recuperação de informações e muito mais

Engenharia imediata e ajuste fino

O diagrama a seguir ilustra a arquitetura para gerar consultas com um LLM usando engenharia imediata e ajuste fino.

ilustra a arquitetura para gerar consultas com um LLM usando engenharia imediata e ajuste fino

Esse fluxo é semelhante ao padrão anterior, que depende principalmente de engenharia imediata, mas com um fluxo adicional de ajuste fino no conjunto de dados específico do domínio. O LLM ajustado é usado para gerar consultas SQL com valor mínimo no contexto para o prompt. Para isso, você pode usar o SageMaker JumpStart para ajustar um LLM em um conjunto de dados específico de domínio, da mesma forma que treinaria e implantaria qualquer modelo em Amazon Sage Maker.

Engenharia imediata e RAG

O diagrama a seguir ilustra a arquitetura para gerar consultas com um LLM usando engenharia de prompt e RAG.

ilustra a arquitetura para gerar consultas com um LLM usando engenharia imediata e RAG

Neste padrão, usamos Geração Aumentada de Recuperação usando lojas de incorporação de vetores, como Incorporações Amazon Titan or Incorporação coerente, Em Rocha Amazônica de um catálogo central de dados, como Cola AWS Catálogo de Dados, de bancos de dados dentro de uma organização. Os embeddings vetoriais são armazenados em bancos de dados vetoriais como Mecanismo vetorial para Amazon OpenSearch Serverless, Amazon Relational Database Service (Amazon RDS) para PostgreSQL com o vetor pg extensão, ou Amazona Kendra. LLMs usam incorporações de vetores para selecionar o banco de dados, tabelas e colunas corretos das tabelas com mais rapidez ao criar consultas SQL. Usar o RAG é útil quando os dados e informações relevantes que precisam ser recuperados pelos LLMs são armazenados em vários sistemas de banco de dados separados e o LLM precisa ser capaz de pesquisar ou consultar dados de todos esses sistemas diferentes. É aqui que fornecer incorporações vetoriais de um catálogo de dados centralizado ou unificado para os LLMs resulta em informações mais precisas e abrangentes retornadas pelos LLMs.

Conclusão

Nesta postagem, discutimos como podemos gerar valor a partir de dados corporativos usando linguagem natural para geração de SQL. Analisamos os principais componentes, otimização e práticas recomendadas. Também aprendemos padrões de arquitetura, desde a engenharia básica até o ajuste fino e RAG. Para saber mais, consulte Rocha Amazônica para criar e dimensionar facilmente aplicativos generativos de IA com modelos básicos


Sobre os autores

Gerando valor a partir de dados corporativos: Melhores práticas para Text2SQL e IA generativa | Inteligência de dados PlatoBlockchain da Amazon Web Services. Pesquisa vertical. Ai.Randy De Fauw é Arquiteto Principal de Soluções Sênior da AWS. Ele possui um MSEE da Universidade de Michigan, onde trabalhou em visão computacional para veículos autônomos. Ele também possui MBA pela Colorado State University. Randy ocupou vários cargos na área de tecnologia, desde engenharia de software até gerenciamento de produtos. In entrou no espaço de Big Data em 2013 e continua a explorar essa área. Ele está trabalhando ativamente em projetos no espaço ML e se apresentou em várias conferências, incluindo Strata e GlueCon.

Gerando valor a partir de dados corporativos: Melhores práticas para Text2SQL e IA generativa | Inteligência de dados PlatoBlockchain da Amazon Web Services. Pesquisa vertical. Ai.Nitin Eusébio See More é arquiteto sênior de soluções empresariais na AWS, com experiência em engenharia de software, arquitetura empresarial e IA/ML. Ele é profundamente apaixonado por explorar as possibilidades da IA ​​generativa. Ele colabora com os clientes para ajudá-los a criar aplicativos bem arquitetados na plataforma AWS e se dedica a solucionar desafios tecnológicos e auxiliá-los em sua jornada para a nuvem.

Gerando valor a partir de dados corporativos: Melhores práticas para Text2SQL e IA generativa | Inteligência de dados PlatoBlockchain da Amazon Web Services. Pesquisa vertical. Ai.Arghya Banerjee é arquiteto de soluções sênior na AWS na área da baía de São Francisco, focado em ajudar os clientes a adotar e usar a nuvem AWS. Arghya está focada em Big Data, Data Lakes, Streaming, Batch Analytics e serviços e tecnologias de AI/ML.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS