AI Development

DeepSeek V4-Flash-0731 사고 끄기 실패 점검

DeepSeek V4-Flash-0731 사고 끄기 실패 점검

공식 문서에서 DeepSeek V4의 사고 모드 기본값은 enabled입니다. OpenAI SDK 호출에서는 thinking 객체를 extra_body 안에 전달해야 합니다. 따라서 설정 파일에 disabled가 보인다는 이유만으로 사고 모드가 꺼졌다고 판단하면 안 됩니다. 최종 출발 요청에 thinking: { "type": "disabled" }가 있는지 먼저 확인해야 합니다. (api-docs.deepseek.com)

누가 이 점검을 해야 하는가

DeepSeek V4-Flash-0731로 바꾼 뒤에도 reasoning_content가 반환되는 애플리케이션 개발자에게 적합합니다. OpenAI SDK나 호환 프레임워크를 관리하며 중간 계층의 파라미터 손실을 찾아야 하는 플랫폼 엔지니어도 대상입니다.

주 요청은 정상인데 전체 사용량이 계속 늘어나는 AI Agent 팀이라면 하위 요청 점검 부분부터 확인해야 합니다.

마지막 업데이트: 2026년 8월 2일. DeepSeek 공식 업데이트 기록, 사고 모드 안내, 대화 완성 API 문서와 가격 문서를 기준으로 다시 확인했습니다.

응답에 남은 흔적과 실제 재실행의 구분

reasoning_content가 보인다는 사실만으로 현재 요청이 사고 모드였다고 단정할 수는 없습니다. 현장에서 가장 자주 섞이는 흔적은 세 가지입니다.

  • 현재 응답이 생성한 reasoning_content
  • 애플리케이션이 대화 기록에 저장한 이전 응답 필드
  • 스트리밍 조각을 합치는 과정에서 남은 파싱 버퍼

먼저 같은 요청 ID를 기준으로 다음 항목을 묶어야 합니다.

  1. 실제 호출 시각
  2. 최종 출발 요청의 model
  3. 최종 출발 요청의 thinking
  4. 응답에 reasoning_content가 새로 생성됐는지 여부
  5. 응답 시간과 usage

DeepSeek 문서상 사고 모드 응답에서는 reasoning_contentcontent와 같은 단계에서 반환됩니다. 도구 호출이 없는 다음 대화에서는 이전 추론 내용이 무시될 수 있지만, 도구 호출이 포함된 대화에서는 이후 요청에 해당 필드를 다시 전달해야 합니다. 그러므로 화면에 남은 필드와 서버가 새로 생성한 필드를 분리해야 합니다. 사고 모드 공식 안내도구 호출 공식 안내를 함께 확인하는 편이 안전합니다. (api-docs.deepseek.com)

호출 입력과 출발 본문의 차이

OpenAI SDK의 파라미터 위치

OpenAI SDK 호출에서 최소 확인 형태는 다음과 같습니다.

response = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=messages,
    extra_body={
        "thinking": {
            "type": "disabled"
        }
    }
)

핵심은 extra_body입니다. 애플리케이션 설정에 다음처럼 저장되어 있어도 최종 요청에 없으면 서버는 해당 값을 받지 못합니다.

{
  "thinking": {
    "type": "disabled"
  }
}

코드 입력값만 기록하지 말고, 인증 정보와 사용자 내용을 제거한 최종 출발 JSON을 남겨야 합니다. 공식 API 문서에서 사고 모드의 허용값은 enableddisabled이며, 값을 생략하면 기본값은 enabled입니다. 대화 완성 API의 thinking 파라미터를 기준으로 검증해야 합니다. (api-docs.deepseek.com)

세 단계 비교표

확인 단계 반드시 볼 항목 판단 기준
애플리케이션 입력 설정 파일, 호출 함수 인자 이 단계의 disabled만으로는 미확정입니다
SDK 또는 어댑터 출력 직렬화된 요청 객체 extra_body와 내부 thinking 객체가 남아 있어야 합니다
네트워크 출발 본문 실제 전송된 JSON modelthinking.type을 최종 기준으로 삼습니다

첫 단계와 세 번째 단계가 다르면 설정 문제가 아니라 전달 경로 문제입니다. 두 번째 단계에서 값이 사라지면 SDK 래퍼나 프레임워크의 허용 목록을 의심해야 합니다.

어댑터의 허용 목록과 직렬화 손실

공용 SDK 래퍼는 종종 지원한다고 선언한 항목만 남깁니다. model, messages, stream처럼 널리 쓰이는 필드만 통과시키고 extra_body를 버리는 경우가 있습니다. 일부 계층은 extra_body는 남기지만 그 안의 thinking 객체를 평탄화하거나 빈 값으로 바꿀 수도 있습니다.

다음 세 로그를 같은 요청 ID로 비교하면 삭제 지점을 찾기 쉽습니다.

  • 애플리케이션이 어댑터에 전달한 호출 인자
  • 어댑터가 만든 SDK 요청 객체
  • HTTP 클라이언트가 실제로 전송한 출발 본문

