
Gemini 3.6 Flash 마이그레이션: 5가지 API 변경과 1가지 조용한 실패
핵심 요약gemini-3.6-flash또는gemini-3.5-flash-lite로 마이그레이션하면 요청 변경이 다섯 가지 생깁니다. 그중 넷은 HTTP 400을 반환하므로 바로 알아차립니다. 나머지 하나는 그렇지 않습니다.temperature,top_p,top_k는 이제 받아들여진 뒤 무시됩니다. 파이프라인이 안정적인 출력을 위해temperature=0에 의존하고 있었다면, 믿고 있던 그 보장이 사라진 뒤에도 계속 200 OK를 반환합니다. 이것부터 먼저 고치고, 그다음에 시끄러운 넷을 고치십시오.Last verified: 2026-07-21
설정 파일에서 모델 ID 하나만 바꾸고 나머지는 그대로 동작하리라 기대한다면, 배포하기 전에 첫 번째 섹션을 읽으십시오.
다섯 가지 변경, '언제 알아차리는가' 순으로
| 변경 | 새 모델에서 벌어지는 일 | 어떻게 알아차리는가 |
|---|---|---|
temperature, top_p, top_k | 받아들인 뒤 무시 | 아무것도 없음. 오류도, 경고도 없음. |
thinking_budget을 thinking_level과 함께 전송 | 요청 거부 | HTTP 400 |
요청의 마지막 턴 역할이 model | 요청 거부 | HTTP 400 |
call_id와 name이 없는 FunctionResponse | 요청 거부 | HTTP 400 |
candidate_count | Gemini 3.x에서 미지원 | 요청 실패, 또는 해당 필드가 폐기됨 |
이 다섯 중 넷은 스스로 신호를 보냅니다. 통합 테스트가 잡아내고, 오류 추적기가 알림을 보내며, 오후 한나절이면 고칩니다. 프로덕션까지 흘러들어가는 것은 첫 번째입니다.
위험한 하나: temperature, top_p, top_k는 이제 무시됩니다

