
프롬프트 엔지니어링: 프로덕션 AI를 위한 프롬프트 설계, 테스트 및 최적화 방법
프로덕션 프롬프트 엔지니어링의 핵심은 완벽한 워딩을 찾는 것이 아니라 모델 입력을 제어하고, 동작을 측정하며, 실패 유형에 맞는 개입 방식을 파악하는 데 있습니다. 이 가이드에서는 신뢰할 수 있는 프롬프트 시스템을 구축하는 데 필요한 기법, 트레이드오프, 운영 방식을 살펴봅니다.

프롬프트 엔지니어링의 정의
프롬프트 엔지니어링은 정의된 작업에서 재현 가능한 모델 동작을 만들어 내기 위해 추론 시점에 제공되는 지침, 예시, 제약 조건을 체계적으로 설계하는 과정입니다.
모델 업그레이드가 배포됩니다. 프롬프트 저장소에는 아무 변화가 없는데 출력이 검증에 실패하기 시작합니다. 프롬프트 엔지니어링을 단순한 문구 작성 작업으로 보면 이러한 불일치의 원인을 놓치기 쉽습니다.
프로덕션 환경에서 모델이 실제로 보는 것은 시스템 지침, 검색된 컨텍스트, 예시, 도구 정의, 스키마, 사용자 입력이 조합된 입력이며, 이 모든 요소는 특정 모델 버전에 의해 해석됩니다. 이 체인의 어느 지점에서든 변화가 생기면 동작이 달라집니다. 동작이 저하되면 팀은 요청을 재구성하고 어디에서 달라졌는지 식별할 수 있을 만큼의 관찰 가능성을 확보해야 합니다. 테스트, 버전 관리, 진단은 프로덕션 프롬프트 수명 주기의 핵심 요소입니다.
프롬프트 엔지니어링이란?
프롬프트 엔지니어링은 언어 모델에 제공되는 지침과 입력 구조를 설계, 테스트, 유지 관리하여 모델 출력이 해당 모델을 사용하는 애플리케이션의 요구 사항을 충족하도록 하는 실무입니다.
프로덕션 애플리케이션에서 모델 입력은 일반적으로 시스템 지침, 검색된 컨텍스트, 도구 정의, 예시, 출력 스키마, 사용자 요청 등 여러 구성 요소로 이루어집니다. 애플리케이션이 보통 이러한 구성 요소를 별도로 저장하더라도, 이 요소들이 모여 추론 시점에 모델에 제시되는 실질적인 프롬프트를 형성합니다.
최종 사용자 역량으로서의 프롬프팅은 범위가 다릅니다. 채팅 어시스턴트에 일회성 질문을 하는 사용자는 답변을 본 뒤 요청을 수정할 수 있습니다. 반면 변화하는 입력을 대상으로 수천 건의 모델 호출을 보내는 애플리케이션은 명확한 평가 기준과, 변경 사항이 사용자에게 영향을 미치기 전에 회귀를 식별할 방법이 필요합니다.
프롬프트 엔지니어링은 여전히 하나의 직무인가?
독립적인 직무명으로서 프롬프트 엔지니어의 위상은 초기에 비해 낮아졌지만, 프롬프트 관련 업무는 AI 엔지니어링, 데이터 엔지니어링, 애플리케이션 개발, 제품 역할 전반으로 확산되었습니다. 이러한 업무 분산은 프로덕션 AI 시스템의 아키텍처와 맞닿아 있습니다. 지침은 검색된 데이터, 도구 정의, 출력 스키마, 모델 버전, 평가 로직과 상호 작용하므로, 팀은 모델 입력의 나머지 부분을 조립하고 테스트하는 구성 요소와 함께 프롬프트를 관리하는 경우가 많습니다.
모델이 발전하면서 많은 작업에 필요한 특수한 표현도 줄어들었습니다. 기본 지침을 따르도록 성능이 낮은 모델을 유도하기 위해 고안된 기법은, 더 새로운 모델이 간단한 명세만으로도 같은 작업을 처리할 수 있을 때 그 가치가 낮아집니다.
그러나 해석 능력이 더 발전하더라도 모델이 조직의 맥락까지 추론할 수는 없습니다. 조직의 규칙, 엣지 케이스, 비즈니스 정의는 여전히 명시적인 규정과 운영 책임자가 필요합니다. Snowflake의 AI/ML 수석 제품 마케팅 매니저인 Arun Agarwal은 다음과 같이 설명합니다. “성능이 뛰어난 모델이라도 회사가 매출을 어떻게 정의하는지, 어떤 의사결정에 승인이 필요한지, 두 시스템이 서로 다른 값을 제시할 때 어떤 소스를 신뢰해야 하는지는 알지 못합니다. 도메인과 프로세스 지식을 가진 사람이 이를 명시해야 합니다. 그리고 이러한 지침이 프로덕션 동작에 영향을 미치기 시작하면 코드와 마찬가지로 담당자, 버전 기록, 테스트, 평가, 모니터링이 필요합니다.”
Capable models still don’t know your company’s definition of revenue, when a decision needs approval or which source to trust when two systems disagree — someone with the domain and process knowledge has to specify that.
Arun Agarwal
Principal Product Marketing Manager, AI/ML, Snowflake
책임 분담 방식은 시스템마다 다릅니다. 도메인 전문가는 허용 가능한 동작, 엣지 케이스, 비즈니스 기준을 정의하는 경우가 많고, 엔지니어는 배포된 아티팩트와 그 테스트를 유지 관리합니다. 팀이 어떤 구조를 선택하든 프롬프트 변경 사항을 일관되게 검토하고 평가하려면 이러한 책임에 대한 명확한 담당자가 필요합니다.
Snowflake 개발자가 Cortex AI 기능을 활용해 프롬프트를 실시간으로 구축하고 개선하는 과정을 실제 예시와 함께 확인해 보세요.

