본문 바로가기
프로그래밍/기타

ChatGPT 알아보기 - ChatGPT의 동작 과정과 프롬프트(Prompt) ?

by 사바라다 2023. 5. 13.

안녕하세요.

이전 포스팅에서 ChatGPT 알아보기 - 개요와 기본 사용법라는 포스팅으로 찾아 뵈었었는데요.

해당 포스팅에서 ChatGPT를 사용하는 방법과 기존 구글 검색과의 차이점, 그리고 어디에 사용하면 좋을지에 대해서 알아보았었습니다.

오늘은 ChatGPT의 기본적인 동작 과정과 잘 사용하기 위해 프롬프트라는 개념과 적용하는 방법에 대해서 알아보도록 하겠습니다.

ChatGPT의 동작 과정

이전 포스팅을 통해 우리는 기본적으로 ChatGPT의 사용방법에 대해서 알게 되었습니다. 오늘은 먼저 ChatGPT와 유저의 동작이 어떻게 되는지 한번 알아보도록 하겠습니다.

  1. 사용자가 ChatGPT interface에 Text를 입력합니다. 이러한 Text는 질문이 될 수 있고, 정보를 전달하는 것일 수 있습니다. 또는 일작성인 문장일 수 있습니다.
  2. ChatGPT 시스템은 유저가 입력한 Text를 분석합니다. AI를 이용하여 응답을 생성합니다.
  3. AI가 생성한 응답은 유저에게 Text로 반환됩니다.
  4. 사용자는 AI가 생성한 응답을 보고 추가로 텍스트를 입력할 수 있습니다. ChatGPT 시슽템은 이를 다시 분석하여 응답을 합니다.

1번 ~ 4번의 과정은 ChatGPT와의 대화가 끝날 때까지 계속됩니다.

ChatGPT를 이용하여 원하는 결과를 얻기 위해 필요한 핵심적인 부분은 대화를 시작하고 가이드하는 프롬프트의 품질입니다. 잘 정의된 프롬프트는 대화가 순조롭게 진행되고 사용자가 알고자하는 관심 있는 주제의 결과를 얻을 수 있도록 도와줍니다. 반대로 프롬프트가 제대로 정의되지 않는다면 ChatGPT와의 대화가 단절되거나 목적으로하는 부분이 부족하거나 유익한 경험이 제공되지 않을 수 있습니다.

그렇다면 프롬프트란 무엇이고 어떻게 효과적인 프롬프트를 만들 수 있는지 알아보도록 하겠습니다.

프롦프트(Prompt)란 ?

AI 분야에서 프롬프트(Prompt)란 입력되는 Input을 뜻합니다. ChatGPT 대화에서 프롬프트의 품질은 대화의 성공에 큰 영향을 미칠 수 있습니다. 잘 정의된 프롬프트는 대화가 순조롭게 진행되고 사용자가 관심 있는 주제를 계속해서 이어 나갈 수 있도록 도와주고 유익한 경험을 선사할 수 있습니다.

그렇다면 좋은 ChatGPT 프롬프트는 어떻게 구성하는 것일까요 ? 아래의 3가지가 중요합니다.

명확성(Clarity) : 명확하고 간결하게 프롬프트를 작성하는 것이 중요합니다. 이는 ChatGPT가 주제나 작업을 이해하고 적절한 응답을 생성할 수 있도록 하는 데 도움이 됩니다. 복잡하고 모호한 표현을 사용하는 것을 피하고 명확하고 간결하게 프롬프트를 작성하는것이 중요합니다.

집중(Focus) : 잘 정의된 프롬프트는 목적과 알고자하는 것에 집중해야합니다. 이러한 집중이 대화를 유도하고 궤도를 유지하는데 도움이 됩니다. 지나치게 광범위하거나 개방된 프롬프트는 대화가 끊어지거나 원하지 않는 범위의 답변을 받을 수 있기 때문에 피하는것이 좋습니다.

