[가이드] 프로덕션 AI 에이전트를 위한 8가지 프롬프트 패턴 (2025년 22개 이상 프로젝트 경험)
[Guide] 8 prompt patterns we use in production AI agents (lessons from shipping 22+ projects in 2025)
핵심 요약
실전에서 검증된 AI 에이전트 구축을 위한 8가지 프롬프트 엔지니어링 실무 패턴.
- 역할과 제약 분리 — 역할과 제약 사항을 명확히 분리하여 모델의 환각 현상을 60%가량 감소시킴.
- 명시적 실패 분기 — 모델이 확신이 없을 때 'NEEDS_REVIEW'를 반환하도록 하여 엉뚱한 답변을 방지함.
- 출력 스키마 선언 — JSON 스키마를 먼저 정의하고 파싱 단계를 거쳐 데이터 오류율을 1% 미만으로 낮춤.
- 엣지 케이스 학습 — 일반적인 상황보다 모델이 처리하기 어려운 예외 상황을 예시로 제공하여 성능을 개선함.
TL;DR: 요약하자면, 지난 18개월 동안 22개 이상의 AI 에이전트를 프로덕션에 배포하면서(왓츠앱 에이전트, 팟캐스트-소셜 에이전트, 송장 자동화, 트레이딩 에이전트, ERP 워크플로우 등), 실제 사용자들과 부딪히며 살아남은 프롬프트들은 트위터에서나 통하는 프롬프트들과는 완전히 달랐습니다. 여기 꾸준히 효과를 본 8가지 패턴을 소개합니다.
대부분 지루한 내용들입니다. 그게 핵심입니다.
- 역할과 제약을 항상 따로 분리하세요.
나쁜 예: 당신은 유용한 송장 추출 보조원입니다. 좋은 예: 역할: 송장 텍스트에서 구조화된 데이터를 추출하세요. 제약: 소스에 없는 필드를 절대 지어내지 마세요. 필드가 없으면 추측하지 말고 null을 반환하세요.
역할(당신이 누구인지)과 제약(하지 말아야 할 것)을 분리하니 송장 에이전트에서 환각 필드가 약 60% 줄었습니다.
- 명시적인 '모르겠다' 분기를 사용하세요.
모든 프로덕션 프롬프트에는 모델이 포기할 수 있는 작성된 분기가 있습니다. 높은 확신을 가지고 답할 수 없다면, NEEDS_REVIEW: <이유>로 응답하세요. 이 분기가 없으면 모델은 그 빈 공간을 자신감 있는 쓰레기로 채워버립니다.
- 콘텐츠보다 출력 스키마를 먼저 제시하세요.
프롬프트에서 출력을 요청하기 전에 JSON 스키마를 선언합니다. 그런 다음 모델에게 해당 스키마에 맞는 JSON을 출력하라고 요청합니다. 마지막으로 파서로 검증합니다. 3단계 확인 과정입니다. 파싱 실패율이 약 8%에서 1% 미만으로 떨어졌습니다.
- 성공 사례가 아닌 엣지 케이스로 퓨샷(Few-shot)을 구성하세요.
대부분의 퓨샷 예시는 모델에게 쉬운 경우를 가르칩니다. 모델은 이미 쉬운 경우는 알고 있습니다. 토큰 낭비입니다. 2~3개의 이상한 입력과 그에 대한 올바른 처리 방식을 보여주세요. 우리 왓츠앱 에이전트의 의도 분류기는 "오후 5시에 알려줘" 같은 예시를 "ㅋㅋ 나중에 그거 좀 알려줘"나 "야 게임 시작하면 핑 좀 찍어줄래" 같은 예시로 바꿨을 때 14% 더 정확해졌습니다.
- 추론과 출력을 분리하세요.
우리는 두 블록 패턴을 사용합니다. 첫 번째 블록: 모델이 자유롭게 생각하는 <reasoning> 블록. 두 번째 블록: 엄격하게 형식이 지정된 <output> 블록. 첫 번째 블록은 모델을 위한 것입니다. 두 번째 블록은 우리가 파싱할 내용입니다. 실수로 추론 블록을 파싱하면, 다운스트림 시스템이 모험을 떠나게 될 것입니다.
- 실패 모드를 소리 내어 말하세요.
흔한 실수: 이메일에 고객 이름과 영업사원 이름이 둘 다 나올 때 혼동하는 것. 고객은 항상 From: 필드에 있습니다.
프롬프트에 실패 모드를 명시하면 그 실패 모드를 약 70% 확률로 방지할 수 있습니다. 모델은 '흔한 실수: X'를 강력한 신호로 인식할 만큼 인터넷을 충분히 읽었습니다.
- 토큰을 완만하게가 아니라 절벽처럼 제한하세요.
"간결하게 말해"라고 하지 마세요. "최대 3문장으로 응답해. 할 수 없으면 TOO_LONG이라고 응답하고 멈춰"라고 하세요. 부드러운 지시는 부드러운 준수만 낳습니다. 명시적인 실패 토큰이 있는 하드 클리프(절벽)는 확실한 준수를 낳습니다.
- 항상 '당신은 사용자를 위해 X를 관찰하고 있다'는 프레임을 유지하세요.
사용자를 대신해 행동하는 에이전트는 다음과 같은 명시적 프레임의 이점을 얻습니다: "당신은 사용자가 [목표]를 달성하도록 돕기 위해 [데이터]를 읽고 있습니다. 당신은 사용자가 아닙니다. 그들처럼 말할 수 없습니다. 당신은 요약하고 제안하며, 사용자가 결정합니다." 이 한 줄이 우리 콘텐츠 자동화 작업에서 '에이전트가 사용자가 원하지 않는 일을 해버리는' 문제 유형을 제거했습니다.


