Discourse AI + Data Explorer?

Mit ChatGPT 3.5 erhalte ich unerwartete Ergebnisse, wenn ich das vollständige Schema angebe. Zum Beispiel versucht es ständig, den Autor des Themas in der Tabelle topic_users zu finden.

Ich erhalte erfolgreiche Ergebnisse, indem ich die Informationen im Prompt auf die Tabellen und Spalten beschränke, die für das Schreiben der Abfrage erforderlich sind. Außerdem füge ich zusätzliche Informationen darüber hinzu, wie die Spalten verwendet werden. Zum Beispiel:

# Tabellename: 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 (der Benutzer, dem die Aktion angerechnet werden soll)
#  target_topic_id :integer
#  acting_user_id  :integer (der Benutzer, der die Aktion ausgeführt hat, z. B. kann ein Staff-Benutzer eine Aktion im Namen eines regulären Benutzers ausführen)
#  created_at      :datetime         not null

Eine andere Möglichkeit, dies mit dem Data Explorer-Plugin zum Laufen zu bringen, besteht darin, dass Benutzer ein dynamisch generiertes Formular ausfüllen, das die gesuchten Daten und die darauf anzuwendenden Bedingungen auflistet. Der Prompt könnte dann programmgesteuert von Discourse generiert und an das LLM gesendet werden, um die Abfrage zu schreiben.

Edit: @jordan-violet, dies könnte ein nützlicher Ausgangspunkt sein. Hier ist ein annotiertes Teilschema, das bei mir funktioniert. Es funktioniert gut, solange ich meine Abfragen so beschränke, dass sie mit dem bereitgestellten Schema beantwortet werden können. Ich habe dem Schema weitere Details hinzugefügt, um Aspekte zu klären, die ChatGPT scheinbar verwirren. Der offensichtliche Nachteil dieses Ansatzes ist, dass ein vollständig annotiertes Schema das Token-Limit von ChatGPT 3.5 überschreiten wird. Ich habe einige Informationen im Schema aufgenommen, die weggelassen werden könnten, um die Anzahl der verwendeten Tokens zu reduzieren.

Zusammenfassung
# == Schema Information
#
# Tabellename: 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
#
# Tabellename: users
#
#  id                        :integer          not null, primary key
#  username                  :string(60)       not null
#  created_at                :datetime         not null
#  updated_at                :datetime         not null
#  name                      :string           (der echte Name des Benutzers)
#  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
#
# Tabellename: 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          (die ID des Benutzers, der das Thema erstellt hat)
#  last_post_user_id         :integer          not null (die ID des Benutzers, der den letzten Beitrag im Thema erstellt hat)
#  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 (kann auf entweder „regular“ oder „private_message“ gesetzt werden)
#  slug                      :string
#  deleted_by_id             :integer          (die ID des Benutzers, der das Thema gelöscht hat)
#  participant_count         :integer          default(1)
#  word_count                :integer
#  excerpt                   :string
#  highest_staff_post_number :integer          default(0), not null
#
# Tabellename: posts
#
#  id                      :integer          not null, primary key
#  user_id                 :integer          (die ID des Benutzers, der den Beitrag erstellt hat)
#  topic_id                :integer          not null
#  post_number             :integer          not null (gibt die Reihenfolge des Beitrags in seinem Thema an)
#  raw                     :text             not null (der Inhalt des Beitrags)
#  created_at              :datetime         not null
#  updated_at              :datetime         not null
#  reply_to_post_number    :integer          (die post_number, auf die der Beitrag antwortet)
#  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 (die Anzahl der Male, die der Beitrag gelesen wurde)
#  post_type               :integer          default(1), not null (:regular=>1, :moderator_action=>2, :small_action=>3, :whisper=>4)
#  last_editor_id          :integer          (die ID des Benutzers, der den Beitrag zuletzt bearbeitet hat)
#  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
#
# Tabellename: categories
#
#  id                                        :integer          not null, primary key
#  name                                      :string(50)       not null
#  topic_id                                  :integer          (die ID des Themas, das für die Beschreibung der Kategorie verwendet wird)
#  topic_count                               :integer          default(0), not null
#  created_at                                :datetime         not null
#  updated_at                                :datetime         not null
#  user_id                                   :integer          not null (die ID des Benutzers, der das Thema erstellt hat)
#  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)
#
# Tabellename: 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             (die Beschreibung der Gruppe)
#  allow_membership_requests          :boolean          default(FALSE), not null
#  full_name                          :string
#  visibility_level                   :integer          default(0), not null (wer die Gruppe sehen kann :public=>0, :logged_on_users=>1, :members=>2, :staff=>3, :owners=>4)
#  messageable_level                  :integer          default(0) (wer der Gruppe eine Nachricht senden kann :public=>0, :logged_on_users=>1, :members=>2, :staff=>3, :owners=>4)
#  mentionable_level                  :integer          default(0) (wer die Gruppe erwähnen kann :public=>0, :logged_on_users=>1, :members=>2, :staff=>3, :owners=>4)
#  members_visibility_level           :integer          default(0), not null (wer die Mitglieder der Gruppe sehen kann :public=>0, :logged_on_users=>1, :members=>2, :staff=>3, :owners=>4)
#
# Tabellename: group_users
#
#  id                 :integer          not null, primary key
#  group_id           :integer          not null
#  user_id            :integer          not null
#  created_at         :datetime         not null
#
# Tabellename: 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 (der Benutzer, dem die Aktion angerechnet werden soll)
#  target_topic_id :integer
#  target_post_id  :integer
#  target_user_id  :integer          (z. B. die ID des Benutzers, dessen Beitrag geliked wurde)
#  acting_user_id  :integer          (der Benutzer, der die Aktion ausgeführt hat, z. B. kann ein Staff-Benutzer eine Aktion im Namen eines regulären Benutzers ausführen)
#  created_at      :datetime         not null
#  updated_at      :datetime         not null
#
# Tabellename: topic_views
#
#  topic_id   :integer          not null
#  viewed_at  :date             not null
#  user_id    :integer         (wird gesetzt, wenn das Thema von einem angemeldeten Benutzer angesehen wurde)
#  ip_address :inet            (wird gesetzt, wenn das Thema von einem anonymen Benutzer angesehen wurde)
#
# Tabellename: 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) (wird auf TRUE gesetzt, wenn der Benutzer ein mobiles Gerät verwendet hat)
#  time_read  :integer          default(0), not null (der zurückgegebene Wert ist die Anzahl der Sekunden des Besuchs)

Hier ist ein Link zu einer Chat-Sitzung, in der ich es ausprobiert habe: ChatGPT

Wenn Sie versuchen möchten, diese Liste zu erweitern, ist der einfachste Weg, das Schema von unten des Modells zu kopieren, an dem Sie interessiert sind, direkt aus dem Discourse-Code: discourse/app/models at main · discourse/discourse · GitHub.

3 „Gefällt mir“