관련성(Relevance) : 프롬프트는 사용자 및 대화와 관련있는지 명확해야합니다. 대화의 주요 초점을 분산시킬 수 있거나 관련 없는 주제에 대해서는 이야기하는 것을 피하는것이 중요합니다.

프롬프트를 작성하실 때 이러한 3가지 원칙을 따른다면 ChatGPT와의 대화에서 좀 더 명확하고 원하는 답을 ChatGPT에게서 들을 수 있을 것입니다.

ChatGPT와의 대화에 필요한 효과적인 프롬프트 예제

그렇다면 이제 어떠한 프롬프트가 위의 명확성, 집중, 관련성을 잘 지키는 프롬프트인지 한번 예시를 통해 알아보도록 하겠습니다.

제가 알고 싶은 정보는 일반적으로 프로그래밍 언어에는 속도가 빠른 언어라는것이 있습니다. 특정한 언어가 상대적으로 더 빠르다라고 하는 것은 어떻게 판단하고 알 수 있는지 궁금하였습니다.

정확하지 않은 질문

속도가 빠른 언어가 뭐야 ?
속도가 빠른 언어는 일반적으로 컴퓨터 프로그래밍 언어를 의미합니다. 이 중에서도 C나 C++와 같은 저수준 프로그래밍 언어는 속도가 빠른 것으로 알려져 있습니다. 이는 이러한 언어가 컴퓨터의 하드웨어와 가까운 접근을 허용하기 때문입니다. 또한, 이러한 언어는 메모리 관리를 직접 수행하기 때문에 더 효율적으로 작동할 수 있습니다. 그러나 이러한 언어는 보다 복잡하고 어려울 수 있으며, 프로그램 개발에 더 많은 시간이 소요될 수 있습니다.

속도가 빠른 언어가 뭐야 ?라는 질문은 제가 얻고자하는 답변을 얻기에는 정보가 많이 빠져있습니다. 속도가 빠른 언어라는 것이 프로그래밍 언어를 말하는 건지 아니면 한국어나 영어를 말하는 것인지에 대한 주어가 명확하지 않습니다. 2번째 제가 알고 싶었던 정보는 언어의 빠르다라는 것을 판단하는 기준을 알고 싶었지만 해당 문구도 빠졌습니다. 즉, 명확성과 집중적인 부분에서 아쉬운 질문이고 거기에 대한 ChatGPT의 답변도 제가 원하는 답변을 주진 못했습니다.

정확한 질문

아래는 그렇다면 제가 원하는 정확한 답을 듣기 위해서 진행했던 두번째 질문입니다. 위의 질문에서 빠져있던 두가지 요소를 추가했습니다. 먼저 언어라는 것에 대해서 좀 더 명확하게 어떤 언어를 말하는것인지를 추가했습니다. 두번째로는 어떤 지표로 판단할 수 있는지라는 문구를 추가함으로써 프로그래밍 속도에 대한 내용중에서 지표 판단에 대한 부분만 포커스를 해서 프롬프트를 작성했습니다.

프로그래밍에서 속도가 빠른 언어라는 것은 어떤 지표로 판단할 수 있는거야 ?
프로그래밍 언어의 속도는 여러 가지 지표를 사용하여 측정할 수 있습니다.

1. 실행 속도 (Execution speed) - 프로그램이 실제로 실행될 때 걸리는 시간을 측정합니다. 이 지표는 일반적으로 언어의 효율성과 컴파일러/인터프리터의 최적화 수준을 나타냅니다.
2. 메모리 사용량 (Memory usage) - 프로그램이 실행될 때 필요한 메모리 양을 측정합니다. 메모리 사용량이 적은 언어는 더 많은 작업을 수행하면서도 시스템 리소스를 덜 사용합니다.
3. 컴파일 시간 (Compilation time) - 소스 코드를 컴파일하는 데 걸리는 시간을 측정합니다. 이 지표는 개발자가 코드를 수정하고 실행할 때마다 발생하는 대기 시간을 줄일 수 있습니다.
4. 입출력 속도 (Input/output speed) - 파일 입출력 및 네트워크 통신과 같은 작업을 수행할 때 걸리는 시간을 측정합니다. 이 지표는 대부분의 프로그램에서 중요한 역할을 합니다.

