프롬프트는 업무 지시서입니다. 모델은 여러분이 쓴 것만 읽으므로, 모델에게 필요한 모든 사실과 여러분이 원하는 모든 조건이 글에 들어 있어야 합니다. 답변이 뻔하게 나온다면 원인은 거의 항상 프롬프트가 잘못 말한 것이 아니라 빠뜨린 것에 있습니다.
쓸모 있는 프롬프트는 대부분 같은 여섯 가지 요소로 만들어집니다. 아래 블록에는 여섯 가지가 모두 들어 있습니다. 요소를 하나씩 꺼서 없을 때의 프롬프트를 보고, 원하는 언어를 채워 넣은 다음, ChatGPT나 Claude에서 열어 비교해 보세요.
age = 30
print("Age: " + age)에러:TypeError: can only concatenate str (not "int") to str에러의 뜻: +는 문자열 두 개를 이어 붙이거나 숫자 두 개를 더할 수는 있지만, 문자열과 숫자를 이어 붙이지는 못합니다. 파이썬은 어느 쪽을 뜻했는지 추측하지 않고 멈춥니다.
에러가 난 이유: "Age: "는 문자열이고 age에는 숫자 30이 들어 있습니다. 이 줄은 둘을 +로 붙이라고 요청합니다.
고친 코드: 먼저 str()로 숫자를 텍스트로 바꿉니다.
age = 30
print("Age: " + str(age))
이렇게 하면 Age: 30이 출력됩니다.
여섯 가지 요소
역할은 모델이 누구의 목소리와 판단 기준을 쓸지 알려 줍니다. "초보자를 위한 인내심 많은 튜터"와 "프로덕션 코드를 리뷰하는 시니어 엔지니어"는 같은 질문에 전혀 다른 답을 줍니다. 역할은 독자와 기준을 함께 암시할 때 가장 쓸모 있습니다. 어디서 도움이 되고 어디서 도움이 안 되는지는 역할 프롬프팅을 참고하세요.
할 일은 무엇을 할지 말하는 한 문장입니다. 동사로 시작하세요. 설명해, 다시 써, 비교해, 나열해, 고쳐, 요약해. 할 일을 한 문장으로 쓸 수 없다면 프롬프트에 할 일이 두 개 들어 있을 가능성이 높고, 보통 그중 하나는 부실한 답을 받습니다.
맥락은 모델이 추측할 수 없는 모든 것입니다. 여러분이 누구인지, 이미 무엇을 아는지, 결과를 어디에 쓸지, 이미 무엇을 시도해 봤는지입니다. 위 예시에서 "클래스와 예외는 아직 안 배웠어"라는 줄이 모델이 try와 except로 답하지 못하게 막아 줍니다.
입력은 작업할 자료입니다. 코드, 이메일, 표, 에러 메시지입니다. 통째로 붙여 넣으세요. 코드를 요약해서 설명하면 그건 여러분이 코드가 한다고 생각하는 일에 대한 설명일 뿐이고, 버그는 보통 그 둘 사이의 틈에 숨어 있습니다.
형식은 답변의 모습을 정합니다. 목록, 표, 제목이 붙은 세 부분, JSON, 한 줄. 형식을 정하지 않으면 모델이 대신 고르는데, 채팅 모델은 긴 쪽을 고르는 경향이 있습니다. 프로그램이 답변을 읽어야 한다면 구조화된 출력에서 더 나아간 방법을 볼 수 있습니다.
제약 조건은 한계입니다. 길이, 어휘, 피해야 할 것, 바꾸면 안 되는 것. "250자 이내" 같은 숫자가 "짧게" 같은 형용사보다 잘 통합니다. "짧게"는 읽는 사람마다 뜻이 다르고, 모델도 그 읽는 사람 중 하나이기 때문입니다.
모호한 프롬프트와 구체적인 프롬프트
같은 요청을 두 가지 방식으로 썼습니다. 탭을 바꿔 가며 답변을 비교해 보세요.
파이썬으로 만든 간단한 정렬 함수입니다.
def sort_list(items):
return sorted(items)
sort_list([3, 1, 2])처럼 호출하면 [1, 2, 3]을 반환합니다.
모호한 프롬프트는 아무도 묻지 않은 질문에 대한 정답을 받았습니다. 언어, 데이터, 정렬 순서, 입력을 바꿔도 되는지를 추측해야 했고, 매번 가장 흔한 경우로 추측했습니다. 구체적인 프롬프트는 이 네 가지를 미리 모두 답해 두었기 때문에 추측할 것이 남지 않았습니다.
프롬프트를 더 좋게 만드는 습관
- 할 일을 앞에서 말하고, 긴 자료 뒤에서 한 번 더 말하세요. 짧은 프롬프트에서는 할 일로 시작해야 뒤따르는 배경 설명이 목적을 가지고 읽힙니다. 긴 문서를 붙여 넣을 때는 문서를 먼저 두고 질문을 맨 끝에 둔 다음, 핵심 제약 조건을 그 자리에서 다시 말하세요. 그러면 지시가 모델이 쓰기 시작하는 지점 바로 옆에 놓입니다.
- 피할 것만 말하지 말고 할 것을 말하세요. "12살도 이해할 수 있는 쉬운 말로 써"는 모델에게 목표를 줍니다. "너무 전문적으로 쓰지 마"는 한 방향만 막고 나머지는 열어 둡니다.
- 지시와 자료를 분리하세요. 이메일이나 파일을 붙여 넣을 때는 시작과 끝을 표시해서, 모델이 그 안의 문장을 지시로 착각하지 않게 하세요. 방법은 구분자와 XML 태그에서 다룹니다.
- 형식이 특이하면 출력 예시를 하나 보여 주세요. 예시는 한 문단의 설명보다 빠르게 모양을 전달합니다. 이것이 few-shot 프롬프팅입니다.
- 대화 속에서가 아니라 프롬프트를 고치세요. 첫 답변이 틀렸다면 빠진 맥락이나 제약 조건을 찾아 프롬프트를 고치고 다시 실행하세요. 대화에서 계속 수정을 요청해도 결과는 나오지만, 다시 쓸 수 있는 프롬프트는 남지 않습니다.
보내기 전 체크리스트
- 할 일을 동사로 끝나는 한 문장으로 말할 수 있는가?
- 처음 보는 사람도 답변이 누구를 위한 것이고 내가 무엇을 이미 아는지 알 수 있는가?
- 자료에 대한 설명이 아니라 실제 자료를 붙여 넣었는가?
- 답변의 길이와 모양을 말했는가?
- 답변이 바꾸면 안 되거나 쓰면 안 되는 것이 있는가?
다섯 개 모두 "예"라고 해서 완벽한 답변이 보장되지는 않지만, "아니요"가 하나라도 있다면 그것이 나쁜 답변의 가장 유력한 원인입니다.
자주 묻는 질문
좋은 AI 프롬프트의 조건은 무엇인가요?
좋은 프롬프트는 할 일을 명확한 한 문장으로 말하고, 모델이 추측할 수 없는 맥락(여러분이 누구인지, 이미 무엇을 아는지, 결과를 어디에 쓸지)을 주고, 작업할 자료를 넣고, 답변의 모습(길이, 구조, 말투)을 알려 줍니다. 약한 프롬프트는 대부분 표현이 아니라 맥락과 형식에서 실패합니다.
프롬프트는 얼마나 길어야 하나요?
작업에 필요한 만큼이면 되고, 그 이상은 필요 없습니다. 한 줄짜리 답을 원하면 한 줄짜리 질문으로 충분합니다. 특정한 독자, 입력, 출력 형태가 있는 작업은 보통 네 문장에서 여덟 문장 정도가 됩니다. 같은 지시를 세 번 되풀이해서 길어지는 것은 도움이 되지 않고, 빠진 맥락을 더해서 길어지는 것은 도움이 됩니다.
ChatGPT나 Claude에게 존댓말을 써야 하나요?
공손한 표현은 결과에 크게 도움이 되지도, 해가 되지도 않습니다. 답변을 바꾸는 것은 정보입니다. 목표, 독자, 제약 조건, 원하는 출력의 예시입니다. 여러분의 프로젝트를 한 번도 본 적 없는 유능한 동료에게 업무를 설명하듯 쓰세요.
프롬프트를 쓰는 템플릿이 있나요?
믿을 만한 순서는 역할, 할 일, 맥락, 입력, 형식, 제약 조건입니다. 모든 프롬프트에 여섯 가지가 다 필요하지는 않습니다. 할 일부터 쓰고, 모델이 추측할 수 없는 맥락을 더한 다음, 첫 답변이 너무 길거나 모호하거나 모양이 틀리면 형식과 제약 조건을 더하세요. 빈칸을 채워 다시 쓰는 버전은 프롬프트 템플릿을 참고하세요.
같은 프롬프트인데 왜 매번 답이 다르게 나오나요?
채팅 모델은 다음 단어를 확률 분포에서 샘플링해 고르기 때문에 실행할 때마다 결과가 다를 수 있습니다. 프롬프트가 구체적일수록 좋은 답의 범위가 좁아져서 실행 결과가 서로 비슷해집니다. 샘플링에 무작위성을 얼마나 쓸지는 temperature 설정이 정합니다.