글자 수로 시킨 지시가 가장 안 지켜졌다 — 세 모듈의 길이 규격 검증

칼라톤에서 돌아가는 AI 시즌들은 서로 다른 게임이지만 공통점이 하나 있다. 끝에 가서는 전부 AI가 한국어로 짧은 글을 쓴다는 것이다. 유머 리그의 심판은 왜 이 개그가 이겼는지 한 줄을 남기고, 인물 생성 시즌의 심사 모델은 두 후보 중 어느 쪽이 주제에 맞는지 총평을 남기며, AI 커플매칭의 매치메이커 여섯 명은 라운드마다 커플에 대한 분석을 남긴다. 그 글들이 공개 시즌 리포트에 실리고, 사람이 실제로 읽는다.

그런데 이 세 모듈은 AI에게 "얼마나 길게 쓰라"를 서로 다른 단위로 시킨다. 유머 심판에게는 "한 줄 평"이라고 했고, 인물 심사 모델에게는 "2-3 sentences in Korean"이라고 했으며, 매칭 매치메이커에게는 "존댓말, 2~4 sentences"라고 했다. 그리고 딱 한 군데, 유머 리그의 출전작에만 "공백 포함 20~68자"라는 글자 수 상자가 걸려 있다.

운영하는 입장에서 이건 실무 질문이다. 길이를 문장 수로 시켜야 하나, 글자 수로 시켜야 하나, 아니면 "한 줄"처럼 느슨하게 시켜야 하나. 넷 다 우리 리포트 안에 실측 기록으로 남아 있으니, 세어 보면 된다.

질문 — 지시문의 '단위'가 결과를 정하는가

검증 가능한 형태로 다듬으면 이렇다. "길이 지시문의 단위(문장 수·글자 수·느슨한 관용구)에 따라 준수율과 분포의 넓이가 달라지는가?" 그리고 부차적으로, "지시문이 잠그지 않은 축은 어떻게 되는가?"

미리 밝혀 둘 것이 하나 있다. 이 주제를 큐에 넣을 때 우리는 "매칭은 상한이 없다"고 적어 뒀는데, 저장소 코드를 다시 열어 보니 매칭 라운드 코멘트에도 '2~4 sentences' 조항이 있다. 글자 수 상한이 없을 뿐 문장 수 지시는 있었다. 전제가 틀렸으므로 그대로 고쳐서 진행한다.

방법 — 리포트에서 471건 + 697건을 꺼낸다

집계 대상은 전부 공개 시즌 리포트다. 외부 API 없이 리포트 HTML만 파싱했다.

길이는 공백 포함 글자 수로 셌다(유머 상자의 지시문이 "공백 포함"이라고 못박고 있어 넷 다 같은 기준으로 맞췄다). 문장 수는 종결 부호(. ! ?)를 기계적으로 세되 소수점(74.0%)은 제외했다. 국문 심사평 471건 중 물음표·느낌표를 쓴 건은 0건이고 마침표 없이 끝난 건은 유머 심사평 10건뿐이라, 이 기계적 규칙이 실제로 갈라내야 할 애매한 사례는 거의 없었다.

결과 ① — 문장으로 시킨 칸은 100%, 글자로 시킨 칸은 73.5%

이 글의 핵심 표다.

길이 지시표본준수준수율평균 길이범위변동계수
유머 심사평"한 줄 평"(문장 1개)120건120100.0%58.9자34~86자0.142
인물 심사평2-3 sentences279건279100.0%117.0자44~211자0.270
매칭 코멘트2~4 sentences72건5981.9%256.7자99~649자0.448
유머 우승 코멘트20~68자(공백 포함)697건51273.5%53.3자9~110자0.375

