AI 입문가이드
좋은 프롬프트 작성법: 5가지 부분과 전/후 예시
모호한 한 줄 요청을 작업, 맥락, 형식, 예시, 규칙이 있는 프롬프트로 바꾸고, OpenAI 호환 API를 통해 보내세요.

여러분의 모델은 월요일에는 고객 이메일을 세 문단으로 요약하고 화요일에는 두 개의 불릿 포인트로 요약합니다. 같은 프롬프트, 같은 모델입니다. 한 줄 요청이 하는 일이 바로 이것입니다. 모든 결정을 모델에 맡기고, 모델은 매번 다르게 결정합니다.
좋은 프롬프트는 다섯 가지 질문에 답합니다. 무엇을 할지(작업), 무엇을 가지고 작업할지(맥락), 답변이 어떤 모습이어야 할지(형식), 좋은 답변이 어떤 모습인지(예시), 그리고 무엇을 피해야 할지(제약)입니다. 아래에서는 하나의 모호한 요청이 구조화된 요청이 되고, OpenAI 호환 CheapTokens API를 거쳐, 더 긴 프롬프트가 청구서에 무엇을 더하는지 확인합니다.
"이 이메일을 요약해줘"가 도박인 이유#
"이 이메일을 요약해줘"라고 입력할 때, 여러분은 이미 머릿속에 답이 있습니다. 한 문장, 얼마나 긴급한지, 다음에 무엇을 해야 하는지입니다. 모델은 그 그림을 볼 수 없습니다. 그래서 추측하고, 모든 추측은 합리적입니다. 합치면 매 실행마다 다른 답을 주고, 답을 읽는 스크립트는 안정적으로 파싱할 것이 없습니다.
OpenAI의 프롬프트 엔지니어링 가이드(2026년 10월 27일 확인)는 이 아이디어를 명확히 말합니다. 프롬프트 엔지니어링은 효과적인 지시를 작성하는 것이며, GPT 모델은 작업을 수행하는 방법을 명시적으로 알려줄 때 더 잘합니다. 이 습관은 텍스트에만 국한되지 않습니다. 2026년 10월 26일 한 텔레그램 채널은 30초 생성 비디오를 위한 프롬프트를 공유했는데, 장면, 시각적 스타일, 대화, 오디오 및 제외 사항, 기술 사양 블록으로 나뉘어 있었습니다. 다른 작업, 같은 움직임입니다. 작성자는 모든 결정을 모델에 맡기는 대신 미리 명명했습니다.
직접 해보기시도해 보세요: 모델이 "이 이메일을 요약해줘"에서 무엇을 추측해야 할까요?정답 보기
길이(한 줄 또는 한 페이지), 대상(당신 또는 고객), 답변의 형태(산문, 불릿, JSON), 무엇이 중요한지, 그리고 이메일에 없는 경우 어떻게 할지. 이 모든 것은 프롬프트가 정할 수 있는 것입니다.
다섯 부분, 쉬운 말로#
첫 출근한 새 동료에게 브리핑한다고 생각해 보세요. "이거 처리해"라고 하면 추측이 나옵니다. 작업, 자료, 원하는 형식, 샘플, 그리고 "하지 말 것"이 적힌 스티커 메모를 주면 의도한 대로 나옵니다.
작업은 하나의 동사와 하나의 목적어입니다. "이메일을 요약하고 긴급도를 평가해." 문자 그대로 하세요. "이 이메일을 도와줘"는 작업이 아닙니다.
맥락은 모델이 작업하는 자료입니다. 이메일, 제품 설명, 정책 등입니다. 모델은 훈련에서 배운 것과 여러분이 붙여넣은 것만 압니다. 붙여넣은 텍스트를 <email>…</email> 같은 XML 스타일 태그나 마크다운 헤더 같은 구분 기호로 감싸서 지시와 텍스트가 섞이지 않게 하세요. OpenAI 가이드에서 둘 다 제안합니다.
형식은 답변이 어떤 모습인지입니다. "summary, urgency, next_step 키가 있는 JSON" 또는 "각각 최대 12단어인 세 개의 불릿"입니다. 코드가 답변을 읽을 때 가장 중요합니다.
예시는 원하는 출력이 있는 하나의 입력입니다. 가이드는 다양한 입력 범위와 원하는 출력을 포함하는 퓨샷 예시를 권장합니다. 하나의 예시로 충분히 시작할 수 있습니다. 입력이 많이 다르면 두 번째를 추가하세요.
제약은 "하지 말 것"입니다. 이메일의 사실만 사용하고, 뭔가 빠졌으면 "unknown"이라고 쓰고, 환불이나 할인은 없습니다.

