추론 모델 (Reasoning)
추론 모델 (Reasoning)
생각을 한 다음에 답하는 추론(reasoning) 모델을 쓰다 보면, 모델이 어떤 과정을 거쳐 답에 도달했는지 궁금해질 때가 있어요. Fireworks는 이 추론 과정을 reasoning_content 필드로 접근할 수 있게 해줘요. 이 필드는 원래 content 필드 안의 thinking 태그에 들어가 있을 내용으로, 모델에 따라 아예 content에 직접 포함되는 모델도 있어요.
기본 사용법
추론 모델을 서버리스 모델 라이브러리에서 고른 뒤, 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 이상이어야 해요. 한 가지 주의할 점은 thinking과 reasoning_effort를 같은 요청에 함께 쓸 수 없다는 거예요. 둘 다 주면 검증 에러가 나요.
스트리밍에서 추론 내용 받기
스트리밍할 때는 각 청크의 delta.reasoning_content에 추론 내용이 담겨요. delta.content와 따로 모아서 이어 붙이면 각각의 완성된 결과를 얻을 수 있어요.
인터리브 씽킹 (Interleaved Thinking)
멀티턴 도구 호출 에이전트를 만들 때 인터리브 씽킹을 지원하는 모델이라면, 이전 어시스턴트 턴의 reasoning_content를 다음 요청에 반드시 포함해야 해요. 그래야 모델이 도구 호출 사이와 도구 결과를 받은 뒤에도 생각을 이어갈 수 있어요. 마지막 메시지가 "role": "tool"이면 인터리브 씽킹이 트리거돼요.
추론 컨텍스트를 보존하는 방법은 두 가지예요. ① SDK의 Message 객체를 그대로 넘기는 방법(권장) — 메시지 객체에 content와 tool_calls 옆에 reasoning_content가 이미 담겨 있어요. ② 메시지를 딕셔너리로 직접 만들 때 reasoning_content 필드를 명시적으로 추가하는 방법이에요.
주의할 점은, 어시스턴트 메시지를 딕셔너리로 직접 만들면서 reasoning_content를 빠뜨리면 모델이 이전 추론 과정에 접근할 수 없다는 거예요. 인터리브 씽킹을 지원하지 않는 모델이라면 추가된 추론 컨텍스트를 그냥 무시하므로, 이 패턴은 넓게 써도 안전해요.
더 알아보기
- 텍스트 모델: 채팅 완성과 기타 API
- 파인튜닝의 씽킹 히스토리: 모델별 추론 이력 동작
- API 레퍼런스:
reasoning_effort·thinking파라미터 상세