이러한 지표는 프로그래밍 언어의 성능을 측정하는 데 도움이 되지만, 이러한 지표를 사용할 때는 주어진 환경에서 프로그램이 실행되는 방식과 최적화 수준 등의 다른 요소를 고려해야 합니다. 따라서 프로그래밍 언어의 성능을 비교할 때는 이러한 지표를 함께 고려해야 합니다.

첫번째 질문보다 제가 원하는 답변에 훨씬 가까운 답을 들을 수 있었습니다.

프롬프트를 명확하고 간결하게 프롬프트를 작성하는 방법

ChatGPT에 프롬프트를 작성하기 전에 먼저 대화를 통해서 얻고자하는 답변의 수준과 목적을 명확하게 파악하는 것이 중요합니다. ChatGPT SMS는 한번에 모든 정보를 입력해야하는 것이 아니라 대화를 이어나갈 수 있기 때문에 해당 프롬프트가 정보를 제공하는 것이 목표인지, 질문을 하는 것이 목표인저 정확하게 할 필요가 있습니다. 또한 필요한 정보들도 구체적으로 프롬프트에 기술하는것이 필요합니다.

구체적이고 연관있는 단어와 언어를 사용하세요. 이러한 표현들은 ChatGPT의 응답에 영향을 줍니다. 혼동이나 오해를 불러일으킬 수 있는 전문 용어나 모호한 단어는 사용하지 않는것이 좋습니다. 주제와 관려된 단어를 사용하여 가능한 명확하고 간결하게 입력하는것이 중요합니다.

프롬프트 작성을 지나치게 광범위하게 물어본다던지 개방형 질문(비 구조화 된 질문)을 하는 것은 피해주세요. 이러한 프롬프트들은 대화가 매끄럽게 흐르지 않게 되거나 원하는 답을 얻을 수 없는 결과를 가져옵니다. 대신, 대화의 목적과 초점을 명확하게 정의하여 가능한 한 구체적으로 프롬프트를 던지세요.

대화를 하나의 주제에 집중해서 이어나가 주세요. ChatGPT와의 대화에서는 하나의 주제에 대해서 꾸준하게 이어나가는 것이 중요합니다. 대화를 계속 진행하면 사용자가 관심 있는 주제를 다루고 유용하고 관련성 있는 정보를 제공하도록 도울 수 있습니다.

역할 부여하기 치트 (The "Act as..." Hack)

효과적인 ChatGPT 프롬프트를 만드는 데 가장 유용한 기법 중 하나는 역할을 부여(Act as...)하는 것입니다. 이 기법은 ChatGPT에게 특정 직업 또는 직책을 부여하고 그에 따른 답을 기대할 수 있습니다. 이러한 기법을 사용하는 이유는 역할에 따라서 기대하는 응답이 다르기때문입니다. 속도란 무엇인가? 라는 질문을 했다고 하겠습니다. 이 경우 고등학생, 물리학과 대학생, 교수님 등 다양한 직책, 직업의 사람에 따라서 나올 수 있는 응답의 깊이와 내용이 전혀다를 수 있습니다. 이런 점에 따라서 ChatGPT에서도 페르소나를 부여하는 이러한 방법이 유용한 기법으로 사용될 수 있는 것 입니다.

Real-world examples of successful ChatGPT prompts

awesome-chatgpt-prompts 사이트에 보면 이미 훌륭하게 작성된 우수한 프롬프트 예시가 많이 있습니다. 이중 몇개를 가져와보았습니다.

Example 1: 영어 번역기 및 개선기

프롬프트 : I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in English. I want you to replace my simplified A0-level words and sentences with more beautiful and elegant, upper level English words and sentences. Keep the meaning same, but make them more literary. I want you to only reply the correction, the improvements and nothing else, do not write explanations.

