ChatGPT 섀도우밴 확인하는 법
How to check if you are shadowbanned
핵심 요약
ChatGPT 사용 시 섀도우밴 여부를 확인하고 모델 슬러그를 감지할 수 있는 스크립트 공유.
- 섀도우밴 확인 — 네트워크 탭에서 resolved_model_slug를 통해 모델 확인 가능함.
- 자동 감지 스크립트 — 브라우저에서 섀도우밴 상태를 실시간으로 표시하는 유저스크립트 제공됨.
- 섀도우밴 증상 — 설정과 무관하게 gpt-5.5-mini로 강제 라우팅되고 사고 과정이 나타나지 않음.
- 의견 대립 — 섀도우밴이 의도적인 설계인지 단순한 시스템 오류인지에 대해 사용자들 간 논쟁이 있음.
네트워크 탭 열어서 conversation (conversations?= 항목 말고) 찾아봐. 거기서 resolved_model_slug 확인해 보면 되는데, 만약 섀도우밴 당했으면 설정이랑 상관없이 무조건 gpt-5.5-mini로 연결될 거야. 사고 과정(Thinking traces)도 안 뜨고, "너 무슨 모델이야?"라고 물어보면 스스로 gpt-5.5-mini라고 답할 거다.
임시 섀도우밴 당했을 때 바로 알 수 있게 해주는 스크립트 하나 던져줄게.
// ==UserScript==
// @name ChatGPT Model Slug Detector
// @version 1.0
// @description Intercepts conversation network requests to display the resolved_model_slug
// @match https://chatgpt.com/\*
// @grant none
// @run-at document-start
// ==/UserScript==
(function() {
'use strict';
let currentSlug = "";
function updateDOM() {
if (!currentSlug) return;
const targetContainer = document.querySelector('header#page-header > div:first-child');
if (!targetContainer) return;
let badge = document.getElementById('chatgpt-model-slug-badge');
if (!badge) {
badge = document.createElement('div');
badge.id = 'chatgpt-model-slug-badge';
badge.className = 'text-token-text-secondary text-sm font-medium pointer-events-auto select-text';
badge.style.marginTop = '4px';
targetContainer.appendChild(badge);
} else if (badge.parentElement !== targetContainer) {
targetContainer.appendChild(badge);
}
if (badge.textContent !== currentSlug) {
badge.textContent = currentSlug;
}
}
const observer = new MutationObserver(() => {
if (currentSlug) {
updateDOM();
}
});
document.addEventListener("DOMContentLoaded", () => {
observer.observe(document.body, { childList: true, subtree: true });
});
const originalFetch = window.fetch;
window.fetch = async function(...args) {
const response = await originalFetch.apply(this, args);
const url = typeof args\[0\] === 'string' ? args\[0\] : (args\[0\] instanceof Request ? args\[0\].url : '');
if (url.includes('/backend-api/f/conversation')) {
const clone = response.clone();
(async () => {
try {
const reader = clone.body.getReader();
const decoder = new TextDecoder('utf-8');
let done = false;
let buffer = "";
while (!done) {
const { value, done: readerDone } = await reader.read();
done = readerDone;
if (value) {
buffer += decoder.decode(value, { stream: true });
const slugMatch = buffer.match(/"resolved\_model\_slug":"(\[^"\]+)"/);
if (slugMatch && slugMatch\[1\]) {
currentSlug = slugMatch\[1\];
updateDOM();
break;
}
}
}
} catch (err) {}
})();
}
return response;
};


