Home

ChatGPT와 스무고개를 해 봤습니다.

2024/01/28 18:42 KST (2024/01/29 19:23 KST 수정됨)


저는 AI를 싫어합니다. 사실 AI 자체를 싫어한다기보단 AI를 쓰는 사람들을 싫어하는 것에 가깝습니다. ChatGPT는 어떤가요. 양식에 맞게 문서 정리를 시키거나, 긴 내용 요약 같은 걸 시키면 딱 좋을 AI를 두고 자꾸만 뭐를 설명해달라느니 제목 추천을 해 달라느니 창의성을 발휘하게 시키는 사람들이 너무 많습니다.

GPT한테 코딩 시키는 사람들도 제 기준에선 좀 아니꼽게 느껴집니다. 말이 '코딩해주는 AI'지 용도를 보면 '한국어 (GPT 사투리) 컴파일러'에 가깝습니다. 그래놓고 한국어로 대충 적고 '알잘딱깔센 짜줘~'는 안 통해서 한국어로 코드 짜는 급으로 자세히 사양을 짜 줘야 하는데 그마저도 생성물을 그대로 쓸 수는 없고 사람이 한 번 고쳐 줘야 합니다.

아니 차라리 코드 짜 달라고 하는 사람들은 그나마 나아요. '이 코드에서 버그를 찾아 줘' 따위 프롬프트는 왜 쓰는 겁니까??? 관련 코드를 다 올리고서 얘기하는 거면 몰라요, 얘들은 코드 스니펫만 올리고 버그를 찾아주기를 바랍니다. 되겠냐고!!!!!!

.

.

.

....하여간 ChatGPT 등장 이후 계속 그런 입장을 고수하던 제가 이번에 무려 ChatGPT와 스무고개를 해 봤다는 소식입니다.

왜 그런 짓을

취직을 했고, 기획 과제를 받았습니다. 일반적인 게임 회사와는 기반이 되는 플랫폼(로블록스!!) 자체가 다른 곳이라, 프로그래머보다는 개인 단위로도 작업이 가능한 크리에이터를 키우는 게 방침이라고 합니다.

조금 약아빠진 소리지만, 기획을 판단하는 데 있어 제 관심사는 항상 코딩을 적게 하는 것에 있습니다. 만약 저에게 기획을 고를 수 있는 선택권이 있는 상황이라면 저는 무조건 쉬운 기획을 고릅니다. 그런 저에게 기획 과제가 왔는데, 당연히 코딩 적게 하는 쪽으로 기획해보는 게 맞지 않습니까?? 그러던 와중에 저는 로블록스에서 이런 게임을 발견했습니다.

하?

하???

챗GPT 사이트 비슷한 UI를 만들고 그 위에 API만 연결했을 뿐인데 동접이 100명씩 찍힙니다. 말도 안 됩니다. 이런 거 있으면 하는 게 맞잖아요??? (냉정하게 이야기하면, 사용료 대비해 수지타산이 안 맞으면 안 하는 게 맞긴 합니다.)

생각해 보면 생성형 언어 모델을 게임에 집어넣은 논문도 여럿 있었던 것 같습니다. NPC에 넣어서 NPC 간 감정 교류같은 걸 시뮬레이션했다나 뭐라나... 하는 것들 있었잖아요.

이런 아이디어를 내서 팀장님과 열심히 머리를 굴려 본 결과 '스무고개는 룰 설명 안 해도 다 아는 게임이니까 스무고개 해 보자'는 이야기가 나왔고, 저도 스무고개 정도가 할루시네이션 등의 부작용 없이 언어 모델을 적용하기 딱 좋은 수준의 기획이라는 생각이 들어서 R&D를 해 보았습니다.

어케 했나요

부끄러울 정도로 별 거 안 했습니다. 코딩하기 싫어서 낸 아이디어긴 하지만 이렇게까지 코딩할 게 없을 줄은 몰랐습니다.

