본문으로 건너뛰기

Claude Code에서 top_p deprecated? 먼저 Opus 4.7 request contract부터 확인하세요

Claude Code에서 Opus 4.7의 top_p deprecated 오류가 나면 실제 모델과 연결 경로부터 확인하세요. 최종 요청의 샘플링 항목만 제거하고 메시지·도구·출력 제한은 보존한 뒤, 같은 경로에서 원래 작업이 완료되는지 확인해야 합니다.

LaoZhang AI Team게시업데이트 7 분 소요
목차
실제 모델과 API 형식을 확인한 뒤 최종 요청에서 샘플링 항목만 제거하는 안내

Claude Code에서 top_p deprecated 오류가 나고 실제 요청 대상이 Opus 4.7이라면, 요청을 보내기 직전에 top_p, temperature, top_k를 넣는 코드를 찾아 해당 샘플링 항목을 빼세요. 설정 파일에서 지웠더라도 어댑터가 기본값을 다시 넣으면 오류가 계속됩니다. 먼저 모델 ID와 연결 경로를 확인하고, 수정 뒤에는 같은 경로에서 원래 작업을 다시 확인해야 합니다.

Anthropic의 현재 Messages 안내는 Opus 4.7 이상과 Mythos Preview에서 비기본값 샘플링 파라미터를 보내면 400 오류가 난다고 설명하며, 해당 항목의 생략을 권합니다. AWS의 Opus 4.7 문서는 세 샘플링 파라미터를 지원하지 않는다고 명시합니다. 숫자를 0이나 1로 바꾸거나 null을 보내는 방식보다, 해당 경로의 요청에서 항목 자체를 생략하는 것이 맞습니다.

이 글의 JSON 처리 예시는 네트워크 호출 없이 로컬에서 확인할 수 있습니다. 실제 계정의 API 호출이나 Claude Code 작업이 복구됐다는 실측 결과는 아닙니다.

오류가 난 위치와 실제 모델부터 확인하세요

deprecated라는 문구만으로 Claude Code 전체의 버그나 모델 서비스 종료를 판단할 수는 없습니다. 서버의 400 오류인지, SDK가 요청을 만들다가 낸 예외인지에 따라 고칠 위치가 달라집니다.

확인한 증상먼저 확인할 곳다음 조치
HTTP 400과 top_p, temperature, top_k 관련 오류가 함께 나옴실제 모델 ID와 서버에 전달된 최종 요청그 모델이 받지 않는 샘플링 항목을 올바른 위치에서 생략
Python의 unexpected keyword argument 또는 TypeErrorHTTP 전송 전 SDK 호출 인자사용 중인 SDK의 메서드에서 제거된 인자를 전달하는지 확인
설정에서 지웠는데 요청에는 여전히 들어 있음설정을 합치는 코드, SDK 기본값, 프록시·어댑터모든 설정 병합이 끝난 다음의 요청 생성 부분 수정
opus를 선택했지만 모델 ID가 예상과 다름제공자별 별칭과 현재 세션의 모델 선택실제 ID에 맞는 문서로 요청 형식 확인
오류가 샘플링 항목이 아닌 역할·권한·버전 문제를 가리킴해당 오류의 원문샘플링 항목 제거와 별개로 원인 구분

Anthropic의 파라미터 지원 중단 안내는 Python SDK v1 이상에서 샘플링 키워드 인자를 전달하면 TypeError가 날 수 있다고 설명합니다. 이는 설치된 SDK를 이 글에서 검사했다는 뜻이 아니며, 서버의 400과도 다릅니다. 요청 전 예외가 났다면 프록시가 나중에 JSON을 고쳐 주는 방식으로는 해결되지 않습니다.

Claude Code의 실행 버전, 실행한 클라이언트, 제공자, 모델 ID를 각각 확인하세요. 터미널에서 사용한 버전과 에디터가 실행하는 버전이 같다고 단정하지 마세요. 4월의 v2.1.111+ 안내를 모든 현재 모델에 통용되는 최소 버전으로 쓰는 것도 맞지 않습니다. 필요한 버전은 선택한 모델과 현재 공식 모델 설정에 맞춰 확인해야 합니다.

