AI 입문가이드
시스템 프롬프트와 temperature: 하는 일과 설정 방법
OpenAI 호환 요청에서 시스템 메시지와 temperature가 하는 일을, CheapTokens 모델로 보낼 수 있는 Python 및 curl 예제와 함께 설명합니다.

이 페이지의 내용
시스템 프롬프트는 역할이 system인 메시지로, 모델이 모든 답변에서 어떻게 행동해야 하는지 알려줍니다: 어떤 존재인지, 어떤 형식을 사용할지, 무엇을 피할지. Temperature는 보통 0과 2 사이의 숫자(범위는 모델에 따라 다름)로, 표현이 얼마나 달라질 수 있는지를 정합니다: 낮은 값은 집중되고 반복 가능한 답변을, 높은 값은 더 다양한 답변을 줍니다. 둘 다 https:/로 보내는 동일한 Chat Completions 요청에 들어갑니다.
아래 내용: 각각이 무엇인지, 어떤 값으로 시작할지, 그리고 Python이나 curl로 실행할 수 있는 요청입니다. 아직 요청을 보내본 적이 없다면 CheapTokens로 보내는 첫 API 요청부터 시작하세요.
시스템 프롬프트란 무엇인가요?#
채팅 요청은 메시지의 목록이며, 모든 메시지에는 역할이 있습니다. Chat Completions 레퍼런스에는 네 가지가 나열됩니다: system, user, assistant, tool (DeepSeek API 레퍼런스, 2026년 10월 22일 확인). 첫 요청에는 세 가지가 필요합니다:
system— 개발자인 여러분의 상시 지침입니다. 모델은 이를 대화의 규칙으로 취급합니다.user— 이번 턴에서 사용자가 묻거나 제공하는 내용입니다.assistant— 모델의 이전 답변입니다. 대화를 이어갈 때 직접 추가합니다.
시스템 메시지는 role을 system로 설정하고 content를 문자열로 지정해야 합니다. name 필드는 선택 사항입니다.
"messages": [
{"role": "system", "content": "You are an editor. Rewrite the user's text to be shorter and friendlier. Return only the rewritten text."},
{"role": "user", "content": "Send me the report by tonight or I will be upset."}
]시스템 메시지가 먼저 옵니다. 사용자 메시지가 실제 작업입니다.
유용한 시스템 프롬프트 작성법#
- 모델이 하는 일을 한 문장으로 말하세요: "You are an editor", "You classify support tickets".
- 출력 형식을 명시하세요: "Return only the rewritten text", "Answer in two sentences", "Reply with valid JSON".
- 규칙은 짧고 직접적인 문장으로 주세요. 여러 개의 명확한 줄이 하나의 긴 문단보다 효과적입니다.
- 짧게 유지하세요. 시스템 프롬프트는 매 요청마다 전송되고 입력 토큰으로 계산되므로, 길면 매번 비용을 지불하게 됩니다. 입력과 출력의 과금 방식은 입력 vs 출력 토큰에 있습니다.
Temperature는 무엇을 하나요?#
모델은 다음 토큰을 후보 집합에서 선택합니다. Temperature는 가장 가능성 높은 후보를 얼마나 엄격하게 따를지 제어합니다. DeepSeek API 레퍼런스(2026년 10월 22일 확인)에 따르면 temperature은 0에서 2 사이의 값을 받으며 기본값은 1입니다: 높은 값은 더 무작위적인 출력을, 낮은 값은 더 집중되고 결정적인 출력을 줍니다. 범위는 모델마다 다릅니다: DeepSeek는 0에서 2를, Z.ai는 GLM-5.3에 대해 0에서 1을 문서화합니다(둘 다 2026년 10월 22일 확인). 따라서 0에서 1 사이의 값은 둘 다에서 안전합니다. 모델의 범위는 문서에서 확인하세요.
대부분의 작업에 통하는 시작점입니다. 경험칙일 뿐 보장은 아닙니다:
표를 오른쪽으로 스크롤하세요 →
| 작업 | 시작 값 |
|---|---|
| 추출, 분류, 코드, 엄격한 형식 | 0 ~ 0.3 |
| Q&A, 요약, 재작성 | 0.3 ~ 0.7 |
| 브레인스토밍, 이름 짓기, 창의적 텍스트 | 0.8 ~ 1 |
알아둘 세 가지:
- 낮은 temperature는 더 반복 가능할 뿐, 동일하지는 않습니다. 바이트 단위로 같은 답변을 기대하지 마세요.
- temperature 또는 top_p 중 하나만 바꾸세요, 둘 다는 아닙니다. 이는 DeepSeek의 권장 사항입니다;
top_p은 기본값이 1인 두 번째 샘플링 파라미터입니다. 익히는 동안에는 그대로 두세요. - 일부 모드는 temperature를 무시합니다. DeepSeek 레퍼런스에 따르면 thinking 모드에서는 temperature가 효과가 없으며, non-thinking 모드에서는
top_p이 1.0으로 고정됩니다. 값을 바꿔도 차이가 없다면 먼저 모델의 모드를 확인하세요.
둘 다 넣어 요청 보내기#
키를 환경 변수로 설정해 코드에 남지 않게 하세요(API 키란 무엇이며 안전하게 저장하는 방법 참고). 정확한 모델 id는 CheapTokens 문서에서 가져오세요: 제공자마다 같은 모델을 다르게 부릅니다. 이 예제는 MiniMax-M2.7을 사용합니다.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.cheaptokens.dev/v1",
api_key=os.environ["CHEAPTOKENS_API_KEY"],
)
response = client.chat.completions.create(
model="MiniMaxAI/MiniMax-M2.7",
messages=[
{"role": "system", "content": "You are an editor. Rewrite the user's text to be shorter and friendlier. Return only the rewritten text."},
{"role": "user", "content": "Send me the report by tonight or I will be upset."},
],
temperature=0.3,
max_tokens=1000,
)
print(response.choices[0].message.content)
print(response.choices[0].finish_reason)curl로 보내는 같은 요청:
curl https://api.cheaptokens.dev/v1/chat/completions \
-H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMaxAI/MiniMax-M2.7",
"messages": [
{"role": "system", "content": "You are an editor. Rewrite the user'\''s text to be shorter and friendlier. Return only the rewritten text."},
{"role": "user", "content": "Send me the report by tonight or I will be upset."}
],
"temperature": 0.3,
"max_tokens": 1000
}'보여야 하는 것: 문장의 짧고 더 친근한 버전과 finish_reason로서의 stop. finish_reason이 length이면 답변이 max_tokens 한도에 도달한 것입니다; AI 답변이 문장 중간에 멈추는 이유를 참고하세요.
Temperature가 작동하는 모습 보기#
Temperature를 이해하는 가장 좋은 방법은 같은 질문을 여러 번 하는 것입니다. 이 루프는 위 예제의 client를 사용해 짧은 요청 하나를 0에서 세 번, 1에서 세 번 보냅니다:
for temp in (0, 1):
print("temperature", temp)
for _ in range(3):
r = client.chat.completions.create(
model="MiniMaxAI/MiniMax-M2.7",
messages=[
{"role": "system", "content": "Answer with one word."},
{"role": "user", "content": "Name a fruit."},
],
temperature=temp,
max_tokens=500,
)
print(" ", r.choices[0].message.content)0에서는 세 줄이 보통 같은 단어이고, 1에서는 보통 더 다양한 단어가 보입니다. 답변 전에 추론하는 모델은 max_tokens의 일부를 그 추론에 쓸 수 있으므로, 한 단어 답변이더라도 한도를 넉넉히 두세요. 그런 다음 시스템 프롬프트만 바꿔(예: "Answer with one word, in French") 다시 실행해 보세요: 시스템 메시지의 규칙은 모든 temperature에서 적용됩니다.
이런 실험은 규모가 작습니다. 대략적인 감을 위해, 약 120 입력 토큰과 80 출력 토큰씩인 요청 100건의 비용은 다음과 같습니다(예시 워크로드이며, 토큰 수는 프롬프트에 따라 다릅니다):
| 모델 | 입력 $/1M | 출력 $/1M | 요청당 | 100회 요청 | OpenRouter, 100회 요청 |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.0000056 | $0.00056 | $0.0011 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.0000098 | $0.00098 | $0.0018 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.000018 | $0.0018 | $0.0132 |
요청당 입력 120개 및 출력 80개 토큰입니다. 100만 토큰당 가격은 현재 기준이며 당사 요금제에 따라 함께 변경됩니다. OpenRouter 열은 동일한 작업량에 대한 참고 가격을 보여줍니다.
어떤 모델에서 시도할까요#
- MiniMax-M2.7은 많은 짧은 테스트 요청에 좋은 첫 선택이며, 같은 시스템 프롬프트를 재사용해 답변을 비교할 수 있습니다: 180K 컨텍스트, 최대 8,192 출력 토큰, 입력과 출력 양쪽 모두 OpenRouter의 기준 가격보다 저렴합니다. 현재 가격: 1M 토큰당 입력 $0.05, 출력 $0.15.
하나의 잔액으로 모두를 커버하므로, 모델 전환은 model를 한 줄 바꾸는 일입니다. 모든 현재 가격은 가격 페이지에 있습니다.
작동하지 않을 때#
- 401 또는 인증 오류: 키가 없거나, 잘못 입력되었거나, 이 터미널에 환경 변수가 설정되지 않았습니다.
echo $CHEAPTOKENS_을 확인하세요.API_ KEY - 모델을 찾을 수 없음: 문서에서 모델 id를 접두사까지 정확히 복사하세요.
- 잘못된 파라미터에 관한 오류:
temperature을 모델이 지원하는 범위 안에 두고(0에서 1이 안전), 문자열이 아닌 숫자로 전달하세요. - 모델이 규칙을 무시함: 짧고 직접적인 한 문장으로 만들고, 시스템 메시지 맨 위로 옮기고, 원하는 정확한 형식을 반복하세요.
- temperature를 바꿔도 아무 변화 없음: 이를 무시하는 모드를 사용 중이거나(위 참고), 답변이 너무 제약되어("one word", "valid JSON") 변형이 거의 없을 수 있습니다.
- 답변이 잘림:
max_tokens을 높이세요; max_tokens 가이드에 방법이 나와 있습니다.
다음 단계#
시스템 메시지에 명확한 규칙 하나를 넣고, 표에서 temperature를 고르고, 위 루프를 여러분의 작업에 실행해 보세요. 결과가 원하는 대로 나오면 시스템 프롬프트를 짧게 유지하고 재사용하세요. 키를 발급받고 현재 가격은 문서에서 확인하세요.



