ChatGPT 3.5를 사용할 때 전체 스키마를 제공하면 예상치 못한 결과를 얻고 있습니다. 예를 들어, topic_users 테이블에서 토픽 작성자를 찾으려고 계속 시도합니다.
프롬프트에 쿼리를 작성하는 데 필요한 테이블과 컬럼 정보만 제한하고, 컬럼 사용법에 대한 추가 정보를 넣으면 성공적인 결과를 얻을 수 있습니다. 예를 들어:
# Table name: 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 (해당 행동을 credited 받을 사용자)
# target_topic_id :integer
# acting_user_id :integer (행동을 수행한 사용자. 예를 들어, 스태프 사용자는 일반 사용자를 대신하여 행동을 수행할 수 있음)
# created_at :datetime not null
Data Explorer 플러그인으로 이를 작동시키는 또 다른 방법은 사용자가 원하는 데이터와 적용할 조건을 나열하는 동적으로 생성된 양식을 채우게 하는 것입니다. 프롬프트는 Discourse에서 프로그램적으로 생성된 후 LLM에 전송되어 쿼리가 작성되도록 할 수 있습니다.
수정: @jordan-violet, 이것은 유용한 출발점이 될 수 있습니다. 제게 잘 작동하는 주석 달린 부분 스키마입니다. 제공된 스키마로 답변할 수 있도록 쿼리를 제한하는 한 잘 작동합니다. ChatGPT를 혼란스럽게 하는 것으로 보이는 세부 사항을 명확히 하기 위해 스키마에 추가 정보를 추가했습니다. 이 접근법의 명백한 단점은 완전하게 주석이 달린 스키마가 ChatGPT 3.5의 토큰 한도를 초과한다는 것입니다. 사용되는 토큰 수를 줄이기 위해 생략할 수 있는 일부 정보를 스키마에 포함시켰습니다.
요약
# == Schema Information
#
# Table name: 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
#
# Table name: 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
#
# Table name: 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
#
# Table name: 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
#
# Table name: 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)
#
# Table name: 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)
#
# Table name: group_users
#
# id :integer not null, primary key
# group_id :integer not null
# user_id :integer not null
# created_at :datetime not null
#
# Table name: 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 (해당 행동을 credited 받을 사용자)
# 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
#
# Table name: topic_views
#
# topic_id :integer not null
# viewed_at :date not null
# user_id :integer (로그인된 사용자가 토픽을 본 경우 설정됨)
# ip_address :inet (익명 사용자가 토픽을 본 경우 설정됨)
#
# Table name: 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.