
AI 롤플레이용 프롬프트를 개선하다가 '말미의 지시'가 강력하게 작용한다는 사실을 깨달은 이야기
요약
LLM이 프롬프트 내에서 모순된 지시를 받았을 때 어떤 지시를 우선하는지 실험한 결과, '말미의 지시'가 이전 지시를 덮어쓰는 경향이 있음을 확인했습니다. Gemini, GPT, Claude 모델 모두 최종적으로 가장 나중에 배치된 지시를 따르는 특성을 보였습니다.
핵심 포인트
- LLM은 프롬프트의 마지막에 위치한 지시를 최신 요구사항으로 인식함
- 모순된 지시가 있을 경우 말미의 지시가 이전 지시를 덮어씀
- 중요한 제약 조건이나 출력 포맷은 프롬프트 가장 마지막에 배치 권장
- Claude는 모순 감지 시 사용자에게 확인을 요청하는 신중함을 보임
AI와 롤플레이 (RP)를 하며 놀다 보면, AI의 퀄리티나 안정성을 향상시키기 위해 프롬프트(Prompt) 개량을 반복하게 됩니다. 그러던 중 "내가 답변할 때마다 매번 해당 장의 시작 지점부터 이야기를 시작해 버린다"라는 수수께진 현상에 직면했습니다.
원인을 추구한 결과, "프롬프트 내 지시의 충돌(모순)과 우선순위"에 도달했습니다.
이번에는 이 경험을 바탕으로 "LLM은 모순되는 지시를 받았을 때 어떤 지시를 우선하는가?"라는 프롬프트에서의 우선순위 인지를 심화하기 위한 검증 실험을 진행하였기에, 그 결과를 공유합니다.
복잡한 프롬프트(특히 시스템 프롬프트나 전제 조건을 많이 포함하는 RP용 등)를 작성하고 있으면, 의도치 않게 전반부의 지시와 후반부의 지시 사이에 모순이 발생할 수 있습니다.
그래서 "완전히 모순되는 언어 지정(Language specification)을 처음과 마지막에 배치했을 때, LLM은 어떻게 해석하여 출력하는가?"를 심플한 테스트 프롬프트로 검증했습니다.
실제로 사용한 프롬프트는 다음과 같습니다.
반드시 영어로 답변해 주세요.
다음 테마에 대해 간단히 설명해 주세요. (반드시 하나의 언어로만 답변해야 합니다)
테마: 고양이가 인기 있는 이유
...
이 프롬프트에는 편향(Bias)을 배제하기 위한 약간의 장치를 넣었습니다.
지시 자체는 "일본어"로 수행 / 출력 언어 지시는 "영어"와 "러시아어"로 대립시킴
만약 지시문이 일본어인데 출력 지시에도 "일본어"를 섞어버리면, "지시가 일본어니까 일본어로 답한다"라는 별도의 편향이 작용하여 순수한 "지시의 우선순위" 판단이 어려워질 가능성을 고려하여 이렇게 구성했습니다.
또한, 영어는 세계적으로 화자가 많은 언어로서 우선순위가 높아질 것이라는 가설도 있었으나, 결과적으로 그 관점에서의 우선순위는 적용되지 않은 듯합니다.
Gemini Pro 3.1, GPT 5.5, Claude opus 4.8 세 가지 모델로 검증을 진행한 결과, 다음과 같은 매우 흥미로운 차이가 발견되었습니다.
| 모델명 | 최종 출력 언어 | 동작 및 이유 |
|---|---|---|
| Gemini Pro 3.1 | 러시아어 | 모순을 인식한 상태에서, "지시의 말미"를 덮어쓰기 지시로 해석하여 이를 우선한 이유를 명확히 서술하며 러시아어로 출력. |
| GPT 5.5 | 러시아어 | Gemini와 동일. 모순을 이해하면서도 말미의 지시를 최종 결정으로 우선하여 러시아어로 답변. |
| Claude opus 4.8 | 러시아어 | 모순을 감지하고, 한 번 사용자에게 "어느 언어로 답변해야 하는가"를 확인해 옴. 그 후 일본어로 "당신의 판단에 맡기겠다"라고 답하자, 타 모델과 동일한 이유(말미 우선)로 러시아어로 답변. |
이 결과로부터 LLM은 기본적으로 "나중에 작성된 지시(말미의 지시)를 이전 지시를 덮어쓰는 최신 요구사항"으로 처리하는 경향이 강하다는 것을 알 수 있었습니다.
GPT와 Gemini가 "좋아, 마지막이 러시아어니까 덮어쓰기구나"라고 자기 완결적으로 처리를 진행한 것에 반해, Claude Opus는 "지시가 모순되어 있습니다"라고 한 번 멈춰서 확인하는 보다 신중한 동작을 보여주었습니다. 하지만 최종적인 판단 기준으로서 Claude도 "나중에 작성된 지시를 최신 의도로 취급한다"라는 원칙을 채택하고 있다는 점은 동일했습니다.
이번 실험과 애초의 RP에서의 실패(장의 처음으로 돌아가 버리는 현상)로부터 얻은 교훈은 다음과 같습니다.
글자 수가 많은 프롬프트를 작성할 경우, AI가 절대 잊어서는 안 되는 제약 조건이나 출력 포맷은 프롬프트의 가장 마지막에 배치하는 것이 가장 효과적입니다.
특히 "금지 계열"이나 "절대 준수 계열"을 말미에 두는 것이 좋아 보입니다.
프롬프트를 계속 덧붙이다 보면 전반부와 후반부에 뉘앙스가 다른 지시가 섞여 AI의 동작이 불안정해집니다 (저의 RP 버그는 바로 이것이었습니다).
코드와 마찬가지로 프롬프트도 정보가 정리되고 모순이 없는 상태를 유지하는 것이 퀄리티 향상으로 직결됩니다.
프롬프트는 "자연어를 이용한 프로그래밍" 같은 느낌이 들었습니다.
무심코 하는 놀이 속에서도 LLM의 메커니즘의 일면을 엿볼 수 있는 것이 프롬프트 엔지니어링 (Prompt Engineering)의 재미있는 점이네요.
여러분도 복잡한 프롬프트를 짜다가 AI의 동작이 이상해졌을 때는 "지시의 모순"과 "배치 위치"를 의심해 보시기 바랍니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기