프레임워크 화면의 “사고 모드 끄기” 표시만으로 결론을 내리면 안 됩니다. 요청 가로채기 기록, 직렬화 로그, 또는 공식 주소로 보내는 최소 직결 호출이 필요합니다. 직결 호출에서는 꺼지지만 기존 경로에서만 reasoning_content가 나오면 모델 자체가 아니라 중간 계층의 문제입니다.

이때 모델 이름을 바꾸어 우연히 해결하려고 하면 원인 추적이 늦어집니다. 공식 문서에서 현재 대화 완성 API가 허용하는 모델 이름은 deepseek-v4-flashdeepseek-v4-pro입니다. 먼저 실제 라우팅 모델을 기록한 뒤 사고 모드 값이 유지되는지 확인해야 합니다. (api-docs.deepseek.com)

게이트웨이 재설정과 환경 변수 덮어쓰기

공용 모델 게이트웨이는 다음 조건을 보고 값을 다시 만들 수 있습니다.

  • 모델 별칭
  • 테넌트 또는 프로젝트 설정
  • 작업 태그
  • 환경 변수
  • 재시도 정책
  • 에이전트 유형

예를 들어 애플리케이션은 disabled를 보냈지만 게이트웨이가 모델 별칭을 실제 모델로 바꾸면서 기본값인 enabled를 다시 삽입할 수 있습니다. 반대로 게이트웨이가 thinking 객체를 제거해 서버 기본값을 사용하게 만들 수도 있습니다.

비교 경로 기록할 값 비교 목적
공식 주소 직결 모델, thinking, 응답 필드 기준 동작 확보
테스트 게이트웨이 변환 전후 본문 어댑터와 라우팅 확인
운영 게이트웨이 최종 본문, 재시도 본문 운영 환경 덮어쓰기 확인

로컬, 테스트, 운영의 결과를 비교할 때 응답 내용만 보면 안 됩니다. 최초 차이가 요청 본문에서 생겼는지, 재시도 요청에서 생겼는지 확인해야 합니다. 운영 환경 변수는 로컬 셸 설정과 다를 수 있으므로 배포 단위의 실제 환경 값을 따로 기록해야 합니다.

DeepSeek의 공식 가격 문서는 비용이 입력 토큰과 출력 토큰 수에 따라 계산된다고 설명합니다. 따라서 사고 모드가 정말 원인인지 확인하려면 총액보다 요청별 usage와 응답 필드를 먼저 묶어야 합니다. 공식 가격 및 모델 문서를 기준으로 비용 회귀를 설계할 수 있습니다. (api-docs.deepseek.com)

주 요청과 AI Agent 하위 요청의 분리

AI Agent는 한 번의 사용자 입력으로 여러 API 요청을 만들 수 있습니다. 대표적으로 다음 계층이 분리됩니다.

  • 사용자에게 답하는 주 요청
  • 계획을 만드는 요청
  • 도구 선택 요청
  • 도구 결과를 해석하는 요청
  • 실패 후 재시도 요청

주 요청에만 disabled를 넣으면 하위 요청까지 자동으로 같은 설정을 상속한다고 볼 수 없습니다. 각 요청이 독립된 chat.completions.create 호출이라면 각 호출마다 extra_body를 만들어야 합니다.

호출 트리에는 최소한 다음 표식을 남기는 것이 좋습니다.

trace_id
parent_request_id
request_role
model
thinking.type
reasoning_content_present
usage
retry_count

request_roleplanner, tool, retry처럼 나뉘어 있으면 어느 층에서 추론 응답이 생겼는지 확인할 수 있습니다. 주 요청의 응답만 보고 전체 비용을 판단하면 숨은 하위 요청을 놓칩니다.

특히 도구 호출 대화에서는 이전 reasoning_content를 후속 요청에 전달해야 하는 공식 조건이 있습니다. 이 필드는 “현재 새로 사고 모드가 켜졌다”는 증거가 아니라, 이전 턴의 대화 상태를 유지하기 위한 값일 수도 있습니다. 생성 시각과 부모 요청 ID를 함께 기록해야 합니다. (api-docs.deepseek.com)

독립 회귀 확인 목록

다음 순서로 확인하면 설정 화면과 실제 동작을 분리할 수 있습니다.

  • [ ] 고정된 비밀 정보 제거 입력을 하나 선정합니다.
  • [ ] 공식 주소로 deepseek-v4-flash 직결 요청을 보냅니다.
  • [ ] 최종 출발 JSON에 thinking.typedisabled인지 저장합니다.
  • [ ] 직결 응답의 reasoning_content 존재 여부를 기록합니다.
  • [ ] 같은 입력을 현재 OpenAI SDK 경로로 재생합니다.
  • [ ] SDK 입력값과 네트워크 출발 본문을 함께 비교합니다.
  • [ ] 테스트 게이트웨이에서 모델 이름과 사고 모드 값을 확인합니다.
  • [ ] 운영 게이트웨이의 재시도 요청까지 별도로 기록합니다.
  • [ ] AI Agent의 계획, 도구, 재시도 요청에 부모 ID를 붙입니다.
  • [ ] 모든 요청의 usage를 요청 계층별로 나눠 비교합니다.
  • [ ] 주 요청과 하위 요청에서 thinking.type이 같은지 확인합니다.
  • [ ] 수정 후 동일한 입력으로 세 경로를 다시 재생합니다.

