Eu já tentei isso. Os resultados estão por toda parte. Um experimento interessante é fornecer ao GPT-3.5 um esquema mínimo anotado do banco de dados Discourse apenas para testar sua capacidade de SQL. Percebo que isso é ineficiente em termos de tokens, mas é legível:
Esquema mínimo
# == Informações do Esquema #
#
# Nome da tabela: users
#
# id :integer not null, primary key
# username :string(60) not null
# created_at :datetime not null
#
# Nome da tabela: groups
#
# id :integer not null, primary key
# name :string not null
# created_at :datetime not null
#
# Nome da tabela: group_users
#
# id :integer not null, primary key
# group_id :integer not null
# user_id :integer not null
#
# Nome da tabela: posts
#
# id :integer not null, primary key
# user_id :integer
# topic_id :integer not null
# deleted_at :datetime (A aplicação "soft deletes" posts. Quando um post é excluído, sua propriedade `deleted_at` é definida como um :datetime. A menos que explicitamente solicitado para retornar posts excluídos, certifique-se de que a coluna `deleted_at` seja `NOT NULL` ao escrever consultas que solicitam dados relacionados a posts.)
#
# Nome da tabela: topics
#
# id :integer not null, primary key
# title :string not null
# category_id :integer
# created_at :datetime not null
# user_id :integer (o id do usuário que criou o tópico)
# deleted_at :datetime (A aplicação "soft deletes" topics. Quando um tópico é excluído, sua propriedade `deleted_at` é definida como um :datetime. A menos que explicitamente solicitado para retornar tópicos excluídos, certifique-se de que a coluna `deleted_at` seja `NOT NULL` ao escrever consultas que solicitam dados relacionados a tópicos.)
#
# Nome da tabela: categories
#
# id :integer not null, primary key
# name :string(50) not null
Até agora, os resultados que estou obtendo são impressionantes. Isso me faz pensar que o problema poderia ser resolvido apenas fornecendo um esquema anotado no prompt.
Por diversão, perguntei a ele que tipos de consultas ele poderia ter dificuldade em responder:
Limitações do GPT-3.5
- Consultas Hierárquicas: Consultas envolvendo estruturas de dados hierárquicas, como relacionamentos recursivos, podem ser complexas. Por exemplo, consultar relacionamentos pai-filho dentro de uma hierarquia de categorias.
- Consultas Temporais: Consultas envolvendo dados baseados em tempo, como calcular tendências históricas ou analisar dados em intervalos de tempo específicos, podem exigir construções SQL mais intrincadas.
- Funções de Janela: Embora eu tenha usado funções de janela em consultas anteriores, usos mais avançados de funções de janela para tarefas analíticas complexas podem ser desafiadores.
- Consultas Geoespaciais: Bancos de dados espaciais e consultas baseadas em dados geográficos, como encontrar locais próximos ou relacionamentos espaciais complexos, podem ser complexos.
- Agregações Complexas: Agregações avançadas envolvendo múltiplos níveis de agrupamento e cálculos podem exigir conhecimento SQL mais intrincado.
- Consultas de Otimização: Escrever consultas altamente otimizadas que envolvam índices, ajuste de consultas e melhorias de desempenho pode ser intrincado.
- Algoritmos Personalizados: Implementar algoritmos ou lógica personalizados dentro de uma consulta SQL pode ser desafiador devido à complexidade da lógica envolvida.
- JOINs Avançados: Condições de junção complexas ou a combinação de múltiplos joins podem exigir consideração cuidadosa e possivelmente construções SQL mais complexas.
- Subconsultas e Subconsultas Correlacionadas: Embora eu possa lidar com subconsultas, subconsultas extremamente complexas ou aninhadas profundamente podem ser mais desafiadoras.
- Pivoting e Unpivoting: Transformar dados entre formatos amplos e altos (pivoting e unpivoting) pode se tornar complexo em certos cenários.
Onde estou encontrando problemas é em tentar desambiguar o esquema completo do banco de dados. Por exemplo, encontrar uma maneira de anotar a tabela user_actions. Apenas fornecer definições de seus códigos de action_type não é suficiente. Ele começa a adivinhar sobre user_id, target_user_id e acting_user_id.
As consultas mais comumente solicitadas não utilizam a maioria das tabelas e colunas do banco de dados. Se a IA for adicionada ao Data Explorer, pode valer a pena considerar ter modos “básico” e “avançado”. O modo básico poderia fornecer um prompt que cobre a maioria dos casos de uso. O modo avançado permitiria aos usuários selecionar quais informações são definidas no prompt.
Seria interessante trabalhar de trás para frente a partir de algumas solicitações de consultas sobre metadados, para ver o que precisaria ser fornecido ao prompt para que o GPT-3.5 crie a consulta com sucesso.