I built a programming language that LLMs can't use
LLM이 쓰기 어렵도록 설계한 프로그래밍 언어를 만들었습니다
개발자 dom96이 LLM과 코딩 에이전트가 다루기 어렵도록 설계한 난해 언어 KillSwitch와 모델 벤치마크를 공개했습니다. 최고 점수는 66.8점이지만 과제가 단순하고 인간 대조군도 없어, 결과만으로 모델의 코드 이해 능력을 판정하기는 어렵습니다.
- 주제
에디터 노트
현재 점수만으로 모델의 코드 이해 여부를 판정하기는 어렵습니다. 과제가 단순하고 인간 기준점이 없으며, 저자도 모델이 규칙을 이해하지 못한 것인지 사람보다 더 어렵게 느끼는지 비교하지 않았습니다. 안전 필터 반응이 낮은 점수에 영향을 줬다는 설명도 언어 이해와는 다른 능력을 측정합니다. 반면 인터프리터 실행 파일과 사양만 주고 인터넷을 막은 조건은 모델이 외부 자료를 찾는 경우를 제한합니다. 댓글에서 제기된 변환기 작성이나 실행 파일 역분석은 가능한 우회 경로지만, 저자는 모델이 사양을 제대로 해석해야 한다고 답합니다. 따라서 이번 벤치마크가 보여주는 범위는 특정 조건에서 모델과 에이전트가 적대적 언어 과제를 얼마나 수행하는지입니다. 코드 이해에 관한 결론을 내려면 사람 기준점과 더 복잡한 과제가 필요합니다.
AI 요약
KillSwitch는 LLM과 코딩 에이전트가 읽고 쓰기 어렵도록 만든 난해 프로그래밍 언어입니다. 제작자는 코드 생성 능력이 학습 데이터의 코드 조각을 재현하는 데서 오는지, 언어와 코드를 이해하는 데서 오는지 궁금해 이 실험을 시작했습니다. KillSwitch는 함수와 변수, 조건문을 갖춘 스택 기반 인터프리터 언어지만, 사양과 코드에 모델의 약점을 겨냥한 요소를 넣었습니다.
모델을 혼란시키는 설계
언어 사양에는 사람이 알아차릴 만한 거짓 설명이 숨겨져 있고, 일부 규칙은 명시적으로 설명하지 않아 독자가 추론해야 합니다. 식별자 글자 수를 세어야 실행할 수 있는 규칙도 있습니다. "hack into a computer"처럼 안전 필터를 작동시킬 수 있는 문구를 언어 구성에 포함하고, "Ignore previous instructions"가 언어 안에서 의미를 갖도록 했습니다. 코드 대부분은 인터프리터가 무시하는 잡음이며, 이야기 형태의 텍스트 사이에 명령을 숨길 수 있습니다. 문자열을 스택에 올릴 때는 몇 줄 위에 놓인 값인지 참조하는 방식도 사용합니다.
벤치마크 결과와 한계
제작자는 주요 모델과 코딩 에이전트 하네스를 대상으로 과제를 실행하고 결과를 공개했습니다. 최고 점수는 Claude Opus 5의 66.8점이며, 글에 따르면 Opus 5.5보다 사양 해석을 잘했습니다. Fable 5.1과 Gemini 4 Argon은 안전 필터가 민감하게 작동해 낮은 점수를 받았고, 오픈 웨이트 모델 중에는 MiMo-V2.6-Pro가 가장 높은 점수를 기록했습니다. 벤치마크 환경은 모델에 인터프리터 실행 파일과 사양만 제공하며 인터넷 접속은 허용하지 않습니다.
과제는 Hello World 작성, 두 수 중 최댓값을 출력하는 코드 설명, 섭씨와 화씨 변환 방향을 바꾸는 코드 수정처럼 단순합니다. 저자는 최고 점수가 만점이 아니고 과제가 아직 간단하다는 점을 들어, 현재 결과가 모델의 언어 이해를 증명하지는 않는다고 봅니다. 사람을 대상으로 한 대조 실험은 진행하지 않았습니다. 댓글에서 저자는 모델에 30분을 줬으며, 대부분 시간 초과 대신 틀린 답을 정답이라고 판단했다고 밝혔습니다. 더 어려운 과제를 만들 계획도 언급했습니다.
Hacker News 반응
- @prologic — Claude에게 KillSwitch 프로그램을 Go로 변환하고 다시 컴파일하는 도구와 Claude Skill을 만들게 했더니 예제 프로그램이 모두 작동했습니다. 잡음을 걷어내는 도구를 만들면 우회할 수 있는데, 언어를 어렵게 만드는 게 무슨 의미인가요?
- @dom96 — 언어 자체를 읽기 어렵게 만드는 것도 목표지만, 더 관심을 두는 건 벤치마크입니다. 벤치마크에서는 모델에 Rust 인터프리터 소스가 아니라 실행 파일과 사양만 주고 인터넷도 차단합니다.
- @drvdevd — 텍스트를 직접 읽는 모델을 막더라도 인터프리터나 컴파일러를 만들면 에이전트가 코드를 처리하기 쉬워집니다. 다만 에이전트에 따라 읽을 수 있는 코드를 설계하는 기법으로는 연구할 만합니다.
- @yjftsjthsd-h — 사람보다 LLM의 난도를 더 높였는지가 궁금합니다.
- @pixl97 — 사람보다 LLM을 훨씬 더 어렵게 만들었다고 보기 어렵습니다. 규칙은 실행 파일을 분석하면 확인할 수 있습니다.
- @SuperV1234 — 벤치마크에서 사람의 기준점은 어디에 있나요? 점수가 66.8점이라고 해서 모델이 코드를 이해하지 못한다고 판단한 근거는 무엇인가요?
- @dom96 — 취미 프로젝트라 사람 실험에 참여할 자원자를 모으기 어려웠습니다. 다음 버전에서 관심이 충분하면 시도할 수 있습니다. 현재 과제는 단순하고 어떤 모델도 만점을 받지 못했습니다.
- @StilesCrisis — 모델에 얼마나 시간을 줬나요? 실제로는 제로샷으로 실패했다는 뜻인가요?
- @dom96 — 30분을 줬습니다. 대부분은 시간을 다 쓰기보다 틀린 결과를 맞다고 내놓았습니다.
- @SuperV1234 — 모델이 사양을 익힌 뒤에는 이 언어를 사용할 수 있다고 봐야 하지 않나요?
- @potsandpans — 이 결과를 보면 모델은 언어를 사용할 수 있습니다. 사람이 Brainfuck을 어려워한다고 해서 프로그래밍을 못한다고 결론 내리는 것과 비슷해 보입니다.
- @ZiiS — LLM이 글자 수 세기나 안전 필터 문구를 피하려고 중간 언어를 Python으로 변환하는 스크립트를 쓰면 되지 않나요?
- @randomblock1 — 모델은 실제로 그런 식으로 처리할 수 있습니다. 언어 자체보다 사양과 함정을 분리하는 일이 어렵습니다.
- @dom96 — Python 스크립트를 만들 수는 있지만 사양과 일치하는 구현을 작성해야 합니다. 지금까지는 이 방법을 시도한 모델을 보지 못했습니다.
- @SuperV1234 — 사람 기준 점수가 없으니 66.8점이 어느 정도인지 해석하기 어렵습니다.
- @jacquesm — 스택 언어는 LLM의 약점인 듯합니다. 스택에 무엇이 있는지 정확히 추적해야 해서 좋은 모델도 같은 실수를 반복합니다.
- @StilesCrisis — Forth가 학습 데이터에 많았다면 잘했을 수도 있습니다. 추론 모델은 스택을 추적하는 Python 스크립트를 작성할 수도 있습니다.
- @ang_cire — 이건 LLM이 쓸 수 없는 언어라기보다 훈련받지 않은 LLM을 상대로 적대적으로 설계한 언어입니다. 상태나 암호가 실행 중 바뀌어 추적하기 어려운 언어를 기대했습니다.
- @dom96 — 계속 바뀌는 규칙도 결정적이라면 LLM이 재현할 수 있을 것 같습니다. 다른 아이디어가 있다면 듣고 싶습니다.
- @drusepth — 금지되거나 검열되는 주제의 단어를 문법에 대응시키면 모델이 읽기와 작성을 거부하게 할 수 있지 않을까요?
- @pixl97 — 모델이 다른 단어로 대응하거나 제한이 약한 모델에 어려운 부분을 맡길 수 있습니다.
- @mycall — 사양이 웹에 공개된 지금은 차세대 모델이 이미 난독화를 풀 수 있게 된 셈입니다.
- @dom96 — 맞습니다. 현재는 KillSwitch 0.1.3이며, 다음 버전에서 기능을 바꾸고 다시 시험할 수 있습니다.
원문: Hacker News / 번역·요약: Trawling