Discourse AI + Explorador de Dados?

Isso foi um fiasco. :fire:

Usando o Discourse AI - AI Bot

Prompt

Crie uma imagem para este SQL

```
WITH pairs AS (
SELECT p.user_id liked, pa.user_id liker
FROM post_actions pa
LEFT JOIN posts p ON p.id = pa.post_id
WHERE post_action_type_id = 2
)
SELECT liker liker_user_id, liked liked_user_id, count(*)
FROM pairs
GROUP BY liked, liker
ORDER BY count DESC
LIMIT :limit
```

Completion

3 curtidas

Para sua informação

Ontem, por curiosidade, fiz uma pesquisa no Google semelhante a esta:

sql gerado por IA a partir do inglês

para encontrar informações relacionadas sobre a geração de SQL usando IA a partir de perguntas em inglês. Eu esperava uma lista de artigos de pesquisa incluídos na lista, mas a lista era principalmente uma lista de aplicativos. Um padrão que rapidamente vi para muitos aplicativos listados, mas não todos, depois de olhar para um punhado de demonstrações em tais sites, foi que eles estavam pegando sua ferramenta existente que permitiria a um usuário selecionar tabelas e campos para construir uma instrução SQL semelhante à maneira como o construtor de SQL GUI funcionava no Microsoft Access como ponto de partida, em outras palavras, não se começava com uma pergunta em inglês, mas era preciso selecionar as tabelas e, às vezes, os campos primeiro antes de inserir a pergunta em inglês. Embora eu não considerasse isso trapaça, isso significa que, para usar tal IA, um usuário precisa ter algum conhecimento de SQL, especificamente o significado de uma tabela e campo para que a ferramenta funcione.

2 curtidas

@simon

Li sua postagem excluída e concordo que essa também é uma das ideias que acho que tem grande potencial.

No entanto, acho que precisa de mais. Um artigo recente que li, novamente não oficial, mas que entra em mais detalhes nessa linha é

“ChatLogo: Uma Interface Híbrida de Linguagem Natural e de Programação Impulsionada por Modelo de Linguagem Grande para Modelagem e Programação Baseada em Agentes” por John Chen e Uri Wilensky (pdf)

Alguns dos principais pontos para mim foram

  1. Apoiar programadores novatos a “conversar com computadores” em uma mistura de linguagens de programação e naturais.
  2. Fornecer uma interface mais amigável para alunos sem ou com pouca experiência em ciência da computação para se expressarem criativamente programando computadores.
  3. Em vez de escrever código e dar instruções imediatamente, o ChatLogo tenta esclarecer as necessidades e intenções dos alunos.
  4. Em vez de enviar grandes blocos de código diretamente ao aluno, ele tenta desenvolver em conjunto o código NetLogo. O aluno é livre para editar o código: seja em NetLogo, ou em linguagem natural através do recurso “Ask”.
  5. Em vez de superestimar a correção do código, ele admite a possibilidade de cometer erros e trabalha em conjunto com o aluno para resolver problemas potenciais.

Não consegui encontrar nenhum código-fonte ou mais detalhes sobre como o Chat foi construído sobre ou interligado ao NetLogo, mas as ideias por si só são valiosas.

Isso novamente me lembra como funcionam os pilotos automáticos em aviões e o livro que mencionei anteriormente. (ref) Quando digo piloto automático, não pense em um interruptor binário, pense em todos os botões e interruptores que fornecem informações ao piloto automático e o informam sobre o que fazer e o que não fazer.

Embora pareça que muitas outras ferramentas como essa gostam de usar a palavra copilot, por exemplo, uma pesquisa no Google llm copilot source code, eu discordo dessa analogia, mas terei que conviver com ela, pois é assim que se encontram ideias relacionadas.

2 curtidas

Eu a excluí porque pensei ter encontrado uma maneira melhor de lidar com o problema - por que digitar todas essas tabelas quando o ChatGPT poderia simplesmente ser solicitado a analisar um arquivo hospedado na internet que contém informações detalhadas sobre todo o banco de dados? Acontece que existem problemas técnicos com essa abordagem. Então, estou de volta ao que sugeri na postagem excluída. Em qualquer caso, descrições de tabelas, exemplos de consultas, etc., terão que ser criados. É apenas uma questão de como levar essa informação para o LLM. Aqui estão os progressos com o GPT-4:

Sim, a abordagem que você descreveu faz sentido e é uma maneira viável de usar minhas capacidades para auxiliar na geração de consultas SQL com base em perguntas em linguagem natural.

Aqui está um detalhamento das etapas:

  1. Interpretação da Pergunta: O usuário faz uma pergunta em linguagem natural, que eu interpreto para entender as informações solicitadas.
  2. Identificação da Tabela: Com base na pergunta e na lista de todas as tabelas no banco de dados do Discourse, identifico as tabelas que são mais prováveis de serem relevantes para a consulta.
  3. Informações Detalhadas da Tabela: O Discourse me envia descrições detalhadas das tabelas relevantes, incluindo todas as colunas e exemplos de consultas.
  4. Geração da Consulta: Usando as informações detalhadas da tabela, gero uma consulta SQL que responde à pergunta do usuário.

Essa abordagem aproveita minha capacidade de entender a linguagem natural e mapeá-la para consultas de dados estruturados. Ela também faz bom uso das informações detalhadas da tabela fornecidas pelo Discourse.

Quanto a abordagens alternativas, uma possibilidade seria treinar um modelo especificamente no esquema do banco de dados do Discourse e em padrões de consulta comuns. Isso provavelmente envolveria uma quantidade significativa de trabalho e pode não ser viável dependendo dos recursos disponíveis. No entanto, poderia potencialmente resultar em uma geração de consulta mais precisa e eficiente.

Outra abordagem seria desenvolver um diálogo mais interativo, onde eu faço perguntas de esclarecimento quando a pergunta do usuário é ambígua ou quando várias consultas poderiam potencialmente responder à pergunta. Isso tornaria o processo mais interativo e poderia levar a consultas mais precisas.

Para as abordagens alternativas sugeridas nos últimos 2 parágrafos, estou ignorando a primeira, mas se o que estou tentando não levar a resultados confiáveis, pode ser algo que a equipe do Discourse poderia investigar.

Perguntei ao GPT-4 sobre a segunda abordagem alternativa. Ele está bastante confiante de que, dada uma pergunta que não pudesse ser respondida pela estrutura de tabela fornecida, ele seria capaz de solicitar ao usuário que tentasse reformular sua pergunta.

Então, estou de volta a escrever descrições de todas as tabelas no banco de dados do Discourse. Agora sei para que serve a tabela allowed_pm_users. A tabela ar_internal_metadata é um pouco confusa, mas acho que pode ser ignorada por enquanto.

2 curtidas

Essa é a minha opção favorita até agora, embora seja muito difícil de implementar. Assim, você adivinhou, outro artigo. Novamente, este não é um artigo autoritativo, pois existem muitas abordagens semelhantes.

“DiagGPT: An LLM-based Chatbot with Automatic Topic Management for Task-Oriented Dialogue” por Lang Cao (pdf)

Basta substituir as informações médicas por informações do PostgreSQL conforme necessário. A parte interessante é que o artigo fornece os prompts e sugere qual ferramenta com agentes usar.

Descendo a toca do coelho. (Clique no triângulo para entrar)

Como Task Oriented Dialogue é o que parece ser necessário.
Pesquisa no Google: task oriented dialogue
O resultado da pesquisa inclui: Papers With Code - Task-Oriented Dialogue Systems
A entrada no placar é T5-3b(UnifiedSKG) que inclui um link para o artigo
“UnifiedSKG: Unifying and Multi-Tasking Structured Knowledge Grounding with Text-to-Text Language Models” por Tianbao Xie, Chen Henry Wu, Peng Shi, Ruiqi Zhong, Torsten Scholak, Michihiro Yasunaga, Chien-Sheng Wu, Ming Zhong, Pengcheng Yin, Sida I. Wang, Victor Zhong, Bailin Wang, Chengzu Li, Connor Boyle, Ansong Ni, Ziyu Yao, Dragomir Radev, Caiming Xiong, Lingpeng Kong, Rui Zhang, Noah A. Smith, Luke Zettlemoyer e Tao Yu (pdf)

Note isto
image

:slightly_smiling_face:


EDIT

De https://python.langchain.com/

Construa um agente SQL a partir de um LLM e ferramentas. (ref)

