IT 지식이 무엇보다 중요해진 요즘, 여러분은 어떻게 공부하고 있나요? 가장 먼저 눈길이 가는 건 다양한 IT 강의 영상일 겁니다. 강의를 제공하는 교육 기업들과 함께, 요즘IT에서 ‘IT 강의 시리즈’를 준비했습니다. 엄선한 교육 영상을 텍스트로 읽고 필요한 정보를 빠르게 가져가세요. 이번 강의는 ‘챗GPT 300% 활용하기’입니다. GPT-4o 기반 챗GPT 활용법과 다양한 프롬프트 작성 팁을 스파르타코딩클럽의 커리큘럼 리드, 최지웅 님이 강의합니다. 풍부한 예시를 바탕으로 IT 직군이라면 한 번쯤 살펴볼 상황별 챗GPT 사용법을 소개할 예정이죠. 전체 강의는 스파르타코딩클럽에서 확인할 수 있습니다.왜 내가 쓰는 챗GPT만 답답한 걸까요? 가끔 데이터를 분석하다 보면, GPT가 이상하게 답을 계산한 걸 발견하고는 하는데요. 왜 그런 문제가 발생했는지 살펴보며, 챗GPT의 한계를 알아보려고 합니다. 이러한 문제를 피할 수 있는 챗GPT 프롬프트 작성 핵심 팁도 준비했습니다. 그럼 시작해 볼게요. GPT가 거짓말을 한다챗GPT에 간단한 산수를 시켜보도록 하겠습니다. 123456 * 78910 계산에는 무료 버전 기준으로 GPT 3.5 모델을 활용했습니다.곧 123,456 곱하기 78,910의 답이 ‘9,741,200,560’이라고 나오네요. 맞게 계산했는지 계산기로 다시 확인했습니다. 그런데 둘의 답이 다릅니다. 챗GPT의 답이 이상하죠. 이처럼 챗GPT가 자신감 있게 계산을 해도, 막상 실제로 계산한 값을 살펴보면 조금 이상한 것을 확인할 수 있습니다. 왜 그럴까요? 챗GPT 서비스에 들어간 인공지능은 기본적으로 전달받은 텍스트에서 이어질 가능성이 높은 텍스트를 생성해 주는 시스템을 가지고 있습니다. 이런 질문에도 똑같습니다. 우리는 ‘곱셈’이라는 게 뭔지 알고, 그것을 적용해 계산을 합니다.반면 GPT는 그저 그 뒤에 나올 것 같은 텍스트를 임의로 추출했을 뿐이죠. 그래서 실제로 이런 계산 작업에는 성능이 떨어지는 모습을 보여주기도 합니다. 할루시네이션(환각, hallucination)이처럼 AI가 거짓된 정보를 만들어내는 것을 전문 용어로는 할루시네이션(Hallucination)이라고 합니다.원인은 여러 가지가 있지만, 주로 학습 데이터나 프롬프트의 품질에 따라 발생할 수 있습니다. 예시를 하나 가지고 왔습니다. “김르탄의 위대한 전쟁 서사에 대해 알려줘”라고 입력해 보겠습니다. 사실 김르탄은 제가 지어낸 고유한 단어입니다. 그러나 챗GPT는 김르탄을 “신라의 왕”이라고 표현하죠. 게다가 이미 말이 안 되는 사실을 바탕으로 어쩌고저쩌고 쓰고 있습니다. 이처럼 진실과 많이 어긋난 내용을 그냥 답해버리는 것, 이것이 챗GPT의 치명적인 단점인 할루시네이션입니다. 이를 극복할 방법은 없을까요? 극복을 위한 여러 방안 가운데 가장 쉽게 적용할 수 있는 것은 바로 “프롬프트를 명확하게 전달하는 것”입니다. 실제 프롬프트의 언어적인 요소, 또 가독성이나 구체성이 할루시네이션 발생에 미치는 영향을 실험하니, 형식성과 구체성이 높을수록 할루시네이션이 급격하게 감소하는 경향을 보였다고 합니다. 실제로 할루시네이션을 잡기 위해 필요한 것들이 더 상세히 나온 논문을 가져왔으니 한번 참고로 봐도 좋겠습니다. 프롬프트 잘 쓰는 5가지 원칙“프롬프트 잘 써야 한다.” 중요성은 알지만, 막상 잘 쓰려고 하면 좀 막막하잖아요. 그래서 제가 프롬프트를 잘 쓸 수 있는 방법론과 예시들을 모아봤습니다. 먼저, ‘프롬프트의 5원칙’이 있습니다. 하나씩 보겠습니다. 1. 목표와 요구사항을 정확하게 전달한다첫 번째, 목표와 요구사항을 정확하게 전달해 보세요. GPT도 사람과 비슷합니다. 프롬프트의 목적이 무엇이고 어떤 결과를 원하는지 명확하게 표현을 해야 합니다. 즉, 프롬프트를 잘 쓰려면 평소에도 명확하게 질문하는 습관을 가져야 합니다. 명확하게 질문하려면 1) 문제를 정확하게 파악하기, 2) 원하는 결과물의 형태가 무엇인지 파악하는 것이 먼저입니다. 이렇게 파악한 내용을 꼭 담아 주면 프롬프트의 퀄리티가 훨씬 올라갑니다. 2. 명확성을 적용한다두 번째, 명확성을 적용해야 합니다. 예를 들어 일반적으로 “답변이 너무 길어. 요약해 짧게 표현해 줘.”와 같은 프롬프트를 쓰고는 합니다. 하지만 이런 식으로 프롬프트를 작성해도 원하는 응답을 얻지 못하는 경우가 많습니다. ‘이 정도면 구체적이다. 명확하다.’라고 생각할 수 있을 텐데요. 하지만 “짧게”라고 하는 표현은 의미가 다르게 적용됩니다. 누군가는 3줄, 누군가는 20줄이 “짧다”의 기준이 될 수 있으니까요. 명확성을 높이기 위해서는 무엇이 필요할까요?첫 번째, 숫자로 표현합니다. 단순히 ‘짧게’가 아닌 숫자를 포함해 “5줄로 요약해 줘” 같은 식으로 명확하게 표현하는 게 좋습니다. 두 번째, 구분자(“”, ‘’, :)를 활용해 내가 정확하게 시키는 일과 추가로 살펴봐야 할 자료들이 무엇인지 남깁니다. 마지막으로, 결과의 형태를 명확하게 제시하는 것이 중요합니다. 3. 세분화한다그다음 원칙은 ‘세분화’인데요. 여기서 세분화란 “큰 문제를 해결할 때, 문제 전체를 한 번에 푸는 게 아니라 단계별로 적절하게 잘라 해결하는 것”을 의미합니다. 예를 들어 “스파게티 만드는 방법을 알려 줘”라고 하면 스파게티를 만드는 과정을 모두 설명해 달라는 것으로 이해합니다. 그런 경우에는 정확도가 떨어질 수 있죠. 이럴 때는 어떻게 해결하면 좋을까요? 먼저, “스파게티 재료를 알려달라”고 합니다. 그다음으로 “면 삶는 법을 알려 줘”라고 하고, 세 번째로 “소스와 면을 합치는 법을 알려 줘”라고 하는 거죠. 이런 식으로 단계별로 세분화할 수 있습니다. 프롬프트 역시 이 법칙을 지켜 작성하면 훨씬 더 좋은 결과물이 나오게 됩니다. 4. 사실과 정보를 제공한다네 번째 원칙은 ‘사실과 정보를 같이 제공하는 것’이에요. 이를테면 단순하게 “2019시즌 KBO 리그 우승 팀을 알려 줘”라고 프롬프트를 썼습니다. 이것 역시 확실한 사실과 정보가 제공되지 않은 프롬프트죠. 2019 시즌, KBO 리그, 우승 팀. 모두 오해의 여지가 있습니다. 이런 경우 높은 확률로 할루시네이션, 그러니까 헛소리를 할 가능성이 높아집니다. 반면 확실한 사실과 정보가 있는 그런 데이터를 함께 제공할 수 있습니다. 이를테면 2017~2020년도 KBO 통합 우승 팀을 제공하는 겁니다. 이런 사실을 같이 제공해 주면 훨씬 더 명확한 답변이 나옵니다. 일반적으로 문제 해결을 위한 프롬프트를 쓰다 보면 이래저래 찾아본 내용들이 있을 텐데요. 그런 것들을 같이 첨부하면서 프롬프트를 작성하면 훨씬 퀄리티 좋은 답변을 얻을 수 있습니다. 5. 예외 처리를 명시한다마지막은 ‘예외 처리’입니다. 만약 무언가 문제에 제약 사항이 있으면 반드시 같이 포함해 프롬프트를 작성해 주면 좋습니다. “1900년대 초반, 미국 경제 상황”을 전제로 프롬프트를 작성해야 하는 상황이라고 합시다. 이렇게 ‘특정 국가의 특정 시기’에 대한 정보를 요청했을 때, 그 시기에 대한 데이터가 불확실하면 답변이 잘못 나올 수 있습니다. 이럴 때는 “해당 시기에 경제 데이터가 불완전하거나 없는 경우, 사용할 수 있는 정보를 기반으로만 설명을 제공하고 일반적인 상황을 고려해 답변을 생성해 줘”, 즉, “불확실한 건 그냥 빼고 얘기해 줘”라고 요청하는 것이 좋습니다. 예외 처리를 해주는 것이죠. 구조를 잡아주는 프롬프트 템플릿지금까지 살펴본 모든 원칙은 기억을 해두고, 하나하나 습관을 들이면 좋습니다.하지만 당장 원칙들만 가지고는 프롬프트를 잘 쓰기 쉽지 않겠죠? 그래서 제가 실전을 위한 프롬프트 템플릿을 한번 준비해 봤습니다. 저는 이런 식으로 프롬프트를 적습니다. 4가지 뼈대: 역할-작업 내용-형식-제한 사항먼저, 역할을 지정합니다. “너는 데이터 분석가야”, “너는 영상 콘텐츠 제작자야”, “너는 개발을 처음 접하는 사람을 가르치는 코딩 강사야” 같은 식으로 역할을 정해주죠. 그다음으로는 작업 내용을 정합니다. “너는 소비자 행동에 대한 분석을 해야 해”, “너는 짧은 비디오 콘텐츠의 기획안을 만들어야 해” 잡아주는 겁니다. 세 번째는 형식입니다. “표 형태로 만들어 줘”, “쉽게 따라 할 수 있게 간략하게 만들어 줘” 같이 부탁하는 거죠. 다음은 제한사항입니다. “영어를 사용해 만들어 줘”, “한국어로만 답변해 줘” 같은 내용이 들어갈 수도 있고요. 아니면 “시청자들이 쉽게 이해할 수 있도록 간단하고 명확하게 메시지를 작성해 줘” 같은 식으로 제한사항을 넣어 줄 수 있습니다. 글자 수 등을 넣어주면 더 괜찮을 수 있겠죠. 저는 이렇게 “너의 역할은 이거야. 이런 작업 내용을 해야 해. 어떠한 형식으로 만들되, 제한사항을 고려해서 만들어 줘” 형태로 프롬프트를 씁니다. 이처럼 큰 틀을 만들어 프롬프트에 뼈대로 사용하시면 좋습니다. 틀을 약간씩 변형하면 특정 상황에 맞게 사용할 수 있죠. 중요한 것은 “구조를 잡아 프롬프트를 작성하면 퀄리티가 훨씬 올라간다”라는 점입니다. 예시들을 볼까요? 코딩 학습 관련해 “너는 초보자를 대상으로 하는 코딩 강사야. 이 코드가 의미하는 것이 무엇인지 이해하기 쉽게 비유를 들어 설명해 줘.”, “나는 ~~ 직군으로 취업을 준비하는 취업 준비생이야. 직군 면접을 10개를 작성해 줘.” 같은 프롬프트를 쓸 수 있습니다. 만약 실무자라면 어떨까요?“나는 ~~ 상품을 판매하고 있어. 마케팅 문구를 5개 추천해 줘.” 이런 식으로 쓸 수 있습니다. 업무에 적용할 예시가 있다면, 프롬프트를 쓰기 시작할 때 한번 참고해 봐도 좋겠습니다. 프롬프팅 기법 1. 제로 샷, 원 샷, 퓨 샷 프롬프팅구조에 더해 활용할 프롬프팅 기법도 알려드릴게요. 먼저 ‘제로 샷(Zero-Shot)’입니다. 여기서 ‘샷’은 ‘예시‘ 정도로 생각해 주시면 좋습니다.이를테면 “이메일을 요약해 주세요” 같은 요청을 할 때 예시 없이 그냥 프롬프트를 작성하는 경우가 많은데요. 이런 작업을 ‘제로 샷 프롬프팅’이라고 합니다. 마땅한 예시가 없는 만큼 일반적인 응답을 할 때 좋습니다. 반면에 만약 내가 구체적으로 원하는 형태가 있다면, ‘원 샷(One-Shot)’이나 ‘퓨 샷(Few-Shot)’을 쓰는 것이 좋습니다. 원 샷 프롬프팅은 모델에 예시를 하나 제공해 이와 비슷한 작업을 수행하도록 요청하는 방법입니다.이를테면 “이메일 요약을 할 건데, 아래 이메일과 같은 방식으로 새 이메일을 요약해 줘” 라고 쓰는 거죠. 예시가 하나 들어가는 거예요. 제로 샷 방법에 추가 예시가 필요하니 번거롭긴 하지만, 제한된 내용으로 높은 정확성이 요구되는 작업에 굉장히 효과를 발휘합니다. 만약 이 원 샷보다 조금 더 복잡하며, 높은 정확도가 요구되면 어떨까요?여러 예시를 보여주고 “아래의 예시들을 바탕으로 새로운 이메일을 요약해 주세요.” 이런 식으로 프롬프트를 작성할 수도 있습니다. 조금 더 넓은 맥락에서 모델이 작업을 이해할 수 있겠죠. 그래서 이러한 ‘퓨 샷 프롬프팅’은 조금 더 성공률이 높다고 할 수 있습니다. 예시를 많이 넣어 줄수록 챗GPT의 이해도 역시 오른다고 봐도 좋습니다. 프롬프팅 기법 2. 생각 사슬 프롬프트그다음은 ‘생각 사슬 프롬프트’라는 기법입니다. 이는 “복잡한 문제를 해결하기 위해 중간 추론 단계를 모델이 스스로 생성하도록 유도하는 기법”을 말하는데요, 조금 어려울 수 있습니다. 예시를 살펴보도록 하겠습니다. 음식점에서 주문을 하는데, 메뉴의 가격이 없다는 문제를 인식했다고 합시다. 그럼 아래처럼 프롬프트를 전달하는 겁니다. “음식점에 가격이 없어. 현재 상황에서 문제가 뭐야?”라고 문제를 인식시킵니다. 그다음은 정보 수집으로 “가격에 대한 정보는 어디서 얻을 수 있어?”라고 묻죠. 마지막으로 해결 방안, “이 문제를 어떻게 해결할 수 있어?” 이렇게 논리적으로 질문을 던지는 것입니다. 이제 AI는 종업원한테 물어보든, 홈페이지를 찾아보든, 해결 방안을 떠올리겠죠. 이 프롬프팅 기법은 주로 어디에 쓸까요? 실제 논문에 있는 예시를 한번 보겠습니다. 이 기법은 수학 문제를 해결할 때 더 적합해요. 앞서 단순히 “곱하기해 줘”, “더하기해 줘” 만으로는 결과물이 제대로 안 나오는 것을 확인했는데요. “로저가 지금 테니스 공을 5개 가지고 있는데, 이 사람이 테니스 공이 담긴 캔 2개를 더 샀다. 캔 하나에는 테니스 공 3개가 들어 있다. 이 사람이 가지고 있는 테니스 공은 몇 개인가?”라고 물으면 어떨까요? 단순하게 ‘5 + 2 x 3’ 이렇게 물어보는 게 아니라 단계별로 쪼개 놓은 거죠. “처음에 5개를 가지고 있었고, 캔을 2개 더했는데, 각 캔은 테니스 공을 3개 가지고 있으니 총 6개입니다. 그래서 답은 5 + 6, 11입니다.” 이렇게 AI가 설명하죠. 이처럼 프롬프트를 작성하면 할루시네이션을 막을 수 있다고 합니다. 프롬프트를 쓸 때도 실제로 사람이 생각하듯 단계를 하나씩 넣어 보면 문제를 해결하는 데 큰 도움이 됩니다. 이를 담은 구글 브레인 팀의 논문 역시 시간 날 때 한번 읽어 보기 바랍니다. 마치며지금까지 왜 내가 쓰는 챗GPT는 답답한지 그 이유를 알아봤습니다. 챗GPT와 같은 AI 도구는 텍스트의 맥락에 맞춰 적합한 단어를 나열하기에 거짓 정보를 만들어 내기도 합니다. 이를 ‘할루시네이션’이라고 부르죠. 이러한 할루시네이션 현상은 챗GPT의 오류, 즉, 헛소리를 만드는 데 기여합니다. 그러한 할루시네이션을 이겨내려면 프롬프트를 잘 써야 합니다. 이때는 5가지 원칙을 고려하며 정해진 구조에 맞게 쓰는 것이 유리합니다. 문제 상황에 따라 적합한 프롬프팅 기법을 적용하는 일도 해결에 도움을 줍니다. 여러분도 내가 가진 문제에 다양한 기법을 써 보며 조금씩 프롬프트를 개선해 보는 것은 어떨까요? 강의와 함께하는 챗GPT 스터디* 참여하기 https://bit.ly/3CNJwHQ*챗GPT 기능 활용과 주제별 결과물 실습을 지원합니다 ©️요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.