이 아이디어를 조금 더 확장하면, 사용자가 자연어로 애플리케이션과 상호작용할 수 있게 하는 것이 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 데이터베이스 구조로 모델을 학습시키면 구조에 대한 세부 정보를 프롬프트에서 생략할 수 있을 것이라고 가정합니다.