채팅 완성 파라미터

채팅 완성 파라미터 (Chat Completion Parameters)

채팅 완성 엔드포인트에 넘길 수 있는 파라미터 전체를 정리해 볼게요. 어떤 문제가 생겼을 때 어떤 파라미터를 만져야 하는지, 그리고 샘플링 파라미터들이 서로 어떻게 다르게 동작하는지 한 번에 잡아갈 수 있어요. 특정 기능과 묶인 파라미터(구조화된 출력, 함수 호출, logprobs, 스트리밍)는 문서 맨 아래에서 별도로 안내해요.

출처: 공식문서 - Parameters

파라미터 훑어보기

어떤 문제를 풀고 있는지에 따라 가장 도움이 되는 파라미터가 달라져요.

  • 답변이 문장 중간에 잘려 나와요max_tokens를 늘리세요.
  • 토큰 하나만 정확히 필요해요 (예/아니오, 클래스 라벨)max_tokens1로 설정하세요.
  • 응답이 뻔하거나 반복적이에요temperature를 올리거나 frequency_penalty에 작은 양수 값을 주세요.
  • 답변이 같은 문구를 반복해요repetition_penalty를 약 1.1로 설정하세요.
  • 매번 같은 답이 필요해요 (evals, 회귀 테스트)seed를 설정하고 temperature를 낮게 쓰세요.
  • 기계가 파싱 가능한 출력이 필요해요 → JSON 스키마와 함께 response_format을 쓰세요. 구조화된 출력을 참고해요.
  • 토큰 단위 신뢰도 점수가 필요해요logprobs를 설정하세요.

모델별 기본 파라미터 값은 어디서 찾나요? 각 모델은 Hugging Face의 generation_config.json 파일에 기본값을 공개해요. 예를 들어 Llama 3.3 70B Instruct는 temperature: 0.6, top_p: 0.9를 명시해요. 파라미터가 그 파일에 정의되어 있지 않으면 값을 전달하지 않기 때문에, 추론 엔진 자체의 기본값이 적용돼요.

길이와 정지

max_tokens

모델이 응답에서 생성할 수 있는 최대 토큰 수예요. 값을 작게 하면 응답이 빨라지지만, 답변이 문장 중간에 잘릴 위험이 있어요.

긴 답변이 잘려 나올 때는 이 값을 늘리고, 예/아니오나 클래스 라벨처럼 토큰 하나만 필요할 때는 (때로는 1까지) 줄이세요.

기본값은 보통 미설정이에요. 그러면 모델이 정지 조건이나 컨텍스트 한도에 닿을 때까지 생성해요.

stop

모델이 지정한 문자열 중 하나라도 생성하는 즉시 생성을 멈추게 하는 문자열 또는 문자열 목록이에요. 행 사이의 줄바꿈이나 닫는 태그처럼 경계를 알고 있는 짧은 구조화 출력에 유용해요.

응답을 직접 파싱하지 않고 모델이 일찍 멈추길 원할 때 설정하고, 자유 형식 텍스트에서는 미설정으로 두는 게 일반적이에요.

from together import Together

client = Together()

response = client.chat.completions.create(
    model="meta-llama/Llama-3.3-70B-Instruct-Turbo",
    messages=[
        {
            "role": "user",
            "content": "Classify this review as Positive or Negative: 'Loved it.'",
        },
    ],
    max_tokens=100,
    stop=["\n\n"],
)
print(response.choices[0].message.content)

샘플링

temperature, top_p, top_k는 모두 후보 토큰 집합을 좁히는 파라미터예요. 대부분의 경우 이 중 하나만 튜닝하고 나머지는 기본값에 두는 게 좋아요. 마찬가지로 repetition_penalty, frequency_penalty, presence_penalty는 서로 다른 방식으로 반복을 억제하는데, 전부 쌓아 올리기보다는 해결하려는 문제에 맞는 파라미터 하나를 고르는 편이 좋아요.

temperature

출력이 얼마나 무작위적일지를 제어하는 소수예요. 0은 항상 확률이 가장 높은 토큰을 골라서(주어진 프롬프트에 대해 결정적), 1에 가까워질수록 다양성이 늘어나요. 1 이상의 값은 보통 운영 환경에 너무 시끄러워요.

추출·분류처럼 정답이 하나뿐인 작업에서는 낮추고, 브레인스토밍·창작 글쓰기처럼 응답이 반복적으로 느껴질 때는 올리세요.

