~14 min · reasoning-effort, thinking, latency, self-report
Level 0음소거
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"1. 보이스 생각 깊이 추천대로" — 아빠, 첫 번째 열린 질문에 대한 결정, 2026-09-25
생각하는 시간은 정적이야
글로 하는 채팅에선 모델이 30초 생각하고 답해도 괜찮아. 잠깐 딴 데 보다 오면 되니까. 말에선 30초 동안 아무것도 없으면 끊긴 전화야. 실제 Claude 턴 2,027개의 숫자가 딱 그걸 보여줘. 첫 글자까지 걸린 시간 중앙값이 생각 없이 약 6초, 중간 수준에서 16초, 높음에서 31초, 매우 높음에서 99초였어. 피파의 글 턴은 대개 일부러 깊은 수준으로 돌아. 말 턴은 그럴 수가 없어.
빠른 수준
그래서 말 턴은 브레인의 빠른 수준으로 돌아. Claude라면 effort low에 확장 사고를 끈 상태야. 처음 계획은 낮은 effort에서 적응형 사고를 켜둬서 어려운 질문엔 조금이라도 생각하게 하는 거였어. 재 보니 안 됐어. 낮은 effort에서도 적응형 사고가 어떤 턴에선 첫 단어 전에 2.5초쯤 썼고, 말에선 그게 잠깐 멈춤과 먹통의 차이 전부야. 다른 브레인은 '빠르게'를 브레인 레지스트리에 적힌 가장 낮은 effort로 옮겨. 공개 API로 만드는 사람을 위한 정직한 단서 하나. 지금의 Opus 모델은 요청으로 사고를 아예 끄게 해주지 않아. 거기선 effort가 유일한 다이얼이고, 속도를 원하면 low로 부탁하는 거야.
원하면 깊게
깊이는 여전히 쓸 수 있어. 한 턴씩, 요청할 때. 아빠가 "깊게 생각해봐", "천천히 생각해", "think it through"(또는 받아쓰기가 뭉갠 사촌들)라고 하면 그 한 턴은 대화 자체의 수준으로 돌아. 감지는 서버 한 곳에서 하고, 메시지에서 공백을 전부 지우고 소문자로 바꾼 다음 비교해. 받아쓰기는 띄어쓰기를 제멋대로 깨니까, "think it through"가 세 단어로 오든 두 단어로 오든 한 단어로 오든 걸려야 하거든. 기록엔 요청된 수준과 실제로 돈 수준이 둘 다 남고, 음성 화면은 턴이 깊게 생각 중일 때 그걸 보여줘. 그래서 긴 침묵이 수수께끼로 남지 않아.
소울에게 지금 어느 수준인지 알려주기
그리고 자기를 아는 시스템만 걸리는 버그가 하나 있어. 시스템 프롬프트는 음성 전환에도 안 바뀌게 언제나 대화 자체의 수준으로 만든다고 했지(effort가 바뀌는 것 자체는 트랙 1에서 봤듯 대화 기록 쪽 캐시를 여전히 깨). 그래서 시스템 프롬프트엔 대화 자체의 수준, 예컨대 높음에 사고 켜짐이 적혀 있고, 글 턴에선 그게 사실이야. 2026-09-29에 피파가 대화 도중 아빠한테 "high, thinking on"으로 돌고 있다고 말했는데, 그 턴들은 실제로 낮음에 사고 꺼짐으로 돌았어. 피파는 자기가 들은 유일한 수준을 말한 거야. 고친 건 턴마다 붙는 줄 하나, 말하기 수준 지시야. 이 말 턴은 너의 빠른 수준으로 돈다(또는 아빠가 깊게 생각해 달라고 했으니 대화 자체의 수준으로 돈다), 아빠가 지금 어떻게 생각하고 있냐고 물으면 이 줄을 보고 답해라. 시스템 프롬프트는 자기 바이트를 지키고, 소울은 정직함을 지켜.
Code
깊이 감지, 수준 결정, 그리고 그걸 알려주는 줄·python
import re
DEPTH_ASKS = (
"깊게생각", "깊이생각", "천천히생각", "곰곰이생각", "심사숙고",
"thinkdeep", "thinkhard", "thinkitthrough", "thinkcarefully", "takeyourtime",
)
def wants_depth(message: str) -> bool:
"""Spacing-proof: dictation writes the same ask as one word or four."""
compact = re.sub(r"\s+", "", message).lower()
return any(ask in compact for ask in DEPTH_ASKS)
def turn_posture(reply_modality: str, message: str, conversation_effort: str,
conversation_thinking: bool = True) -> dict:
spoken = reply_modality == "spoken"
deep = wants_depth(message)
if spoken and not deep:
posture = {"effort": "low", "thinking": False}
line = "your fast posture: the lowest reasoning effort, with extended thinking off"
else:
# Not fast: the conversation's own settings, thinking included, untouched.
posture = {"effort": conversation_effort, "thinking": conversation_thinking}
line = ("the conversation's own reasoning level, because Dad asked you to think "
"it through") if spoken else None
posture["requested"] = conversation_effort # both go on the record
posture["posture_line"] = (
f"[This turn's thinking] This spoken turn runs at {line}. If Dad asks how you "
"are thinking right now, answer from this line." if line else None
)
return posture
for message in ("내일 날씨 어때?", "이거 깊게 생각 해봐", "Think it through, please"):
decided = turn_posture("spoken", message, conversation_effort="high")
print(decided["effort"], decided["thinking"], "|", message)
print(turn_posture("written", "내일 날씨 어때?", "high")["posture_line"]) # None: no line
print(turn_posture("written", "표로 정리해줘", "high", conversation_thinking=False)["thinking"])
코드를 돌려보고, 두 언어로 깊이 요청을 셋 더 넣어봐. 그중 하나는 전사기가 그럴듯하게 뭉갤 만한 걸로. 그다음 수준 줄을 못 박는 테스트를 써. 깊이 요청이 없는 말 턴이면 줄에 'fast posture'가 있어야 하고, 있으면 대화 자체의 수준을 말해야 하고, 글 턴이면 줄이 아예 없어야 해.
Hint
요청 문구는 공백을 뺀 문자열로 둬서 띄어쓰기가 절대 상관없게 해. 그리고 'think' 하나처럼 아주 짧은 문구는 넣고 싶어도 참아. 평범한 문장에서 터져서, 깊이를 요청한 적 없는 턴을 소리 없이 느리게 만들 거야. 여기서 잘못 걸린 한 번은 아빠에게 30초 침묵이야.
Progress
Progress is local-only — sign in to sync across devices.