순서도 조금 중요합니다. 같은 가이드는 개발자 또는 시스템 메시지가 보통 정체성, 지시, 예시, 맥락 순으로 가고, 맥락은 요청마다 바뀌므로 끝에 가까이 두라고 말합니다. 규칙은 시스템 메시지에, 입력은 사용자 메시지에 넣습니다.
짝 맞추기
프롬프트의 각 부분을 그것이 답하는 질문과 연결하세요
왼쪽 항목을 탭한 다음 짝을 탭하세요
- 작업모델이 무엇을 해야 하나요?
- 맥락무엇을 가지고 작업하나요?
- 형식답변이 어떤 모습이어야 하나요?
- 예시좋은 답변은 어떤 모습인가요?
- 제약무엇을 하면 안 되나요?
전과 후: 고객 이메일#
다음은 다섯 부분이 모두 포함된 같은 요청 옆에 있는 한 줄 요청입니다. 이메일 자체가 맥락이고, 사용자 메시지에 들어가며 <email> 태그로 감쌉니다.
비교하기
하나의 요청, 두 개의 프롬프트
전
Summarize this email.후
You summarize customer emails for a support team.
Task: Summarize the email in the <email> tags and rate how urgent it is.
Format: Reply with JSON only, using the keys "summary" (one sentence), "urgency" ("low", "medium" or "high") and "next_step" (one short sentence).
Example:
<email>Hi, order 1042 was due Monday and it's Thursday. Where is it?</email>
{"summary": "Order 1042 is three days late and the customer asks where it is.", "urgency": "medium", "next_step": "Check the carrier tracking for order 1042 and reply with the status."}
Rules:
- Use only what the email says. If something is missing, write "unknown".
- Don't offer refunds or discounts.
- Output nothing outside the JSON."후"를 위에서 아래로 읽으면 각 부분을 짚을 수 있습니다. 시작 줄과 작업, 형식 줄, 예시, 규칙입니다. 이메일은 의도적으로 텍스트에서 빠져 있습니다. 요청마다 바뀌므로 따로 이동합니다.

