프롬프트 엔지니어링은 FM과 대화하는 방법을 설계하는 기술입니다. 모델 가중치는 변경하지 않으면서 입력을 정교하게 설계함으로써 출력 품질을 극적으로 향상시킬 수 있습니다. AIP-C01에서는 프롬프트 기법 자체뿐 아니라 Bedrock가 제공하는 프롬프트 관리 인프라까지 출제 범위에 포함됩니다.
프롬프트 설계 기본 원칙
좋은 프롬프트는 다음 다섯 가지 요소를 갖습니다.
명확성(Clarity)
모호한 지시는 모호한 출력을 낳습니다. "좋은 글을 써줘"보다 "고객 지원팀이 사용할 2-3문장 짜리 사과 이메일을 작성해줘. 배송 지연에 대한 사과이며, 공손하고 간결한 톤으로"가 훨씬 명확합니다.
구체성(Specificity)
출력 형식, 길이, 톤, 포함/제외 항목을 명시합니다. "JSON 형식으로 출력하고, , , 키만 포함해"처럼 구체적으로 지정하면 파싱 실패율이 크게 줄어듭니다.
컨텍스트(Context)
FM은 프롬프트 외부 정보를 알 수 없습니다. 필요한 배경 정보를 프롬프트에 명시적으로 포함해야 합니다.
역할 부여(Role Prompting)
시스템 프롬프트에서 역할을 정의하면 출력의 관점과 톤이 달라집니다.
단계적 사고 유도(Step-by-step)
복잡한 문제는 단계별로 생각하도록 유도합니다.
핵심 프롬프트 기법
Zero-shot Prompting
예시 없이 직접 지시만으로 작업을 수행합니다.
FM이 이미 대량의 데이터로 학습됐기 때문에 간단한 분류, 번역, 요약 같은 작업은 zero-shot으로도 좋은 결과를 냅니다.
Few-shot Prompting
몇 가지 예시(1~5개)를 제공해 FM이 패턴을 학습하도록 합니다.
Few-shot은 특히 일관된 출력 형식이 필요하거나, 도메인 특화 패턴을 적용해야 할 때 효과적입니다. 예시 품질이 매우 중요합니다 — 나쁜 예시는 오히려 성능을 떨어뜨립니다.
Chain-of-Thought(CoT) Prompting
"단계적으로 생각해줘"라는 지시를 추가하면 FM이 중간 추론 단계를 명시적으로 출력합니다. 수학 문제, 논리 추론, 복잡한 분석 작업에서 정확도가 크게 향상됩니다.
FM 응답:
CoT 없이 직접 답을 물으면 단순한 산술도 틀리는 경우가 있지만, CoT를 적용하면 정확도가 크게 올라갑니다.
Zero-shot CoT는 "Let's think step by step" 또는 "단계적으로 생각해"를 추가하는 것만으로 CoT 효과를 얻습니다.
Negative Prompting
무엇을 하지 말아야 하는지 명시합니다.
이는 Amazon Bedrock Guardrails와 함께 쓸 때 특히 강력합니다. Guardrails는 시스템 레벨에서 특정 주제나 PII를 필터링하고, negative prompt는 모델 동작 수준에서 제약을 걸어 이중 방어를 구성합니다.
시스템 프롬프트와 역할 부여
시스템 프롬프트(system prompt)는 사용자 메시지와 별도로 모델의 전반적인 행동을 정의합니다. Amazon Bedrock의 Converse API는 필드를 지원합니다.
좋은 시스템 프롬프트의 구성 요소:
역할 부여 없이 "고객 지원 답변을 써줘"라고 하면 FM은 일반적인 어시스턴트 톤으로 응답합니다. 명확한 역할과 제약을 시스템 프롬프트에 정의하면 브랜드 톤과 정책 일관성을 유지할 수 있습니다.
프롬프트 템플릿과 변수 관리
실제 애플리케이션에서 프롬프트는 정적인 텍스트가 아닙니다. 사용자 입력이나 동적 데이터를 삽입하는 변수(variable slot)를 포함하는 템플릿으로 관리합니다.
변수 관리 시 주의할 점: 프롬프트 인젝션 공격 방어: 사용자 입력을 그대로 템플릿에 삽입하면 악의적인 사용자가 시스템 프롬프트를 무력화할 수 있습니다. 이스케이핑: 사용자 입력의 중괄호(, )가 템플릿 변수로 해석되지 않도록 처리합니다.
Bedrock Prompt Caching
Prompt Caching은 자주 반복되는 긴 프롬프트(시스템 프롬프트, 대용량 컨텍스트, RAG 문서)를 캐싱해 토큰 처리 비용과 지연을 줄이는 기능입니다.
동작 원리
캐시 포인트(cache point)를 프롬프트 내에 표시하면, 해당 지점까지의 KV(Key-Value) 캐시를 저장합니다. 이후 동일한 프롬프트 접두사를 가진 요청이 들어오면 캐시에서 불러와 재처리 없이 재사용합니다.
캐시 히트 시: 비용: 캐시 히트 입력 토큰은 일반 입력 토큰 대비 약 90% 할인 지연: 수백 밀리초의 첫 번째 토큰 지연(TTFT) 단축
적합한 use case: 수천 토큰의 시스템 프롬프트를 매 대화마다 재처리하는 챗봇 대용량 문서(법률 계약서, 기술 매뉴얼)를 컨텍스트로 반복 활용 동일한 few-shot 예시를 포함한 반복 요청
캐시 유효 기간은 5분(기본)~1시간이며, 캐시가 만료되면 자동으로 재처리합니다.
Amazon Bedrock Prompt Management
Prompt Management는 프롬프트를 코드가 아닌 Bedrock 서비스에서 관리하는 버전 관리 시스템입니다.
주요 기능: 버전 관리: 프롬프트 수정 시 새 버전 생성 (롤백 가능) 변수 정의: 템플릿 변수를 메타데이터로 문서화 A/B 테스트 기반: 두 버전의 프롬프트를 비교 평가 ARN 기반 참조: 코드에서 프롬프트 ARN을 참조하면 배포 없이 프롬프트 업데이트 가능
실무적 이점: 데이터 사이언티스트나 프로덕트 매니저가 직접 프롬프트를 수정하고 버전을 관리할 수 있습니다. 개발자 배포 없이 프롬프트 업데이트가 가능하므로 배포 사이클이 빨라집니다.
Prompt Flows로 워크플로 설계
Amazon Bedrock Prompt Flows는 여러 프롬프트, 지식 베이스, Lambda 함수, 에이전트를 시각적 플로우로 연결해 복잡한 GenAI 워크플로를 코드 없이 구성하는 서비스입니다.
노드 타입: / : 플로우 진입·종료 지점 노드: 단일 프롬프트 실행 노드: Bedrock Knowledge Bases 검색 노드: 커스텀 코드 실행 (외부 API 호출, 데이터 변환) 노드: 조건 분기 (if/else) 노드: 배열 항목 반복 처리
예시 플로우: 고객 문의 → 의도 분류(프롬프트) → [분기] 기술 문의면 KB 검색, 일반 문의면 직접 응답 → 응답 생성
!Bedrock Prompt Flows 분기 예시
출력 파싱
구조화된 출력이 필요하면 FM이 JSON, XML, 마크다운 테이블 형식으로 출력하도록 프롬프트로 지시합니다.