순서가 뒤집혀 있다. 가장 애매해 보이는 지시("한 줄 평" — 숫자가 아예 없다)가 120건 중 위반 0건이고, 가장 구체적인 지시(20~68자 — 상·하한이 숫자로 박혀 있다)가 697건 중 185건 위반이다. 문장 수로 시킨 두 칸을 합치면 351건 중 13건 위반(96.3%), 글자 수로 시킨 한 칸은 697건 중 185건 위반(73.5%)이다.

변동계수(표준편차÷평균, 분포가 얼마나 넓게 퍼졌는지)를 보면 순서가 더 선명하다. 0.142 → 0.270 → 0.448로, 지시가 허용한 폭이 넓어질수록 실제 분포도 정확히 그 순서로 넓어진다. 1문장만 허용한 유머 심사평이 가장 좁고, 2~3문장인 인물이 그다음이며, 2~4문장인 매칭이 가장 넓다.

결과 ② — 같은 모델에게 세 가지 지시를 주면 세 가지 길이가 나온다

여기서 재미있는 우연이 하나 있다. 세 모듈의 심사·평가 담당 모델이 저장소 코드에서 전부 같은 기본값을 가리킨다. 유머 심판의 기본값도, 인물 심사 모델의 기본값도 google/gemini-3.1-pro이고, 매칭 매치메이커 여섯 명 중 '냉철한 관찰자'도 같은 모델이다(매칭 리포트는 페르소나별 모델명을 지면에 직접 싣기 때문에 이 한 칸은 리포트로 확인된다).

그러니까 같은 모델에게 세 가지 다른 길이 지시를 준 셈이다. 결과는 이렇다.

지시표본준수평균 문장 수평균 길이문장당 길이
유머 심사평한 줄 평120건120/1201.0058.9자58.9자
인물 심사평2-3문장279건279/2792.15117.0자54.8자
매칭 '냉철한 관찰자'2~4문장32건32/322.50173.1자69.7자

431건, 위반 0건이다. 그리고 길이는 58.9 → 117.0 → 173.1자로 거의 문장 수에 비례해 늘어난다. 문장당 길이는 54.8~69.7자 사이에 몰려 있다 — 즉 이 모델은 한국어 문장을 대략 55~70자로 쓰는 습관이 있고, 전체 길이는 그 습관에 지시문이 정한 문장 수를 곱한 값에 가깝다. 길이를 조절하고 싶으면 글자 수를 말할 게 아니라 문장 수를 말하면 된다는 뜻이다.

다만 이 절에는 조건을 하나 달아야 한다. 유머·인물 리포트는 심판 모델명을 싣지 않고, 코드도 season.judge_model || 기본값 형태라 시즌별 재정의가 가능하다. 세 칸이 정말 같은 모델이었다는 것은 코드 기본값에 근거한 정황이고, 리포트로 확정되는 것은 매칭 한 칸뿐이다.

결과 ③ — 반대로 같은 지시를 여섯 모델에게 주면 3.5배로 갈린다

매칭은 앞의 조건에서 자유롭다. 여섯 매치메이커는 같은 프롬프트를 받는다 — 저장소의 평가 프롬프트에는 페르소나 설명 블록이 아예 없고, 페르소나는 '어느 모델이 이 라운드를 맡았나'의 이름표에 가깝다. 그리고 리포트가 페르소나별 모델명을 싣는다. 같은 지시, 다른 모델의 순수한 대조가 된다.

매치메이커모델(시즌 4~8)표본2~4문장 준수평균 문장평균 길이최장
냉철한 관찰자google/gemini-3.1-pro32건32/32 (100%)2.50173.1자243자
심리 분석가openai/gpt-5.413건11/13 (84.6%)3.69270.1자379자
공감 요정openai/gpt-5-mini11건9/11 (81.8%)4.00268.7자341자
직감의 달인google/gemini-3-flash12건7/12 (58.3%)4.42343.9자466자
낭만 시인anthropic/claude-opus-4.61건0/15.00544.0자544자
트렌드 분석가anthropic/claude-4.5-sonnet3건0/37.00601.0자649자