API로 보내기#
지시는 절대 바뀌지 않으므로 상수에 살고 먼저 갑니다. 이메일은 바뀌므로 마지막에 갑니다. 이것이 전체 스크립트이며, CheapTokens를 가리키는 OpenAI Python SDK를 사용합니다. 모델은 DeepSeek-V4-Flash입니다. 380K 컨텍스트, 답변당 최대 32,768 출력 토큰, 어느 시간에나 동일한 가격입니다. CheapTokens 문서에서 기본 URL과 모델 ID를 가져오세요. 아직 키가 없다면 첫 API 요청이 안내합니다.
import json
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.cheaptokens.dev/v1",
api_key=os.environ["CHEAPTOKENS_API_KEY"],
)
SYSTEM_PROMPT = """You summarize customer emails for a support team.
Task: Summarize the email in the <email> tags and rate how urgent it is.
Format: Reply with JSON only, using the keys "summary" (one sentence), "urgency" ("low", "medium" or "high") and "next_step" (one short sentence).
Example:
<email>Hi, order 1042 was due Monday and it's Thursday. Where is it?</email>
{"summary": "Order 1042 is three days late and the customer asks where it is.", "urgency": "medium", "next_step": "Check the carrier tracking for order 1042 and reply with the status."}
Rules:
- Use only what the email says. If something is missing, write "unknown".
- Don't offer refunds or discounts.
- Output nothing outside the JSON.
"""
email = "Hello, I was charged twice for my subscription this month. Please fix it before Friday, my card is almost at its limit."
response = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash-0731",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": f"<email>\n{email}\n</email>"},
],
)
reply = response.choices[0].message.content
print(json.loads(reply))
print(response.usage.prompt_tokens, response.usage.completion_tokens)형식 줄이 제 역할을 했다면, 답변은 summary, urgency, next_step이 있는 하나의 JSON 객체이고, json.loads가 이를 딕셔너리로 바꿉니다. 오류가 발생하면 모델이 JSON을 추가 텍스트로 감싼 것입니다. 마지막 규칙을 강화하거나 두 번째 예시를 추가하세요. 마지막 줄은 입력 및 출력 토큰 수를 출력하며, 다음 섹션에서 이 숫자를 다룹니다.
추가 단어의 비용#
토큰은 단어의 일부입니다. 보내는 것(입력)과 모델이 쓰는 것(출력)에 대해 토큰당 지불하며, 출력이 더 비쌉니다. 자세한 내용은 입력 vs 출력 토큰을 참조하세요.
하루 1,000개의 이메일을 처리하는 지원 봇을 운영하고, 이메일이 약 300토큰이라고 가정해 봅시다. 한 줄 요청은 약 10토큰의 지시를 추가하므로 약 310토큰이 입력됩니다. 자유 형식 요약이 약 250토큰이라고 가정합니다. 위의 시스템 프롬프트는 약 200토큰에 <email> 태그용 약 10토큰을 더해 약 500토큰이 입력됩니다. 형식 줄이 답변을 약 80토큰의 JSON으로 유지한다고 가정합니다. DeepSeek-V4-Flash에서 이는 한 줄 요청의 경우 이메일당 $0.00003이고 구조화된 프롬프트의 경우 $0.000016입니다. 프롬프트는 길어졌지만 요청은 더 저렴해졌습니다. 긴 부분은 입력이고 줄인 부분은 출력이기 때문입니다. 스크립트를 실행하고 이 가정을 여러분의 prompt_tokens과 completion_로 바꾸세요.
다음은 모델 전반에 걸쳐 하루 1,000개의 이메일에서 구조화된 프롬프트입니다. 입력과 출력을 합쳐 총계로 보면, 이 작업량에서 CheapTokens가 OpenRouter의 참조 가격보다 저렴합니다. 현재 가격은 가격 페이지에 있습니다.
| 모델 | 입력 $/1M | 출력 $/1M | 요청당 | 1,000회 요청 | OpenRouter, 1,000회 요청 |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000013 | $0.0132 | $0.0234 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000016 | $0.0155 | $0.0462 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.000037 | $0.037 | $0.444 |
요청당 입력 500개 및 출력 80개 토큰입니다. 100만 토큰당 가격은 현재 기준이며 당사 요금제에 따라 함께 변경됩니다. OpenRouter 열은 동일한 작업량에 대한 참고 가격을 보여줍니다.
스스로 확인하세요#
스크립트가 프롬프트를 재사용할 때 가장 큰 이득을 주는 습관에 대한 질문입니다. 구조가 작동하면 다음 조절은 시스템 메시지와 temperature이며, 시스템 프롬프트와 temperature에서 다룹니다.
빠른 확인
스크립트가 매번 새 이메일과 함께 같은 지시를 보냅니다. 이메일은 어디에 들어가야 할까요?
정답 보기
정답: 끝에, 지시와 예시 뒤에
지시는 요청 간에 동일하게 유지되고 이메일은 바뀝니다. OpenAI 가이드는 변하는 맥락을 프롬프트 끝에 두라고 제안합니다.



