Discourse AI + 데이터 탐색기?

이 아이디어를 조금 더 확장하면, 사용자가 자연어로 애플리케이션과 상호작용할 수 있게 하는 것이 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: 이를 달성하려면 제공된 스키마에 따라 posts, topics, users, 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_id, post_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개의 좋아요