AI 사용 자체는 HTTP API로 열려 있습니다. API가 호출되면 플라스크로 도는 웹서버가 AI에게 쏠 프롬프트를 생성합니다. 해당 프롬프트는 boto3 클라이언트를 통해 아마존 베드락에 접근하고 AI(앤트로픽 클로드 인스턴트 모델을 사용합니다)의 응답을 받아 옵니다.

만약 실제 로블록스에서 서비스를 하게 된다면 API에 접근 키를 만들어서 로블록스 서버 스크립트에서만 접근하게 하거나 하는 방법을 썼겠습니다만 그냥 프로토타입이고, 이 사이트를 알고 있을 제 친구들 중에서는 딱히 스패밍을 할 사람도 없을 것 같으니 그냥 이 상태로 두기로 했습니다.

프롬프트에는 플레이어가 맞춰야 하는 인물과 플레이어의 질문이 주어집니다. 인젝션하기 좋게 생긴 프롬프트인 것 같네요. 어서 해킹해가세요 여러분 (하지 마세요 차단하겠습니다)

원래는 할루시네이션 등을 방지하기 위해 플레이어가 맞춰야 하는 인물에 대한 위키피디아 문서를 프롬프트에 긁어 넣고 해당 문서에 없는 내용은 답하지 않게끔 프롬프트를 작성하려고 했습니다만, 앤트로픽 모델들에 대해서는 아마존 베드락이 파인튜닝을 제공하지 않는 점 + 하여간 그거 다 집어넣으려면 겁나 비싸지는 점 등을 이유로 그냥 AI가 수집한 지식에 의존하기로 했습니다.

모델의 답장은 이렇게 찍힙니다. 생각보다 JSON 형식에 맞게 잘 생성해서 개인적으로 놀랐습니다.

답장을 받은 웹서버는 답장 내용에서 {로 시작하고 }로 끝나는 부분을 찾아 JSON으로 파싱하고, 적절한 처리를 거쳐 유저에게 돌려줍니다.

유저 입력을 신뢰하지 마세요

개발자 지인들에게 테스트를 요청했더니 어떻게 그런 이상한 입력들을 떠올릴 수 있는 건지 이상한 입력을 잔뜩 해 줬습니다. 특히 까다로웠던 부분이 바로 입력이 제대로 된 스무고개 질문(Yes-No Question)인지 판단하는 부분인데, 원래는 `a boolean value indicating whether the prompt is a binary question - a question with an expected answer of either 'Yes' or 'No'` 정도의 프롬프트로 처리하려고 했으나 생각보다 잘 먹히지 않았습니다. 특히 binary question이라고만 적어뒀을 땐 'Sex'를 binary question이라고 판단(답변이 두 가지라서...)하는 모습을 보였습니다.

그래서 결국 프롬프트 아래에 '어떤 질문이 binary question인지'에 대한 프롬프트를 따로 적어줘야 했습니다. 오열

결론

하루 동안 테스트해본 결과, 클로드 인스턴트 사용 금액이 80원이 찍혔습니다. 아마 같은 빈도로 30일을 돌린다고 하면 2400원 정도가 나올 겁니다. 당연히 실제 서비스에서 발생할 요금은 혼자서 테스트해 본 정도의 사용료와는 자릿수부터가 다르게 나오겠죠?

AI와 대화하는 게 재밌는 컨텐츠기는 합니다만 솔직히 (한 달 내내 스무고개만 하는 미친 사람이 있을 리 없다고 쳐도) 인당 500원 정도의 결제를 유도할 수 있는 정도의 컨텐츠인가? 하면 그 정도는 아니지 않나 하는 생각이 듭니다. 역시 사람들이 안 하는 건 이유가 있나 봅니다.

프로토타입은 이 링크에서 플레이해볼 수 있습니다. 역사적 인물 이름들이 들어가 있습니다. 혹은 .exe 버전을 이용할 수 있습니다. (웹 버전은 한글 입력이 안 먹습니다. 한글 입력은 복사/붙여넣기 이용하거나 그냥 .exe 버전 이용 부탁드리겠습니다.)

알고리즘 변경으로 서버를 닫습니다.