기본값은 모델별로 달라요 (보통 0.7, generation_config.json 참고).

top_p

누클리어스 샘플링이에요. 누적 확률이 top_p를 넘기는 가장 작은 토큰 집합 안에서만 모델이 샘플링해요. 0.9는 "확률 질량 상위 90%를 구성하는 토큰만 고려한다"는 뜻이에요.

temperature보다 부드러운 대안으로 써요. 대부분 한쪽만 튜닝하지 둘 다는 튜닝하지 않아요. 기본값은 1.0(절단 없음)이에요.

top_k

샘플링 후보를 확률이 높은 상위 k개 토큰으로 제한해요. top_k=1은 그리디 디코딩이고, 값이 클수록 다양해져요.

후보 집합에 하드 캡을 걸고 싶을 때 써요. top_p와 마찬가지로 top_ktop_p 중 하나만 튜닝하길 권해요. 기본값은 0 또는 미설정(캡 없음)이에요.

repetition_penalty

프롬프트나 응답 어디에든 이미 등장한 토큰의 확률을 낮춰요. 1.0보다 큰 값은 반복을 줄이고, 작은 값은 반복을 조장해요.

모델이 문구를 반복하거나 루프에 빠질 때 조금 (예: 1.1) 올리세요. 과한 값은 유창성을 떨어뜨리니 그 외에는 1.0을 유지하는 게 좋아요. 기본값은 1.0이에요.

frequency_penalty

지금까지 응답에 나타난 횟수에 비례해 토큰에 패널티를 줘요. 양수 값이 클수록 같은 정확한 토큰을 반복할 가능성이 줄어들고, 음수 값은 반복을 늘려요. 범위는 -2.0 ~ 2.0이에요.

긴 생성물(목록, 요약, 코드)에서 글자 그대로 반복을 줄이는 데 써요. 패널티가 빈도에 비례해서 커지므로 repetition_penalty보다 더 세밀해요. 기본값은 0이에요.

presence_penalty

몇 번 등장했는지와 무관하게, 지금까지 응답에 한 번이라도 나타난 토큰에 패널티를 줘요. 양수 값이 클수록 모델을 새로운 주제와 어휘로 밀어요. 범위는 -2.0 ~ 2.0이에요.

같은 개념만 맴돌지 않고 더 넓은 범위를 커버하길 원할 때(아이디어 생성, 주제 확장) 써요. 기본값은 0이에요.

seed

샘플링을 결정적으로 만드는 정수예요. 같은 seed·프롬프트·모델·파라미터를 쓰면 모델이 같은 응답을 돌려줘요. 결정성은 최선 노력(best-effort)이라 모델이나 백엔드 업데이트를 거치면 유지되지 않을 수 있어요.

eval·회귀 테스트·디버깅에서 재현성을 위해 설정해요. 기본값은 미설정(호출마다 응답이 달라짐)이에요.

from together import Together

client = Together()

response = client.chat.completions.create(
    model="meta-llama/Llama-3.3-70B-Instruct-Turbo",
    messages=[
        {"role": "user", "content": "Give me one fun fact about octopuses."}
    ],
    seed=42,
    temperature=0.7,
)
print(response.choices[0].message.content)

응답 형태

n

주어진 프롬프트에 대해 생성할 독립 완성의 수예요. 각 완성은 choices에 별도 항목으로 나타나요. 값이 클수록 비용이 늘어나요 (모든 완성의 출력 토큰을 지불하기 때문).

랭킹이나 self-consistency에 써요. 여러 후보를 생성한 뒤 그중 하나를 고르거나 투표하는 식이에요. 기본값은 1이에요.

기능별 파라미터

아래 파라미터들은 각자 전용 페이지가 있는 기능에 속해요. 각 링크에서 전체 스키마, 지원 모델, end-to-end 예시를 볼 수 있어요.

  • response_format: 출력을 JSON이나 JSON Schema로 제한해 바로 파싱할 수 있게 해요. 구조화된 출력 참고.
  • toolstool_choice: 모델이 정의한 함수를 호출하게 하되, 어떤 도구를 고를지까지 제어해요. 함수 호출 참고.
  • logprobs: 신뢰도 점수와 토큰 단위 분석을 위해 토큰별 로그 확률을 돌려줘요. Logprobs 참고.
  • stream: 모델이 생성하면서 응답을 server-sent events로 받아요. 응답 스트리밍 참고.

더 알아보기 (Learn more)