Discourse AI + Data Explorer?

在使用 ChatCPT 3.5 时,如果我提供完整的架构,会得到意想不到的结果。例如,它总是试图在 topic_users 表中查找主题作者。

我通过将提示中的信息限制为编写查询所需的表和列,并添加一些关于列用途的额外信息,从而获得了成功的结果。例如:

# 表名:user_actions
#
#  id              :integer          不为空,主键
#  action_type     :integer          不为空 (: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          不为空 (应被记入该操作的用户)
#  target_topic_id :integer
#  acting_user_id  :integer (执行该操作的用户,例如,管理员用户可以为普通用户执行操作)
#  created_at      :datetime         不为空

另一种让数据探索插件(Data Explorer plugin)正常工作的方法是,让用户填写一个动态生成的表单,列出他们想要查询的数据以及希望应用于数据的条件。Discourse 可以程序化地生成提示,然后将其发送给 LLM 以生成查询。

编辑:@jordan-violet,这可能是一个有用的起点。这里是一个经过注释的部分架构,目前对我有效。只要我限制查询范围,使其能够通过提供的架构回答,效果就很好。我在架构中添加了更多细节,以澄清那些似乎会让 ChatGPT 困惑的内容。这种方法的一个明显缺点是,完全注释的架构会超出 ChatGPT 3.5 的令牌限制。我在架构中包含了一些可以省略的信息,以减少使用的令牌数量。