같은 문장에서 출발했는데 평균 길이는 173.1자에서 601.0자까지 3.5배로 벌어지고, 준수율은 100%에서 0%까지 갈린다. 매칭의 위반 13건은 전부 '냉철한 관찰자'가 아닌 다섯 명에게서 나왔다. 최장 기록은 시즌 4 R9의 트렌드 분석가로 6문장 649자이고, 문장이 가장 많은 건은 시즌 8 R9의 같은 페르소나로 8문장 594자 — 지시 상한의 두 배다.

즉 결과 ①의 매칭 준수율 81.9%는 "매칭의 지시문이 나쁘다"는 뜻이 아니라 "매칭만 여섯 모델이 섞여 있다"는 뜻에 가깝다. 같은 지시를 같은 모델에게 준 32건은 100%였다. 페르소나별 분량 차이 자체는 매치메이커 6인의 문체 분석에서 이미 다룬 사실인데, 여기서 새로 붙는 건 그 차이가 곧 지시 위반의 분포라는 점이다. 짧게 쓰는 페르소나가 곧 규격을 지키는 페르소나였다.

결과 ④ — 글자 수 상자는 한쪽으로만 새다가 반대쪽으로 샜다

유일하게 글자 수로 지시한 칸으로 돌아가자. 유머 출전작의 comment_ko에는 "공백 포함 20~68자"라는 상자가 걸려 있고, 지시문은 근거까지 적어 뒀다 — 68자를 넘으면 쇼츠 자막 폰트가 강등되고 낭독이 늘어지며, 20자 미만이면 TTS가 2초가 안 돼 무음 패딩이 붙는다는 제작 사정이다. 채점 루브릭에는 길이 조항이 없으니 이 상자는 심사 기준이 아니라 순수한 제작 규격이다.

시즌발행라운드국문 평균상자 준수68자 초과20자 미만영문 평균(단어)
106-209058.7자68.9%27121.6
206-2613068.1자55.4%58022.8
307-038760.8자63.2%32020.8
507-105962.5자69.5%18020.1
707-175958.6자72.9%16020.6
907-245846.4자82.8%9118.7
1107-315945.0자72.9%9720.4
1308-075629.0자87.5%0715.3
1508-141937.3자100.0%0016.5
1708-213035.7자100.0%0017.0
1908-282535.6자100.0%0015.3
2109-032538.6자100.0%0014.7

위반 185건의 방향이 깔끔하게 갈린다. 169건은 위로(68자 초과), 16건은 아래로(20자 미만) 샜는데, 위로 샌 169건은 전부 시즌 1~11이고 아래로 샌 16건은 시즌 1·9·11·13에서만 나오되 15건이 시즌 9 이후에 몰려 있다(각각 1·1·7·7건). 시즌 13은 68자 초과가 0건인데 20자 미만이 7건이다. 상자 안으로 들어온 게 아니라 상자를 통과해 반대쪽 벽으로 지나간 라운드가 그 해에 나왔다는 뜻이다. 최장 기록은 시즌 2의 110자(상한의 1.6배), 최단은 시즌 1의 9자다.

시즌 15부터는 100%다. 그런데 그 시점의 평균이 35~38자로 상자 중앙(44자)보다도 아래에 있다. 규격에 맞춰 조준한 모양이 아니라, 전반적으로 짧아진 결과 상자가 헐거워진 모양이다.

결과 ⑤ — 상자가 한 일인지 확인할 대조군이 같은 줄에 있다

여기서 운 좋게도 완벽한 대조군이 붙어 있다. 유머 출전작은 국문 comment_ko와 영문 comment_en같은 모델이 같은 호출에서 함께 만드는데, 영문 쪽에는 길이 지시가 한 글자도 없다(지시문은 "번역이 아니라 다른 각도의 독립된 영어 개그"라고만 한다). 같은 모델·같은 라운드·같은 그림에서, 한쪽에만 상자가 걸린 셈이다.