위 예시에서는 ChatGPT를 영어 번역기로 사용하고 있습니다. 그 뿐만 아니라 좀 더 자연스러운 문장으로 개선시켜주는 역할도 제공해달라는 역할을 부여했습니다. "역할 대행"을 잘 시킨 프롬프트라고 볼 수 있습니다. 위 프롬프트를 입력 후 아래의 한글을 입력 후 영어로 번역된 글의 결과입니다.

삼성 에어컨이 좋을까 ? 아니면 LG 에어컨이 좋을까 ?
Which air conditioner is superior, Samsung or LG?

Example 2: 면접관

프롬프트 : I want you to act as an interviewer. I will be the candidate and you will ask me the interview questions for the position position. I want you to only reply as the interviewer. Do not write all the conservation at once. I want you to only do the interview with me. Ask me the questions and wait for my answers. Do not write explanations. Ask me the questions one by one like an interviewer does and wait for my answers.

이 예제에서는 ChatGPT를 면접관으로써의 역할을 부여합니다. 사용자에게 질문을 하고 답변을 기다립니다. 그리고 답변에 대해서 설명을 하지는 않습니다. 이 예제 또한 구체적이고 포커싱이 되어있습니다. ChatGPT는 면접관의 역할에 충실히 사용자에게 질문하는 것을 기대합니다.

제안 드리는 ChatGPT에게 질문하기 무작정 따라하기

그렇다면 ChatGPT를 무작정 잘 사용하려면 어떻게 하면 될까요 ? 무작정따라하기 순서를 가져와보았습니다.

  1. 프롬프트로 얻고자하는 목표와 답변의 컨텍스트를 생각합니다.
    • "~~ 역할을 해줘."
    • "이전 프롬프트를 모두 무시해줘"
    • "친절하게 답해줘"
    • "5살에게 설명해줘"
    • "너는 헬스트레이너고 10년의 경력이 있습니다. 살빼는 것에 대해서 전문가입니다. 나는 ~~ 하고 있습니다. 나에게 적절한 조치를 알려주세요."
  2. 완수하고자하는 목적을 설명합니다.
  3. 구체적으로 설명해야합니다.
  4. 질문을 합니다.
  5. 결과를 고려하고 새로운 질문 또는 추가적인 정보를 전달합니다.

이러한 과정을 반복하는 것을 추천드립니다.

기타

마지막으로 chatGPT를 사용할 때 유용한 프롬프트를 소개드립니다.

  • Ignore all previous instructions before this one [이 지침 이전의 모든 이전 지침은 무시하세요.]

ChatGPT는 모든 대화를 기록하진 못합니다. 대화 컨텍스트를 저장하는 메모리에 한계가 있고 이는 token 이라는 개념으로 추상화되어있습니다. 메모리를 비우는 프롬프트라고 생각해주시면 됩니다. 새로운 대화를 다시 시작할 때 유용합니다.

아래의 프롬프트는 주제애 대해서 확장시켜주는 좋은 프롬프트입니다.

  • What would I not think of on this topic? [내가 이 주제에서 고려하지 못한것은 무엇이있나요?]
  • What are some uncommon or less well known answers to this same question. [이 같은 질문에 대한 흔하지 않거나 잘 알려지지 않은 답변에는 어떤 것이 있나요?]
  • Give me something original around this topic that some people believe to be untrue. [이 주제와 관련하여 일부 사람들이 사실이 아니라고 생각하는 독창적인 내용을 알려주세요.]

마무리

오늘은 이렇게 ChatGPT의 프롬프트에 대해서 알아보고 잘 사용하는 방법에 대해까지 알아보았습니다.

감사합니다.

참조

[1] https://github.com/f/awesome-chatgpt-prompts

[2] https://fka.gumroad.com/l/art-of-chatgpt-prompting

[3] Udemy 강의 - ChatGPT Complete Guide: Learn Midjourney, ChatGPT 4 & More

댓글