opus를 선택했다고 Opus 4.7인 것은 아닙니다

별칭이 가리키는 모델은 제공자와 시점에 따라 바뀝니다. “Anthropic API는 언제나 4.7, 모든 클라우드는 4.6”처럼 고정된 표로 판단하지 말고, 실제 요청에 쓰인 모델 ID를 확인하세요. 직접 API의 모델 ID, Bedrock의 추론 프로필 ID·ARN, Foundry의 배포 이름은 같은 문자열이 아닙니다. 제공자별 모델 지정 방식

모델을 확인하려고 /model을 조작할 때도 저장 범위를 알아야 합니다. 현재 문서에서는 Enter로 선택하거나 모델 이름을 직접 지정하면 사용자 기본값이 저장되고, 선택 화면의 s는 이번 세션에만 적용됩니다. 오류 조사 중 무심코 다음 실행의 모델까지 바꾸지 않도록 주의하세요. 설정 우선순위나 게이트웨이 연결을 먼저 정리해야 한다면 Claude Code의 모델·게이트웨이 설정 확인 방법을 참고할 수 있습니다.

설정 파일이 아니라 최종 요청에서 제거해야 합니다

Claude Code가 보여 준 오류의 원인이 어느 구성 요소인지는 실제 요청을 봐야 알 수 있습니다. 래퍼 스크립트, 제공자 어댑터, 프록시가 값을 추가할 수 있지만, 이들이 언제나 원인인 것은 아닙니다.

설정에서 전송까지 다음 순서로 확인하세요.

  1. 오류가 난 실행의 제공자와 모델 ID를 기록합니다.
  2. 설정과 모델별 옵션이 합쳐지는 부분을 찾습니다.
  3. SDK 호출 인자 또는 HTTP 전송 직전 JSON에 샘플링 항목이 남는지 확인합니다.
  4. 해당 모델에만 적용되도록 요청 생성 코드를 수정합니다.
  5. 같은 위치에서 다시 확인해 항목이 재삽입되지 않는지 봅니다.

요청 내용을 확인할 때 API 키나 인증 헤더를 출력할 필요는 없습니다. 모델 ID와 문제 필드의 위치부터 확인하고, 사용자 메시지나 파일 내용이 포함된 전체 로그의 불필요한 공유도 피하세요.

요청 형식샘플링 항목을 확인할 위치함께 보존할 항목
Anthropic Messages요청 본문의 최상위 top_p, temperature, top_kmodel, messages, system, tools, max_tokens, stop_sequences 등
Bedrock InvokeModel의 Anthropic 본문JSON 본문의 최상위 top_p, temperature, top_kanthropic_version, messages, max_tokens 등 해당 형식의 필수·지원 필드
Bedrock Converse·ConverseStreaminferenceConfig.topP, inferenceConfig.temperature; 모델별 추가 항목은 additionalModelRequestFieldsmodelId, messages, toolConfig, inferenceConfig.maxTokens, inferenceConfig.stopSequences 등

Converse의 topP와 Anthropic Messages 본문의 top_p는 철자가 다릅니다. AWS의 일반 InferenceConfiguration에 topP가 선택 항목으로 존재한다고 해서 Opus 4.7이 그 값을 받는 것은 아닙니다. 모델별 지원 조건이 우선합니다.

AWS의 Converse 요청 문서는 모델별 추가 항목을 additionalModelRequestFields로 전달하며, 이전 Sonnet 예시의 top_k도 이 위치에 있습니다. 이 예시는 필드 위치를 보여 줄 뿐 Opus 4.7의 top_k 지원을 뜻하지 않습니다. 사용 중인 어댑터가 다른 이름이나 위치로 변환한다면, 변환을 마친 뒤 위의 실제 요청 형태에서 확인하세요.