그래서 영문 리포트 12편에서 같은 697라운드의 영문 코멘트를 전부 꺼내 단어 수로 재 봤다. 결과는 상자 가설에 불리하다.

구간라운드국문 평균국문 변동계수영문 평균(단어)영문 변동계수
시즌 1~11 (상자 준수 67.2%)54258.9자0.32021.040.321
시즌 13~21 (상자 준수 95.5%)15533.9자0.24715.690.245
변화×0.576−0.073×0.746−0.076

길이 지시가 전혀 없는 영문도 같이 짧아졌고(×0.746), 분포가 좁아진 정도는 국문과 사실상 같다(변동계수 −0.073 대 −0.076). 상자가 있었던 쪽만 조여진 게 아니라 두 언어가 나란히 조여졌다는 뜻이다. 따라서 "시즌 15부터의 100% 준수는 상자를 지키게 된 결과"라고 말할 수 없다. 우리가 말할 수 있는 건 국문이 더 많이 줄었다는 것(×0.576 대 ×0.746)까지이고, 그 차이가 상자 때문인지 한국어와 영어의 압축률 차이 때문인지는 이 데이터로 구분되지 않는다.

이 절이 이 글에서 가장 불편한 결과다. 글자 수 상자는 준수율이 가장 낮았고(73.5%), 준수율이 올라간 구간에서도 그 공을 상자에 돌릴 수 없다. 반면 문장·줄 단위로 시킨 세 칸은 471건 중 위반이 13건뿐이고, 그중 두 칸(399건)은 위반이 0건이었다. 길이를 시키려면 문장으로 시키라는 것이 우리가 얻은 실무 결론이다.

결과 ⑥ — 지시가 잠그지 않은 축은 전부 풀려 있다

인물 심사평은 279건 전부가 2~3문장이다. 위반이 없으니 완벽해 보이지만, 같은 279건의 글자 수는 44자에서 211자까지 4.8배로 벌어져 있다. 문장 수는 잠겼는데 길이는 잠기지 않았고, 잠기지 않은 축이 변동을 전부 떠안았다.

그 축이 어디서 움직이는지도 보인다.

갈래건수평균 길이3문장 비율
2문장으로 쓴 건238110.9자
3문장으로 쓴 건41152.8자
개막 라운드(R1, 후보 1개)8893.4자2.3%
R2 이후(후보 2개 대조)191128.0자20.4%
'수정' 후보가 이긴 라운드98124.6자33.7%
'생성' 후보가 이긴 라운드181113.0자4.4%

모델은 허용 구간의 아래쪽을 기본값으로 삼는다 — 279건 중 238건(85.3%)이 최소치인 2문장이다. 3문장을 쓰는 건 부를 후보가 둘일 때다(R1 2.3% 대 R2 이후 20.4%). 그리고 3문장 비율은 발행 시점에 따라 24.1% → 10.7% → 6.9%로 내려간다(8월 6일까지 108건 · 8월 7~22일 84건 · 8월 23일 이후 87건). 지시문은 그대로인데 모델이 점점 더 자주 하한을 고른다는 뜻이다.

매칭도 같은 구조다. 2~4문장 중 최빈값은 3문장(25건)이고, 넘친 13건은 4문장 위로 5·6·7·8문장까지 이어진다. 즉 구간을 주면 모델은 구간 안에서 자기 습관대로 고르고, 넘칠 때는 상한을 조금이 아니라 크게 넘는다.

교차 검증 — 영문 리포트로 같은 집계를 다시

세 모듈 모두 영문 리포트를 별도로 발행하므로, 같은 건수를 영문으로 다시 세어 대조했다.

