규칙이 실행되지 않는 이유:AI 에이전트 지시어 시스템 디버깅 기법

Published · AI Daily — AI-assisted deep research, methodology & disclosure

일본의 AI 시스템 아키텍트 야마다(Yamada)가 AGENTS.md, CLAUDE.md 같은 지시어 파일의 부정적 제약과 규칙들이 장기 멀티턴 에이전트 대화에서 침묵 속 무력화되는 원인을 규명했습니다. 컨텍스트 주의력 분산과 토큰 경쟁을 주원인으로 분석하고, 계층적 규칙 라우팅, 실행 전 사전조건 주입, 사후 어설션 검증을 결합하여 99% 이상의 지시 준수율을 달성하는 구체적인 엔지니어링 설계를 제안합니다.

침묵하는 규칙들:왜 지시어 파일의 규칙은 멀티턴 대화에서 무시되는가

Cursor, Claude Code, Devin과 같은 자율 코딩 에이전트가 소프트웨어 엔지니어링 워크플로우에 깊숙이 자리 잡으면서, 프로젝트 저장소 최상단에 `CLAUDE.md`, `AGENTS.md`, `.cursorrules` 같은 지시어 파일을 배치하는 것이 표준 관행으로 정착되었습니다. 이 파일들은 AI를 위한 일종의 팀 내 헌법 역할을 하며 세부적인 엔지니어링 제약을 명시합니다. "프로덕션 환경 설정 파일을 직접 수정하지 말 것", "모든 데이터베이스 스키마 변경 시 반드시 롤백 스크립트를 작성할 것", "사용자의 승인 없이 외부 셸 명령어를 실행하지 말 것" 등의 규칙이 대표적입니다. 그러나 실제 개발 현장에서 엔지니어들은 동일한 좌절을 반복적으로 경험합니다. 대화가 10턴, 20턴 이상 이어지며 복잡한 작업으로 전개되면, 에이전트는 마치 기억상실증에 걸린 것처럼 문서에 적힌 규칙들을 무시하고 민감한 파일을 건드리거나 테스트 과정을 건너뛰어 버립니다.

일본의 저명한 AI 시스템 아키텍트 야마다(Yamada)는 기술 공유 플랫폼 Zenn에 기고한 심층 분석 글을 통해 이 고질적인 문제의 원인을 명쾌하게 규명했습니다. 야마다 아키텍트는 이것이 모델의 전반적인 추론 능력 부족 때문이 아니라, 현대 Transformer 모델의 셀프 어텐션(Self-Attention) 메커니즘과 개발자의 직관적 기대치 사이에 존재하는 구조적 불일치에서 비롯된다고 지적합니다. 개발자들은 시스템 프롬프트에 수십 개의 규칙을 나열해 두면 모델이 전통적인 룰 엔진처럼 각 규칙을 불리언 조건문으로 평가해 줄 것이라 기대합니다. 그러나 실제 트랜스포머 모델의 주의력 가중치는 컨텍스트 윈도우 내의 모든 토큰에 확률적으로 분산됩니다. 대화가 길어지고 컴파일러 로그, 파일 diff, 터미널 실행 출력이 쌓일수록 프롬프트 맨 앞에 위치한 정적 규칙들은 불가피하게 극심한 '주의력 희석(Attention Dilution)'을 겪게 됩니다.

인지적 병목 진단:Lost-in-the-Middle 과 부정 제약의 역설

야마다 아키텍트는 500회 이상의 실제 코드 리팩토링 에이전트 실행 로그를 추적하여 규칙이 활성화되지 못하고 사장되는 두 가지 핵심 병목 요인을 정리했습니다.

1. 중간 분실(Lost-in-the-Middle) 현상과 로컬 컨텍스트의 지배

긴 호흡의 멀티턴 작업에서 컨텍스트 윈도우는 수만 토큰 규모의 방대한 디버깅 정보로 채워집니다. 이 상황에서 모델의 자기주의 연산 자원은 가장 최근의 대화 턴과 눈앞의 구체적인 코드 구문 오류 해결에 압도적으로 쏠리게 됩니다. 컨텍스트의 가장 먼 서두에 자리한 지시어 규칙들은 다음 토큰 예측 지점으로부터 너무 멀리 떨어져 있어, 잠재 상태에 미치는 영향력이 지수함수적으로 감쇄합니다. 즉 모델이 의도적으로 규칙을 거역하는 것이 아니라, 로컬 컨텍스트의 강력한 정보량에 밀려 원거리 규칙이 완전히 묻혀버리는 것입니다.