합격 조건은 네 가지입니다. 모델 이름이 의도한 값이어야 합니다. 최종 출발 본문에 disabled가 있어야 합니다. 현재 응답에서 새 reasoning_content가 생성되지 않아야 합니다. 하위 요청도 같은 설정을 가져야 합니다. 비용 감소율을 미리 정하지 말고, 공식 과금 기준이나 실제 회귀 기록으로만 비교해야 합니다.

자주 묻는 점

DeepSeek V4-Flash-0731에서 사고 모드를 껐는데 reasoning_content가 남는 이유는 무엇인가요?

현재 응답이 아니라 이전 대화 기록이나 스트리밍 파서가 저장한 reasoning_content일 수 있습니다. 먼저 같은 요청 ID의 최종 출발 본문, 모델 이름, 응답 시각을 묶어 확인해야 합니다. 최종 본문에 사고 모드 끄기 값이 없다면 기본값이 다시 적용된 것으로 판단합니다.

OpenAI SDK에서 DeepSeek V4의 사고 모드 설정은 어디에 넣어야 하나요?

OpenAI SDK를 통한 호출에서는 thinking 객체를 extra_body 안에 넣어야 합니다. 애플리케이션 자체 설정 파일에만 값을 저장하거나 지원되지 않는 최상위 인자로 전달하면 직렬화 과정에서 빠질 수 있습니다. 네트워크 단계에서 실제로 전송된 비밀 정보 제거 본문을 확인해야 합니다.

DeepSeek V4에서 사고 모드를 껐는데 비용이 계속 높으면 어떻게 확인하나요?

주 요청 하나만 보지 말고 계획 수립, 도구 실행, 실패 재시도 요청을 나눠 usage와 응답 필드를 비교해야 합니다. 주 요청은 꺼져 있어도 공용 게이트웨이나 AI Agent가 만든 하위 요청에는 기본값이 남아 있을 수 있습니다. 호출 트리와 요청별 사용량을 함께 보면 비용이 발생한 층을 좁힐 수 있습니다.

AI Agent의 숨은 하위 요청도 사고 모드가 꺼졌는지 어떻게 확인하나요?

각 하위 요청에 고유한 추적 표식을 붙이고 최종 출발 본문, 모델 이름, thinking 값, reasoning_content 존재 여부, usage를 기록합니다. 입구 호출의 설정만 보는 방식은 상속 실패를 잡지 못합니다. 계획 요청과 도구 호출 요청을 분리해 같은 설정이 반복되는지 확인해야 합니다.

현재 환경과 클라우드 맥 테스트 환경의 차이

기존 개발 환경에서만 재현하면 SDK 버전, 환경 변수, 게이트웨이 설정, Agent 실행 버전이 한꺼번에 섞입니다. 그 상태에서는 disabled가 어느 계층에서 사라졌는지 확인하기 어렵습니다.

반대로 독립된 클라우드 맥 환경은 다음 장점이 있습니다.

  • 운영 비밀 값과 테스트 값을 분리하기 쉽습니다.
  • SDK와 어댑터 버전을 고정할 수 있습니다.
  • 공식 주소 직결과 게이트웨이 경로를 같은 입력으로 비교할 수 있습니다.
  • Agent 하위 요청의 호출 트리를 별도 저장할 수 있습니다.

다만 장기적으로 높은 부하를 계속 처리하거나 물리 장치 연결이 필요한 경우에는 임대형 환경보다 자체 장비가 적합할 수 있습니다. 이번 문제처럼 짧은 기간 동안 버전과 요청 경로를 격리해 재현해야 한다면, 클라우드 맥 테스트 환경 안내콘솔에서 실행 환경을 확인하는 방법을 먼저 검토하는 편이 현실적입니다. 기간별 자원 비용과 운영 편의성을 비교하려면 맥 렌탈 요금 안내도 함께 확인할 수 있습니다.

현재 환경에서 계속 확인하는 방식은 운영 게이트웨이의 숨은 재시도, 로컬과 다른 환경 변수, Agent별 SDK 버전 차이를 놓치기 쉽습니다. 특히 주 요청만 보면 하위 요청의 사고 모드와 사용량을 볼 수 없습니다. 반면 ProxyMac의 독립 환경에서 같은 입력을 직결, SDK, 게이트웨이 순서로 재생하면 설정이 사라지는 계층을 분리하기 쉽습니다. 먼저 최종 출발 요청을 확보한 뒤 테스트 자원을 선택하는 순서가 비용과 시간을 모두 아끼는 방법입니다.

안정적인 맥 환경에서 인공지능 연동을 점검해 보세요

프록시맥의 원격 맥 환경에서 요청 설정과 실제 응답을 직접 비교하며 문제 원인을 확인할 수 있습니다.
필요한 맥을 원격으로 이용해 중간 연결 단계와 하위 요청을 분리한 재현 환경을 빠르게 구성할 수 있습니다.