프롬프트설계

프롬프트 계층화: 중복 제거가 드러낸 지시 충돌

2026. 09. 08

네 개의 생성 에이전트가 각각 프롬프트를 보유한 구조였습니다. 공통 규칙을 단일 계층으로 통합하는 과정에서 상호 모순되는 지시가 공존하고 있었음을 확인했고, 정합성을 확보하자 출력 구조 준수율이 개선되었습니다.

프로젝트 배경

소속
통신사 B2B 영업조직 대상 사내 프로젝트
프로젝트
계정 플랜 자동 생성 에이전트
기간
2026.07 ~ (진행 중)
담당
AI 백엔드 · 데이터 수집부터 초안 생성까지 단독 담당

고객사별 계정 플랜을 공시·조달·뉴스 데이터로 자동 생성하는 사내 도구입니다. 산업 환경·가치사슬·고객 현황·정책 규제 네 개 페이지를 각각 담당하는 에이전트가 병렬로 실행되며, 각 에이전트는 규정된 JSON 스키마를 충족해야 합니다.

프롬프트설계LLM품질에이전트구조화출력시스템프롬프트

1. 연구 배경

계정 플랜은 산업 환경, 가치사슬, 고객 현황, 정책 규제 네 개 페이지로 구성됩니다. 각 페이지를 담당하는 에이전트가 병렬로 실행되며 규정된 JSON 스키마를 채웁니다.

에이전트는 순차적으로 추가되었습니다. 산업 환경을 구현한 뒤 가치사슬을 결합하고, 고객 현황을 추가한 후 정책 규제를 마지막에 도입했습니다. 각 에이전트는 독립적인 프롬프트를 보유했습니다.

토큰 절감 작업 과정에서 네 프롬프트를 단일 화면에 병치해 검토할 필요가 발생했습니다. 이전까지는 그러한 검토를 수행한 적이 없었습니다. 수정 사항이 발생하면 해당 에이전트의 프롬프트만 열어 처리했기 때문입니다.

2. 문제 정의

병치 검토 결과 동일한 내용이 네 차례 기술되어 있었습니다.

네 페이지 모두 "수집 데이터에 존재하는 사실만 사용할 것", "근거가 없으면 추론하되 표기할 것", "상투어를 배제할 것", "JSON만 출력할 것"을 각자의 표현으로 기술하고 있었습니다. 페이지가 달라도 준수해야 할 원칙은 동일한데, 네 지점에서 개별적으로 관리되고 있었습니다.

문제는 중복 자체가 아니라 네 표현이 상이했다는 점입니다.

동일한 원칙을 네 명이 각자 작성한 것처럼 어휘와 강조점이 분기해 있었습니다. 일부 페이지는 "절대 생성하지 마라"로 강하게 기술했고, 다른 페이지는 "추론해 채우되 표기하라"로 기술했습니다. 두 지시는 동일한 상황에서 상반된 행동을 요구합니다.

또한 프롬프트를 조립하는 공통 코드의 말미에 다음 문장이 부가되어 있었습니다.

근거가 부족하면 항목 수를 줄여라.

각 페이지 지침은 이와 정반대로 기술하고 있었습니다.

비우지 말고 채워라. 근거가 부족하면 추론해서라도 채우고 (추정)을 붙여라.

두 지시가 동일한 요청 내에 함께 투입되고 있었습니다.

3. 기술적 난점

충돌이 오류로 표면화되지 않음

모델은 모순된 지시를 수신해도 오류를 반환하지 않습니다. 둘 중 하나를 선택하거나 절충합니다. 출력은 스키마를 충족하고 JSON 파싱을 통과하며 화면에도 정상 렌더링됩니다. 일부 항목이 비어 있을 뿐입니다.

근거가 충분한 기업에서는 이 차이가 관측되지 않습니다. 재료가 충분하면 어느 지시를 따르든 결과가 유사합니다. 근거가 부족한 기업에서만 발현되는데, 시범 단계에서 검증하는 대상은 대개 대기업이므로 근거가 충분합니다.

원인의 역추적 불가

출력만으로는 모델이 어느 문장을 따랐는지 판별할 수 없습니다. 항목이 세 개일 때 이것이 "재료가 세 개뿐이어서"인지 "축소 지시에 따라"인지 구분되지 않습니다. 출력에서 원인을 역추적할 수 없는 유형의 문제입니다.

프롬프트의 관리 부재