摘要
# == 架构信息
#
# 表名:application_requests
#
#  id       :integer          不为空,主键
#  date     :date             不为空
#  req_type :integer          不为空 ("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          默认值(0),不为空
#
# 表名:users
#
#  id                        :integer          不为空,主键
#  username                  :string(60)       不为空
#  created_at                :datetime         不为空
#  updated_at                :datetime         不为空
#  name                      :string           (用户的真实姓名)
#  last_posted_at            :datetime
#  active                    :boolean          默认值(FALSE),不为空
#  username_lower            :string(60)       不为空
#  last_seen_at              :datetime
#  admin                     :boolean          默认值(FALSE),不为空
#  trust_level               :integer          不为空
#  approved                  :boolean          默认值(FALSE),不为空
#  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          默认值(FALSE)
#  title                     :string
#  locale                    :string(10)
#  primary_group_id          :integer
#  registration_ip_address   :inet
#  staged                    :boolean          默认值(FALSE),不为空
#  first_seen_at             :datetime
#  silenced_till             :datetime
#
# 表名:topics
#
#  id                        :integer          不为空,主键
#  title                     :string           不为空
#  last_posted_at            :datetime
#  created_at                :datetime         不为空
#  updated_at                :datetime         不为空
#  views                     :integer          默认值(0),不为空
#  posts_count               :integer          默认值(0),不为空
#  user_id                   :integer          (创建该主题的用户 ID)
#  last_post_user_id         :integer          不为空 (在主题中创建最后一篇帖子的用户 ID)
#  reply_count               :integer          默认值(0),不为空
#  deleted_at                :datetime
#  highest_post_number       :integer          默认值(0),不为空
#  like_count                :integer          默认值(0),不为空
#  category_id               :integer
#  visible                   :boolean          默认值(TRUE),不为空
#  moderator_posts_count     :integer          默认值(0),不为空
#  closed                    :boolean          默认值(FALSE),不为空
#  archived                  :boolean          默认值(FALSE),不为空
#  bumped_at                 :datetime         不为空
#  archetype                 :string           默认值("regular"),不为空 (可设置为 "regular" 或 "private_message")
#  slug                      :string
#  deleted_by_id             :integer          (删除该主题的用户 ID)
#  participant_count         :integer          默认值(1)
#  word_count                :integer
#  excerpt                   :string
#  highest_staff_post_number :integer          默认值(0),不为空
#
# 表名:posts
#
#  id                      :integer          不为空,主键
#  user_id                 :integer          (创建该帖子的用户 ID)
#  topic_id                :integer          不为空
#  post_number             :integer          不为空 (表示帖子在其主题中的顺序)
#  raw                     :text             不为空 (帖子的内容)
#  created_at              :datetime         不为空
#  updated_at              :datetime         不为空
#  reply_to_post_number    :integer          (该帖子回复的帖子编号)
#  reply_count             :integer          默认值(0),不为空
#  deleted_at              :datetime
#  like_count              :integer          默认值(0),不为空
#  bookmark_count          :integer          默认值(0),不为空
#  reads                   :integer          默认值(0),不为空 (帖子被阅读的次数)
#  post_type               :integer          默认值(1),不为空 (:regular=1, :moderator_action=2, :small_action=3, :whisper=4)
#  last_editor_id          :integer          (最后编辑该帖子的用户 ID)
#  hidden                  :boolean          默认值(FALSE),不为空
#  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          默认值(FALSE),不为空
#
# 表名:categories
#
#  id                                        :integer          不为空,主键
#  name                                      :string(50)       不为空
#  topic_id                                  :integer          (用于类别描述的主题 ID)
#  topic_count                               :integer          默认值(0),不为空
#  created_at                                :datetime         不为空
#  updated_at                                :datetime         不为空
#  user_id                                   :integer          不为空 (创建该主题的用户 ID)
#  topics_year                               :integer          默认值(0)
#  topics_month                              :integer          默认值(0)
#  topics_week                               :integer          默认值(0)
#  slug                                      :string           不为空
#  description                               :text
#  text_color                                :string(6)        默认值("FFFFFF"),不为空
#  read_restricted                           :boolean          默认值(FALSE),不为空
#  auto_close_hours                          :float
#  post_count                                :integer          默认值(0),不为空
#  latest_post_id                            :integer
#  latest_topic_id                           :integer
#  position                                  :integer
#  parent_category_id                        :integer
#  posts_year                                :integer          默认值(0)
#  posts_month                               :integer          默认值(0)
#  posts_week                                :integer          默认值(0)
#  topics_day                                :integer          默认值(0)
#  posts_day                                 :integer          默认值(0)
#
# 表名:groups
#
#  id                                 :integer          不为空,主键
#  name                               :string           不为空
#  created_at                         :datetime         不为空
#  automatic                          :boolean          默认值(FALSE),不为空
#  user_count                         :integer          默认值(0),不为空
#  title                              :string
#  bio_raw                            :text             (群组描述)
#  allow_membership_requests          :boolean          默认值(FALSE),不为空
#  full_name                          :string
#  visibility_level                   :integer          默认值(0),不为空 (谁可以看到该群组 :public=0, :logged_on_users=1, :members=2, :staff=3, :owners=4)
#  messageable_level                  :integer          默认值(0) (谁可以向该群组发送消息 :public=0, :logged_on_users=1, :members=2, :staff=3, :owners=4)
#  mentionable_level                  :integer          默认值(0) (谁可以提及该群组 :public=0, :logged_on_users=1, :members=2, :staff=3, :owners=4)
#  members_visibility_level           :integer          默认值(0),不为空 (谁可以看到该群组成员 :public=0, :logged_on_users=1, :members=2, :staff=3, :owners=4)
#
# 表名:group_users
#
#  id                 :integer          不为空,主键
#  group_id           :integer          不为空
#  user_id            :integer          不为空
#  created_at         :datetime         不为空
#
# 表名:user_actions
#
#  id              :integer          不为空,主键
#  action_type     :integer          不为空 (: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          不为空 (应被记入该操作的用户)
#  target_topic_id :integer
#  target_post_id  :integer
#  target_user_id  :integer          (例如,被点赞的帖子的用户 ID)
#  acting_user_id  :integer          (执行该操作的用户,例如,管理员用户可以为普通用户执行操作)
#  created_at      :datetime         不为空
#  updated_at      :datetime         不为空
#
# 表名:topic_views
#
#  topic_id   :integer          不为空
#  viewed_at  :date             不为空
#  user_id    :integer         (如果主题被已登录用户查看,则会被设置)
#  ip_address :inet            (如果主题被匿名用户查看,则会被设置)
#
# 表名:user_visits
#
#  id         :integer          不为空,主键
#  user_id    :integer          不为空
#  visited_at :date             不为空
#  posts_read :integer          默认值(0)
#  mobile     :boolean          默认值(FALSE) (如果用户通过移动设备访问,则会被设置为 TRUE)
#  time_read  :integer          默认值(0),不为空 (返回的值是访问的秒数)

以下是我尝试过的聊天会话链接:ChatGPT

如果你想扩展这个列表,最简单的方法是直接从 Discourse 代码中复制你感兴趣的模型底部的架构:https://github.com/discourse/discourse/tree/main/app/models。

3 个赞