어떤 파이프라인이 오류 없이 망가지는가
조용한 no-op은 그 파라미터에 의존하고 있던 경우에만 위험합니다. 흔한 구성이 네 가지 있었습니다:
- 결정성(determinism) 파이프라인. 반복 호출 결과를 서로 일치시키려고
temperature=0을 설정하는 모든 것: 모델 출력으로 만든 캐시 키, 중복 제거 패스, 결과를 하류 상태 머신에 넣는 분류 작업. 이 설정은 이제 무력해졌으므로, 그것이 사 주던 출력 안정성은 더 이상 사지지 않습니다. - golden file / 스냅샷 테스트.
temperature=0을 고정해 두고 모델 출력을 저장된 기대 문자열과 diff하는 테스트 스위트. 모델을 바꾼 뒤 이들은 흔들리기 시작하는데, 그 흔들림이 설정 문제가 아니라 모델 품질 저하처럼 보여서 엉뚱한 방향으로 디버깅하게 만듭니다. - 낮은 온도로 지탱하던 구조화 출력. 구조화 출력을 도입하지 않고 대신
temperature를 0 근처로,top_p를 좁게 유지해 모델이 파싱 가능한 JSON을 안정적으로 뱉게 하던 팀. 이제 두 손잡이가 동시에 무력해집니다. - 경로별로 튜닝한 설정. '창의성' 슬라이더를 노출하거나, '요약'은 한 온도로 '브레인스토밍'은 다른 온도로 라우팅하는 제품. 슬라이더는 UI에서 여전히 움직입니다. 하지만 모델에서는 아무것도 움직이지 못합니다.
이들 중 무엇도 스택 트레이스를 만들지 않습니다. 대신 스스로 건강하다고 보고하는 시스템에서, 당신이 검증했던 것과 미묘하게 다른 출력을 만들어냅니다.
게이트웨이도 경고하지 않습니다
이 지점에서 신중한 팀조차 걸려 넘어집니다. 모델 게이트웨이는 각 모델이 어떤 파라미터를 지원하는지 설명하는 기계 판독 가능한 메타데이터를 게시하고, 상위 도구는 그 메타데이터를 읽어 무엇을 보낼지 결정합니다.
google/gemini-3.6-flash와 google/gemini-3.5-flash-lite 양쪽 모두에 대해 supported_parameters에 여전히 temperature, top_p, seed를 나열하고 있습니다. 게이트웨이는 그 필드들을 받아 전달합니다. 반대편 모델은 그것들을 무시합니다. 이 사슬에서 오류를 내는 것은 하나도 없고, 그 필드가 죽었다고 알려 주는 메타데이터도 없습니다.무엇이 temperature를 대체하는가
Google이 밝힌 대체는 또 다른 파라미터가 아닙니다. system instruction입니다. 원하는 동작을 샘플링 상수가 아니라 모델이 읽는 규칙으로 적으십시오.
이는 의도를 표현하는 방식의 실질적 변화이므로, 삭제가 아니라 '번역'을 하십시오:
| 예전에 숫자로 인코딩하던 것 | 이제 어디에 들어가는가 |
|---|---|
간결하고 재현 가능한 답을 위한 temperature=0 | 요구되는 형식, 길이, 어조를 명시하고 서두 없이 답하라는 규칙을 담은 system instruction |
| JSON을 파싱 가능하게 유지하는 낮은 temperature | 구조화 출력. gemini-3.6-flash와 gemini-3.5-flash-lite 모두 지원 |
| 다양성을 위한 높은 temperature | 한 응답에서 서로 다른 N개의 선택지를 요구하는 지시. candidate_count도 함께 사라졌기 때문 |
temperature와 candidate_count를 함께 삭제하면, 팀이 출력 다양성을 위해 쓰던 두 가지 메커니즘이 모두 사라집니다. 어떤 기능이 다양성에 의존하고 있었다면, 설정 수정이 아니라 실제 재설계가 필요합니다.배포 전에 모든 호출 지점을 찾는 법
설정 계층을 믿지 말고 코드베이스에서 파라미터 이름을 직접 검색하십시오. 이 값들은 보통 여러 곳에서 서로 다른 사람이 서로 다른 시점에 설정해 두기 때문입니다:
# Gemini 네이티브 및 OpenAI 호환 표기법, 그리고 이들을 담는 설정 객체
grep -rn "temperature\|top_p\|topP\|top_k\|topK\|candidate_count\|candidateCount" \
--include="*.py" --include="*.ts" --include="*.js" --include="*.go" --include="*.java" .
# 이들을 감싸는 래퍼
grep -rn "generation_config\|generationConfig\|GenerateContentConfig\|thinking_budget\|thinkingBudget" .시끄럽게 실패하는 넷
이들은 더 간단합니다. API가 알려 주기 때문입니다. 테스트 스위트가 드러내는 순서대로 고치면 됩니다.
thinking_budget과 thinking_level은 동시에 존재할 수 없습니다
thinking_budget을 문자열 열거형 thinking_level로 대체했으며, 값은 minimal, low, medium, high입니다. 한 요청에 둘 다 보내면 400을 반환합니다. Google의 마이그레이션 지침은 호환을 위해 둘 다 남기는 것이 아니라 thinking_budget을 thinking_level로 교체하라는 것입니다.값을 고를 때 알아 둘 만한 기본값이 두 가지 있습니다. 두 모델 사이에서 다르기 때문입니다:
gemini-3.6-flash의 기본값은medium입니다.gemini-3.5-flash-lite의 기본값은minimal이며, 처리량에 맞춰 튜닝되어 있습니다.
minimal 기본값이 자율 서브 에이전트로 쓰기에 적합하지 않으며, 다단계 작업에서 도구 호출을 조기에 종료한다고 분명히 밝힙니다. Flash-Lite가 당신을 대신해 코드를 작성하거나, 터미널 명령을 실행하거나, 외부 API를 호출할 것이라면, 의도적으로 medium이나 high로 올리십시오. 이는 기본값을 받아들이는 것이 형식적 절차가 아니라 실제 제품 결정이 되는, 이 마이그레이션에서 유일한 편집입니다.minimal 기본값으로 돌린 경우로, 3단계 알림 체인 작업에서 세 번 모두 실패했습니다. 형태는 매번 동일했습니다. 처음 두 도구는 올바르게 호출한 뒤 멈추고, 최종 알림은 보내지 않은 채 성공을 보고했습니다. 오류도 예외도 없이, 하류 서비스가 그대로 받아들일 잘 구성된 응답이었습니다. 같은 모델을 high로 올리자 매번 작업을 통과했습니다.thinking_level을 설정하지 않으면, 요청은 실패하지 않습니다. 끝내지 못한 일에 대해 자신만만한 답을 돌려줍니다. 레벨을 명시적으로 설정한 뒤, 돌려받은 응답이 아니라 워크플로가 만들어냈어야 할 효과를 검증(assert)하십시오.더 이상 모델 턴을 프리필할 수 없습니다
model이면 API는 400을 반환합니다. 프리필은 흔한 기법이었습니다. {"role": "model", "parts": [{"text": "{"}]} 같은 절반짜리 어시스턴트 턴을 덧붙여 모델이 JSON 여는 중괄호로 시작하게 강제하거나, 수다스러운 서두를 억제했습니다.모든 FunctionResponse에는 call_id와 name이 필요합니다
generateContent API를 사용할 때, 각 FunctionResponse는 대응하는 call_id와 함수의 name을 모두 지녀야 합니다. 여기서 흔히 당하는 것은 손으로 짠 도구 루프입니다. 상당수가 '결과만 돌려주면 충분하던' 시절에 작성되어, 모델이 보낸 것을 그대로 되돌려주는 대신 응답 객체를 처음부터 재구성하기 때문입니다.call_id를 보관해 두었다가, 돌려주는 응답에 다시 실으십시오. 도구 루프를 프레임워크 위에 지었다면, 우회 패치를 하지 말고 프레임워크를 업데이트하십시오.candidate_count는 사라졌습니다
candidate_count는 Gemini 3.x에서 지원되지 않습니다. 제거하십시오. 여러 답을 샘플링해 가장 좋은 것을 고르는 데 쓰고 있었다면, 그 로직을 이제 명시적으로 짜야 합니다. 한 응답 안에서 여러 선택지를 요구하거나, 여러 요청을 보내 각각 비용을 지불하십시오.전과 후: 깔끔하게 마이그레이션되는 요청
아래는 폐기된 필드를 모두 담은 Gemini 네이티브 호출과, 이 이동에서 살아남는 버전입니다.
# 이전: 2.5 세대 모델에서는 동작하지만, 3.6 Flash에서는 깨지거나 조용히 오작동한다
config = {
"temperature": 0, # 이제 무시됨, 오류 없음
"top_p": 0.95, # 이제 무시됨, 오류 없음
"top_k": 40, # 이제 무시됨, 오류 없음
"candidate_count": 1, # Gemini 3.x에서 미지원
"thinking_budget": 8192, # thinking_level과 함께 오면 400
}
# 이후: 의도를 샘플링 상수에서 지시문으로 옮김
config = {
"system_instruction": (
"최대 세 문장으로 답하세요. 평이한 서술문을 쓰세요. "
"서두를 붙이거나, 질문을 되풀이하거나, 후속 제안을 하지 마세요. "
"답이 불확실하면 한 문장으로 그렇다고 말하세요."
),
"thinking_level": "medium",
}temperature=0은 결코 스스로를 설명하지 못했습니다.import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["EVOLINK_API_KEY"],
base_url="https://api.evolink.ai/v1"
)
response = client.chat.completions.create(
model="gemini-3.6-flash",
messages=[
{"role": "system", "content": "최대 세 문장으로 답하세요. 서두 없이."},
{"role": "user", "content": "이 장애 보고서를 요약하세요."}
]
# temperature, top_p 없음: 넣어도 받아들여진 뒤 하류에서 무시됨
)
print(response.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env["EVOLINK_API_KEY"],
baseURL: "https://api.evolink.ai/v1",
});
const response = await client.chat.completions.create({
model: "gemini-3.6-flash",
messages: [
{ role: "system", content: "최대 세 문장으로 답하세요. 서두 없이." },
{ role: "user", content: "이 장애 보고서를 요약하세요." },
],
// temperature, top_p 없음
});
console.log(response.choices[0].message.content);gemini-3.6-flash입니다. preview 접미사도, 날짜 표기도 없으므로 고정할 날짜 별칭이 없습니다. 배포 프로세스가 -preview나 -001 변형이 존재한다고 가정한다면, 그 가정은 요청 시점에 실패합니다.조용한 실패를 잡아내는 마이그레이션 순서
순서가 중요합니다. 시끄러운 오류는 쉽고 조용한 것은 그렇지 않기 때문입니다. 이 순서로 진행하십시오:

