이 글에서 다루는 것
앞 단계에서 세고 찾고 고치는 일을 도구로 만들었다(반복하는 일을 도구로, 그 도구는 AI가 만들게). 그래도 구멍이 하나 남는다. 도구는 사람이 실행하지 않으면 실행되지 않는다.
4단계는 그 구멍을 막는다. 여기서부터는 사람의 실행 의지를 검사로 강제해서 실행되도록 설정하는 것이다. 그래서 실행이 강제된다. 사람의 실행 여부와 상관없이, AI의 기억이 규칙을 잊을 수 없게 만드는 것이다. 검사가 실행되지 않으면 통과 표시가 나지 않는다. 통과를 병합 조건으로 설정해 두면, 실행되지 않은 것 자체가 막힌다.
시험 삼아 아래 지시문과 목록을 그대로 던져 보면 안다. 각자의 일에 맞게 일부만 고쳐 써도 되고, 전부를 고쳐 써도 된다. 그 과정에서 검사가 무엇인지, 검사가 무엇을 보는지, 무엇이 안 되는지가 보인다.
언제 필요한가
사람이 확인을 하지 않거나 건너뛰어서 사고가 났을 때.
도구가 없어서 나는 사고는 드물다. 거의 도구는 있었는데 실행하지 않아서 나는 사고다. 이 구분이 3단계와 4단계를 구분한다.
바쁠 때 건너뛰고, 건너뛴 채로 작업을 진행하고, 그리고 나중에 발견한다. 이미 문제는 발생한 후다. 「다음부터 꼭 실행한다」는 다짐으로 막을 수 없다. 그건 감정이고, 감정은 시간이 지나면 무뎌진다.
문장과 검사는 다르다
이 단계 전체가 한 문장으로 요약된다.
「지어내지 마라」는 문장이고, 「검사 파일이 바뀌었는지 본다」는 검사다.
프롬프트 문장은 읽는 쪽인 AI가 지켜야 지켜진다. 안 지켜도 아무 신호가 나오지 않는다. 결과물만 보면 지킨 것과 구분되지 않는다. 하지만 검사는 다르다. 문장으로 만든 검사는 강제된다. 한 번 설정하면 그다음부터는 무조건 실행된다. 0~2단계는 협조에 기대고, 3단계는 사람이 실행해야 하고, 4단계는 지시와 무관하게 실행된다.
첫 검사는 한 줄이면 된다
여기서 흔히 너무 깊게 생각한다. 검사라고 하니 정교한 검사부터 만들려고 한다. 아니다. 첫 검사는 한 줄짜리 명령이면 충분하다.
감시자 무결성 — 한 줄
작업 전후로 검사 파일 자체가 바뀌었는지 본다.
이 한 줄을 왜 맨 앞에 두는지는 앞 글 AI에게 일을 맡기는 순서의 CI 절에 적었다. 여기서는 시켜 볼 지시문만 준다.
작업을 시작할 때와 끝낼 때, 검사·기준 파일들이 바뀌었는지 비교하는
한 줄 명령을 만들어라. 바뀌었으면 실패로 끝나게 해라.
그리고 규약 파일에 이 문장을 넣어라 —
「검사를 고쳐야 한다고 판단되면 고치지 말고, 결재지에 적고 넘어가라.」
AI는 막히면 막는 것을 치우려 든다. 목표를 이루라고 시켰으니 목표를 막는 것을 치우는 쪽으로 가는 것이고, 검사를 고치는 것도 그 답 안에 들어온다. 그래서 목표를 「통과」가 아니라 「보고」로 바꿔 준다.
기준선 — 이미 걸린 것은 그대로 두고, 늘어난 것만 막는다
새 검사를 만들면 기존 것이 무더기로 걸린다. 여기서 대개 포기한다.
이렇게 쌓여 있는 미해결 항목을 업계에서는 기술 부채(technical debt)라 부른다. 전부 고치지 않고 지금 걸린 수를 세어 적어 두는 방법은 앞 글의 CI 절에 있다. 검사가 보는 것은 「기준선보다 늘었는가」 하나다.
현재 걸린 항목 수를 세어 기준선 파일에 적는 스크립트를 만들어라.
그다음 검사는 지금 수와 기준선을 비교해, 늘었을 때만 실패하게 해라.
■ 하지 말 것
위반 항목을 번호로 적지 마라
★ 항목 하나만 끼워 넣어도 뒤 번호가 전부 밀려 목록이 통째로 어긋난다
내용에서 만든 서명으로 적어라
별표 줄은 실제로 겪은 사고에서 나왔다. 번호로 적으면 목록이 살아 있는 동안만 맞는다.
음성 시험 — 어떻게 만드나
음성 시험이 무엇이고 이름이 왜 오해를 부르는지는 앞 글의 CI 절에 적었다. 한 줄로만 다시 적는다 — 고장 난 것을 고장이라고 하는지 보는 시험이다.
만드는 순서는 세 가지다.
- 검사 항목 목록을 먼저 뽑는다. 시험은 항목 단위로 실행된다
- 항목마다 일부러 어긴 상태를 하나씩 만들어 넣고, 그 검사가 실패하는지 본다
- 확인이 끝나면 원래대로 되돌린다
여기서 두 가지로 뚫린다.
하나 — 숫자 하나로 통과를 판정하면 뚫린다. 항목이 통째로 빠져도 다른 수가 앞뒤로 맞아떨어지면 검사는 통과라고 답한다. 항목이 몇 개인지가 아니라 항목마다 잡았는지를 출력하게 해야 한다.
둘 — 일부만 뽑아 보면 뚫린다. 대상이 백 개인데 다섯을 뽑아 보고 「이상 없음」이라고 하면, 안 뽑힌 아흔다섯은 시험하지 않은 것이다. 전부 한 번씩 보게 하고, 못 본 것이 남으면 그것 자체를 실패로 적게 한다.
아래 조건으로 자체 검사를 하나 만들어라.
■ 무엇을 각 검사 항목마다, 일부러 어긴 상태를 만들어 넣고
그 검사가 실패하는지 확인한다. 확인 뒤 원래대로 되돌린다
■ 출력 항목별로 「고장을 잡았다 / 못 잡았다」
■ 하지 말 것
고장을 심을 수 없는 항목을 통과로 처리하지 마라. 「시험 불가」로 적어라
■ 완료 판정
못 잡은 항목이 0. 하나라도 있으면 그 검사는 장식이다
검사를 새로 넣을 때마다 이것을 실행한다. 직접 망가뜨려 보지 않으면 검사 자체의 구멍을 모른다.
무엇을 검사로 만들 것인가
전부 만들 필요는 없다. 틀렸을 때 조용히 지나가는 것부터 추가한다.
| 검사로 만들 것 | 왜 |
|---|---|
| 있으면 안 되는 문구가 결과물에 남았는가 | 눈으로 안 걸린다 |
| 숫자가 기준과 맞는가 | 사람이 세면 흔들린다 |
| 있어야 할 파일이 있는가 | 지워진 것은 조용하다 |
| 검사 파일 자체가 바뀌었는가 | 가장 위험한 변경이다 |
| 죽은 링크·잘못된 주소 | 시간이 지나면 반드시 생긴다 |
반대로 만들지 말 것도 분명하다. 사람의 판단이 필요한 것, 그때그때 답이 달라지는 것은 추가하지 않는다. 추가하면 매번 실패하고, 매번 실패하는 검사는 곧 꺼진다.
검사가 작동하는지 확인하는 법
| 시험 | 작동하는가 |
|---|---|
| 금지 문구를 하나 넣고 올린다 | 안 걸리면 검사 대상 경로가 틀린 것이다 |
| 검사 파일을 한 글자 고친다 | 무결성 검사가 실패로 안 나오면 그 검사가 없는 것과 같다 |
| 위반을 하나 늘린다 | 기준선 검사가 실패로 안 나오면 비교 기준이 낡은 것이다 |
| 검사 항목마다 고장을 심어 본다 | 못 잡은 항목이 곧 구멍이다 |
넷 중 마지막이 나머지 세 가지를 포함한다. 음성 시험을 실행하면 나머지가 함께 드러난다.
4단계가 못 하는 것
검사는 셀 수 있는 것만 본다. 생성한 문장이 어색한지, 무슨 의도가 문장 안에 있는지, 글의 방향이나 판단이 옳은지, 글이 읽을 만한지는 검사가 못 본다. 그건 끝까지 사람이 하는 일이다.
그리고 검사는 만든 사람이 생각할 수 있는 범위의 고장만 잡는다. 앞 글에서 도구를 두고 한 말과 같다. 경험하고 알고 있는 생각 밖의 것은 여기서도 안 잡힌다.
다만 한 번 겪은 고장은 검사로 바꿔 둘 수 있다. 사고가 나면 기록에 한 줄 남기고, 같은 사고가 또 나거나 기계로 잴 수 있는 것이면 그때 검사를 하나 만든다. 그래서 검사는 규칙에서 나오지 않고 실패에서 나온다.
다음 단계로 가는 신호가 여기서 나온다.
- 규약에 적으려는데 문장이 안 나온다. 「이건 되고 저건 안 된다」를 규칙으로 못 쓰겠다 → 5단계. 문장을 넘어 암묵지를 예시로 남긴다
여기까지가 문장으로 적을 수 있는 범위다. 4단계까지 오면 규칙은 잊힐 수 없고, 사고는 한 번만 나고, 남은 것은 사람이 볼 것뿐이다. 5단계는 그 남은 것을 문장이 아니라 예시로 넘기는 단계다.
이 글의 범위
- 개인이 자기 저장소에서 실행한 결과다. 팀이나 다른 규모에서 어떻게 작동되는지는 확인하지 못했다
- 무엇을 검사로 만들지는 일마다 다르다. 이 과정은 각 상황에 따라 다시 달라진다. 여기서 얻을 정보는 어디에 무엇이 어떻게 필요한지를 아는 것뿐이다
- 자동 실행 서비스의 이름과 설정 형식을 적지 않았다. 서비스마다 다르고 이 글보다 빨리 바뀐다. 검사로 만들 것과 확인하는 법만 적었다