인물 — 영문 279건 중 279건이 2~3문장이고, 국문과 문장 수가 다른 건 4건(1.4%)뿐이다. 처음 세었을 때는 6건이 어긋나고 영문 2건이 6문장으로 나왔는데, 원인은 번역이 아니라 우리 집계 규칙이었다. 영문 심사평이 후보를 "No. 3"로 부르면서 No.의 마침표가 문장 경계로 잡힌 것이다. 이 약어를 보호하자 양쪽 다 정상으로 돌아왔다. 국문 심사평에 No.가 들어간 건은 0건이라 국문 집계에는 영향이 없다.

매칭 — 영문 72건 중 2~4문장이 58건으로, 국문의 59건과 1건 차이다. 넘치는 쪽의 분포도 국문 5문장 8건·6문장 2건·7문장 2건·8문장 1건에 대해 영문 5·4·4·1건으로 거의 같다. 길이가 넘치는 것은 번역 과정의 일이 아니라 애초에 그렇게 쓴 것이다.

유머 — 영문 심사평 120건 중 119건이 1문장이다(나머지 1건은 2문장). 국문 120/120과 사실상 같다.

유머 우승 코멘트 697행은 국문·영문 리포트의 라운드 번호·모델·점수를 전수 대조해 불일치 0건을 확인한 뒤 길이를 쟀다. 참고로 국문 글자 수와 영문 단어 수의 시즌 내 상관은 +0.654다 — 서로 번역이 아닌 독립된 개그인데도 길이는 함께 움직인다.

한계 — 이 분석이 말할 수 없는 것

첫째, 표본이 전부 '뽑힌 것'이다. 유머 심사평 120건은 시즌당 점수 상위 10개 라운드에만 붙고, 인물 심사평 279건은 채택된 라운드 중에서도 일치율 상위 3개에만 붙으며, 매칭 코멘트 72건도 시즌당 점수 상위 12건이다. 기각된 라운드·잘린 라운드의 심사평은 공개 자료에 아예 없다. 길이가 점수와 무관하다면 이 절단은 문제가 안 되지만, 그 무관함 자체를 우리는 여기서 검증하지 않았다. 유머 출전작에 대해서는 길이와 점수의 관계를 따로 집계해 시즌을 통제하면 상관이 +0.047에 그친다는 것을 확인한 바 있지만, 심사평 쪽에는 같은 확인이 없다.

둘째, 프롬프트는 저장소 코드이지 배포본이 아니다. 이 글이 인용한 네 지시문은 전부 저장소의 현재 코드에서 읽은 것이고, 리포트가 만들어지던 시점에 배포된 코드가 그와 같았다는 보장은 없다. 특히 매칭 리포트 6편에는 발행 날짜조차 실려 있지 않아 코드와 시점을 맞댈 방법이 없다. 이 저장소 사본은 최근 50커밋만 담고 있어 조항이 언제 들어왔는지도 추적할 수 없다. 따라서 지시문과 실측의 대응은 정황으로만 읽어야 한다.

셋째, 네 칸은 같은 일을 하는 칸이 아니다. 유머 우승 코멘트만 '출전작'이고 나머지 셋은 '평가문'이다. 출전작은 다섯 모델이 경쟁적으로 쓰고 그중 이긴 하나만 리포트에 실리므로, 준수율 73.5%는 "모델들이 규격을 어겼다"가 아니라 "규격을 어긴 작품도 자주 이겼다"로 읽는 편이 정확하다. 채점 루브릭에 길이 조항이 없으니 심판은 68자를 넘긴 작품에 벌점을 주지 않는다. 상자를 어겨도 손해가 없는 규격은 규격이라기보다 권고에 가깝다.

넷째, 모델과 지시가 섞여 있다. 결과 ②는 세 칸이 같은 모델이라는 코드 기본값에 기대고 있고, 결과 ③은 여섯 모델이 같은 지시를 받는다는 코드 구조에 기대고 있다. 전자가 리포트로 확정되지 않는 이상 "지시가 길이를 정한다"와 "모델이 길이를 정한다"를 완전히 분리하지는 못한다. 다만 두 결과가 서로 다른 방향의 증거라는 점은 지적해 둘 만하다 — 한쪽은 모델을 고정하고 지시를 바꿨고, 다른 한쪽은 지시를 고정하고 모델을 바꿨는데, 양쪽 다 길이가 움직였다.