동일한 규칙이 네 지점에 복제되어 있으면 하나를 수정했을 때 나머지 셋이 동기화되지 않습니다. 코드였다면 함수로 추출했을 중복이지만, 프롬프트는 문자열이므로 그러한 압력이 작용하지 않습니다. 문자열은 중복되어도 컴파일 오류를 발생시키지 않습니다.

4. 대안 검토

1안. 네 프롬프트의 표현 통일

  • 장점: 구조를 변경하지 않아 위험이 낮습니다.
  • 단점: 중복이 잔존합니다. 차기 규칙 수정 시 네 지점을 모두 변경해야 하며, 한 곳을 누락하면 동일 문제가 재발합니다. 원인이 아니라 증상을 처리하는 방식입니다.

2안. 프롬프트 외부 파일 분리 및 템플릿 상속

  • 장점: 중복이 제거되고 버전 관리가 용이해집니다.
  • 단점: 현 규모에서는 과도합니다. 프롬프트가 네 개인 상황에서 템플릿 엔진과 파일 로딩 계층을 도입하면 내용 확인을 위해 파일을 두 차례 열어야 하는 구조가 됩니다. 현 단계에서는 코드에서 프롬프트가 직접 노출되는 편이 유리합니다.

3안. 시스템 프롬프트와 페이지 지침의 2계층 분리 (채택)

LLM API는 이미 두 개의 슬롯을 제공합니다. 시스템 메시지와 사용자 메시지입니다. 공통 규칙을 시스템에, 페이지 고유 지시를 사용자 메시지에 배치하면 기존 구조를 그대로 활용할 수 있습니다.

신규 개념을 도입하지 않고 기존 구분에 내용을 정렬하는 방식입니다.

5. 설계 결정 및 근거

공통과 고유의 판별 기준

기준을 단일하게 설정했습니다. "이 문장을 다른 페이지에 그대로 이전해도 성립하는가."

성립하면 공통입니다. 페이지명이나 필드명을 변경해야 성립하면 고유입니다.

이 기준을 적용하자 공통 항목이 네 갈래로 정리되었습니다.

갈래내용
사실수집 데이터 내 사실만 사용, 근거 부족 시 추론 후 표기, 항목 수 충족
문장상투어 배제, 소제목은 명사구, 상세는 한두 문장
공공기관시장 경쟁 구도 부재, 재무제표 대신 조달 이력
출력규정된 JSON만 반환

공공기관 항목이 공통으로 분류된 것은 예상과 달랐습니다. 네 페이지가 모두 공공기관을 별도로 처리해야 하는데, 처리 방식이 상이한 것이 아니라 전제가 동일했습니다. "법령에 규정된 사업을 수행하므로 시장 경쟁이 부재한다"는 전제는 모든 페이지에서 동일하며, 그 전제에서 도출되는 행동만 페이지별로 상이합니다. 전제를 시스템에 배치하고 행동만 각 지침에 존치했습니다.

충돌 해소: 단일 상황에 단일 규칙

"근거가 부족하면 항목 수를 줄여라"를 삭제했습니다. 근거가 부족한 조건의 처리를 시스템 프롬프트 단일 지점으로 통합했습니다.

직접적 근거가 없으면 산업 전반의 흐름에서 추론해 채우되 그 문장 끝에 '(추정)'을 붙인다. 근거가 얇아도 요청된 항목 수는 채운다. 빈 칸이 화면에 그대로 드러난다.

채우는 방향을 선택한 근거는 다음과 같습니다. 본 도구의 출력은 영업 담당자가 열람하는 문서입니다. 빈 항목은 "정보 부재"가 아니라 "도구 실패"로 인식됩니다. 반면 추정 표기가 부가된 항목은 담당자가 판단해 채택하거나 배제할 수 있습니다. 판단 재료를 제공하는 편이 판단을 차단하는 편보다 유효하다는 결정입니다.

다만 예외를 하나 설정했습니다. 정책 규제 페이지는 상위 5건에 순위를 부여하는데, 이 경우에는 항목 수를 강제하지 않습니다. 영향도가 낮은 정책을 편입하면 순위 자체가 무의미해지기 때문입니다. 충족 규칙이 목적과 상충하는 지점에서는 예외를 명시적으로 기술했습니다. 암묵적 위반으로 처리하지 않았습니다.

요구사항 문서의 직접 투입 배제

정책 규제 페이지는 별도의 요구사항 문서에서 파생되었습니다. 분석 방법론이 정리된 문서여서 초기에는 원문을 그대로 프롬프트에 투입했습니다.

