Rstudio에서의 chatGPT 활용 with {gptstudio}
눈 감으면 코 베이겠다
약 3달쯤 전, 재밌는 R 패키지가 나왔는데 정리해야지 해야지… 하다가 살짝 시간이 나서 공유하는 글. (단, chatGPT에 대한 소개는 이미 좋은 글들이 많기 때문에 생략하겠다.)
R을 사용 하는 사람들 중, 많은 사람들이 IDE로 Rstudio를 사용한다. (물론 VSCode를 쓰는 사람도 있지만 여전히 나는 Rstudio가 더 좋다고 생각한다.)
(왜 그런지는 잘 모르겠지만) 아무튼 이 R을 쓰는 사람들은 나를 포함해, 최대한 RStudio 혹은 R 생태계에서 벗어나지 않는 상태로 많은 것을 활용하려고 한다. 때로는 이로 인해 효율이 떨어지기도 하는데 말이다.
예를 들면 RStudio 안에서 Markdown을 쓰거나 웹페이지를 만들거나 (Quarto
), Rstudio안에서 keras를 돌리거나, 카드 결제가 가능한 Javascript API를 R에 임베드하는 웹사이트를 만들거나 (R4CR
), 심지어 Python 코드를 R에서 실행시키게 (reticulate
) 하는 등…
그러다보니, 온갖 기상천외한 방법으로 다양한 기술들이 R로 들어오는데 아니나 다를까 인공지능이 유명해지면서, 웹이 아닌 Rstudio 내부에서 chatGPT API를 연결하고 활용할 수 있는 패키지
또한 개발되었다.
사용 방법은 이러하다. (너무 쉬우니 이미지 첨부는 하지 않겠다)
- openAI (chatGPT)의 계정을 만든다.
- openAI API Key를 발급한다.
- 아래의 코드 한 줄을 이용하여 Rstudio에 API Key를 등록한다.
gptstudio
패키지를 설치하고- 드래그 + 클릭으로 활용한다.
Sys.setenv(
OPENAI_API_KEY = "어쩌고저쩌고시크릿키"
)
이제 chatGPT를 어떻게 쓸 것인가..가 나한테는 꽤 어려운 질문이었는데, MichelNivard 선생님과 Lyndon Walker 박사님께서 친절하게 사용 예시를 알려주셨다.
하마터면
근데 어쩔건데?
내가 뭘 할 수 있는데
내가 거북선의 라이트닝 볼트 발사 메커니즘 물어보는 거 말고 뭘 할 수 있냐고 ㅋㅋ
라고 할뻔 ㅎㅎ
아무튼 이 chatGPT를 Rstudio에서 이용하는 gptstudio를 사용하면 GPT와 채팅하기
, 문법/오타 확인하기
, 문장 읽어주기
, 코드에 주석달기
등 여러가지를 할 수 있지만, 몇가지는 굳이 Rstudio에서…?
라는 생각이 드는 것들이라 그 중 R 코드 자동으로 작성하기
를 예시로 설명하면 이러하다.
- 설명 (Instruction / Prompt라고도 부르더라)을 작성한다. (물론 한국어로 해도 될 것 같긴 한데 구글검색도 그러하듯 에지간하면 영어 질문이 더 좋은 답변을 만들어 내기 때문에 영어로 써라)
- 설명을 드래그 후, 위
Addin
에서Write/Code from prompt
를 실행 (Gif 참조) - 끝
Case 1
그래서 최근에 공부 중인 shiny.fluent 라는 패키지의 아썸한 사용방법을 어떻게 좀 알 수 있을까… 해서 물어봤다. 내가 쓴 문장은 이러하다. (줄바꿈만 추가)
# Write R code to make most important 3 charts
# for use in commercial dashboard using shiny.fluent's
# fluentSalesDeals Dataset.
한글로 “역번역”하면
shiny.fluent의 fluentSalesDeals 데이터 집합을 사용하여
상용 대시보드에서 사용할 가장 중요한 3개의 차트를
만들기 위한 R 코드를 작성합니다.
이렇게 나온다.
(shiny.fluent의 fluentSalesDeal
데이터를 활용해서, 커머셜 대시보드에서 쓰기 위한 3개의 주요 차트를 만드는 R코드를 만들어 줘. 를 의도했다)
그 결과… 대충 10초 정도 지나고…
chatGPT의 답변 코드는 이러하다. (가독성을 위해 줄바꿈만 내가 살짝 수정)
#1. Pie Chart
library(shiny)
library(fluent)
fluentSalesDeals <- read.csv("fluentSalesDeals.csv")
# Create a Pie Chart
pie(
fluentSalesDeals$Deal.Value,
labels = fluentSalesDeals$Deal.Stage,
main = "Deal Value by Deal Stage"
)
#2. Bar Chart
# Create a Bar Chart
barplot(
fluentSalesDeals$Deal.Value,
names.arg = fluentSalesDeals$Deal.Stage,
main = "Deal Value by Deal Stage"
)
#3. Line Chart
# Create a Line Chart
plot(
fluentSalesDeals$Deal.Value,
type = "l",
col = "blue",
xlab = "Deal Stage",
ylab = "Deal Value",
main = "Deal Value by Deal Stage"
)
오… 라는 감탄이 3초 정도 나오고 크게 실망해부러쓰.
이유를 몇가지만 쓰면 같다.
- fluent라는 패키지는 없음 (질문 왜곡)
- pie, bar, line으로 3개의 차트를 구성한 것은 좋으나 전부 Deal Value / Deal Stage라는 조합을 활용함. 같은 데이터로 대시보드에 3차트 넣으면…? (무의미한 대시보드)
- 심지어 Deal Stage, Deal Value는 있지도 않은 Column (잘못된 데이터활용)
무엇보다 실행이 될 수 없는 코드 (!)
물론 누군가는 니가 instruction을 잘못줘서 그런거 아님? 니 영어가 구린거 아님?
이라는 생각을 할 수도 있다. (그치만 저 정도는 알아들어야지 인공지능이면…? Please
를 안붙여서 그런 거 일 수도)
Case 2
그래서, 질문이 이상하면 욕을 오지게 먹기 때문에 가능하면 정확한 질문을 하게 되는, 시험 문제
를 들고 왔다.
구글에 R 중간고사
라고 치면 나오는 것들 중 대학교 중간고사 문제를 하나 찾아서 써보기로 하자. 문제는 이러하다. (줄넘김만 바꿈)
이름이 A, B, C, D인 네 학생의
1, 2, 3, 4차 시험 점수에 관한 데이터프레임을 임의로 만들고,
각 학생들의 이름과 각 시험점수들 및 시험총점, 평균점수, 최고점수, 최저점수들을 가지는
데이터프레임을 만드는 코드를 작성해 보시오.
이걸 영어로 바꾸기 위해, 내 머리를 쓰지 않고 마찬가지로 DeepL이라는 인공지능을 이용했다. (나 영어 못함)
단, R코드를 만들어야 하기 때문에 지문에서 빠진 Write R code to
라는 딱 한줄만 추가하고 GPT를 돌렸다.
오…
잘 푼다…? 이 정도면 학부 2년차 정도 수준의 문제는 풀 수 있는 듯
chatGPT에 대한 생각
gptstudio에 대한 생각은 짧게 쓰겠다. 왜냐면 얘는 그냥 API wrapper니까… R 패키지를 잘 만든다고 해서 chatGPT의 성능을 끌어올리는게 아니잖슴.
그러나 gptstudio 자체는 설치부터 API 연동, 활용이 쉽다는 점이 아주 맘에 든다.
특히 아래 예시처럼, 함수 같은 것 안쓰고 드래그 만으로 쓸 수 있다는 점은 유사 / 후발 패키지
들에 비해서 장점이라고 생각함. (아래 번역은 DeepL인데 사투리 번역 지렸다…)
text <- '귀찮구로'
Translate_Function(text, Parameter, …)
#> [1] Annoying...
1. 알지 못하거나, 애매하게 알면 쓰고도 고생한다.
- 3개의 똑같은 차트를 대시보드에 박고 안 혼나면 다행이다.
- 마찬가지로 base plot보다는, 하다못해 ggplot이라도 써야지.
이러한 상황을 풀기 위해선, 내가 풀려고 하는 문제가 무엇인지, 그리고 그걸 왜 풀어야 하는지, 이에 따른 맥락을 제공할 정도로는 알아야 좋은 질문을 할 수 있다고 생각한다. 그 답변이 얼마나 유효한지 구분할 수 없다면 가짜뉴스에 선동당하는 거지.
2. prompt engineering 에 대한 이야기가 슬슬 나온다.
- 근데 난 blockchain engineer랑 큰 차이 없다고 생각함 (안좋게 본다).
좋은 질문을 한다
라는 건 결국 상황에 필요한, 자신의 생각을 정리해서 다른 사람(GPT)이 알아들을 수 있게 한다
가 요구 되는 건데, 그럴려면 이렇게 이렇게 질문문을 작성하면 된다 라는, 배울 수 있는 방법론
보다는, 실패로 부터 나온 끝없이 스스로의 생각을 깎아내는 경험
이 더 효과적이라고 생각함. 철학붐은 온다…!
3. 그렇지만 범위를 아주 작고 디테일하게 제한한다면 효과적일 수 있다.
- 저 10초만에 푼 중간고사 문제를 보고 든 생각임.
번역, 과제 대행, 글쓰기 등등.. 은 영리한 소수가 어마어마한 퍼포먼스로 싹 먹을 것 같으니, 나머지는 패러다임을 새로 짜는, 다른 일 알아봐야 할 듯?
아래 이미지는 네이버의 정상혁님이 D2 블로그에 쓴 글의 일부로, 내가 이마를 쳤던 글 중 하나다.
“개발”에서 “지식” 이라는 조금 더 넓은 범위로 확장할 수 있다고 생각하는데, 또 하나의 지식의 레벨
이라는 내피셜을 그려보면 이러하다.
많은 경우, 3.5를 달성해야 내가 specialty가 있고 살아남을 수 있고 어쩌고 저쩌고… 의 생각을 하지만, (물론 틀린말은 아니다) 경험상 하나의 레벨을 넘기 위한 경험치는 로그 스케일인 것 같고, 하나의 4보다는 1개의 2와 2개의 1.5가 훨씬 더 많은 것을 해낼 수 있는 것 같더라.
4. 동시에 여전히 “인공지능” 이라는 단어에 압도 될 이유는 없다.
미국보다 더 양질의 데이터로 만든 중국 텐센트의 챗봇도 모델이나 데이터의 이유가 아닌, “다른” 이유로 사용을 할 수 없는 것도 많다.
데이터 모으기도 힘들지만, 백날 모아서 우리 데이터 짱 잘해요 라는 회사들. 데이터가 아닌 다른 문제로 무너지는 상황을 보면 데이터는, 조금 더 나아가서 기술과 지식은 절대적인 솔루션이 될 수 없다.
번외
- Michel Nivard 선생님의 repo 가서 따봉 하나 눌러라…
- 다른 “유사 gptstudio 패키지”로 1. 한국어를 네이버 파파고 API를 껴서 번역하고, 2. 이를 chatGPT의 input으로 활용하여 3. 가상의 이미지를 만드는 패키지가 있더라. 띠용이다. (그치만 여전히,
그걸 왜 Rstudio에서…?
) - 너무 당연하게도, VScode에서 ChatGPT를 활용할 수 있는 extension도 있다. 코드 리뷰를 하거나, 코드 스니펫을 작성하는 등… “
IDE에 적합한 기능
”을 담고 있더라.
- 2월 회고가 늦는데는 이유가 있다…
- 레벨 1.5를 어떻게 달성 하냐고? 일을 하면서 경험하거나 많이 읽어라. 단, 유튜브나 5분짜리 혹은 이런 블로그 아티클 말고 충분한 시간을 들여서 서술된 “
한번에 안 읽히는
” 책을 읽어라. (감성 에세이 같은 책들도 빼자)
Ref:
Nivard M, Wade J (2023). gptstudio: gptstudio adds functionality based on OpenAI’s GPT family of models directly into Rstudio. https://github.com/MichelNivard/gptstudio, https://michelnivard.github.io/gptstudio/.