Expandindo um pouco essa ideia, permitir que os usuários interajam com aplicativos usando linguagem natural é praticamente o meu sonho em relação à IA. Com o Discourse e o plugin Data Explorer, seria possível obter resultados de prompts como “retornar uma lista de usuários que expressaram interesse em moderação”. Ou ainda melhor, “enviar um convite para o grupo community_moderation para todos os usuários que expressaram interesse em moderação”.
Voltando ao que é possível agora:
Testando com ChatGPT 3.0 e 3.5, obtive bons resultados ao pedir para ele retornar uma consulta PostgreSQL e copiar a estrutura das tabelas de meu interesse para o prompt. Por exemplo:
Resumo
Eu: Retorne uma consulta postgresql que liste todos os nomes de usuário para usuários que estão no grupo “community_moderators” para a seguinte estrutura de banco de dados:
# == Schema Information
#
# Table name: groups
#
# id :integer not null, primary key
# name :string not null
#
# == Schema Information
#
# Table name: group_users
#
# id :integer not null, primary key
# group_id :integer not null
#
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# username :string(60) not null
ChatGPT 3.5: Claro, aqui está uma consulta PostgreSQL que lista todos os nomes de usuário para usuários que estão no grupo “community_moderators” com base na estrutura de banco de dados fornecida:
SELECT u.username
FROM users u
JOIN group_users gu ON u.id = gu.user_id
JOIN groups g ON gu.group_id = g.id
WHERE g.name = 'community_moderators';
Esta consulta recupera os nomes de usuário da tabela users juntando-a com a tabela group_users pelo ID do usuário e, em seguida, juntando-a com a tabela groups pelo ID do grupo. Ela filtra os resultados para incluir apenas os nomes de usuário de usuários que estão no grupo “community_moderators”.
Eu: Aqui está a estrutura das tabelas de tópicos e posts da aplicação:
# == Schema Information
#
# Table name: topics
#
# id :integer not null, primary key
# title :string not null
#
# == Schema Information
#
# Table name: posts
#
# id :integer not null, primary key
# user_id :integer
# topic_id :integer not null
# post_number :integer not null
# raw :text not null
Retorne uma consulta que liste todos os IDs de tópicos, IDs de posts e nomes de usuários para todos os posts criados por membros do grupo “community_moderators” que deem alguma indicação de que o autor está interessado em como moderar discussões polarizadas.
ChatGPT 3.5: Para conseguir isso, você precisaria juntar as tabelas posts, topics, users e group_users com base no esquema fornecido. Aqui está uma consulta PostgreSQL que recupera as informações solicitadas:
SELECT t.id AS topic_id, p.id AS post_id, u.username
FROM posts p
JOIN topics t ON p.topic_id = t.id
JOIN users u ON p.user_id = u.id
JOIN group_users gu ON u.id = gu.user_id
JOIN groups g ON gu.group_id = g.id
WHERE g.name = 'community_moderators'
AND (p.raw ILIKE '%moderate%' OR p.raw ILIKE '%polarizing%' OR p.raw ILIKE '%discussion%');
Esta consulta recupera o topic_id, post_id e username para todos os posts criados por membros do grupo “community_moderators” que contêm certas palavras-chave indicando interesse em moderar discussões polarizadas. O operador ILIKE é usado para correspondência de padrões sem distinção entre maiúsculas e minúsculas na coluna raw da tabela posts.
Por favor, note que esta consulta assume que as palavras-chave que você forneceu são indicativas dos posts desejados. Pode ser necessário ajustar ou expandir as palavras-chave com base em seus critérios específicos.
Eu: Escreva uma consulta que retorne uma contagem de posts criados em cada período semanal desde setembro de 2022, criados por membros do grupo community_moderators que indicam algum interesse em como moderar discussões polarizadas.
ChatGPT 3.5: Para conseguir isso, você pode usar a seguinte consulta PostgreSQL para retornar uma contagem de posts criados em cada período semanal desde setembro de 2022, criados por membros do grupo “community_moderators” que indicam interesse em como moderar discussões polarizadas:
SELECT
DATE_TRUNC('week', p.created_at) AS week_start,
COUNT(p.id) AS post_count
FROM
posts p
JOIN
users u ON p.user_id = u.id
JOIN
group_users gu ON u.id = gu.user_id
JOIN
groups g ON gu.group_id = g.id
WHERE
g.name = 'community_moderators'
AND (p.raw ILIKE '%moderate%'
OR p.raw ILIKE '%polarizing%'
OR p.raw ILIKE '%political%'
OR p.raw ILIKE '%contentious%'
OR p.raw ILIKE '%debate%'
OR p.raw ILIKE '%controversial%'
OR p.raw ILIKE '%discussion%')
AND p.created_at >= '2022-09-01' -- Data de início: Setembro de 2022
GROUP BY
week_start
ORDER BY
week_start;
Esta consulta calcula a contagem de posts criados por membros do grupo “community_moderators” que contêm as palavras-chave especificadas em cada período semanal desde setembro de 2022. Ela agrupa os resultados por semana e os ordena cronologicamente. Por favor, certifique-se de ajustar os nomes das colunas e as relações entre as tabelas com base no seu esquema de banco de dados real.
Os resultados parecem bons para mim e representam os tipos de consultas que me levaram um bom tempo para escrever no passado. Assumo que seria possível treinar um modelo na estrutura do banco de dados do Discourse para que detalhes sobre a estrutura pudessem ser omitidos dos prompts.