재검토 결과 절반 이상이 출력에 사용되지 않는 내용이었습니다. 결과를 표로 렌더링하는 마크다운 서식, 분석 절차를 화살표로 도시한 순서도, 정보 우선순위를 세 계층으로 구분한 목록이 포함되어 있었습니다.

본 시스템이 수신하는 것은 표가 아니라 JSON입니다. 절차도는 인간 독자를 위한 도해입니다. 존치한 것은 판단 기준입니다. 무엇을 검토할지, 무엇을 제외할지, 어떤 지표로 점수를 산정할지에 해당합니다.

개선 전개선 후
정책 규제 지침1,855자748자

요구사항 문서를 프롬프트에 직접 부착하는 것은 효율적인 선택이지만, 문서의 수신자는 인간이고 프롬프트의 수신자는 모델입니다. 동일한 내용이라도 요구되는 형태가 상이합니다.

6. 실험 결과

세 개 기업으로 재생성해 구조 준수 여부를 전수 검증했습니다.

검사 항목요구결과
산업 환경 관점 수3개 고정3 / 3 / 3
관점별 최소 항목4개 이상4 / 4 / 4
가치사슬 단계별 현황·요구사항각 3개 이상전 단계 충족
고객 현황 분류어 길이2~4글자45개 전부 충족
정책 지표 가중치 합100100.0 / 100.0 / 100.0
생성 오류00 / 0 / 0

가치사슬 단계명은 업종 표준 표기와 글자 단위로 일치했습니다. 항공 운송업 5단계를 표기 그대로 반영했고, 표에 부재하는 단계를 생성하지 않았으며, 7칸 표의 잔여 두 칸은 공백으로 유지했습니다.

프롬프트 길이는 다음과 같이 변화했습니다.

개선 전개선 후
페이지 지침 합계5,010자2,775자
시스템 프롬프트137자431자
회사당 총입력5,558자4,499자 (-19.1%)

시스템 프롬프트는 3배로 증가했습니다. 네 차례 전송되므로 그 자체로는 손실입니다. 그럼에도 총량이 감소한 것은 각 지침에서 제거한 분량이 이를 상회했기 때문입니다.

측정상의 유의 사항

개선 전후로 서술 문장의 수치 포함 비율도 계측했으나 유의미한 비교가 성립하지 않았습니다. 근거로 투입되는 뉴스가 생성 시점마다 상이하기 때문입니다. 동일 기업이라도 해당 시점에 검색되는 기사에 따라 본문에 포함되는 수치가 달라집니다.

프롬프트 변경의 효과는 모델의 지시 준수 여부로 측정해야 하며, 내용의 구체성은 근거 품질에 종속되는 별개의 축입니다. 두 축을 단일 지표로 혼합하면 어느 쪽의 변화인지 판별할 수 없습니다.

7. 결론 및 시사점

프롬프트도 중복 제거의 대상입니다. 코드에서는 동일 로직이 네 지점에 복제되면 함수로 추출합니다. 프롬프트는 문자열이므로 그러한 압력이 부재하며, 따라서 중복이 장기간 잔존합니다. 중복 자체보다 위험한 것은 복제본이 점진적으로 분기하는 현상입니다.

충돌하는 지시는 오류를 발생시키지 않습니다. 이것이 프롬프트 문제의 특징입니다. 타입 오류나 파싱 실패로 표면화되면 즉시 수정됩니다. 모순된 지시는 외견상 타당한 출력을 생성하며, 문제는 특정 조건에서만 잠재적으로 발현됩니다. 정합성은 실행이 아니라 검토로만 확인됩니다.

병치 검토 절차가 필요합니다. 네 프롬프트를 단일 화면에서 검토한 것은 이번이 최초였습니다. 각 에이전트를 개별적으로 유지보수하는 동안에는 불일치가 관측되지 않았습니다. 파일이 분리되어 있더라도 정기적으로 단일 화면에 집약해 대조하는 단계가 요구됩니다.

시스템·사용자 메시지 구분은 본 문제를 위해 이미 존재합니다. 신규 추상화를 구축할 필요가 없었습니다. API가 제공하는 두 슬롯에 "불변 요소"와 "가변 요소"를 분리 배치하는 것만으로 구조가 정리되었습니다. 도구가 이미 제공하는 구분을 활용하지 않은 것이 문제였습니다.

요구사항 문서와 프롬프트는 상이한 산출물입니다. 방법론 문서를 직접 부착하는 것은 신속하지만, 인간이 열람할 형식과 모델이 준수할 지시는 형태가 다릅니다. 문서에서 판단 기준만 추출하고 서식과 절차도를 제거하면 절반 이하로 축소됩니다.