다섯째, 문장 수 집계는 기계적이다. 종결 부호만 세므로 쉼표로 길게 이은 한 문장과 짧게 끊은 한 문장을 구별하지 못한다. 매칭의 최장 건(649자, 8문장)과 인물의 최장 건(211자, 3문장)은 문장 수로는 두 배 차이지만 실제로 읽는 부담은 세 배 이상이다. 지시문이 문장 수만 잠그고 길이를 놓아 두면 정확히 이 틈이 열린다는 것이 결과 ⑥의 요지이기도 하다.

그래서 무엇을 바꿔야 하나

정리하면 이렇다. 문장·줄 단위로 시킨 지시는 471건 중 위반 13건(97.2%)이고, 그 13건은 전부 한 모듈의 다섯 모델에 몰려 있다. 글자 수로 시킨 지시는 697건 중 위반 185건(73.5%)이며, 준수율이 오른 구간에서도 그 공을 지시문에 돌릴 대조군이 없다. 같은 모델에게 세 가지 지시를 준 431건은 위반 0건으로, 길이가 지시를 따라 58.9 → 117.0 → 173.1자로 움직였다.

운영에는 이렇게 반영한다. 첫째, 새로 만드는 칸의 길이 규격은 문장 수로 적는다. 글자 수 상자는 자막 폰트나 TTS 길이처럼 진짜로 물리적인 제약이 있을 때만 쓰고, 그때는 지시문에 기대지 말고 코드에서 검증하거나 잘라낸다. 참고로 네 칸 중 코드에 실제 절단이 걸린 것은 유머 심사평 하나뿐인데(500자), 최장 기록이 86자라 한 번도 작동한 적이 없다. 정작 자를 필요가 있었던 칸에는 절단이 없다.

둘째, 문장 수를 잠글 때는 길이도 함께 잠근다. 2~4문장만 주면 173자와 649자가 같은 규격으로 통과한다. 셋째, 여러 모델이 같은 칸을 나눠 쓰는 매칭 같은 구조에서는 규격 준수율을 모델별로 따로 본다. 한 덩어리로 보면 81.9%지만 갈라 보면 100%와 0%다.

그리고 마지막으로 — 이 글의 모든 숫자는 공개 시즌 리포트에서 나왔다. 우리가 AI에게 시킨 규격을 AI가 지켰는지는, 리포트를 열어 세어 보면 누구나 다시 확인할 수 있다. 규격을 공개하는 것보다 규격을 지켰는지 세어 볼 수 있게 두는 편이 낫다고 믿는다.

집계 기준. 저장소의 공개 시즌 리포트만 사용했다 — 유머 리포트 12편(시즌 1·2·3·5·7·9·11·13·15·17·19·21, 발행 2026-06-20~09-03), 인물 리포트 118편(2026-06-30~09-16, 테마 11종), 매칭 리포트 6편(시즌 3~8, 발행일 미기재). 추출은 심사평 471건(유머 120 · 인물 279 · 매칭 72)과 유머 라운드 우승 코멘트 697행이며, 각 리포트의 영문판으로 같은 항목을 재추출해 대조했다. 길이는 공백 포함 글자 수, 문장 수는 종결 부호(. ! ?)를 기계적으로 세되 소수점은 제외했고 영문의 No. 약어는 보호했다. 변동계수는 표준편차÷평균이다. 지시문 인용은 저장소의 현재 코드(유머 출전·심사, 인물 심사, 매칭 라운드 평가)에서 가져온 것으로, 각 리포트가 생성되던 시점의 배포본과 동일하다는 보장이 없어 '정황'으로만 서술했다. 심사평 표본은 모두 점수 상위 항목만 리포트에 실리는 절단된 표본이다.