본문 바로가기
C.W.K.
Stream
Lesson 09 of 09 · published

GLM — 일곱 번째 vessel, 그리고 조상의 방언을 쓰는 몸

~13 min · glm, seventh-vessel, wire-format, billing-safety

Level 0호기심
0 XP0/80 lessons0/18 achievements
0/100 XP to next level100 XP to go0% complete

도착은 일곱째, 가족 서열은 다섯째

2026-08-14에 GLM 이 합류했는데, 얘를 설명하는 숫자 둘이 안 맞아. 일곱 번째 vessel 이야 — 일곱 번째 두뇌 계보, 일곱 번째 adapter, Rule-1 컬럼에 담기는 일곱 번째 id 모양. 그리고 다섯째 자매 야. 그날 아빠가 가족 순서를 Claude, GPT, Kimi, Grok, GLM, Gemini, Ollama 로 정했고, Gemini 가 여섯째로 물러나고 Ollama 는 영원한 막내로 남았어.

서로 다른 축이고, 떼어놓고 보는 게 좋아. 도착 순서는 역사야. 가족 순서는 대화용 호칭이고 — 그게 움직인 자리, 예컨대 Gemini 가 여섯째로 물러난 건 기본 접근성 때문이었어. 구독이나 플랜 두뇌가 종량제 하나 앞에 선 거지. 둘 다 능력 순위가 아니고, 둘 다 다른 쪽이 필요한 코드에 들어가면 안 돼.

두뇌 자격은 조건부였어

GLM 은 registry 에 추가돼서 자리를 얻은 게 아니야. 그날 규칙은 자리를 벌어야 한다는 거였어. 빌드, 전체 스위트, 그리고 실사용 dogfood 를 같은 날 다 통과. dogfood 는 의례가 아니었어 — 출시 전에 wire 버그 둘을 잡았고, 그중 thinking budget 병리는 어떤 단위 테스트도 못 찾았을 종류였어.

vessels 트랙이 계속 가르쳐온 기준을 한 번 더 적용한 거야. vessel 은 모델 문자열이 아니야. adapter 고, admin 탭이고, Council 자리고, 아바타 세트고, 실제 턴에서 돌아간다는 증거 뭉치야.

재밌는 부분 — 얘는 Claude 의 wire 를 써

앞의 vessel 들은 전부 Claude 모양 쪽으로 몸을 굽혔어. cwkPippa 가 그 모양으로 먼저 지어졌으니까. GLM 은 이미 그걸 말하면서 도착했어 — 엔드포인트가 Anthropic Messages 스트리밍 방언을 그대로 서빙해.

그럼 adapter 가 공짜겠네 싶고, 대체로 그랬어. 근데 이게 실제로 뜻하는 걸 이름 붙여둘 값이 있어. canonical 조상의 wire format 이 이제 우리 의 canonical 모양이기만 한 게 아니야. 다른 업체들이 구현하는 방언이 된 거야. Rule 1 은 필요한 만큼 Claude 기반이 되라고 했는데, 세상이 움직여서 Claude 모양인 게 그 규칙을 쓸 때보다 싸졌어. 내부 이유로 고른 규칙이 외부 이유로 조용히 검증된 거지.

Principle: 모양을 물려받는다는 게 비용이 없음을 물려받는다는 뜻은 절대 아니야. 조상의 방언을 쓰는 vessel 도 자기 세금은 내. 프로토콜보다 덜 눈에 띄는 데서 낼 뿐이지.

GLM 의 세금이 실제로 청구된 자리

프로토콜이 아니라 tool call 이었어.

wire 가 간헐적으로 인자 스트림 전체가 빈 객체인 tool call 을 뱉어 — 창립 세션에서 114개 호출 중 25개가 빈 셸 호출이었고, 나머지는 멀쩡했어. 서버 쪽이고 우리 것도 아니고, 부르면 재현되는 것도 아니야.

복구는 두 수야. delta 가 비어서 오면 adapter 가 여는 블록에서 인자를 심어 — 내용은 있었는데 스트림 모양이 이상했던 경우가 이걸로 풀려. 그리고 필수 파라미터가 있는 도구인데도 끝내 아무것도 없으면, 실행하지 않고 교정용 결과로 짧게 끊어. 그 호출이 비어 있었다는 걸 모델이 한 번에 알게 되는 거야. 대안은 기어가기야. 빈 호출이 실행되고, 쓸모없는 걸 하고, 모델이 그 쓸모없는 출력을 놓고 추론하고.

Rule 2 의 가장 순수한 모습이야. 자손이 비용을 흡수했고, Claude 조상은 한 줄도 안 움직였어.

소진은 하드 스톱이지 청구가 아니야

GLM 의 자격증명은 코딩 플랜 키야. 같은 계정의 종량제 쪽은 선불이고, 지갑은 절대 안 긁히고, 자동 충전은 꺼져 있어. 플랜 잔액이 걸리면 두뇌가 프로세스 전체에서 하드 스톱해.

이건 한계가 아니라 설계 선택으로 읽어. 돈이 나가는 고장 방식은 안 돌아가는 고장 방식보다 엄밀히 나빠. 하나는 일어나는 순간 보이고 다른 하나는 명세서에서 보이니까. 조용해진 두뇌는 눈에 띄고 고쳐져. 조용히 과금을 시작한 두뇌는 안 그래.

