추론 모델 (Reasoning)

추론 모델 (Reasoning)

생각을 한 다음에 답하는 추론(reasoning) 모델을 쓰다 보면, 모델이 어떤 과정을 거쳐 답에 도달했는지 궁금해질 때가 있어요. Fireworks는 이 추론 과정reasoning_content 필드로 접근할 수 있게 해줘요. 이 필드는 원래 content 필드 안의 thinking 태그에 들어가 있을 내용으로, 모델에 따라 아예 content에 직접 포함되는 모델도 있어요.

출처: https://docs.fireworks.ai/guides/reasoning

기본 사용법

추론 모델을 서버리스 모델 라이브러리에서 고른 뒤, Fireworks Python SDK로 호출하면 choice.message.reasoning_content에서 생각 과정을, choice.message.content에서 최종 답을 얻을 수 있어요.

from fireworks import Fireworks

client = Fireworks()

completion = client.chat.completions.create(
    messages=[{"role": "user", "content": "What is 25 * 37?"}],
    model="accounts/fireworks/models/<reasoning-model>",
)

for choice in completion.choices:
    if choice.message.reasoning_content:
        print("Reasoning:", choice.message.reasoning_content)
    print("Answer:", choice.message.content)

Fireworks SDK는 현재 알파 상태라 최신 버전을 받으려면 --pre 플래그를 붙여 설치해야 해요.

추론 노력 제어하기

추론 토큰 길이는 reasoning_effort 파라미터나 Anthropic 호환 thinking 파라미터로 제어할 수 있어요. NVIDIA NIM이나 vLLM에서 이전해 왔다면, 그쪽의 chat_template_kwargs.enable_thinking 같은 필드는 reasoning_effort로 자동 매핑돼요.

reasoning_effort"low", "medium", "high" 같은 문자열 값을 받아요. thinking 파라미터는 Anthropic 호환 형식으로, 예를 들어 thinking={"type": "enabled", "budget_tokens": 4096}처럼 쓰는데 budget_tokens는 1024 이상이어야 해요. 한 가지 주의할 점은 thinkingreasoning_effort를 같은 요청에 함께 쓸 수 없다는 거예요. 둘 다 주면 검증 에러가 나요.

스트리밍에서 추론 내용 받기

스트리밍할 때는 각 청크의 delta.reasoning_content에 추론 내용이 담겨요. delta.content와 따로 모아서 이어 붙이면 각각의 완성된 결과를 얻을 수 있어요.

인터리브 씽킹 (Interleaved Thinking)

멀티턴 도구 호출 에이전트를 만들 때 인터리브 씽킹을 지원하는 모델이라면, 이전 어시스턴트 턴의 reasoning_content를 다음 요청에 반드시 포함해야 해요. 그래야 모델이 도구 호출 사이와 도구 결과를 받은 뒤에도 생각을 이어갈 수 있어요. 마지막 메시지가 "role": "tool"이면 인터리브 씽킹이 트리거돼요.

추론 컨텍스트를 보존하는 방법은 두 가지예요. ① SDK의 Message 객체를 그대로 넘기는 방법(권장) — 메시지 객체에 contenttool_calls 옆에 reasoning_content가 이미 담겨 있어요. ② 메시지를 딕셔너리로 직접 만들 때 reasoning_content 필드를 명시적으로 추가하는 방법이에요.

주의할 점은, 어시스턴트 메시지를 딕셔너리로 직접 만들면서 reasoning_content를 빠뜨리면 모델이 이전 추론 과정에 접근할 수 없다는 거예요. 인터리브 씽킹을 지원하지 않는 모델이라면 추가된 추론 컨텍스트를 그냥 무시하므로, 이 패턴은 넓게 써도 안전해요.

더 알아보기

  • 텍스트 모델: 채팅 완성과 기타 API
  • 파인튜닝의 씽킹 히스토리: 모델별 추론 이력 동작
  • API 레퍼런스: reasoning_effort·thinking 파라미터 상세