Discourse AI + Data Explorer?

このアイデアを少し拡張すると、ユーザーが自然言語でアプリケーションと対話できるようにすることは、AI に関する私の夢そのものです。Discourse と Data Explorer プラグインを使用すれば、「モデレーションに関心を示したユーザーのリストを返す」といったプロンプトから結果を得られる可能性があります。さらに、「モデレーションに関心を示したすべてのユーザーに community_moderation グループへの招待を送信する」といったことも可能です。

現在可能なことについてに戻ります。

ChatGPT 3.0 および 3.5 でテストしたところ、PostgreSQL クエリを返すように依頼し、関心のあるテーブルの構造をプロンプトにコピーした場合、良好な結果が得られました。たとえば、次のようになります。

概要

: 指定されたデータベース構造に基づいて、「community_moderators」グループに属するユーザーのすべてのユーザー名を一覧表示する postgresql クエリを返してください。

# == 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: はい、指定されたデータベース構造に基づいて、「community_moderators」グループに属するユーザーのすべてのユーザー名を一覧表示する PostgreSQL クエリを次に示します。

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

このクエリは、users テーブルから group_users テーブルにユーザー ID で結合し、次に groups テーブルにグループ ID で結合することによってユーザー名を取得します。結果は、「community_moderators」グループに属するユーザーのユーザー名のみに絞り込まれます。

: アプリケーションのトピックと投稿のテーブルの構造を次に示します。

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

「community_moderators」グループのメンバーによって作成されたすべての投稿について、投稿者が意見が分かれる議論のモデレーション方法に関心があることを示す投稿のトピック ID、投稿 ID、およびユーザー名を一覧表示するクエリを返してください。

ChatGPT 3.5: これを実現するには、指定されたスキーマに基づいて poststopicsusers、および group_users テーブルを結合する必要があります。要求された情報を取得する PostgreSQL クエリを次に示します。

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

このクエリは、「community_moderators」グループのメンバーによって作成され、意見が分かれる議論のモデレーションに関心があることを示す特定のキーワードを含む投稿の topic_idpost_id、および username を取得します。ILIKE 演算子は、posts テーブルの raw 列での大文字小文字を区別しないパターンマッチングに使用されます。

このクエリは、指定されたキーワードが望ましい投稿の指標であると想定しています。特定の基準に基づいてキーワードを調整または拡張する必要がある場合があります。

: 2022年9月以降、毎週作成された投稿の数を、意見が分かれる議論のモデレーション方法に関心を示す community_moderators グループのメンバーによって作成された投稿について、カウントを返すクエリを作成してください。

ChatGPT 3.5: これを実現するには、次の PostgreSQL クエリを使用して、2022年9月以降の各週に作成された投稿の数を、意見が分かれる議論のモデレーションに関心を示す community_moderators グループのメンバーによって作成された投稿についてカウントできます。

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' -- 開始日: 2022年9月
GROUP BY
    week_start
ORDER BY
    week_start;

このクエリは、2022年9月以降の各週に作成された、指定されたキーワードを含む「community_moderators」グループのメンバーによって作成された投稿の数を計算します。結果を週ごとにグループ化し、時系列順に並べ替えます。実際のデータベーススキーマに基づいて、列名とテーブルの関係を調整してください。


結果は私にとって良好であり、過去に私が書くのにかなりの時間を費やしたクエリの種類を表しています。Discourse データベース構造でモデルをトレーニングできると仮定すると、プロンプトから構造に関する詳細を省略できるでしょう。

「いいね!」 4