Claude Opus 5는 2026년 7월 24일에 출시되었으며, Anthropic은 이제 개발자들에게 Claude Opus 5를 가장 먼저 사용하도록 안내합니다. 문서에는 어떤 모델을 사용할지 확실하지 않다면 Claude Opus 5부터 시작하라고 명시되어 있습니다. API 모델 ID는 날짜 접미사 없이 정확히 claude-opus-5 문자열입니다.
이 가이드는 키 발급, 첫 번째 요청 전송, 스트리밍, 도구 사용, 적응형 사고, effort 매개변수, 그리고 프롬프트 캐시가 작동하는지 확인하기 위한 usage 객체 읽기 등 전체 과정을 안내합니다. 여기의 모든 요청은 JSON 입출력을 사용하는 일반 HTTP 요청이므로, 애플리케이션 코드에 연결하기 전에 Apidog에서 이를 구축하고 디버깅할 수 있습니다.
Opus 4.8에서 변경된 두 가지 사항은 첫 호출부터 문제를 일으킬 수 있으므로, 다른 무엇보다 먼저 다룹니다. 새롭게 시작하는 것이 아니라 기존 서비스를 마이그레이션하는 경우, 이 가이드와 함께 전체 Opus 4.8에서 Opus 5로의 마이그레이션 가이드를 읽어보세요.
첫 호출 전: 두 가지 호환성 문제
1. 사고(Thinking)가 기본적으로 활성화됩니다. Opus 4.8에서는 thinking 필드가 없는 요청은 전혀 사고하지 않고 실행되었습니다. Opus 5에서는 동일한 요청이 적응형 사고(adaptive thinking)와 함께 실행됩니다. max_tokens는 여전히 사고 토큰과 응답 토큰을 합한 값에 대한 하드캡이므로, 작동하는 4.8 통합에서 복사한 요청 본문은 이제 답변 도중에 잘릴 수 있습니다. max_tokens가 예상 출력 길이에 맞춰 엄격하게 조정되었다면, 값을 높이세요.
2. 사고 비활성화는 노력(effort) 수준을 제한합니다. thinking: {"type": "disabled"}를 xhigh 또는 max의 effort와 함께 전송하면 400 오류가 반환됩니다. Anthropic은 요청별로 이를 적용하므로, 조용히 성능이 저하되는 대신 즉시 실패합니다. 해결책은 둘 중 하나를 선택하는 것입니다: 사고를 계속 활성화하고 비용 제어를 위해 effort를 낮추거나, 사고를 비활성화하고 effort를 high로 제한하세요.
Anthropic의 자체 권장 사항은 첫 번째 옵션입니다. 사고가 비활성화된 상태에서는 Opus 5가 때때로 도구 호출을 일반 텍스트로 작성하며(이들은 절대로 실행되지 않으며, 유출된 텍스트는 에이전트 루프의 이후 턴을 오염시킵니다), 때로는 <thinking> 태그가 보이는 출력으로 유출되기도 합니다. 사고를 계속 활성화하고 effort를 낮추면 이 두 가지를 모두 피할 수 있습니다.
두 가지 변경 사항은 Anthropic의 모델 마이그레이션 가이드에 문서화되어 있습니다.
1단계: API 키 발급받기
Claude 개발자 플랫폼에 로그인하고, 조직 설정의 API 키 섹션을 열어 키를 생성하세요. 한 번 복사해 두십시오. 나중에 다시 읽을 수 없습니다.
코드에 붙여넣는 대신 환경 변수에 저장하세요:
export ANTHROPIC_API_KEY="sk-ant-..."
GUI 클라이언트에서 테스트하는 경우, 거기에도 키를 환경 변수에 넣으세요. Apidog에서는 ANTHROPIC_API_KEY 변수가 있는 환경(로컬, 스테이징, 프로덕션)을 생성한 다음, 헤더에서 {{ANTHROPIC_API_KEY}}를 참조하는 것을 의미합니다. 저장된 요청은 팀과 공유 가능하며 비밀은 컬렉션 내보내기에 포함되지 않습니다.