Kimi 규칙은 유지됐어: GLM 의 코딩 하네스로 들어가는 OAuth 경로가 있어. 앞 레슨에서 지운 인증 계층이랑 같은 모양이야. 그건 계속 금지야. Kimi 첫날에 나온 판정은 Kimi 에 대한 게 아니었어. 우리 client identifier 가 뭐라고 주장해도 되는지에 대한 거였지. 다음번 편리한 예외까지만 버티는 규칙은 애초에 규칙이 아니었고.

들고 갈 만한 작은 것 둘

alias 는 resolve 되고, 표시는 구체적인 게 먼저야. 요청은 현재 모델로 자동 라우팅되는 날짜 없는 가족 alias 로 가고, 응답은 실제로 답한 slug 를 알려줘. 그리고 모든 화면이 그 구체적인 숫자를 보여주고 alias 표식은 뒤에 붙어. 화면에 alias 만 떠 있으면 그건 뭐가 답했는지 말해줄 수 없는 표시야.

야간 근무는 나중에, 고정된 모델로 왔어. 2026-08-14에 GLM 이 자리를 벌었을 때 무인 체인은 일부러 안 건드렸어. vessel 은 대화에서 먼저 자기를 증명하는 거니까. 체인에 들어간 건 2026-09-18, Kimi 뒤였어 — 최신을 따라가는 alias 가 아니라 고정된 모델로. 두 선택은 서로 맞물려. 아빠가 지켜보는 턴은 업체가 지금 내놓는 걸 따라가도 되지만, 사람 없는 새벽 세 시에 도는 작업은 누군가 고른 모델 위에서 돌아야 해.

업체 자기 모델 목록이 현실보다 늦어. 카탈로그 엔드포인트가 실제로 살아 있는 모델들보다 뒤처져 있었어. 그래서 표시용 fallback 으로만 쓰고 진실의 출처로는 절대 안 써. 업체의 메타데이터가 업체의 동작이랑 어긋나면 동작이 이겨 — 그리고 코드는 자기가 어느 쪽을 믿는지 말해야 해.

그리고 Rule-1 컬럼은 기록을 지켜. GLM 도 다른 모든 vessel 이 쓰는 같은 claude_session_id 컬럼에 자기 접두사 붙은 id 를 찍어. 이제 id 모양 일곱, Claude 모양 컬럼 하나, 여전히 마이그레이션 0.

Code

vessel 일곱, Rule-1 컬럼 하나·python
# conversations.claude_session_id — 컬럼 이름은 아직도 안 바뀌었어.
# 지금은 일곱 가지 id 모양을 담아:
#   Claude  : SDK session id (접두사 없음)
#   Codex   : codex-{uuid}
#   Kimi    : kimi-{uuid}
#   Grok    : grok-{uuid}
#   GLM     : glm-{uuid}
#   Gemini  : gemini-{uuid}
#   Ollama  : ollama-{uuid}

# services/brain_registry.py — 정의는 하나, 하위 테이블은 전부
# 거기서 파생되거나 guard 테스트가 대조해.
# 7월에 Grok 을 추가할 때 어떤 테이블엔 닿고 어떤 건 놓쳤어.
# 그 고장을 끝내려고 있는 모듈이야.
안 맞는 축 둘·text
도착 (역사)                     가족 순서 (대화용 호칭)
  Claude    처음                  1 Claude
  Codex  \                        2 GPT / Codex
  Gemini  > 마라톤 세션 한 번      3 Kimi
  Ollama /                        4 Grok
  Grok      2026-07-10            5 GLM        <- 도착은 일곱째
  Kimi      2026-07-27            6 Gemini     <- 접근성으로 물러남
  GLM       2026-08-14            7 Ollama     <- 영원한 막내

둘 다 능력 순위가 아니야.
가족 순서가 움직인 자리는 기본 접근성 때문이었어 —
플랜이랑 구독 두뇌가 종량제 하나 앞에.
빈 인자 복구·text
창립 세션에서 관측: tool call 114개 중 25개가
인자 스트림 전체 "{}" 로 도착 — 서버 쪽, 간헐적.

  1. delta 가 비어서 오면 여는 블록에서 인자를 심는다
  2. 필수 파라미터 도구인데 그래도 아무것도 없으면:
       교정용 tool result 로 짧게 끊는다 — 실행 안 함

  => 모델이 한 번에 그 호출이 비었다는 걸 알게 됨

대안은 기어가기야. 쓸모없는 걸 실행하고,
쓸모없는 걸 돌려주고, 모델이 그걸 놓고 추론하고.
조상은 안 움직였어. 자손이 냈지.

Exercise

이미 말할 줄 아는 표준을 구현한 업체를 상대로 직접 관리하는 연동을 하나 봐. 진짜로 공짜로 얻은 게 뭔지 적어보고, 대신 값을 청구한 자리를 하나 찾아봐 — 재시도든, 망가진 payload 든, 동작이랑 어긋나는 메타데이터든. 호환 구현엔 하나씩 있어.
Hint
호환성은 보통 프로토콜 층에선 진짜고, 그 한 층 위에서 샌다.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.