필요한 데이터는 남기고 샘플링 항목만 빼는 예시

다음 코드는 이미 Opus 4.7로 확인한 모델의 최종 요청 JSON을 로컬에서 정리합니다. 모델 이름만 보고 Opus 4.7 여부를 추측하지 않으며, 전달한 정확한 모델 ID와 요청의 ID가 다르면 중단합니다. 파일 이름은 omit_sampling.py로 저장합니다.

python
import argparse
import copy
import json
from pathlib import Path


def omit_sampling(request, request_format, expected_model):
    result = copy.deepcopy(request)
    model_key = "modelId" if request_format == "converse" else "model"
    if result.get(model_key) != expected_model:
        raise ValueError("Expected model does not match the request")

    if request_format == "messages":
        for key in ("top_p", "temperature", "top_k"):
            result.pop(key, None)
    else:
        for container, keys in (
            ("inferenceConfig", ("topP", "temperature")),
            ("additionalModelRequestFields", ("top_p", "temperature", "top_k")),
        ):
            if container not in result:
                continue
            fields = result[container]
            if not isinstance(fields, dict):
                raise ValueError(f"{container} must be an object")
            for key in keys:
                fields.pop(key, None)
            if not fields:
                result.pop(container)
    return result


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("input", type=Path)
    parser.add_argument("--format", choices=("messages", "converse"), required=True)
    parser.add_argument("--opus47-model", required=True)
    args = parser.parse_args()
    request = json.loads(args.input.read_text(encoding="utf-8"))
    cleaned = omit_sampling(request, args.format, args.opus47_model)
    print(json.dumps(cleaned, ensure_ascii=False, indent=2))

직접 Anthropic Messages를 사용하는 Opus 4.7 요청이라면 다음처럼 실행할 수 있습니다. request.json은 해당 요청 본문이며, 출력 파일은 API로 전송하지 않습니다.

bash
python3 omit_sampling.py request.json --format messages \
  --opus47-model claude-opus-4-7 > cleaned.json

Converse에서는 --format converse를 사용하고 --opus47-model에 실제 modelId와 일치하는, Opus 4.7로 확인한 모델·추론 프로필 ID를 넣습니다. 위 코드는 Messages와 Converse용이며, model이 본문에 없는 Bedrock InvokeModel 본문에 그대로 적용하는 도구는 아닙니다. InvokeModel에서는 호출 인자의 대상 모델을 먼저 확인한 뒤, 그 모델의 직렬화할 본문 최상위에서 세 항목만 생략해야 합니다.

삭제 대상을 재귀적으로 찾지 않는 점이 중요합니다. 도구 입력 스키마의 properties.top_p, 사용자가 입력한 JSON 문자열의 temperature는 생성 제어 파라미터가 아닙니다. 이를 삭제하면 도구의 의미나 사용자 데이터가 달라집니다. 반대로 max_tokens·maxTokens, 종료 문자열, 도구 설정, 지원되는 우선순위 항목은 이번 샘플링 오류만을 이유로 지우지 않습니다.

실제 연동에서는 이 처리를 모든 기본값과 옵션을 합친 뒤, 전송 직전에 넣으세요. 로컬에서 만든 cleaned.json에 항목이 없더라도 SDK나 프록시가 이후에 값을 추가하면 수정이 완성된 것이 아닙니다. Python SDK가 키워드 인자 단계에서 거절한다면 JSON 파일을 나중에 정리하는 대신 SDK 메서드에 전달하는 인자에서 먼저 빼야 합니다.

effort는 top_p의 숫자 대체값이 아닙니다

Opus 4.7에서 오래된 샘플링 항목을 제거하는 그림

top_p=0.9를 특정 effort 값으로 바꾸는 대응표는 없습니다. top_p는 토큰 후보 선택에 쓰이는 샘플링 제어이고, output_config.effort는 응답의 상세함, 작업량, 사고와 토큰 사용을 조절하는 신호입니다. Anthropic도 effort를 엄격한 토큰 예산으로 설명하지 않습니다. 공식 effort 안내