요청이 성공하려면 청구 크레딧을 추가해야 합니다. Opus 5의 요금은 입력 토큰 100만 개당 5달러, 출력 토큰 100만 개당 25달러로 Opus 4.8과 동일하며, 전체 가격 분석은 캐싱, 배치 및 고속 모드 요율을 다룹니다.
2단계: 첫 번째 요청 전송하기
엔드포인트는 POST https://api.anthropic.com/v1/messages입니다. 세 가지 헤더가 중요합니다: 키, API 버전, 그리고 콘텐츠 타입.
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--data '{
"model": "claude-opus-5",
"max_tokens": 4096,
"messages": [
{"role": "user", "content": "Explain the difference between a 429 and a 529 from an API perspective."}
]
}'
max_tokens 값을 주목하세요. 4096은 대부분의 시작 스니펫에서 볼 수 있는 1024보다 의도적으로 상향된 값인데, 이는 사고(thinking) 토큰이 이제 동일한 예산에서 나오기 때문입니다.
공식 SDK를 통한 Python 코드:
import os
from anthropic import Anthropic
client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
message = client.messages.create(
model="claude-opus-5",
max_tokens=4096,
messages=[
{"role": "user", "content": "Explain the difference between a 429 and a 529 from an API perspective."}
],
)
for block in message.content:
if block.type == "text":
print(block.text)
message.content에 대한 저 반복문은 장식이 아닙니다. 응답 content는 유형화된 블록들의 배열이며, 사고(thinking)가 활성화되면 이제 text 블록 앞에 thinking 블록을 보게 될 것입니다. content[0].text가 답변이라고 가정한 코드는 Opus 5에서 작동하지 않습니다. 이것이 가장 흔한 업그레이드 실패 사례이며, 요청이 여전히 200을 반환하기 때문에 놓치기 쉽습니다.
구축하는 동안 알아두면 좋은 몇 가지 사양: Opus 5는 기본이자 최대값으로 100만 토큰 컨텍스트 창을 가지며(베타 헤더 없음, 장문 컨텍스트 가격 프리미엄 없음), Messages API에서는 최대 128k 출력, 그리고 2026년 5월까지의 지식 차단(knowledge cutoff)을 가집니다. 모델 개요에는 전체 표가 있으며, 당사의 Opus 5 설명은 나머지 사양 시트를 다룹니다.
3단계: 적응형 사고(adaptive thinking) 활용
적응형 사고는 모델이 요청에 대해 얼마나 많은 내부 추론이 필요한지 결정한다는 것을 의미합니다. 토큰 예산을 직접 설정하지 않습니다. 다음 단계에서 다룰 노력(effort)으로 이를 조절합니다.
코드에서 처리해야 할 사항:
- 유형별로 블록을 파싱합니다. 보이는 답변을 위해서는
block.type == "text"로 필터링하고, 추론 과정을 기록하고 싶다면block.type == "thinking"으로 필터링하세요. - 사고(thinking) 블록을 변경 없이 다시 보냅니다. 다중 턴 및 도구 사용 루프에서는 어시스턴트의 전체 콘텐츠 배열을 텍스트에서 재구성하는 대신 메시지 기록에 추가합니다. 대화 중간에 블록을 제거하면 루프가 저하됩니다.
- 둘 다에 대해
max_tokens를 예산으로 책정합니다. 사고와 응답이 이 제한을 공유합니다. 잘림(truncation)은stop_reason: "max_tokens"로 표시되므로, 테스트에서 이 필드를 단언(assert)하세요.
사고를 완전히 끄려면:
{
"model": "claude-opus-5",
"max_tokens": 4096,
"thinking": {"type": "disabled"},
"output_config": {"effort": "high"},
"messages": [{"role": "user", "content": "Return only the HTTP status code."}]
}
해당 요청에서 effort가 의도적으로 high로 제한됩니다. 이를 xhigh로 올리면 위에서 설명한 400 오류가 발생합니다.
4단계: output_config.effort로 비용 제어하기
effort 필드는 output_config 아래에 있으며, low, medium, high, xhigh, 또는 max 값을 가집니다. 기본값은 high입니다. 이는 주류 언론이 비용과 기능 사이의 토글로 설명했던 매개변수이며, API에서는 요청 본문의 단일 문자열입니다.
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--data '{
"model": "claude-opus-5",
"max_tokens": 65536,
"output_config": {"effort": "xhigh"},
"messages": [
{"role": "user", "content": "Refactor this handler to stream responses and keep backpressure."}
]
}'
조정하기 전에 알아야 할 세 가지 사항.
- 수준이 재조정되었습니다. Anthropic은 Opus 4.8의 effort 설정을 그대로 사용하지 말라고 명시적으로 말합니다. Opus 5에서
low및medium은 이전 Opus 모델보다 의미 있게 강력해졌습니다. 이는 이전에high로 실행했던 작업 부하가 이제 더 저렴하게 처리될 수 있음을 의미합니다. 매핑을 신뢰하기보다는 자체 평가에 대해 새로 스윕을 실행하세요. xhigh는 여전히 코딩 및 에이전트 작업에 권장되는 시작점입니다. 또한max_tokens가 가장 중요한 곳이기도 합니다. 충분한 공간을 주세요. 64k는 긴 에이전트 턴에 대한 합리적인 시작 상한선이며, 위 스니펫에서 65536을 사용하는 이유입니다.- 더 낮은 effort는 보이는 길이를 줄이는 것이 아니라 사고(thinking)를 줄입니다. Opus 5의 기본 응답 및 작성된 결과물은 Opus 4.8보다 더 깁니다. 더 짧은 출력을 원하면 프롬프트에서 요청하세요.
low로 낮춘다고 해서 원하는 결과가 나오지는 않습니다. effort 매개변수 심층 분석은 전체 스윕 방법론을 설명합니다.
5단계: 응답 스트리밍하기
"stream": true를 추가하면 엔드포인트는 단일 JSON 본문 대신 서버 전송 이벤트(SSE)를 반환합니다.
with client.messages.stream(
model="claude-opus-5",
max_tokens=4096,
messages=[{"role": "user", "content": "Draft a retry policy for a flaky upstream."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final = stream.get_final_message()
print("\n\nusage:", final.usage)
원시 SSE 시퀀스는 message_start, 각 블록당 content_block_start / content_block_delta / content_block_stop, stop_reason 및 최종 출력 토큰 수를 포함하는 message_delta, 그리고 마지막으로 message_stop입니다.
사고(thinking)가 활성화되면 두 개의 콘텐츠 블록이 순서대로 스트리밍됩니다: 델타가 thinking_delta로 도착하는 사고 블록, 그리고 text_delta가 있는 텍스트 블록. 모든 델타를 동일한 버퍼에 렌더링하는 UI는 모델의 추론을 사용자에게 출력할 것입니다. 처음부터 별도로 라우팅하세요.
스트리밍은 또한 GUI 클라이언트가 제 역할을 하는 지점인데, 터미널에서 원시 SSE를 읽는 것은 불편하기 때문입니다. Apidog는 이벤트 스트림을 도착하는 대로 렌더링하므로, 핸들러 코드를 한 줄도 작성하기 전에 블록 경계를 확인하고 파싱 가정을 확인할 수 있습니다.
6단계: 도구 사용 추가하기
도구 정의는 tools 배열에 들어갑니다. 모델은 stop_reason: "tool_use"와 tool_use 콘텐츠 블록으로 응답합니다. 도구를 실행하고 그 결과를 새로운 사용자 메시지의 tool_result 블록으로 다시 보냅니다.
tools = [
{
"name": "get_order_status",
"description": "Look up the current status of a customer order by ID.",
"input_schema": {
"type": "object",
"properties": {
"order_id": {"type": "string", "description": "The order ID, e.g. A-10293"}
},
"required": ["order_id"],
},
}
]
message = client.messages.create(
model="claude-opus-5",
max_tokens=4096,
tools=tools,
messages=[{"role": "user", "content": "What's the status of order A-10293?"}],
)
if message.stop_reason == "tool_use":
call = next(b for b in message.content if b.type == "tool_use")
result = get_order_status(**call.input)
follow_up = client.messages.create(
model="claude-opus-5",
max_tokens=4096,
tools=tools,
messages=[
{"role": "user", "content": "What's the status of order A-10293?"},
{"role": "assistant", "content": message.content},
{"role": "user", "content": [
{"type": "tool_result", "tool_use_id": call.id, "content": result}
]},
],
)
message.content를 어시스턴트 턴으로 바로 전달하는 것이 사고(thinking) 블록을 유지하는 방법입니다. 해당 턴을 수동으로 재구성하지 마세요.
에이전트에 중요한 Opus 5의 두 가지 세부 사항. 도구 사용 시스템 프롬프트 오버헤드가 Opus 4.8보다 낮습니다: tool_choice가 auto 또는 none으로 설정된 경우 286 토큰이며, 4.8에서는 290 토큰, Opus 4.7에서는 675 토큰이었습니다. 요청당 적지만 백만 에이전트 턴에서는 실제적인 차이가 있습니다. 또한 mid-conversation-tool-changes-2026-07-01이라는 베타 헤더가 있어 프롬프트 캐시를 무효화하지 않고 턴 사이에 도구를 추가하거나 제거할 수 있습니다.
Opus 5는 또한 4.8보다 하위 에이전트에게 더 쉽게 위임합니다. 비용에 민감한 작업 부하의 경우, 청구서에서 이를 발견하기보다 시스템 프롬프트에서 명시적으로 범위를 지정하세요.
7단계: 캐시 적중을 위한 usage 객체 읽기
모든 응답에는 usage 객체가 포함됩니다. 이것은 프롬프트 캐싱이 제대로 작동하는지 확인할 수 있는 유일하고 정직한 방법입니다.
"usage": {
"input_tokens": 84,
"cache_creation_input_tokens": 6421,
"cache_read_input_tokens": 0,
"output_tokens": 913
}
블록을 캐시하려면 cache_control로 표시하세요:
{
"model": "claude-opus-5",
"max_tokens": 4096,
"system": [
{
"type": "text",
"text": "<your long, stable instructions and reference material>",
"cache_control": {"type": "ephemeral"}
}
],
"messages": [{"role": "user", "content": "Question one."}]
}
첫 번째 호출: cache_creation_input_tokens는 0이 아니고 cache_read_input_tokens는 0입니다. 동일한 접두사를 사용한 두 번째 호출: 이 값들이 바뀝니다. 만약 바뀌지 않는다면, 접두사가 바이트 단위로 동일하지 않거나 최소값 미만입니다.
이 최소값은 Opus 5의 희소식입니다. 프롬프트 캐싱은 이제 Opus 4.8의 1,024 토큰에서 줄어든 512 토큰부터 적용됩니다. 이전에는 너무 짧아서 캐시되지 않던 프롬프트가 이제 코드 변경 없이 캐시되며, 캐시 읽기는 기본 입력 요금 5달러 대비 100만 토큰당 0.50달러로 청구됩니다. 테스트 스위트에서 cache_read_input_tokens를 단언하여, 캐시를 조용히 무효화하는 프롬프트 편집이 청구서가 아닌 실패하는 테스트로 나타나도록 하세요. 더 많은 정보를 원하시면 Claude API 요금 절감 가이드를 참조하세요.
Apidog에서 전체 흐름 테스트 및 디버그
위의 모든 내용은 인증 헤더, JSON 본문, SSE 스트림, 그리고 확인해야 하는 응답을 포함하는 HTTP 요청입니다. Apidog는 올인원 API 개발 플랫폼이며, Apidog가 처리하는 엔드포인트 유형에 정확히 해당합니다. 요청을 보내고, 키를 저장하고, 스트림을 렌더링하고, 응답을 테스트합니다. 추론을 실행하거나 모델을 라우팅하지 않습니다. 호출은 여전히 Anthropic으로 전달됩니다.

첫날부터 가치를 증명하는 설정:
- 1. 요청 생성.
POST https://api.anthropic.com/v1/messages에 세 가지 헤더를 추가하고, 키는 인라인으로 붙여넣는 대신 환경 변수에서 가져옵니다. - 2. 컬렉션에 저장. 팀원 각자가 블로그 스니펫에서 요청을 재구축하는 대신, 검증된 하나의 요청 형태를 재사용합니다.
- 3. effort 수준별로 포크.
output_config.effort를low,medium,high,xhigh로 설정한 요청을 복제하고, 각 요청에 동일한 프롬프트를 보내 출력 품질, 지연 시간, 토큰 수를 나란히 비교합니다. 이는 Anthropic이 수행하도록 요청하는 effort 스윕이며, 별도의 하네스를 작성하지 않고도 수행됩니다. - 4. SSE 스트림 관찰.
"stream": true를 켜고 이벤트가 도착하는 대로 읽어 사고(thinking) 블록과 텍스트 블록을 별도로 처리하는지 확인합니다. - 5. 도구 호출 페이로드 검사.
stop_reason이tool_use로 반환될 때, 모델이 생성한 정확한input객체가 바로 거기에 있습니다. 이를 통해input_schema가 너무 느슨했음을 알 수 있습니다. - 6. 응답 단언(assert).
stop_reason이max_tokens가 아닌지(잘림 감지), 그리고 반복 호출 시cache_read_input_tokens가 0보다 큰지(캐싱 감지) 확인하는 검사를 추가합니다.
따라하고 싶다면 Apidog를 다운로드하세요. 동일한 컬렉션 패턴은 모든 Claude 모델에 대해 작동하므로, Sonnet 5 또는 기존 Opus 4.8 요청을 대상으로 하여 동작을 비교할 수 있습니다.
실제로 마주칠 수 있는 오류 및 문제점
thinking: disabled와xhigh또는maxeffort 조합 시 400 오류. 위에서 설명했습니다. effort를high로 낮추거나 사고(thinking)를 다시 활성화하세요.- 샘플링 매개변수 관련 400 오류.
temperature,top_p,top_k가 기본값이 아닌 경우 Opus 4.8과 마찬가지로 여전히 400을 반환합니다. 대신 시스템 프롬프트를 통해 조절하세요. - 잘린 답변. 사고(thinking)가 활성화된 상태에서
stop_reason: "max_tokens"는 제한이 응답을 삼켜버렸음을 의미합니다.max_tokens를 높이세요. - Priority Tier는 Opus 5에서 지원되지 않습니다. Opus 4.8에서는 계속 지원됩니다. 엔터프라이즈 용량 계획이 이에 의존하는 경우, 트래픽을 전환하기 전에 해결해야 할 실제적인 장애물입니다.
- 대화 중간 시스템 메시지가 이제 작동합니다. Opus 5에서는
messages내의role: "system"항목이 허용되지만, Opus 4.8에서는 400 오류를 반환했습니다. 유용하며, 계속 우회하지 않도록 알아둘 가치가 있습니다. - 과도한 검증. Opus 5는 프롬프트 없이도 자체 작업을 검증합니다. 4.8에서 가져온 "응답하기 전에 답변을 다시 확인" 지시를 유지했다면 삭제하세요. 이제 아무런 이득 없이 사고 토큰만 소모합니다.
솔직한 한계
Opus 5는 Claude 스택의 최상위 모델이 아니며, 이를 솔직하게 말할 가치가 있습니다. Fable 5는 여전히 Anthropic의 "가장 유능한 광범위 출시 모델" 지위를 유지하며, 입력 100만 개당 10달러, 출력 100만 개당 50달러의 비용이 듭니다. Opus 5는 또한 Anthropic이 직접 명시했듯이 사이버 보안 공격 및 자율 생물학 연구 분야에서 Mythos 5에 뒤처집니다.
출시 벤치마크 주장(Frontier-Bench v0.1에서 Opus 4.8의 약 두 배, ARC-AGI 3에서 다음으로 우수한 모델의 약 3배, CursorBench 3.2에서 Fable 5의 0.5% 이내)은 모두 Anthropic 자체 수치이며 2026년 7월 25일 현재 독립적으로 재현되지 않았습니다. 이들을 공급업체가 실행한 결과로 간주하고, 자체 평가를 실행하십시오. Opus 5 대 Fable 5 비교는 가격 차이가 가치 있는 경우와 그렇지 않은 경우를 다루며, Anthropic의 출시 게시물이 이러한 주장의 주요 출처입니다.
자주 묻는 질문
- Claude Opus 5의 모델 ID는 무엇인가요?
claude-opus-5이며, 날짜 접미사가 없습니다. Amazon Bedrock에서는anthropic.claude-opus-5입니다. Google Cloud와 AWS의 Claude 플랫폼은 퍼스트 파티 ID를 사용합니다. - 작동하던 Opus 4.8 요청이 Opus 5에서 잘리기 시작한 이유는 무엇인가요? 사고(thinking)가 이제 기본적으로 활성화되어 있습니다.
max_tokens는 사고 토큰과 응답 토큰을 합산하여 제한하므로, 4.8에서 답변에 충분했던 예산이 Opus 5에서는 추론과 답변을 모두 포함하기에 부족할 수 있습니다.max_tokens를 높이고stop_reason: "max_tokens"를 확인하세요. - 사고(thinking)를 비활성화했을 때 400 오류가 발생하는 이유는 무엇인가요? 거의 확실하게
thinking: {"type": "disabled"}를output_config.effort가xhigh또는max로 설정된 것과 함께 사용했습니다. 이 조합은 요청당 거부됩니다. effort를high로 제한하거나, 사고를 활성화하고 effort를 낮추세요. - 100만 토큰 컨텍스트 창에 베타 헤더가 필요한가요? 아닙니다. Opus 5에서는 100만 토큰이 기본이자 최대값이며, 베타 헤더나 장문 컨텍스트 가격 프리미엄이 없습니다. Batch API에서 300k 출력을 달성하려면
output-300k-2026-03-24베타 헤더가 필요합니다. Messages API는 출력을 128k로 제한합니다. - Opus 4.8 effort 설정을 재사용할 수 있나요? Anthropic은 불가능하다고 말합니다. 수준이 재조정되었으며, Opus 5에서는
low와medium이 의미 있게 더 강력합니다. 자체 평가 세트에 대해 새로 스윕을 실행하세요. - Apidog가 모델을 실행하나요? 아닙니다. Apidog는 HTTP 요청을 보내고, 검사하고, 테스트합니다. 추론은 Anthropic 측에서 발생합니다. Apidog는 호출과 관련된 키, 스트리밍, 도구 호출 페이로드, 응답 단언을 처리합니다.