- 먼저 인벤토리. 위 grep을 돌려 샘플링 파라미터가 설정된 모든 곳을 설정 저장소와 대시보드까지 포함해 나열하십시오. 각각이 어떤 동작을 보호하고 있었는지 적어 두십시오.
- 삭제만 하지 말고 의도를 번역. 발견한 모든
temperature에 대해 그것이 무엇을 위한 것이었는지 정한 뒤, 그에 상응하는 system instruction을 작성하십시오. 번역 없이 삭제하는 것이 곧 품질 저하를 출시하는 방법입니다. - 400들을 고친다.
thinking_budget을thinking_level로 교체하고,candidate_count를 제거하고, 프리필된 모델 턴을 제거하고, 모든FunctionResponse에call_id와name을 추가하십시오. - 의도적으로 thinking 레벨을 선택, 특히 Flash-Lite에서 그렇습니다.
minimal기본값은 자율 다단계 작업에 부적합합니다. 이는 마이그레이션에서 가장 큰 비용 레버이기도 합니다: 우리 작업 세트에서 3.6 Flash를minimal로 돌렸을 때 같은 모델을 기본medium으로 돌릴 때보다 패스당 73.6% 저렴했고,medium에서는 thinking 토큰이 청구 출력의 85%를 차지했습니다. 시험해야 할 것은 절감이 실제인지가 아니라, 당신의 워크로드가 그 하락을 견디는지입니다. - 무엇이든 비교하기 전에 스냅샷 테스트를 새 모델 기준으로 다시 잡으십시오. 옛 golden file은 더 이상 적용되지 않는 파라미터 아래에서 생성되었으므로, 유효한 기준점이 아닙니다.
- 같은 작업 세트에서 두 모델 모두에 평가를 돌리고, 통과율만이 아니라 출력 분포를 비교하십시오. 조용한 동작 변화는 오답으로 드러나기 전에 형식·길이·장황함의 드리프트로 먼저 드러납니다.
- 실제 트래픽으로 카나리하며 하류 파서를 주시하십시오. API 오류율만 보지 마십시오. 무언가 조용히 깨진다면, 그것은 호출 자체가 아니라 모델 출력을 소비하는 코드에서 깨집니다.
temperature=0이 아직 무언가 하던 시절에 생성된 golden file과 새 출력을 diff하면, 모든 diff가 모델 문제처럼 보이지만 그중 어느 것도 그렇지 않습니다.Google의 마이그레이션 skill로 첫 패스를 돌려라
npx skills add google-gemini/gemini-skills --skill gemini-interactions-api --global그다음, 코딩 에이전트에서 프로젝트를 가리키게 하십시오:
/gemini-interactions-api migrate my app to Gemini 3.6 Flash
돌려 볼 가치가 있습니다. 기계적인 일을 처리합니다. 폐기된 필드 찾기, 요청 구성 재작성, 호출 지점 갱신인데, 위 3단계의 대부분을 포괄합니다.
temperature=0을 제거해야 한다는 것은 알아볼 수 있습니다. 하지만 그 값이 하류 서비스가 '같은 입력에는 같은 출력'을 가정했기 때문에 거기 있었다는 것은 알 수 없고, 그 의도를 보존하는 system instruction을 써 낼 수도 없습니다. 이 skill은 코드 훑기 패스로 취급하고, 의도 번역은 직접 하십시오.은퇴 일정: 선택이 당신의 것이 아니게 되는 때
| 모델 | 종료 날짜 | 권장 대체 모델 |
|---|---|---|
gemini-2.5-flash | 2026-10-16 | gemini-3.6-flash |
gemini-2.5-flash-lite | 2026-10-16 | gemini-3.1-flash-lite |
gemini-3.1-flash-lite | 2027-05-07 | gemini-3.5-flash-lite |
gemini-3-flash-preview | 종료 날짜 미공지 | gemini-3.6-flash |
gemini-3.6-flash, gemini-3.5-flash-lite | 종료 날짜 미공지 | 해당 없음 |
gemini-2.5-flash-lite에 지정한 대체 모델은 갓 출시된 gemini-3.5-flash-lite가 아니라 gemini-3.1-flash-lite입니다. 가장 최신 Lite 모델로 곧장 건너뛰는 것은 방어 가능한 선택이지만, 그것은 문서화된 업그레이드 경로가 아니라 당신의 선택이며, 한 세대가 아니라 두 세대를 건너뛰는 것입니다. 그에 맞게 계획하고 시험하십시오.gemini-3-flash-preview를 쓰고 있다면 공지된 종료일은 없지만, preview 모델은 애초에 로드맵을 세울 대상이 아닙니다.Computer Use: 공식 문서 넷, 답 둘
지금은 문서만으로 결론 낼 수 없는 능력 관련 질문이 하나 있습니다. 이 모델들이 Computer Use를 지원하는지가 Google 자신의 자료 전반에서 일관되지 않게 서술되어 있습니다:
- Gemini API 모델 문서는 3.6 Flash에 대해 Computer Use를 지원(preview)으로 표시하는 반면, 같은 모델의 엔터프라이즈 플랫폼 페이지는 미지원으로 표기합니다.
- 3.5 Flash-Lite의 경우, 모델 페이지들은 미지원이라 말하지만 출시 공지와 Gemini 3 개발자 가이드는 동작한다고 말합니다.
이번 주에 공급자를 다시 고르고 있다면 이것이 뜻하는 바
들어간 김에 확인할 만한 것이 두 가지 있습니다:
- 전환 기간에 옛 모델과 새 모델을 나란히 돌릴 수 있습니까? 위 6단계가 이를 요구합니다. 현재 구성 때문에
gemini-3.5-flash와gemini-3.6-flash를 같은 작업 세트로 돌리는 일이 번거롭다면, 그 번거로움은 다음 마이그레이션에도 그대로 남습니다. 그리고 다음은 반드시 옵니다. Google은 이 규칙이 이후 출시되는 모든 모델에 적용된다고 밝혔습니다. - 새 모델이 당신에게 호출 가능해지기까지 얼마나 걸립니까?
gemini-3.6-flash는 출시 첫날 preview 접미사 없이 정식 출시(GA)에 도달했습니다. 모델이 출시되는 시점과 당신 코드가 그것을 호출할 수 있는 시점 사이의 간극은, 출시가 있을 때마다 당신이 치르는 비용입니다.
model 문자열을 바꾸는 일이며, 새 모델은 이미 쓰고 있는 그 엔드포인트를 통해 제공됩니다. 이 특정 모델 자체의 현재 상태부터 보고 싶다면, Gemini 3.6 Flash 출시 추적기에 가용성과 모델 ID 세부가 있고, 3.6 Flash 대 3.5 Flash 비교는 이 업그레이드를 애초에 할 가치가 있는지를 다룹니다. 그것은 안전하게 하는 방법과는 별개의 질문입니다.gemini-3.6-flash에서는 더 이상 그렇지 않습니다.FAQ
temperature, top_p, top_k는 받아들여진 뒤 무시되며, 오류도 경고도 없습니다. Google은 향후 모델 세대가 이 파라미터들에 대해 HTTP 400을 반환할 것이라고 밝혔으므로 이 침묵은 일시적이지만, 지금으로서는 이들을 담은 요청이 완전히 건강해 보입니다.minimal, low, medium, high인 문자열 열거형 thinking_level을 사용합니다. 한 요청에 thinking_budget과 thinking_level을 함께 보내면 HTTP 400을 반환합니다. 기본값은 3.6 Flash에서 medium, 3.5 Flash-Lite에서 minimal입니다.gemini-3.5-flash-lite가 아니라 gemini-3.1-flash-lite를 지목하며, 종료 날짜로 2026년 10월 16일을 제시합니다. 대신 3.5 Flash-Lite로 옮길 수도 있지만, 그것은 두 세대를 건너뛰는 것이자 문서화된 경로가 아닌 당신 자신의 결정입니다.thinking_level 전환, 프리필 제한, FunctionResponse 요구사항, candidate_count 제거는 모두 gemini-3.5-flash-lite에도 똑같이 적용되며, Google은 이 두 모델 이후에 출시되는 모든 모델에도 적용된다고 밝혔습니다. 코드 변경은 어느 쪽이든 동일하므로, 둘 중 어느 것으로 옮길지 확정하기 전에 마이그레이션을 시작할 수 있습니다. 그 선택은 별개의 질문이며, Gemini 3.6 Flash 대 3.5 Flash-Lite 비교에서 다룹니다.gemini-3.6-flash이며, preview 접미사도 날짜 표기도 없습니다. 배포 도구가 날짜 별칭을 기대한다면, 요청 시점에 실패합니다.출처
- Using the latest Gemini models (Google AI for Developers): 폐기된 샘플링 파라미터,
thinking_level,candidate_count, 프리필 제한,FunctionResponse요구사항, 마이그레이션 skill 명령 - Gemini deprecations (Google AI for Developers): 종료 날짜와 권장 대체 모델
- Gemini API models (Google AI for Developers): 모델 ID와 능력 지원 매트릭스
- Gemini 3 개발자 가이드 (Google AI for Developers): Gemini 3의 요청 동작과 능력
- Gemini 3.6 Flash (Gemini Enterprise Agent Platform) (Google Cloud): 엔터프라이즈 능력 목록과 페이지에 표시된 파라미터 기본값
- Introducing Gemini 3.6 Flash, 3.5 Flash-Lite, and 3.5 Flash Cyber (Google): 출시 공지와 출시 날짜
- google-gemini/gemini-skills (GitHub): 공식 마이그레이션 skill
- OpenRouter models 엔드포인트 (OpenRouter): 게이트웨이 메타데이터가 두 모델 모두에 대해
temperature,top_p,seed를 지원 파라미터로 나열, 2026-07-21 관측 - EvoLink 모델 카탈로그, Gemini 3.6 Flash 출시 추적기, Gemini 3.6 Flash 대 Gemini 3.5 Flash, Gemini 3.5 Flash 대 Gemini 3 Flash Preview 마이그레이션 가이드, Gemini 3 Pro 폐기 가이드, EvoLink API base URL