프로덕션 프롬프트의 구조
프로덕션 프롬프트는 일반적으로 변경 주기와 목적이 서로 다른 구성 요소를 조합해 만들어집니다.
- 시스템 지침은 작업, 제약 조건, 지침의 우선순위를 정의합니다.
- 퓨샷 예시는 기대되는 동작이나 출력 패턴을 보여 줍니다.
- 검색된 컨텍스트는 현재 요청에 맞춰 선택된 정보를 제공합니다.
- 도구 정의는 사용 가능한 함수와 호출 방법을 모델에 알려 줍니다.
- 출력 스키마는 다운스트림 소프트웨어가 기대하는 구조를 정의합니다.
- 사용자 입력은 요청 또는 처리 대상 데이터를 제공합니다.
이러한 구성 요소를 분리해 두면 유지 관리성과 테스트 용이성이 모두 향상됩니다. 애플리케이션이 잘못된 구조화 출력을 반환하기 시작하면, 스키마와 관련 지침이 점검해야 할 명확한 표면을 제공합니다. 도구 선택 성능이 저하되면 팀은 관련 없는 작업 지침을 동시에 다시 작성하지 않고도 도구 정의만 평가할 수 있습니다.
모델의 민감성 때문에 테스트는 필수입니다. 작업과 예시가 그대로여도 성능은 크게 달라질 수 있습니다. Yao Lu 등 연구진은 예시의 순서만 바꿔도 일부 작업의 성능이 최첨단에 가까운 수준에서 무작위 추측 수준으로 떨어질 수 있음을 확인했으며, Melanie Sclar 등의 연구팀은 의미는 유지한 채 서식만 변경해도 정확도 차이가 최대 76포인트까지 발생할 수 있음을 측정했습니다.
모델 응답이 다른 시스템으로 전달되는 경우 출력 스키마는 특히 중요합니다. 선언된 구조가 있으면 애플리케이션은 응답이 다운스트림에서 사용되기 전에 필수 필드와 데이터 유형을 검증할 수 있습니다. 반대로 자유 형식 출력은 호출마다 구조가 달라질 수 있는 텍스트를 애플리케이션이 직접 해석해야 하는 부담을 남깁니다.
구조적 분리는 보안 제어에도 도움이 됩니다. 사용자 입력, 검색된 문서, 도구 결과에는 신뢰할 수 없는 콘텐츠가 포함될 수 있으며, 시스템 지침은 이와 다른 신뢰 수준을 갖습니다. 컨텍스트 조립 과정에서 이 구분을 유지하면, 주변 애플리케이션은 프롬프트 내부의 문구에 경계를 맡기지 않고 직접 적용 가능한 경계를 확보할 수 있습니다.