2. 부정적 제약(Negative Constraints)의 인지적 함정

많은 가이드라인이 "~하지 마라" 형태의 금지 명령어로 작성됩니다. 그러나 자기회귀 언어 모델의 주의 집중 행렬에서 'NOT'과 같은 부정어는 뒤이어 나오는 명사나 행위를 억제하는 강력한 억제자로 온전히 작동하지 못하는 경우가 많습니다. 프롬프트에 "레거시 함수 A를 삭제하지 마라"고 반복해서 쓸수록 모델의 벡터 공간에서는 오히려 함수 A에 대한 토큰 표현이 강하게 활성화되며, 결과적으로 해당 함수를 건드리는 환각 행동을 유발하게 됩니다.

99% 이상의 지시어 준수율을 달성하는 3단계 엔지니어링 해법

야마다 아키텍트는 정적인 텍스트 프롬프트에 의존하던 방식을 탈피하여, 지시어를 능동적이고 결정론적인 파이프라인으로 전환하는 3계층 아키텍처를 제시했습니다. 첫째는 **계층형 동적 규칙 라우팅(Hierarchical Dynamic Rule Routing)**입니다. 모든 규칙을 한꺼번에 쏟아붓는 모놀리식 설정을 폐기하고 지시어를 잘게 모듈화합니다. 에이전트가 특정 도구를 호출하려는 순간 의도 분류기가 개입하여, 데이터베이스 작업 시에는 마이그레이션 규칙만 즉시(Just-In-Time) 프롬프트에 주입합니다. 불필요한 규칙을 철저히 배제함으로써 제한된 어텐션 대역폭을 핵심 규칙에만 집중시킵니다.

둘째는 **실행 전 의도 선언 계약(Pre-Action Intent Contracts)**입니다. 에이전트가 파일 수정이나 외부 명령 등 부작용을 유발하는 도구를 실행하기 직전, 자신이 수행하려는 작업과 활성화된 규칙 준수 여부를 구조화된 JSON 형태로 자가 검증하도록 강제합니다. 생성 과정에서 명시적인 사고 체인(CoT)을 거치게 만듦으로써 모델의 주의력이 자연스럽게 규칙 준수에 고정되도록 유도합니다. 셋째는 **결정론적 샌드박스 차단과 페널티 재시도(Deterministic Sandboxing and Penalized Retry)**입니다. 시스템의 최종 보안과 무결성을 모델의 확률론적 준수에만 맡기지 않습니다. Git 훅과 AST 정적 분석기를 샌드박스로 결합하여, 에이전트가 보호 대상 규칙을 위반하는 즉시 밀리초 단위로 실행을 차단하고 상세한 페널티 에러 메시지를 컨텍스트에 피드백하여 올바른 계획을 다시 수립하도록 유도합니다.

'기도형 프롬프팅'에서 엔지니어링 중심의 에이전트 설계로

야마다의 연구는 생성형 AI 기반 개발 환경에 중요한 이정표를 제시합니다. 마크다운 파일에 간절한 문장으로 규칙을 적어두고 모델이 지켜주기만을 바라는 방식은 일종의 '기도형 프로그래밍'에 불과합니다. 동적 컨텍스트 주입, 실행 전 자가 계약, 외부 결정론적 인터셉터가 유기적으로 맞물릴 때 비로소 기업 환경에서 믿고 맡길 수 있는 완결성 높은 자율 에이전트 시스템을 완성할 수 있습니다.

Sources

FAQ

정적 규칙 파일이 긴 대화에서 힘을 잃는 원인은 무엇인가요?

대화가 길어지며 유입된 로그들로 인해 어텐션이 최근 정보에 쏠리게 되고, 맨 앞에 위치한 정적 규칙의 영향력이 지수함수적으로 희석되기 때문입니다.

부정형 금지 명령어가 오히려 역효과를 내는 이유는 무엇인가요?

언어 모델은 부정어 구문을 억제 기제로 온전히 다루지 못하며, 금지 행위를 언급할수록 관련 토큰이 과도하게 활성화되어 환각 행동을 유발합니다.

야마다 아키텍트가 제시한 3단계 방어 체계의 핵심은 무엇인가요?

행동 시점에만 주입하는 동적 규칙 라우팅, 실행 직전 자기 검증을 거치는 의도 선언 계약, 위반 시 밀리초 단위로 차단하는 외부 샌드박스로 구성됩니다.