API의 Opus 4.7 기본 effort가 high라는 문서 설명을 Claude Code 전체의 현재 기본값으로 확대하면 안 됩니다. CLI의 설정, 선택한 모델, 제공 경로를 따로 확인해야 합니다. 과거 버전에서 xhigh 기본값이 바뀌었다는 기록도 현재 실행의 값을 증명하지 않습니다.

샘플링 항목을 제거한 다음에는 원래 작업이 요구하는 결과를 명확히 적으세요. 예를 들어 코드 수정이라면 허용하는 변경 범위와 통과해야 할 테스트를, JSON 생성이라면 필수 키와 허용값을 지정합니다. 필요할 때 해당 모델과 경로가 지원하는 effort를 별도로 조정하되, 오류 수정을 이유로 출력 한도를 자동으로 64,000 토큰으로 늘리거나 다른 사고 설정까지 바꾸지는 마세요. temperature=0이나 특정 effort가 매번 동일한 답을 보장한다고도 볼 수 없습니다.

같은 경로에서 원래 작업이 끝나야 복구입니다

샘플링 항목 제거 후 같은 요청 경로에서 작업을 확인하는 흐름

복구 확인은 “400이 사라졌다”에서 끝나지 않습니다. 서버가 요청을 받았는지와 원래 작업을 제대로 완료했는지는 별개의 확인 항목입니다.

먼저 오프라인에서 수정 전후 JSON을 비교하세요. 삭제된 항목이 위의 샘플링 필드뿐인지, 모델 ID·메시지·도구 스키마·출력 제한이 그대로인지 확인합니다. 합성 데이터로 같은 이름의 도구 속성과 사용자 입력을 넣어 보존되는지도 확인할 수 있습니다. 이 글의 코드는 이런 로컬 구문·JSON 변환을 확인했으며 실제 모델을 호출하지 않았습니다.

그다음 실제 작업을 다시 실행할 수 있는 환경에서 다음 순서로 확인합니다.

  1. 기존 제공자, 모델, 어댑터를 유지하고 오류가 났던 작업을 다시 실행합니다.
  2. 전송 직전 요청에서 금지된 샘플링 항목이 빠졌는지 확인합니다.
  3. 같은 샘플링 오류가 사라졌는지 봅니다. 역할·사고 설정 등 다른 오류가 나오면 그 오류를 따로 해결합니다.
  4. 필요한 도구 호출, 출력 형식, 코드의 테스트 등 원래 작업의 완료 조건을 확인합니다.
  5. 새 실행에서도 오래된 기본값이 다시 들어오지 않는지 확인합니다.

설정 파일이 깨끗해도 최종 요청이 깨끗하다는 보장은 없습니다. AWS 문서 처리 샘플의 이슈 #304에서는 설정에 top_p가 없는데도 Strands 기반 에이전트의 ConverseStream 경로에서 오류가 보고됐고, 유지보수자는 샘플 v0.5.10의 수정 내용을 안내했습니다. 이 버전은 해당 샘플의 버전이며 Claude Code 전체의 수정 버전이 아닙니다.

다른 모델로 우회해야 한다면 무엇을 확인하나요?

당장 요청 생성 부분을 고칠 수 없고 작업을 진행해야 한다면, 사용 권한이 있고 해당 요청 형식을 지원하는 다른 모델을 임시로 선택할 수 있습니다. 다만 모델을 바꾸면 출력 품질, 도구 동작, 비용, 제공 경로의 기능도 달라질 수 있으므로 원래 작업의 완료 조건으로 다시 판단해야 합니다.

다른 모델에서 성공한 결과는 그 우회 경로가 동작한다는 증거입니다. 원래 Opus 4.7 경로의 문제가 해결됐다는 증거로 쓰지는 마세요. 이후 원래 경로로 돌아와 최종 요청의 항목과 작업 결과를 다시 확인해야 합니다.

자주 묻는 질문