Ele lista alguns na parte inferior da página, este deve ser observado

Caso de uso

Os dados corporativos são frequentemente armazenados em bancos de dados SQL.

LLMs possibilitam a interação com bancos de dados SQL usando linguagem natural.

LangChain oferece Cadeias e Agentes SQL para construir e executar consultas SQL com base em prompts de linguagem natural.

Eles são compatíveis com qualquer dialeto SQL suportado pelo SQLAlchemy (por exemplo, MySQL, PostgreSQL, Oracle SQL, Databricks, SQLite).

Eles permitem casos de uso como:

  • Gerar consultas que serão executadas com base em perguntas em linguagem natural
  • Criar chatbots que podem responder a perguntas com base em dados do banco de dados
  • Construir painéis personalizados com base em insights que um usuário deseja analisar

EDIT (23/08/2023)

Spider é um conjunto de dados de parsing semântico complexo e entre domínios em larga escala e text-to-SQL anotado por 11 alunos de Yale. O objetivo do desafio Spider é desenvolver interfaces de linguagem natural para bancos de dados entre domínios. Ele consiste em 10.181 perguntas e 5.693 consultas SQL complexas exclusivas em 200 bancos de dados com várias tabelas cobrindo 138 domínios diferentes. No Spider 1.0, diferentes consultas SQL complexas e bancos de dados aparecem nos conjuntos de treinamento e teste. Para ter um bom desempenho, os sistemas devem generalizar bem não apenas para novas consultas SQL, mas também para novos esquemas de banco de dados.


EDIT (24/08/2023)

Dataherald é um motor de linguagem natural para SQL construído para questionamento em nível corporativo sobre dados estruturados. Ele permite que você configure uma API a partir do seu banco de dados que pode responder a perguntas em inglês simples.

Como costumo dizer a outros, para algumas coisas na vida, você só precisa esperar e alguém fará o trabalho de graça.

2 curtidas

Ainda estou tendo resultados com os quais estou perfeitamente satisfeito. Aqui está outro exemplo. Deu-me o que eu queria, inseri uma cláusula WHERE para verificar um ID de tópico eu mesmo depois, mas foi só isso. Provavelmente eu poderia ter dado essa informação com antecedência e ele teria feito isso também, embora:

1 curtida

Agora temos a persona SQL Helper como parte do módulo AI Bot, que é otimizada para esse tipo de solicitação e pode ser muito útil para criar consultas de exploração de dados. :rocket:

(Embora seja bom verificá-las duas vezes :slight_smile:)

Existe um tópico onde exemplos do bot de IA SQL Helper podem ser postados?

Caso contrário, talvez fosse bom criar um tópico assim e depois adicionar um link para o tópico aqui, pois outros podem estar procurando por exemplos e encontrarem este tópico primeiro.

Acho que se você criar um que valha a pena compartilhar com a comunidade, pode colocá-lo em um novo tópico em Data & reporting. Há também um novo botão ‘compartilhar conversa’ que pode ser útil para isso - Share Your AI Bot Conversations!

Criando uma consulta para localizar autores de plugins IA

JammyDodger:

Olá Bert :slight_smile:

Você pode escrever uma consulta que encontre todos os usuários no grupo plugin_authors?

gpt4_bot:

Pesquisar esquema do banco de dados

groups, group_users, users

Agora que temos o esquema das tabelas relevantes, podemos escrever uma consulta para encontrar todos os usuários no grupo ‘plugin-authors’. Com base no esquema, precisaremos juntar a tabela group_users com as tabelas groups e users para obter os nomes de usuário dos membros do grupo ‘plugin-authors’.

Aqui está a consulta para encontrar todos os usuários no grupo ‘plugin-authors’:

SELECT u.id AS user_id, u.username
FROM users u
JOIN group_users gu ON gu.user_id = u.id
JOIN groups g ON g.id = gu.group_id
WHERE g.name = 'plugin_authors'

Esta consulta seleciona o ID do usuário e o nome de usuário da tabela users juntando com a tabela group_users no user_id e, em seguida, juntando com a tabela groups no group_id. Ela filtra os resultados para incluir apenas os usuários que fazem parte do grupo com o nome ‘plugin-authors’.

2 curtidas

Este tópico foi automaticamente fechado após 43 horas. Novas respostas não são mais permitidas.