호돌찌의 AI 연구소
article thumbnail

AI 입문하면 무조건 마주치게 되는 Andrew Ng 교수님과 OpenAI technical staff 인 Isa Fulford와 같이 "ChatGPT Prompt Engineering for Developers" 강의가 저번주 DeepLearning.AI 에서 출시 되었습니다. 강의 내용이 좋아서 후기, 장점, 각 강의에 대해 요약한 내용들을 정리하여 이 글에 공유하고자 합니다.

 

강의 후기


1. 전체 후기

개인적으로 ChatGPT UI위에서 또는 API를 가지고 다방면으로 활용하고 있다고 생각을 했었지만 매번 많은 어려움에 부딪혔었습니다. 또한 chatgpt를 활용하면서 어려운 점은 코드뿐만 아니라 프롬프트가 무슨 내용인지까지 이해를 하고 보아야 한다는 점입니다. 강의 난이도는 상당히 쉬운 편이라고 생각되고 시야를 넓혀주는데 좋은 강의였습니다. AI는 잘 모르는데 개발자들한테는 정말 큰 도움이 될 것 같다는 생각이 들었습니다. 또한 다른 사람들의 프롬프트를 어떻게 구성하는지 보면서 제 상황과 비교해 가면서 조금의 궁금증과 어려움을 해소시켜 준 좋은 강의였다고 생각합니다. 

 

2. 강의 전달력

역시 AI 강의하면 앤드류 응 교수님인데 Isa 라는 분도 상당히 쉽게 설명을 잘합니다. 강의마다 서로 번갈아서 교육을 지도합니다. 또한 openai와 deeplearning.ai 사람들이 합작하여 교육자료를 만들었습니다.

 

3. 강의 강점

  • 강의 수는 9개이지만 전체 분량을 합치면 90분 내외의 분량으로 상당히 짧은 Course입니다. 90분 짧은 강의 안에 다양한 내용이 들어있어서 가성비로는 끝판왕이라고 생각되는 강의 였습니다. 커리큘럼을 요약하면 다음과 같습니다.
    • 2개의 Principles & 각각의 가이드라인 제시
    • Prompt를 iterative 하게 개발
    • Capabilities : 요약, 추론, 변환, 확장
    • Buliding a custom chatbots
  • 화면 2분할로 강의 옆에 주피터노트북과 코드가 바로 띄워져 있어서 편하게 실습이 용이합니다.

 

4. 내가 개선해야할 부분 

내가 했던 프롬프트들은 자세하고 명확하다고 생각했었으나 오산이었습니다. 예시에 제시되어 있는 프롬프트들을 보고 확실히 질문을 더 잘하는 연습이 필요하겠구나를 깨달았고 다른 사람들이 질문하는 방식을 꾸준히 배워야 한다고 생각했습니다.

 

 

강의 요약


아래 강의 요약은 정말 간단하게 작성을 했지만 강의에서 예시들을 같이 보면서 프롬프트를 수정하면 결과가 어떻게 바뀌는지 보는 것을 권장합니다. 다 못본다고 하더라도 1,2,3,8 강 만큼은 보는 것을 상당히 추천합니다.

 

 1. Introduction 

Base LLM과 Instruction Tuned LLM 의 차이를 설명하고 Instruction의 중요성을 알려줍니다.

 

2. Guidelines for Prompting

프롬프트를 하는데 있어서 2가지 핵심 principle과 몇 가지 가이드라인을 제시해 줍니다. 또한 Model의 Limitation(hallucination)도 소개합니다. 간단 요약하면 아래와 같습니다. 

  • Principle 1: Write clear and specific instructions (명확하고 구체적으로 지시하기)
    • Use delimiters to clearly indicate distinct parts of the input (구분 기호를 사용하여 입력의 구분되는 부분을 명확하게 표시하기)
    • Ask for a structured output (JSON, HTML 등과 같은 구조화된 output 출력 요청하기)
    • Ask the model to check whether conditions are satisfied (모델에게 조건이 충족되었는지 확인 요청하기)
    • "Few-shot" prompting (few shot으로 example 던지기)
  • Principle 2: Give the model time to “think” (모델에게 "생각"할 시간 충분히 줄 것)
    • Specify the steps required to complete a task (작업을 완료하는 데 필요한 단계 지정하기)
    • Instruct the model to work out its own solution before rushing to a conclusion (결론을 내리기 전에 모델이 자체적으로 해결책을 찾도록 지시하기)
  • Hallucination을 줄이는 법
    • model이 text 기반으로 답을 생성하기 원한다면 먼저 관련 정보(인용구)를 찾은 다음에 관련 정보를 기반으로 질문하기!

 