top_p deprecated면 Opus 4.7 서비스가 종료된 건가요?

아닙니다. 파라미터 지원 중단과 모델 서비스 종료는 다릅니다. 2026년 10월 6일 확인한 Anthropic 모델 상태 표에서는 Opus 4.7과 4.6이 활성 상태입니다. 다만 활성 상태가 모든 계정·리전·제공 경로의 접근 권한을 보장하지는 않습니다.

top_p: null이나 기본값을 넣으면 해결되나요?

항목 생략으로 처리하세요. Anthropic의 Messages 안내는 비기본값 오류와 생략을 설명하지만, 이 글에서는 null, 0, 1을 실제 호출로 검증하지 않았습니다. AWS Opus 4.7는 샘플링 파라미터 자체를 지원하지 않습니다. SDK에서 None을 줬다면 실제로 생략됐는지, JSON null로 직렬화됐는지도 구분해야 합니다.

max_tokens나 도구 설정도 같이 지워야 하나요?

아니요. 샘플링 오류에서는 해당 샘플링 항목만 제거합니다. 출력 한도, 종료 문자열, 메시지, 도구와 입력 스키마는 보존하세요. 특히 도구 스키마에 정의한 top_p라는 속성은 모델의 최상위 샘플링 파라미터와 다릅니다.

Claude Code를 업데이트하면 프록시의 기본값도 사라지나요?

별도로 확인해야 합니다. 클라이언트가 모델을 지원하더라도 프록시나 어댑터가 전송 직전에 값을 다시 넣을 수 있습니다. 현재 버전과 모델을 확인한 뒤 실제 요청 생성 위치에서 항목이 빠지는지 확인하세요. 소프트웨어 버전 변경과 제공자 변경을 동시에 하면 어느 변경이 결과에 영향을 줬는지 구분하기 어렵습니다.

참고 자료8

이 글이 링크한 외부 페이지를 본문에 나온 순서대로 정리했습니다. 마지막 업데이트: 2026년 10월 7일.

  1. 1.Messages 안내platform.claude.com/docs/es/build-with-claude/working-with-messages
  2. 2.AWS의 Opus 4.7 문서docs.aws.amazon.com/bedrock/latest/userguide/model-card-anthropic-claude-opus-4-7.html
  3. 3.파라미터 지원 중단 안내platform.claude.com/docs/zh-CN/about-claude/model-deprecations
  4. 4.공식 모델 설정code.claude.com/docs/en/model-config
  5. 5.일반 InferenceConfigurationdocs.aws.amazon.com/bedrock/latest/APIReference/API_InferenceConfiguration.html
  6. 6.Converse 요청 문서docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html
  7. 7.공식 effort 안내platform.claude.com/docs/en/build-with-claude/effort
  8. 8.이슈 #304github.com/aws-solutions-library-samples/accelerated-intelligent-document-processing-on-aws/issues/304
Claude Code에서 내장 스킬, 공식 스킬, 프로젝트 전용 스킬을 선택하는 시작 경로
Claude Code

Claude Code 스킬 추천: 작업별 첫 선택과 설치·확인 방법

코드의 버그를 찾으려면 /code-review, 변경한 코드를 정리하려면 /simplify부터 써보세요. 화면 디자인은 frontend-design, 반복적인 브라우저 검증은 webapp-testing이 후보입니다. 지금 필요한 작업에 맞춰 선택하고, 설치 목록과 실제 결과를 따로 확인하는 것이 좋습니다.

11 분
Claude Code 상태 표시줄을 설정하는 방법 비교
Claude Code

Claude Code statusline 설정: 스크립트 예제와 문제 해결

개인용 상태 표시줄은 /statusline으로 만들 수 있습니다. 동작을 직접 관리하려면 statusLine에 스크립트 실행 명령을 지정합니다. 모델명·현재 폴더·Git 브랜치·컨텍스트 사용률·세션 비용 추정치를 표시하는 예제와 빈 화면의 확인 순서를 제공합니다.

10 분