Pour étendre cette idée, permettre aux utilisateurs d’interagir avec des applications en langage naturel est à peu près mon rêve en matière d’IA. Avec Discourse et le plugin Data Explorer, il serait possible d’obtenir des résultats à partir d’invites comme “renvoyer une liste d’utilisateurs qui ont exprimé leur intérêt pour la modération”. Ou encore mieux, “envoyer une invitation au groupe community_moderation à tous les utilisateurs qui ont exprimé leur intérêt pour la modération”.
Pour revenir à ce qui est possible maintenant :
En testant avec ChatGPT 3.0 et 3.5, j’ai obtenu de bons résultats en lui demandant de renvoyer une requête PostgreSQL et en copiant la structure des tables qui m’intéressent dans l’invite. Par exemple :
Résumé
Moi : Renvoyer une requête postgresql qui liste tous les noms d’utilisateur des utilisateurs qui font partie du groupe “community_moderators” pour la structure de base de données suivante :
# == 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 : Bien sûr, voici une requête PostgreSQL qui liste tous les noms d’utilisateur des utilisateurs qui font partie du groupe “community_moderators” en fonction de la structure de base de données donnée :
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';
Cette requête récupère les noms d’utilisateur de la table users en la joignant avec la table group_users sur l’ID utilisateur, puis en la joignant avec la table groups sur l’ID de groupe. Elle filtre les résultats pour n’inclure que les noms d’utilisateur des utilisateurs qui font partie du groupe “community_moderators”.
Moi : Voici la structure des tables de sujets et de messages de l’application :
# == 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
Renvoyer une requête qui liste tous les ID de sujets, ID de messages et noms d’utilisateur pour tous les messages créés par des membres du groupe “community_moderators” qui indiquent un intérêt pour la manière de modérer des discussions polarisantes.
ChatGPT 3.5 : Pour y parvenir, vous devrez joindre les tables posts, topics, users et group_users en fonction du schéma fourni. Voici une requête PostgreSQL qui récupère les informations demandées :
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%');
Cette requête récupère l’topic_id, le post_id et le username pour tous les messages créés par des membres du groupe “community_moderators” qui contiennent certains mots-clés indiquant un intérêt pour la modération de discussions polarisantes. L’opérateur ILIKE est utilisé pour la correspondance de motifs insensible à la casse dans la colonne raw de la table posts.
Veuillez noter que cette requête suppose que les mots-clés que vous avez fournis sont indicatifs des messages souhaités. Vous pourriez avoir besoin d’ajuster ou d’étendre les mots-clés en fonction de vos critères spécifiques.
Moi : Écrire une requête qui renvoie un décompte des messages créés dans chaque période hebdomadaire depuis septembre 2022, créés par des membres du groupe community_moderators qui indiquent un certain intérêt pour la manière de modérer des discussions polarisantes.
ChatGPT 3.5 : Pour y parvenir, vous pouvez utiliser la requête PostgreSQL suivante pour renvoyer un décompte des messages créés dans chaque période hebdomadaire depuis septembre 2022, créés par des membres du groupe “community_moderators” qui indiquent un intérêt pour la manière de modérer des discussions polarisantes :
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' -- Date de début : septembre 2022
GROUP BY
week_start
ORDER BY
week_start;
Cette requête calcule le nombre de messages créés par des membres du groupe “community_moderators” qui contiennent les mots-clés spécifiés dans chaque période hebdomadaire depuis septembre 2022. Elle regroupe les résultats par semaine et les trie chronologiquement. Veuillez vous assurer d’ajuster les noms de colonnes et les relations de table en fonction du schéma réel de votre base de données.
Les résultats me semblent bons et représentent le type de requêtes que j’ai mis beaucoup de temps à écrire par le passé. Je suppose qu’il serait possible d’entraîner un modèle sur la structure de la base de données Discourse afin que les détails sur la structure puissent être omis des invites.