Siemens Energy
Siemens Energy는 Snowflake와 Cortex AI를 활용해 종이 기반의 기술 정보를 전사 임직원이 검색하고 업무에 활용할 수 있는 데이터로 전환했습니다. Siemens Energy는 Snowflake AI 데이터 클라우드, Cortex AI, Streamlit 기반 인터페이스를 통해 80만 페이지 이상의 문서를 AI 챗봇으로 접근할 수 있게 했습니다. 이를 통해 팀은 설계 최적화, 비용 변동, 교육은 물론 영업 문서와 공장 절차 같은 향후 사용 사례에 필요한 관련 정보를 찾을 수 있으며, 데이터는 Snowflake 내부에서 안전하게 보호됩니다(2024년 11월 기준).
핵심 프롬프팅 기법과 활용 시점
프롬프팅 기법마다 토큰 사용량, 지연 시간, 유지 관리 측면의 트레이드오프가 다릅니다. 좋은 원칙은 평가 세트에서 작업을 안정적으로 수행하는 가장 단순한 프롬프트를 먼저 사용하고, 측정된 실패를 해결해야 할 때 다른 기법을 검토하는 것입니다.
| 기법 | 사용 시점 | 트레이드오프 |
|---|---|---|
| 제로샷 | 직접적인 지침만으로 대표 입력 전반에서 허용 가능한 결과가 나올 때 | 프롬프트 오버헤드가 가장 낮지만, 성능은 모델과 작업에 따라 달라짐 |
| 퓨샷 | 모델에 기대되는 서식, 분류 또는 엣지 케이스 동작을 보여 주는 예시가 필요할 때 | 추가 입력 토큰과 유지 관리가 필요한 예시 |
| 사고 연쇄 또는 명시적 추론 지침 | 중간 추론을 거칠 때 다단계 수학, 논리 또는 기호 추론의 성능이 향상될 때 | 생성 토큰과 지연 시간 증가 |
| 자기 일관성 | 여러 추론 경로를 샘플링했을 때 반복 추론을 정당화할 만큼 정확도가 향상되는 경우 | 요청당 여러 번의 모델 호출 |
| 구조화된 출력 | 다운스트림 소프트웨어가 정의된 필드, 유형 또는 기타 기계 판독 가능 구조를 기대하는 경우 | 스키마 설계 및 검증 로직 |
제로샷 프롬프팅
제로샷 프롬프팅에서는 모델이 풀이 예시 없이 작업을 전달받습니다. 명확한 명세만으로 해당 작업을 처리할 수 있는 모델이라면 일반적으로 가장 적절한 출발점입니다. 장점은 운영이 단순하다는 데 있습니다. 각 호출에 입력되는 토큰이 적고, 정책, 스키마 또는 비즈니스 정의가 바뀔 때 갱신해야 할 예시도 없습니다.
모델과 작업에 따라 성능 차이가 크므로, 제로샷은 실제 프로덕션에서 실행될 모델을 기준으로 평가해야 합니다. 예를 들어 한 모델에서 안정적으로 작동하던 분류 프롬프트도 모델 변경 후에는 예시를 추가하거나 출력 제약을 더 엄격히 해야 할 수 있습니다.
퓨샷 프롬프팅
퓨샷 프롬프팅은 모델 컨텍스트에 기대 입력과 출력의 예시를 포함합니다. 작업에 형식 규칙, 모호한 범주 또는 설명만으로 표현하기 번거로운 엣지 케이스가 포함될 때 예시가 유용합니다.
청구 오류와 청구 문의를 구분하는 지원 티켓 분류기를 생각해 보겠습니다. 정의만으로는 경계선에 있는 요청이 모호하게 남을 수 있지만, 대표 예시 몇 개는 그 차이를 직접 보여줍니다.
예시 자체도 프로덕션 아티팩트입니다. 비즈니스 규칙이 바뀌었는데 프롬프트가 이전 규칙에 기반한 예시를 계속 포함한다면, 모델은 서로 충돌하는 지시를 받게 됩니다. 따라서 테스트는 기본 지시문의 변경뿐 아니라 예시 변경까지 포괄해야 합니다.
Chain-of-thought 프롬프팅
Chain-of-thought 프롬프팅은 명시적으로 또는 예시를 통해 모델이 중간 추론 단계를 거치도록 요구합니다. Jason Wei 등의 연구에서는 다단계 추론 작업에서 큰 개선 효과가 확인되었습니다. 초등 수학 벤치마크인 GSM8K에서 추론 과정을 보여주는 풀이 예시 8개를 프롬프트에 포함하자 PaLM 540B 모델의 정확도는 17.9%에서 56.9%로 상승했습니다.
같은 연구에서는 더 단순한 작업에서 효과가 훨씬 작았고, 일부 결과는 오히려 하락했습니다. 실무적 시사점은 작업별로 판단해야 한다는 것입니다. 추론 토큰에는 측정 가능한 비용이 따르므로, 이 기법을 애플리케이션 전반에 기본 적용하기보다 해당 작업에서 테스트해야 합니다.
최신 모델도 학습 방식과 추론 동작이 서로 다릅니다. 한 모델 계열에서 관찰된 결과만으로 다른 모델의 파라미터 수 임계값이나 보편적인 프롬프팅 규칙을 정할 수는 없습니다.
자기 일관성
자기 일관성은 여러 추론 경로를 샘플링한 뒤, 일치 여부나 다른 채점 방식에 따라 답을 선택합니다. 단일 실행으로는 놓칠 수 있는 오류가 추론 경로 간 변동에서 드러날 때 유용합니다.
비용 구조는 명확합니다. 한 번이 아니라 여러 번의 추론 호출이 필요합니다. 지연 시간이나 처리량 요구 사항이 엄격한 애플리케이션에서는 측정된 정확도 향상이 그 추가 작업을 정당화할 수 있어야 합니다.
구조화된 출력
모델 응답이 사람이 아니라 소프트웨어로 전달되는 경우, 구조화된 출력은 자유 형식 텍스트보다 더 명확한 계약을 제공하는 경우가 많습니다. `account_id`, `priority`, `recommended_action` 같은 필드를 기대하는 애플리케이션은 응답을 저장하거나 다른 구성 요소로 전달하기 전에 스키마와 대조해 검증할 수 있습니다.
이렇게 하면 실패 처리를 일반적인 애플리케이션 로직으로 옮길 수 있습니다. 누락된 필드, 잘못된 유형, 스키마 위반은 다운스트림 처리가 계속되기 전에 감지할 수 있습니다.
프롬프트 엔지니어링과 컨텍스트 엔지니어링, RAG, 파인튜닝의 차이
프롬프트 재작성은 작업 명세나 입력 구조에 뿌리를 둔 실패만 해결합니다. 모델이 잘못된 정보를 가지고 있거나 필요한 정보가 없거나, 많은 예시에서 잘못된 동작을 반복한다면 대개 다른 개입이 더 적절합니다.
| 실패 증상 | 먼저 시도할 방법 |
|---|---|
| 모델에 필요한 정보는 있지만 작업, 제약 조건 또는 기대 출력을 잘못 해석하는 경우 | 프롬프트 엔지니어링 |
| 애플리케이션이 관련성이 낮거나 과도하거나 제대로 구성되지 않은 자료를 제공하는 경우 | 컨텍스트 엔지니어링 |
| 모델에 최신 정보, 독점 정보 또는 출처에 기반한 정보가 필요한 경우 | 검색 증강 생성(RAG) |
| 잘 정의된 지시와 컨텍스트가 있음에도 여러 대표 예시에서 동작이 계속 일관되지 않은 경우 | 파인튜닝 검토 |
프롬프트 엔지니어링은 모델 호출에 사용되는 지시와 입력 구조에 초점을 맞춥니다. 예를 들어 모델이 올바른 정책을 확인했지만 잘못된 출력 형식을 반환한다면, 프롬프트나 스키마를 살펴보는 것이 합리적입니다.
컨텍스트 엔지니어링은 추론 시점에 제시되는 정보의 더 넓은 조합을 다룹니다. 여기에는 지시, 검색된 자료, 대화 상태, 도구 정의, 메모리 및 기타 작업 관련 입력이 포함됩니다. LLM 애플리케이션이 복잡해지면서 이 용어는 시스템 프롬프트의 문구를 넘어서는 작업을 설명하는 데 점점 더 많이 쓰이고 있습니다.
검색 증강 생성(RAG)은 이러한 컨텍스트를 제공하는 방법 중 하나입니다. 검색 시스템은 외부 소스에서 관련 자료를 선택해 추론 전에 모델 컨텍스트에 배치합니다. 내부 정책, 최신 문서 또는 독점 데이터에 관한 질문에서는 검색 품질이 모델이 활용할 수 있는 근거에 직접적인 영향을 미칩니다. RAG는 모델 메모리에 대한 의존도를 낮추고 제공된 근거에 기반해 답변하도록 돕지만, 검색이 정확성을 보장하지는 않습니다. 검색기가 잘못된 구절을 선택하거나 관련 문서를 놓치거나 약하게 관련된 자료로 컨텍스트 창을 채우면, 모델은 답변을 위한 부실한 기반을 갖게 됩니다.
파인튜닝은 추가 학습을 통해 모델 동작을 바꿉니다. 원하는 패턴이 광범위한 입력에서 유지되어야 하는데, 잘 설계된 지시, 예시, 컨텍스트로도 충분한 일관성을 얻지 못했다면 고려할 만합니다. 팀은 불일치의 원인이 정보 부족이 아니라 동작 자체에 있다는 근거가 확보된 뒤 파인튜닝을 수행합니다.
빠른 팁
모델에 이미 올바른 정보가 있지만 작업을 잘못 해석한다면 프롬프트부터 시작합니다. 올바른 컨텍스트가 모델에 전달되지 않는다면 검색과 컨텍스트 조립 과정을 점검합니다.
체계적인 프롬프트 최적화
팀이 대표 평가 세트를 갖추면 프롬프트 개선을 더 이상 수작업 재작성에만 의존할 필요가 없습니다. 일반적인 최적화 루프는 현재 프롬프트, 테스트 사례 세트, 채점 함수라는 세 가지 입력에서 시작합니다. 시스템은 후보 프롬프트 변형을 생성하고, 각 변형을 동일한 테스트 세트에서 실행한 뒤 결과를 비교합니다. 목표 지표를 개선하는 변형은 다음 단계로 진행하고, 그렇지 않은 변형은 폐기합니다.
이 과정은 프롬프트 수정을 측정 가능한 탐색 문제로 전환합니다. 팀은 직관에 따라 문구를 바꾸고 일부 출력만 확인하는 대신, 프로덕션 테스트에 사용하는 것과 동일한 기준으로 후보 프롬프트를 평가할 수 있습니다.
DSPy와 같은 프레임워크와 MIPRO, GEPA 같은 최적화 도구는 이 워크플로우의 일부를 자동화합니다. 시스템에 따라 최적화 도구는 지시를 수정하거나, 퓨샷 예시를 선택 또는 생성하거나, 더 큰 LLM 프로그램의 구성 방식을 바꿀 수 있습니다.
전제 조건은 평가 레이어입니다. 대표 테스트 사례와 애플리케이션이 실제로 필요로 하는 동작을 반영한 점수가 없다면, 최적화 도구는 어떤 후보가 더 나은지 판단할 신뢰할 만한 신호를 얻을 수 없습니다.
연구에 따르면 자동화된 탐색은 일부 벤치마크에서 사람이 작성한 프롬프트보다 더 나은 성능을 낼 수 있습니다. 예를 들어 OPRO는 GSM8K에서 사람이 설계한 프롬프트보다 최대 8%, 선별된 Big-Bench Hard 과제에서 최대 50% 더 높은 성과를 낸 프롬프트를 생성했습니다. DSPy 연구에서도 작업별 지표에 맞춰 언어 모델 파이프라인을 자동으로 컴파일하고 최적화한 뒤 상당한 개선 효과가 보고되었습니다.
자동화된 최적화는 엔지니어링 작업의 위치를 바꿉니다. 시스템이 후보 변형을 탐색하는 동안, 팀은 여전히 테스트 세트, 채점 기준, 제약 조건, 허용 가능한 트레이드오프를 정의해야 합니다.
프롬프트 평가 방법
프롬프트 평가는 버전이 지정된 프롬프트를 대표적이고 고정된 테스트 세트와 비교하며, 정확성, 형식, 안전성, 작업별 동작에 대해 정의된 기준을 사용합니다. 팀은 모델과 프롬프트 버전을 기록하고, 실패를 검토하며, 동일한 평가 세트를 기준으로 변경 사항을 승인하고, 회귀에 대비한 롤백 경로를 유지합니다.
프로덕션 프롬프트에는 실제 실행 내용을 재구성할 수 있을 만큼 충분한 메타데이터가 있어야 합니다. 여기에는 버전 식별자, 변경 노트, 배포 단계, 소유자가 포함됩니다. 동적으로 조립되는 프롬프트의 경우, 팀이 개별 호출을 재현하고 조사할 수 있도록 트레이스에 최종 모델 입력도 캡처해야 합니다.
1. 대표 평가 세트 구축
평가 세트에는 일반 요청, 경계 사례, 실제 실패에서 가져온 예시가 포함되어야 합니다. 모든 테스트가 프롬프트가 이미 잘 처리하는 사례와 비슷하다면, 통과 점수만으로는 프로덕션 동작에 대한 근거가 거의 되지 않습니다.
고정된 세트를 유지하면 안정적인 회귀 기준선을 확보할 수 있습니다. 시간이 지나면서 새로운 실패 사례를 추가할 수 있으며, 기존 사례는 프롬프트와 모델 버전 간 비교에 계속 활용할 수 있습니다.
2. 채점 대상 정의
단일 합격/불합격 지표는 유용한 차이를 가리는 경우가 많습니다. 애플리케이션에 따라 평가 기준에는 다음 항목이 포함될 수 있습니다.
- 답변의 정확성
- 출력 스키마 준수
- 인용 또는 근거 제시 품질
- 도구 선택
- 논리적 일관성
- 정책 준수
- 완전성
사고 연쇄 실패에 관한 연구는 실패 유형을 분류하는 일이 왜 중요한지 보여줍니다. 50개의 오답을 분석한 결과, Wei 등은 46%가 누락된 단계나 계산 오류처럼 거의 맞는 추론을 포함한 반면, 54%는 더 큰 의미적 문제나 일관성 문제를 보였다는 사실을 확인했습니다. 두 실패 유형은 최종적으로는 모두 ‘오답’이라는 동일한 레이블을 받지만, 필요한 대응 방식은 서로 다릅니다.
3. 반복 가능한 채점 자동화
모호하거나 가치가 높은 사례에는 여전히 사람의 검토가 필요하지만, 수동 점검만으로는 팀이 회귀 테스트를 자주 실행하는 데 한계가 있습니다. 채점 기준이 명확하게 정의되고 보정되어 있다면, LLM-as-a-judge 평가는 확장 가능한 대안이 될 수 있습니다. 예를 들어 Snowflake의 Agent GPA judge는 TRAIL/GAIA 테스트 세트에서 사람이 주석 처리한 오류의 95%를 식별했으며, 그중 86%를 에이전트 트레이스의 특정 구간으로 위치 지정했습니다.
4. 모델 업그레이드도 프롬프트 변경처럼 테스트
프롬프트 파일 자체에는 변경 사항이 없어도, 모델 업그레이드는 실행 환경을 바꿉니다. 예를 들어 프로덕션 프롬프트가 모델에 product, region, revenue를 포함하는 오브젝트 배열을 반환하도록 요구한다고 가정해 보겠습니다. 모델 버전 A는 해당 스키마를 일관되게 반환합니다. 하지만 업그레이드 후에는 동일한 프롬프트가 JSON 오브젝트 앞에 설명 문장을 간헐적으로 추가합니다. 프롬프트 리포지토리에는 아무 변경도 없지만, 이제 다운스트림 검증은 실패합니다.
고정된 평가 세트를 후보 모델 버전에 대해 실행하면 롤아웃 전에 이러한 회귀를 드러낼 수 있습니다. 이후 팀은 문제를 조사하는 동안 프롬프트를 수정하거나, 스키마 제약을 강화하거나, 이전 모델을 유지할 수 있습니다.
자주 하는 실수
성공 사례나 예상 입력만 테스트하면 프롬프트가 프로덕션에서 어떻게 동작할지에 대한 정보는 거의 얻을 수 없습니다. 대표 요청, 경계 사례, 실제 실패를 중심으로 평가 세트를 구축하고, 프롬프트와 모델 변경 전반에서 회귀 테스트에 사용할 안정적인 세트를 유지해야 합니다.
5. 애플리케이션 릴리스와 독립적인 롤백 유지
프롬프트 변경이 애플리케이션 코드 릴리스와 함께만 배포된다면, 문제가 있는 프롬프트를 되돌릴 때도 코드 배포가 필요합니다. 프롬프트를 별도로 저장하고 버전 관리하면 팀은 더 좁고 명확한 롤백 경로를 확보할 수 있습니다.
이러한 분리는 프롬프트 반복 주기가 애플리케이션 릴리스보다 더 빠를 때 특히 유용합니다. 배포된 애플리케이션은 여전히 어떤 프롬프트 버전을 사용했는지 기록하므로, 모든 지침 변경을 새 빌드와 결합하지 않고도 추적성을 유지할 수 있습니다.
AI 에이전트 시스템 내부의 프롬프팅
AI 에이전트에서는 프롬프팅이 한 번이 아니라 반복적으로 발생합니다. 일반적인 흐름은 계획 수립, 도구 선택, 도구 결과 수신, 다음 행동 결정으로 이어지며, 각 단계에서 생긴 새로운 정보는 이후 모델 호출에 반영됩니다.
에이전트는 워크플로우가 진행됨에 따라 컨텍스트가 변화하는 일련의 모델 호출을 생성합니다. 결국 모델은 처음에는 없었던 이전 계획, 검색된 구절, 도구 결과, 중간 출력까지 보게 될 수 있습니다. 팀은 워크플로우가 계속되는 동안 무엇을 컨텍스트에 남기고, 무엇을 요약하며, 무엇을 폐기할지에 대한 정책을 마련해야 합니다.
도구 정의도 프롬프트 표면의 일부
모델은 어떤 함수를 호출할지 결정하기 위해 도구 이름, 설명, 인수 스키마, 주변 지침에 의존합니다. 두 도구의 설명이 겹치면, 모델이 작업 자체에 대해 타당하게 추론하고 있더라도 지속적으로 잘못된 도구를 선택할 수 있습니다.
함수 호출은 이러한 상호작용에 구조화된 계약을 제공합니다. 모델은 함수 이름과 인수를 반환하고, 애플리케이션은 호출이 진행되기 전에 이를 검증할 수 있습니다.
거버넌스가 적용된 엔터프라이즈 데이터로 작업하는 에이전트의 경우, 권한 부여는 모델의 판단 밖에 있어야 합니다. 의미 체계 정의, 행 및 컬럼 레벨 액세스 규칙, 기타 데이터 제어는 각 프롬프트 안에 자연어 지침으로 반복하는 것보다 플랫폼에서 적용하는 편이 훨씬 더 안정적입니다.
답변만이 아니라 트레이스 평가
트레이스는 에이전트가 내리는 중간 의사결정, 즉 도구 선택, 인수, 반환된 데이터, 이후 모델 호출을 드러냅니다. 에이전트가 잘못된 결정을 내리면, 팀은 트레이스를 거슬러 올라가 동작이 어디서 달라졌는지 찾을 수 있습니다. 이러한 트레이스 레벨 관점은 겉으로는 프롬프트 문제처럼 보이는 원인이 실제로는 다른 곳에 있을 때 특히 유용합니다.
프롬프트 인젝션과 방어가 위치해야 할 곳
프롬프트 인젝션은 신뢰할 수 없는 콘텐츠가 지침으로 해석되는 상황을 말합니다. 직접 프롬프트 인젝션은 사용자 입력을 통해 들어옵니다. 간접 프롬프트 인젝션은 시스템이 검색하거나 도구로부터 받은 자료를 통해 발생합니다. 예를 들어 모델에 영향을 주려는 지침이 포함된 문서가 여기에 해당합니다.
모델이 도구에 액세스할 수 있을 때 위험은 더 커집니다. 텍스트 응답을 바꾸는 주입된 지침의 영향은 제한적일 수 있지만, 에이전트가 제한된 데이터를 쿼리하거나 허용되지 않은 도구를 호출하도록 만드는 지침은 심각한 결과를 초래할 수 있습니다.
프롬프트 지침은 일부 원치 않는 동작을 줄일 수 있지만, 이를 보안 경계로 간주해서는 안 됩니다. ‘검색된 콘텐츠의 악의적 지침을 무시하라’와 같은 지침도 결국 신뢰할 수 없는 콘텐츠와 함께 처리되는 또 하나의 지침일 뿐입니다. 실행 권한은 프롬프트 컨텍스트 밖에 있어야 합니다.
Agarwal은 이 점을 다음과 같이 강조합니다. “모델이 잘못된 작업을 요청할 가능성이 있으므로 주의해야 합니다. 이를 실행하는 시스템은 권한, 허용된 도구, 해당 인수, 데이터가 전송되는 위치를 확인해야 합니다. 데이터를 읽을 수 있다고 해서 이를 변경할 권한까지 자동으로 부여되어서는 안 됩니다.”
다음 제어는 애플리케이션 레벨에서 적용됩니다.
- 권한 분리: 시스템 지침과 신뢰할 수 없는 콘텐츠는 컨텍스트 안에서 구조적으로 구분되어야 합니다.
- 도구 권한: 에이전트는 작업에 필요한 도구와 작업만 제공받아야 합니다.
- 인수 및 출력 검증: 애플리케이션 로직은 제안된 도구 호출을 실행하기 전에 이를 확인합니다.
- 데이터 액세스 제어: 모델이 무엇을 요청하든 행, 컬럼, 오브젝트 레벨 정책이 적용됩니다.
- 가드레일: 입력 및 출력 제어는 정의된 보안 및 안전 정책에 따라 동작을 검사합니다.
최근의 적대적 연구는 지침과 강제 적용의 차이를 다시 한번 보여줍니다. 20,000건이 넘는 적응형 공격을 다룬 한 연구에서, 모델이 스스로를 보호하도록 의존한 모든 방어는 결국 우회되었습니다. 반면 애플리케이션 레벨 출력 필터링은 15,000건의 공격에서 누출 0건을 유지했습니다.
프로덕션 환경의 목표는 탐지만이 아니라 억제까지 포함합니다. 인젝션 시도가 모델 동작에 영향을 미치더라도, 주변 시스템은 그 동작에 허용된 권한 범위를 제한해야 합니다.
Snowflake에서의 프롬프트 엔지니어링
프로덕션 프롬프트 수명 주기는 모델 호출을 둘러싼 데이터와 제어에 크게 좌우됩니다. 프롬프트가 Snowflake의 거버넌스 적용 데이터에 대해 작동할 때, 의미 체계 컨텍스트, 액세스 정책, 평가는 각 AI 워크플로우마다 별도로 재구현되는 대신 애플리케이션이 사용하는 데이터 가까이에 유지됩니다.
Cortex AI Functions*를 사용하면 모델 호출을 SQL에서 직접 실행할 수 있습니다. 따라서 텍스트를 분류, 추출, 생성하는 데 사용되는 프롬프트를 테이블의 데이터에 대해 평가하고, 반복 가능한 변환에 통합하며, 입력을 제공하는 로직과 함께 추적할 수 있습니다. 구조화된 출력은 다운스트림 SQL 또는 애플리케이션 로직이 검증할 수 있는 명시적 계약을 제공합니다.
대화형 및 다단계 애플리케이션의 경우 Cortex Agents가 구조화 데이터와 비정형 데이터, 사용 가능한 도구 간의 상호작용을 오케스트레이션합니다. 의미 체계 컨텍스트는 구조화 데이터를 해석하는 데 필요한 비즈니스 정의를 제공하고, 거버넌스가 적용된 액세스는 모델이 준수해야 할 지침으로 인코딩되는 대신 Snowflake에서 계속 적용됩니다.
Cortex Agent Evaluations는 정답 기준 및 참조 없는 메트릭을 기준으로 에이전트 동작을 테스트하도록 지원하며, 여기에는 답변 품질과 도구 선택 동작이 포함됩니다. 트레이스는 답변을 생성한 중간 단계를 보여주므로, 문제가 프롬프트에 있는지 아니면 검색, 도구, 오케스트레이션에 있는지 구분하는 데 도움이 됩니다.
보안 제어 역시 시스템의 서로 다른 지점에서 작동합니다. Cortex Guard는 유해한 콘텐츠가 포함된 모델 응답을 필터링하고, Cortex AI Guardrails는 애플리케이션 레벨에서 프롬프트 인젝션과 탈옥 위험을 다룹니다. 이 기능들을 구분해 두는 것이 중요합니다. 출력 안전성과 지침 무결성은 별개의 제어 표면입니다.
이러한 기능을 종합하면 이 글 전반에서 설명한 더 넓은 운영 모델을 뒷받침합니다. 프롬프트는 버전 관리되고 평가되며, 컨텍스트는 거버넌스가 적용된 소스에서 제공됩니다. 에이전트는 진단을 위한 트레이스를 노출하고, 액세스 제어는 자연어 지침 밖에서도 계속 강제 적용됩니다.
모델이 발전함에 따라 많은 작업에 필요한 특수한 표현의 양은 계속 달라질 것입니다. 그러나 이러한 지침을 둘러싼 프로덕션 책임은 특정 모델 세대 하나에 크게 좌우되지 않습니다. 팀은 여전히 어떤 컨텍스트가 모델에 입력되었는지, 어떤 프롬프트 버전이 실행되었는지, 출력이 어떻게 채점되었는지, 회귀가 어디에서 시작되었는지 알아야 합니다. 일부 실패의 원인은 지침으로 거슬러 올라갑니다. 다른 실패는 검색, 의미 체계 컨텍스트, 도구 정의, 모델 동작 또는 에이전트를 둘러싼 제어를 가리킬 수 있습니다.
핵심 요약
신뢰할 수 있는 프롬프트 엔지니어링은 진단에서 시작됩니다. 모델 입력을 재구성하고, 동작이 어디에서 달라졌는지 파악하며, 실패 원인이 프롬프트에 있을 때만 프롬프트를 변경해야 합니다. 그런 다음 버전 관리와 평가를 통해 수정이 회귀를 유발하지 않고 동작을 개선했는지 확인합니다.
* 일부 Cortex AI Functions 개별 기능은 퍼블릭 및 프라이빗 프리뷰로 제공됩니다.
자주 묻는 질문
프롬프트 엔지니어링에 대해 자주 묻는 질문에 Snowflake 전문가가 답합니다.
프롬프트 엔지니어링은 배우기 어려운가요?
기본 기법은 비교적 쉽게 익힐 수 있습니다. 프로덕션 업무의 범위는 훨씬 넓습니다. 대표 평가 데이터, 버전 관리, 모델 회귀, 구조화된 출력, 컨텍스트 조합, 소유권 모두가 동일한 프롬프트가 실제 입력 전반에서 일관되게 동작하는지에 영향을 미칩니다.
한때 잘 작동하던 프롬프트가 모델 업그레이드 후 작동하지 않을 수 있는 이유는 무엇인가요?
새로운 모델 버전은 지침, 예시, 형식을 이전 버전과 다르게 해석할 수 있습니다. 프롬프트 텍스트는 그대로여도 내부의 지침 준수 동작은 달라질 수 있습니다. 따라서 모델 업그레이드도 프롬프트 수정과 동일한 회귀 스위트를 실행해야 합니다.
동일한 프롬프트가 매번 다른 답변을 반환하는 이유는 무엇인가요?
LLM 추론은 일반적으로 확률적 샘플링을 사용하므로 동일한 입력도 호출마다 서로 다른 출력을 생성할 수 있습니다. 온도와 기타 디코딩 설정은 이러한 변동에 영향을 줍니다. 온도를 낮추면 무작위성이 줄어듭니다. 다만 온도가 0이어도 모든 모델과 서빙 환경에서 바이트 단위로 완전히 동일한 출력이 보장되지는 않습니다.
프롬프트의 소유권은 엔지니어, 데이터 과학자, 도메인 전문가 중 누구에게 있어야 할까요?
소유권은 보통 하나의 역할에 머물지 않습니다. 도메인 전문가는 비즈니스 기준, 허용 가능한 답변, 엣지 케이스를 정의하고, 엔지니어는 일반적으로 배포된 프롬프트 아티팩트와 평가 스위트, 릴리스 프로세스를 유지 관리합니다. 중요한 것은 변경과 회귀에 대해 명확한 담당자를 지정하는 것입니다.
더 길고 자세한 프롬프트가 더 나은 결과를 만들까요?
길이만으로는 안정성이 향상되지 않습니다. 지침을 추가하면 토큰을 더 소비하고, 서로 일관성을 유지해야 하는 규칙도 늘어납니다. 측정된 모호성이나 실패를 해결할 때만 세부 정보를 추가하고, 그 변경이 평가 세트 기준으로 결과를 개선했는지 테스트합니다.
AI 리소스 살펴보기
AI 주제 탐색
인공지능의 모든 측면에 대한 심층 분석
AI 엔지니어링
AI 시스템을 설계, 구축, 배포, 운영하는 소프트웨어 엔지니어링 분야입니다.

