Discourse AI + Data Explorer?

Estendendo un po’ questa idea, permettere agli utenti di interagire con le applicazioni utilizzando il linguaggio naturale è praticamente il mio sogno per quanto riguarda l’IA. Con Discourse e il plugin Data Explorer, potrebbe essere possibile ottenere risultati da prompt come “restituisci un elenco di utenti che hanno espresso interesse per la moderazione”. O ancora meglio, “invia un invito al gruppo community_moderation a tutti gli utenti che hanno espresso interesse per la moderazione”.

Tornando a ciò che è possibile ora:

Testando con ChatGPT 3.0 e 3.5, ho ottenuto buoni risultati quando gli ho chiesto di restituire una query PostgreSQL e ho copiato la struttura delle tabelle che mi interessano nel prompt. Ad esempio:

Riassunto

Io: Restituisci una query postgresql che elenchi tutti gli username degli utenti che fanno parte del gruppo “community_moderators” per la seguente struttura del database:

# == 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: Certo, ecco una query PostgreSQL che elenca tutti gli username degli utenti che fanno parte del gruppo “community_moderators” in base alla struttura del database fornita:

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';

Questa query recupera gli username dalla tabella users unendola alla tabella group_users tramite l’ID utente e quindi unendola alla tabella groups tramite l’ID del gruppo. Filtra i risultati per includere solo gli username degli utenti che fanno parte del gruppo “community_moderators”.

Io: Ecco la struttura delle tabelle topics e posts dell’applicazione:

# == 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

Restituisci una query che elenchi tutti gli ID di topic, gli ID di post e gli username per tutti i post creati da membri del gruppo “community_moderators” che indicano un qualche interesse su come moderare discussioni polarizzanti.

ChatGPT 3.5: Per ottenere questo risultato, dovresti unire le tabelle posts, topics, users e group_users in base allo schema fornito. Ecco una query PostgreSQL che recupera le informazioni richieste:

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%');

Questa query recupera topic_id, post_id e username per tutti i post creati da membri del gruppo “community_moderators” che contengono determinate parole chiave che indicano un interesse per la moderazione di discussioni polarizzanti. L’operatore ILIKE viene utilizzato per la corrispondenza di pattern case-insensitive nella colonna raw della tabella posts.

Si prega di notare che questa query presuppone che le parole chiave fornite siano indicative dei post desiderati. Potrebbe essere necessario regolare o espandere le parole chiave in base ai criteri specifici.

Io: Scrivi una query che restituisca un conteggio dei post creati in ogni periodo settimanale da settembre 2022, creati da membri del gruppo community_moderators che indicano un qualche interesse su come moderare discussioni polarizzanti.

ChatGPT 3.5: Per ottenere questo risultato, puoi utilizzare la seguente query PostgreSQL per restituire un conteggio dei post creati in ogni periodo settimanale da settembre 2022, creati da membri del gruppo “community_moderators” che indicano un interesse su come moderare discussioni polarizzanti:

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 di inizio: settembre 2022
GROUP BY
    week_start
ORDER BY
    week_start;

Questa query calcola il conteggio dei post creati da membri del gruppo “community_moderators” che contengono le parole chiave specificate in ogni periodo settimanale da settembre 2022. Raggruppa i risultati per settimana e li ordina cronologicamente. Assicurati di regolare i nomi delle colonne e le relazioni tra le tabelle in base allo schema effettivo del tuo database.


I risultati mi sembrano buoni e rappresentano i tipi di query che in passato mi richiedevano molto tempo per scrivere. Presumo che sarebbe possibile addestrare un modello sulla struttura del database di Discourse in modo che i dettagli sulla struttura possano essere omessi dai prompt.

4 Mi Piace