3. Iterative Prompt Development

  • 기존 ML 방식은 Idea → Code 또는 Data Implementation → Experimental result → Error Analysis 의 사이클을 반복하게 됨
  • LLM을 이용한 어플리케이션을 개발할 때에는 위에서 2번째 단계 부분에 코드와 데이터 대신 프롬프트가 들어가게 되며, 여기서 프롬프트를 여러 번 반복하면서 "내가 개발하고 싶은 어플리케이션에 맞는 프롬프트"를 찾아야함.
  • 이 프롬프트를 찾거나 개발하기 위한 프로세스가 존재하는데, 이 프로세스는 위에서 언급한 프롬프트 원칙(principle)과 가이드라인을 따라가야 함
  • 여러 번 시도해 보고 아직 내가 원하는 것을 정확히 충족시키지 못하는 것 본다면, 내 지시를 어떻게 명확하게 내릴 수 있는지 생각해 보기
  • 정답은 "완벽한 프롬프트를 아는 것" 이 아니라 "나만의 application에 적합한 프롬프트를 개발하기"

 

4. Summarize

  • 프롬프트에 그냥 요약을 해달라고 요청하는 것보다 내가 보고 싶은 관점에 대해서 요약을 해달라고 하면, 다른 요약문이 생성되게 됨. 즉, 어떻게 요약하느냐에 따라 정보를 추출하고 요청할 수 있음

 

5. Inferring

  • ChatGPT 나오기 이전에는(LM + Fine-tuning 시절) 감성분석이나 NER과 같은 Labeling 작업이 필요했지만, LLM의 강점은 Labeling 없이도 Prompt 만으로 원하는 정보를 추출할 수 있음
  • 한 번에 multiple task를 요청할 수 있고, zero shot learning 또한 활용 가능
  • 이런 Inference 하는 부분을 개발하는데, 숙련된 ML 개발자에게는 며칠 또는 몇 주가 걸리지만 ChatGPT API 활용하면 빠르게 Build 할 수 있다는 것이 강점 (Ng 교수님은 성능은 기저에서 논외로 하시는 이야기)

 

6. Transforming

  • 번역에 적용이 가능하고, 언어들을 지정해서 범용 번역기로도 활용이 응용 가능. (즉, source language : target language = M : N 개의 언어 번역이 가능)
  • 대상에 맞는 글쓰기 화자의 어조를 변환, 입/출력 형태 변환, 문법 & 철자 교정 등을 시키는 데에도 응용 가능

 

7. Expanding

  • temperature 값을 조정하여 model의 response 결과를 다양하게 조정할 수 있으며, 이 값이 높을수록 무작위성이 높아짐을 인지해야 함 (창의적인 결과를 생성)
  • temperature 값이 0이면 결과가 매번 동일한 값이 나오길 기대하는 것이고, 높으면 매번 다른 출력값을 얻게 됨
  • 따라서 개발  스스로 temperature 값을 조절하는 것을 추천함

 

8. Custom Chatbots

  • Chatting format을 이용하여 특정 작업이나 행동에 대해 개인화되거나 어딘가 특화된 사용자 정의 챗봇과 대화를 나누는 방법에 대해 설명
  • 이전까지 내용은 질문을 던지면 답변 하나를 받았지만, Chatbot에서의 message input은 어떻게 다르게 넣어야 하는지 설명해 줌(system, assistant, user)
    • system : Sets behavior of assistant
    • assistant : Chat model
    • user : you 
  • 이전 내용을 기억하게 하기 위해 이전 대화의 context까지 전부 input으로 밀어 넣어주어야 함

  • 인상적인 부분은 사용자 주문 봇을 만드는데, 차례대로 주문했던 대화 context를 하나 복사 후 낮은 temperature 보조 챗봇을 하나 더 띄워서 Json 형태로 주문 내용 요약을 해주는 아이디어는 매우 유용하다고 생각

 

9. Conclusion

  • 작은 프로젝트로 시작하면서 익숙해지는 것을 권장하면서 재미를 느끼기
  • 프로젝트를 만드는 데 있어서 다른 사람들에게 좋은 영감을 주고 만드는 사람들 입장에서는 책임감을 가지고 임하기

 


아래는 블로그 주인장의 토스 익명 후원 링크입니다. 글이 도움되거나 흡족스러웠다면 후원해주시면 감사하겠습니다.

https://toss.me/hotorch

 

hotorch님에게 보내주세요

토스아이디로 안전하게 익명 송금하세요.

toss.me

 

 

profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!