Discourse AI + Explorador de Dados?

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
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Agregações Complexas: Agregações avançadas envolvendo múltiplos níveis de agrupamento e cálculos podem exigir conhecimento SQL mais intrincado.
  6. Consultas de Otimização: Escrever consultas altamente otimizadas que envolvam índices, ajuste de consultas e melhorias de desempenho pode ser intrincado.
  7. Algoritmos Personalizados: Implementar algoritmos ou lógica personalizados dentro de uma consulta SQL pode ser desafiador devido à complexidade da lógica envolvida.
  8. 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.
  9. Subconsultas e Subconsultas Correlacionadas: Embora eu possa lidar com subconsultas, subconsultas extremamente complexas ou aninhadas profundamente podem ser mais desafiadoras.
  10. 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.

3 curtidas