ChatGPT 3.5 では、完全なスキーマを提供すると予期せぬ結果が得られます。例えば、topic_users テーブルからトピックの作成者を見つけようとし続けます。
成功するには、クエリ作成に必要なテーブルと列にプロンプトの情報を制限し、さらに列の使用方法に関する追加情報を加えることで解決します。例えば:
# テーブル名: user_actions
#
# id :integer not null, primary key
# action_type :integer not null (:like=1,:was_liked=2,:new_topic=4,:reply=5,:response=6,:mention=7,:quote=9,:edit=11,:new_private_message=12,:got_private_message=13,:solved=15,:assigned=16)
# user_id :integer not null (アクションの功績が帰されるユーザー)
# target_topic_id :integer
# acting_user_id :integer (アクションを実行したユーザー。例えば、スタッフユーザーは一般ユーザーに代わってアクションを実行できる)
# created_at :datetime not null
Data Explorer プラグインでこれを機能させるもう一つの方法は、ユーザーが探しているデータと適用したい条件をリスト化した動的に生成されるフォームに入力してもらうことです。プロンプトは Discourse によってプログラム的に生成され、その後 LLM に送信されてクエリを作成させます。
編集:@jordan-violet、これは有用な出発点になるかもしれません。私が使用している注釈付きの部分的なスキーマを以下に示します。提供されたスキーマで答えられるようにクエリを制限している限り、これはよく機能します。ChatGPT が混乱しそうな詳細を明確にするため、スキーマに追加情報を加えました。このアプローチの明らかな欠点は、完全に注釈付きのスキーマは ChatGPT 3.5 のトークン制限を超えてしまうことです。トークン数を削減するために省略可能な情報をいくつか含めています。
要約
# == スキーマ情報
#
# テーブル名: application_requests
#
# id :integer not null, primary key
# date :date not null
# req_type :integer not null ("http_total"=0,"http_2xx"=1,"http_background"=2,"http_3xx"=3,"http_4xx"=4,"http_5xx"=5,"page_view_crawler"=6,"page_view_logged_in"=7,"page_view_anon"=8,"page_view_logged_in_mobile"=9,"page_view_anon_mobile"=10,"api"=11,"user_api"=12)
# count :integer default(0), not null
#
# テーブル名: users
#
# id :integer not null, primary key
# username :string(60) not null
# created_at :datetime not null
# updated_at :datetime not null
# name :string (ユーザーの実名)
# last_posted_at :datetime
# active :boolean default(FALSE), not null
# username_lower :string(60) not null
# last_seen_at :datetime
# admin :boolean default(FALSE), not null
# trust_level :integer not null
# approved :boolean default(FALSE), not null
# approved_by_id :integer
# approved_at :datetime
# previous_visit_at :datetime
# suspended_at :datetime
# suspended_till :datetime
# date_of_birth :date
# ip_address :inet
# moderator :boolean default(FALSE)
# title :string
# locale :string(10)
# primary_group_id :integer
# registration_ip_address :inet
# staged :boolean default(FALSE), not null
# first_seen_at :datetime
# silenced_till :datetime
#
# テーブル名: topics
#
# id :integer not null, primary key
# title :string not null
# last_posted_at :datetime
# created_at :datetime not null
# updated_at :datetime not null
# views :integer default(0), not null
# posts_count :integer default(0), not null
# user_id :integer (トピックを作成したユーザーの ID)
# last_post_user_id :integer not null (トピック内の最後の投稿を作成したユーザーの ID)
# reply_count :integer default(0), not null
# deleted_at :datetime
# highest_post_number :integer default(0), not null
# like_count :integer default(0), not null
# category_id :integer
# visible :boolean default(TRUE), not null
# moderator_posts_count :integer default(0), not null
# closed :boolean default(FALSE), not null
# archived :boolean default(FALSE), not null
# bumped_at :datetime not null
# archetype :string default("regular"), not null ("regular" または "private_message" のいずれかに設定可能)
# slug :string
# deleted_by_id :integer (トピックを削除したユーザーの ID)
# participant_count :integer default(1)
# word_count :integer
# excerpt :string
# highest_staff_post_number :integer default(0), not null
#
# テーブル名: posts
#
# id :integer not null, primary key
# user_id :integer (投稿を作成したユーザーの ID)
# topic_id :integer not null
# post_number :integer not null (トピック内での投稿の順序を示す)
# raw :text not null (投稿の内容)
# created_at :datetime not null
# updated_at :datetime not null
# reply_to_post_number :integer (返信先の post_number)
# reply_count :integer default(0), not null
# deleted_at :datetime
# like_count :integer default(0), not null
# bookmark_count :integer default(0), not null
# reads :integer default(0), not null (投稿が読まれた回数)
# post_type :integer default(1), not null (:regular=1, :moderator_action=2, :small_action=3, :whisper=4)
# last_editor_id :integer (最後に投稿を編集したユーザーの ID)
# hidden :boolean default(FALSE), not null
# hidden_reason_id :integer (:flag_threshold_reached=1,:flag_threshold_reached_again=2,:new_user_spam_threshold_reached=3,:flagged_by_tl3_user=4,:email_spam_header_found=5,:flagged_by_tl4_user=6,:email_authentication_result_header=7,:imported_as_unlisted=8)
# edit_reason :string
# word_count :integer
# wiki :boolean default(FALSE), not null
#
# テーブル名: categories
#
# id :integer not null, primary key
# name :string(50) not null
# topic_id :integer (カテゴリの説明に使用されるトピックの ID)
# topic_count :integer default(0), not null
# created_at :datetime not null
# updated_at :datetime not null
# user_id :integer not null (トピックを作成したユーザーの ID)
# topics_year :integer default(0)
# topics_month :integer default(0)
# topics_week :integer default(0)
# slug :string not null
# description :text
# text_color :string(6) default("FFFFFF"), not null
# read_restricted :boolean default(FALSE), not null
# auto_close_hours :float
# post_count :integer default(0), not null
# latest_post_id :integer
# latest_topic_id :integer
# position :integer
# parent_category_id :integer
# posts_year :integer default(0)
# posts_month :integer default(0)
# posts_week :integer default(0)
# topics_day :integer default(0)
# posts_day :integer default(0)
#
# テーブル名: groups
#
# id :integer not null, primary key
# name :string not null
# created_at :datetime not null
# automatic :boolean default(FALSE), not null
# user_count :integer default(0), not null
# title :string
# bio_raw :text (グループの説明)
# allow_membership_requests :boolean default(FALSE), not null
# full_name :string
# visibility_level :integer default(0), not null (グループを表示できるユーザー :public=0, :logged_on_users=1, :members=2, :staff=3, :owners=4)
# messageable_level :integer default(0) (グループにメッセージを送信できるユーザー :public=0, :logged_on_users=1, :members=2, :staff=3, :owners=4)
# mentionable_level :integer default(0) (グループをメンションできるユーザー :public=0, :logged_on_users=1, :members=2, :staff=3, :owners=4)
# members_visibility_level :integer default(0), not null (グループのメンバーを表示できるユーザー :public=0, :logged_on_users=1, :members=2, :staff=3, :owners=4)
#
# テーブル名: group_users
#
# id :integer not null, primary key
# group_id :integer not null
# user_id :integer not null
# created_at :datetime not null
#
# テーブル名: user_actions
#
# id :integer not null, primary key
# action_type :integer not null (:like=1,:was_liked=2,:new_topic=4,:reply=5,:response=6,:mention=7,:quote=9,:edit=11,:new_private_message=12,:got_private_message=13,:solved=15,:assigned=16)
# user_id :integer not null (アクションの功績が帰されるユーザー)
# target_topic_id :integer
# target_post_id :integer
# target_user_id :integer (例えば、投稿が「いいね」されたユーザーの ID)
# acting_user_id :integer (アクションを実行したユーザー。例えば、スタッフユーザーは一般ユーザーに代わってアクションを実行できる)
# created_at :datetime not null
# updated_at :datetime not null
#
# テーブル名: topic_views
#
# topic_id :integer not null
# viewed_at :date not null
# user_id :integer (ログインしたユーザーがトピックを表示した場合に設定される)
# ip_address :inet (匿名ユーザーがトピックを表示した場合に設定される)
#
# テーブル名: user_visits
#
# id :integer not null, primary key
# user_id :integer not null
# visited_at :date not null
# posts_read :integer default(0)
# mobile :boolean default(FALSE) (ユーザーがモバイルデバイスで訪問した場合に TRUE に設定される)
# time_read :integer default(0), not null (返される値は訪問の秒数)
私が試したチャットセッションへのリンクはこちらです:ChatGPT
このリストを拡張したい場合は、関心のあるモデルの下部からスキーマをコピーし、Discourse のコードから直接取得するのが最も簡単な方法です:discourse/app/models at main · discourse/discourse · GitHub