
AI 출력이 기대와 어긋나는 이유: 자연어 형식 지정이 효과적이지 않은 원리와 방지 운영법
요약
AI의 출력 형식을 안정시키기 위한 프롬프트 엔지니어링 원리를 다룹니다. 자연어 지시 대신 템플릿을 활용하고, 대화가 길어질 때 형식을 재지시하며, 과도한 제약을 피하는 구체적인 운영법을 제안합니다.
핵심 포인트
- 자연어 지시보다 빈칸이 포함된 템플릿 방식이 재현성이 높음
- 대화가 길어지면 초반 형식 지정 효력이 약해지므로 재게시 필요
- 한 번에 너무 많은 제약을 주면 개별 제약 준수율이 하락함
- 내용 지시와 형식 지시는 별개의 레이어로 관리해야 함
TL;DR
- 출력의 '형식'을 자연어("불렛 포인트 위주로", "표처럼")로 전달하는 지정 방식은 모델 입장에서 해석의 폭이 넓어, 요청할 때마다 서로 다른 출력으로 매핑되기 쉽다. 반면, 빈칸이 포함된 템플릿을 직접 보여주는 지정 방식은 채워야 할 슬롯(Slot)이 일의적으로 결정되므로 재현성이 높다.
- 여러 턴에 걸친 대화에서는 초반에 부여한 형식 지정의 효력이 점차 약해지며, 후반에는 지정하지 않은 자유 형식으로 회귀하는 경향이 있다. 이는 대화가 길어질수록 직전의 상호작용 영향이 상대적으로 강해져, 초반의 제약이 실질적으로 희박해지기 때문이라고 생각된다.
- 한 번의 지시에 담는 제약의 수가 많아질수록, 개별 제약이 지켜질 확률은 오히려 낮아진다. 제약은 "많이 줄수록 정밀해지는" 것이 아니라, 동시에 만족해야 할 조건이 늘어날수록 부분적인 누락이 발생하기 쉽다.
- "내용에 대한 지시"와 "형식에 대한 지시"는 별개의 레이어 정보이며, 내용만 지정하고 형식을 생략하면 모델은 형식을 그때마다 독자적으로 보완해 버린다.
배경
이전 기사들에서는 텍스트·음성 롤플레잉(Role-play)이나 의사록 추출·정리 등, AI에게 무엇을 쓰게 할 것인가(내용)에 초점을 맞추어 절차를 작성해 왔다. 이번에는 "내용은 맞는데 형식만 매번 들쭉날쭉하다"라는 별종의 실패를 다룬다. 제안서 초안을 AI에게 요청했을 때, 내용 자체는 타당했음에도 불구하고 기대했던 3단 구성의 불렛 포인트(Bullet point)가 아닌 읽기용 장문으로 돌아온 것을 계기로, 출력 형식을 안정시키는 지정 방법을 검증했다.
원리 1: 자연어 형식 지정은 해석의 자유도가 너무 높아 재현성이 낮다
"불렛 포인트 위주로", "표처럼 정리해 줘"와 같은 형식 지정은 인간 사이라면 문맥을 통해 의도가 전달되지만, 모델에게는 "불렛 포인트의 비율을 어느 정도로 할 것인가", "표 같다는 것이 구체적으로 무엇을 가리키는가"와 같은 변수가 확정되지 않은 채 출력을 생성하게 된다. 이는 내용 지시(무엇을 쓸 것인가)에 비해 형식 지시(어떻게 보여줄 것인가)가 자연어 표현력에 대해 모호함의 여지가 더 크기 때문에 기인한다. 이에 반해, 헤드라인 명칭과 항목 수까지 작성된 빈칸 포함 템플릿을 제시하는 방법은 채워야 할 슬롯의 수와 위치를 미리 고정하기 때문에, 자연어에 의한 기술적 지정보다 출력의 변동성을 크게 억제할 수 있다. 이는 일반적으로 태스크를 자유 기술형에서 추출·빈칸 채우기형 포맷으로 변환함으로써 출력의 분산을 억제하는 수법의 일종으로 볼 수 있다.
원리 2: 대화가 길어질수록 초반의 형식 지정은 효력을 잃는다
동일 스레드 내에서 여러 턴의 상호작용을 거듭하면, 초반에 부여한 템플릿 지정이 후반으로 갈수록 반영되기 어려워지는 현상이 관찰되었다. 이는 대화 이력이 쌓일수록 직전 턴의 내용이 상대적으로 강한 영향을 미치기 쉬우며, 초반에 한 번만 부여한 제약은 명시적으로 재게시되지 않는 한 "현재도 유효한 제약"으로서의 무게를 유지하기 어렵기 때문이라고 생각된다. 페이지 수가 많은 문서의 중간 정보가 간과되기 쉬운 현상(Lost in the Middle)이 '위치'에 기인한 문제라면, 이것은 '시간·턴 수'에 기인한 제약의 희박화이며 대처법도 다르다. 대화가 길어져 형식의 흐트러짐이 느껴지는 시점에서 템플릿을 재게시하는 것이 실무상 가장 간편한 대처법이다.
원리 3: 제약의 동시 지정 수가 늘어날수록 개별 제약의 준수율은 오히려 떨어진다
헤드라인과 항목 수뿐만 아니라 글자 수, 경어 수준, 강조 사용법까지 한 번에 10개 항목 가까이 지정했더니, 오히려 절반 가까이가 무시되는 결과가 나왔다. 이는 모델이 한 번의 생성으로 만족해야 할 제약의 수가 늘어날수록, 모든 것을 동시에 엄격하게 만족시키는 것이 상대적으로 어려워져 우선순위가 낮은 제약부터 누락되기 쉽기 때문이라고 생각된다. 뼈대(헤드라인·항목 수)만 먼저 고정하고, 세부 제약은 출력을 확인한 후 차이점(Difference)을 지적하는 편이 결과적으로 반복 횟수를 줄일 수 있었다.
효과가 없었던 것
- "불렛 포인트 위주로", "표처럼 정리해 줘"라는 자연어 형식 지정: 요청할 때마다 해석이 바뀌어, 같은 표현을 사용해도 매번 다른 형식으로 돌아왔다. 모호한 지정은 형식의 재현성에 기여하지 않는다.
- 한 번의 지시에 형식의 세부 사항까지 대량으로 집어넣는 것: 제약 수가 늘어날수록 준수율이 떨어져 오히려 수정하는 수고가 늘어났다. 뼈대만 고정하고 세부 사항은 차이점을 지적하는 편이 안정적이었다.
요약
출력 형식을 안정시키기 위해서는 (1) 자연어(Natural Language)를 통한 모호한 형식 지정 대신 빈칸이 포함된 템플릿(Template)으로 슬롯(Slot)을 고정할 것, (2) 대화가 길어질수록 초반의 제약 사항이 희박해진다는 점을 고려하여 필요에 따라 재게시할 것, (3) 한 번에 지정하는 제약의 수를 제한하고 뼈대와 세부 사항을 나누어 단계적으로 확정할 것, 이 세 가지가 유효했다. 내용에 대한 지시와 형식에 대한 지시는 서로 다른 레이어(Layer)이며, 형식은 "말로 설명하는" 것이 아니라 "틀 그 자체를 보여줌"으로써 비로소 안정적으로 전달된다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기