프롬프트 엔지니어링이란 무엇인가요?
프롬프트 엔지니어링은 생성형 인공 지능(생성형 AI) 솔루션을 안내하여 원하는 결과를 생성하는 프로세스입니다. 생성형 AI는 인간을 모방하려고 시도하지만 고품질의 관련성 높은 결과물을 생성하려면 자세한 지침이 필요합니다. 프롬프트 엔지니어링에서는 AI가 사용자와 더 의미 있게 상호 작용하도록 안내하는 가장 적절한 형식, 구문, 단어 및 기호를 선택합니다. 프롬프트 엔지니어는 창의력을 발휘하고 시행착오를 거쳐 입력 텍스트 모음을 생성하므로 애플리케이션의 생성형 AI가 예상대로 작동합니다.
프롬프트란 무엇인가요?
프롬프트는 특정 작업을 수행하도록 생성형 AI에 요청하는 자연어 텍스트입니다. 생성형 AI는 스토리, 대화, 동영상, 이미지, 음악과 같은 새로운 콘텐츠를 만들어내는 인공 지능 솔루션으로, 방대한 양의 데이터로 사전 훈련된 심층 신경망을 사용하는 규모가 아주 큰 기계 학습(ML) 모델을 기반으로 합니다.
대규모 언어 모델(LLM)은 매우 유연하며 다양한 작업을 수행할 수 있습니다. 예를 들어 문서를 요약하고, 문장을 완성하고, 질문에 답하고, 언어를 번역할 수 있습니다. 특정 사용자 입력의 경우 모델은 과거 훈련을 바탕으로 판단한 최상의 결과를 예측하는 방식으로 작동합니다.
하지만 매우 개방적이기 때문에 사용자는 수많은 입력 데이터 조합을 통해 생성형 AI 솔루션과 상호 작용할 수 있습니다. AI 언어 모델은 매우 강력하며, 콘텐츠 제작을 시작하는 데 비용이 많이 소요되지 않습니다. 단어 하나만 제공해도 시스템에서 상세한 응답을 생성할 수 있습니다.
그렇긴 하지만, 모든 유형의 입력이 유용한 출력을 생성하는 것은 아닙니다. 생성형 AI 시스템이 정확하고 연관성 있는 응답을 생성하기 위해서는 컨텍스트와 세부 정보가 필요합니다. 프롬프트를 체계적으로 설계하면 보다 의미 있고 유용한 결과물을 얻을 수 있습니다. 프롬프트 엔지니어링에서는 AI 시스템에서 원하는 결과를 얻을 때까지 프롬프트를 지속적으로 조정합니다.
프롬프트 엔지니어링이 중요한 이유는 무엇인가요?
생성형 AI가 등장한 이후 프롬프트 엔지니어링 작업이 크게 증가했습니다. 프롬프트 엔지니어는 최종 사용자와 대규모 언어 모델 간의 격차를 해소합니다. 이들은 사용자가 언어 모델에서 최상의 결과를 얻기 위해 맞춤화하고 완성할 수 있는 스크립트와 템플릿을 식별합니다. 이 엔지니어들은 다양한 유형의 입력을 실험하여 애플리케이션 개발자가 다양한 시나리오에서 재사용할 수 있는 프롬프트 라이브러리를 구축합니다.
프롬프트 엔지니어링은 AI 애플리케이션의 효율성과 효과를 높입니다. 애플리케이션 개발자는 일반적으로 개방형 사용자 입력을 AI 모델로 전달하기 전에 프롬프트 내에 캡슐화합니다.
AI 챗봇을 예로 들어 보겠습니다. 사용자가 ‘셔츠 구입처’와 같은 불완전한 문제 설명을 입력할 수 있습니다. 내부적으로 애플리케이션 코드는 다음과 같은 엔지니어링 프롬프트를 사용합니다. ‘당신은 의류 회사의 영업 사원입니다. 미국 앨라배마에 거주하는 한 사용자가 셔츠 구입처를 묻습니다. 현재 셔츠 재고가 있는 가장 가까운 매장 세 곳으로 응답하세요.’ 그러면 챗봇은 더 연관성이 높고 정확한 정보를 생성합니다.
다음으로, 프롬프트 엔지니어링의 몇 가지 이점에 대해 살펴보겠습니다.
개발자의 제어 능력 강화
프롬프트 엔지니어링을 통해 개발자는 사용자와 AI의 상호 작용을 보다 효과적으로 제어할 수 있습니다. 효과적인 프롬프트는 대규모 언어 모델에 의도를 제시하고 컨텍스트를 설정합니다. 이를 통해 AI는 출력을 세분화하고 필요한 형식으로 간결하게 표시할 수 있습니다.
또한 사용자가 AI를 오용하거나, AI가 알지 못하거나 정확하게 처리할 수 없는 것을 요청하지 않게 합니다. 예를 들어 사용자가 비즈니스 AI 애플리케이션에서 부적절한 콘텐츠를 생성하지 못하도록 제한할 수 있습니다.
개선된 사용자 경험
사용자는 시행착오를 피하면서도 AI 도구로부터 일관되고 정확하며 적절한 응답을 얻을 수 있습니다. 프롬프트 엔지니어링을 통해 사용자는 첫 번째 프롬프트에서 연관성 높은 결과를 쉽게 얻을 수 있습니다. 이는 인간의 편견으로 인해 대규모 언어 모델의 훈련 데이터에 존재할 수 있는 편견을 완화하는 데 도움이 됩니다.
또한 사용자-AI 상호 작용을 개선하여 AI가 최소한의 입력으로도 사용자의 의도를 이해하도록 합니다. 예를 들어 법률 문서와 뉴스 기사를 요약해 달라는 요청의 경우 스타일과 어조에 따라 결과가 조정됩니다. 두 사용자가 똑같이 애플리케이션에 ‘이 문서를 요약해 주세요’라고 요청해도 결과가 조정되는 것입니다.
유연성 향상
추상화 수준이 높을수록 AI 모델이 개선되고, 조직이 보다 유연한 도구를 대규모로 만들 수 있습니다. 프롬프트 엔지니어는 논리적 연결과 광범위한 패턴을 강조하는 도메인 중립적 지침을 포함하는 프롬프트를 만들 수 있습니다. 조직은 기업 전반에서 프롬프트를 간단하게 재사용하여 AI 투자를 확대할 수 있습니다.
예를 들어 프롬프트 엔지니어는 프로세스 최적화를 위한 기회를 찾기 위해 상황별 데이터 대신, 광범위한 신호를 사용하여 비효율성을 찾도록 AI 모델을 훈련하는 다양한 프롬프트를 만들 수 있습니다. 그런 다음 이 프롬프트를 다양한 프로세스와 사업부에 사용할 수 있습니다.
프롬프트 엔지니어링 사용 사례에는 어떤 것이 있나요?
정교한 AI 시스템에서는 프롬프트 엔지니어링 기법을 사용하여 학습 언어 모델을 통한 사용자 경험을 개선합니다. 다음은 몇 가지 예입니다.
주제별 전문 지식
프롬프트 엔지니어링은 AI가 주제별 전문 지식으로 답해야 하는 애플리케이션에서 중요한 역할을 합니다. 현장 경험이 풍부한 프롬프트 엔지니어는 AI가 올바른 출처를 참조하고 질문에 따라 적절하게 답변을 구성하도록 유도할 수 있습니다.
예를 들어 의료 분야에서 의사는 프롬프트 엔지니어링 언어 모델을 사용하여 복잡한 사례에 대한 감별 진단을 생성할 수 있습니다. 의료 전문가는 증상과 환자 세부 정보만 입력하면 됩니다. 그러면 애플리케이션이 엔지니어링된 프롬프트를 사용하여 AI가 먼저 입력된 증상과 관련된 가능한 질병을 나열하도록 유도합니다. 그런 다음 추가 환자 정보를 기반으로 목록 범위를 좁힙니다.
비판적 사고
비판적 사고 애플리케이션에는 복잡한 문제를 해결하기 위한 언어 모델이 필요합니다. 이를 위해 모델은 정보를 다각적으로 분석하고 신뢰도를 평가하며 합리적인 결정을 내립니다. 프롬프트 엔지니어링은 모델의 데이터 분석 기능을 개선합니다.
예를 들어 의사 결정 시나리오에서 가능한 모든 옵션을 나열하고, 각 옵션을 평가하고, 최상의 솔루션을 추천하도록 모델에 지시할 수 있습니다.
창의성
창의성에는 새로운 아이디어, 개념 또는 솔루션을 생성하는 것이 포함됩니다. 다양한 시나리오에서 모델의 창의적 능력을 높이는 데 프롬프트 엔지니어링을 활용할 수 있습니다.
예를 들어 시나리오를 작성할 때 작가는 프롬프트 엔지니어링 모델을 사용하여 스토리에 대한 아이디어를 생성할 수 있습니다. 작가는 모델에 가능한 등장 인물, 배경 및 줄거리를 나열하도록 지시한 다음 이러한 요소를 사용하여 스토리를 전개할 수 있습니다. 또는 그래픽 디자이너가 특정 감정을 불러일으키는 색상 팔레트 목록을 생성하도록 모델에 지시한 다음, 해당 팔레트를 사용하여 디자인을 만들 수도 있습니다.
프롬프트 엔지니어링 기법이란 무엇인가요?
프롬프트 엔지니어링은 역동적이고 진화하는 분야입니다. 프롬프트를 미세 조정하고 생성형 AI 도구에서 원하는 응답을 얻으려면 언어 기술과 창의적인 표현이 모두 필요합니다.
다음은 엔지니어들이 AI 모델의 자연어 처리(NLP) 작업을 개선하기 위해 사용하는 기법의 몇 가지 예입니다.
사고의 사슬 프롬프트
사고의 사슬 프롬프트는 복잡한 질문을 사고 훈련 과정을 모방한 일련의 더 작고 논리적인 부분으로 나누는 기법입니다. 이렇게 하면 모델이 질문에 바로 답하는 것이 아니라, 일련의 중간 단계를 거치면서 문제를 해결하는 데 도움이 됩니다. 이는 추론 능력을 높입니다.
복잡한 작업에 대해 몇 가지 사고의 사슬 롤아웃을 수행하고 가장 많이 도달하는 결론을 선택할 수 있습니다. 롤아웃이 상당한 수준으로 부합하지 않는 경우, 전문가에 자문을 구해 사고의 사슬을 바로잡을 수 있습니다.
예를 들어 질문이 ‘프랑스의 수도는 어디인가요?’라는 질문에 대해 모델은 '파리', '프랑스의 수도는 파리', '파리는 프랑스의 수도'와 같은 답변으로 이어지는 몇 가지 롤아웃을 수행할 수 있습니다. 모든 롤아웃이 동일한 결론으로 이어지므로 ‘Paris’가 최종 답변으로 선택됩니다.
사고의 나무 프롬프트
사고의 나무 기법은 사고의 사슬 프롬프트를 일반화한 것입니다. 모델에 가능한 다음 단계를 하나 이상 생성하라고 지시합니다. 그런 다음 트리 검색 방법을 사용하여 가능한 각각의 다음 단계에서 모델을 실행합니다.
예를 들어 ‘기후 변화의 영향은 무엇인가요?’라는 질문에 대해 모델은 먼저 ‘환경 영향 목록 작성’ 및 ‘사회적 영향 목록 작성’과 같은 가능한 다음 단계를 생성할 수 있습니다. 그런 다음 후속 단계에서 이들 각각에 대해 자세히 설명합니다.
산파술 프롬프트
산파술 프롬프트는 사고의 나무 프롬프트와 비슷합니다. 모델에 설명을 제시하면서 질문에 답하라고 지시합니다. 그런 다음 모델에 설명의 일부를 설명하라고 지시합니다. 일관되지 않은 설명 트리는 잘라내거나 버립니다. 이를 통해 복잡한 상식적 추론의 성능이 개선됩니다.
예를 들어 ‘하늘은 왜 파란색인가요?’라는 질문에 대해 모델은 먼저 ‘청색광의 짧은 파장이 지구 대기의 가스와 입자에 의해 사방으로 산란되기 때문에 사람의 눈에는 하늘이 파랗게 보입니다’라고 답할 수 있습니다. 그런 다음 청색광이 다른 색보다 더 많이 산란되는 이유와 지구 대기의 구성 등으로 이 설명의 일부를 확장할 수 있습니다.
복잡성 기반 프롬프트
이 프롬프트 엔지니어링 기법에는 몇 개의 사고의 사슬 롤아웃이 포함됩니다. 가장 긴 사고의 사슬이 있는 롤아웃을 선택한 다음 가장 많이 도달하는 결론을 선택합니다.
예를 들어 질문이 복잡한 수학 문제인 경우 모델은 여러 단계의 계산을 포함하는 여러 롤아웃을 수행할 수 있습니다. 이 예에서는 가장 긴 사고의 사슬을 가진 롤아웃을 고려합니다. 즉, 가장 많은 계산 단계를 거치는 롤아웃을 고려하는 것입니다. 다른 롤아웃과 공통된 결론에 도달한 롤아웃이 최종 답변으로 선택됩니다.
생성된 지식 프롬프트
이 기법에서는 프롬프트를 완료하는 데 필요한 관련 사실을 먼저 생성하도록 모델에 지시합니다. 그런 다음 모델은 프롬프트를 완료합니다. 이렇게 하면 모델이 관련 사실에 따라 조정되므로 완성 품질이 더 높아지는 경우가 많습니다.
예를 들어 사용자가 모델에 삼림 벌채의 영향에 대한 에세이를 작성하도록 요청한다고 가정해 보겠습니다. 이 경우 모델은 먼저 ‘삼림 벌채는 기후 변화에 영향을 미친다’, ‘삼림 벌채는 생물 다양성 손실로 이어진다’와 같은 사실을 생성할 수 있습니다. 그런 다음 모델은 에세이의 요점을 자세히 설명합니다.
최소-최대 프롬프트
이 프롬프트 엔지니어링 기법에서는 먼저 문제의 하위 문제를 나열한 다음 순서대로 해결하도록 모델에 지시합니다. 이 방법을 사용하면 이전 하위 문제에 대한 답을 통해 이후의 하위 문제를 해결할 수 있습니다.
예를 들어 사용자가 ‘방정식 2x + 3 = 11에서 x 구하기’와 같은 수학 문제를 모델에 프롬프트로 제시한다고 가정해 보겠습니다. 모델은 먼저 ‘양변에서 3개 빼기’와 ‘2로 나누기’라는 하위 문제를 나열할 것입니다. 그런 다음 순서대로 문제를 해결하여 최종 답을 얻습니다.
자기 개선 프롬프트
이 기법에서는 모델이 문제를 해결하고 솔루션을 비평한 다음 문제, 솔루션 및 비평을 고려하여 문제를 해결하도록 유도합니다. 미리 정해진 중지 이유에 도달할 때까지 문제 해결 프로세스가 반복됩니다. 예를 들어 토큰 또는 시간이 부족해지거나 모델이 중지 토큰을 출력할 수 있습니다.
예를 들어 사용자가 모델에 ‘문학에 대한 짧은 에세이를 작성해 주세요’라고 지시한다고 가정해 보겠습니다. 이 경우 모델은 에세이 초안을 작성하고 구체적인 예가 부족하다고 비평하며 구체적인 예를 포함하도록 에세이를 다시 작성할 수 있습니다. 이 과정은 에세이가 만족스럽다고 판단되거나 중지 기준이 충족될 때까지 반복됩니다.
방향 자극 프롬프트
이 프롬프트 엔지니어링 기법에는 원하는 결과 쪽으로 언어 모델을 유도하는 힌트 또는 큐(예: 원하는 키워드)가 포함됩니다.
예를 들어 프롬프트가 사랑에 관한 시를 쓰는 것이라면 프롬프트 엔지니어는 ‘마음’, ‘열정’, ‘영원’을 포함하는 프롬프트를 만들 수 있습니다. 모델에는 ‘'마음', '열정', '영원'이라는 단어가 포함된 사랑에 관한 시를 써보세요’라고 지시할 수 있습니다. 이렇게 하면 모델이 이러한 키워드로 시를 쓰도록 유도할 수 있습니다.
프롬프트 엔지니어링 모범 사례에는 어떤 것이 있나요?
프롬프트 엔지니어링을 제대로 수행하려면 상황, 범위 및 예상 응답이 포함된 지침을 제공해야 합니다. 다음에서 몇 가지 모범 사례를 공유하겠습니다.
모호하지 않은 프롬프트
원하는 응답을 프롬프트에 명확하게 정의하여 AI가 잘못 해석하지 않도록 합니다. 예를 들어 참신한 요약을 요청하는 경우 자세한 분석이 아니라 요약을 원한다는 점을 분명히 밝힙니다. 그러면 AI가 그 요청에만 집중하고 목표에 맞는 응답을 제공할 수 있습니다.
프롬프트 내의 적절한 컨텍스트
프롬프트 내에서 적절한 컨텍스트를 제공하고 프롬프트 입력에 출력 요구 사항을 포함하여 특정 형식으로 제한합니다. 예를 들어 1990년대 가장 인기 있는 영화 목록을 표 형식으로 원한다고 가정해 보겠습니다. 정확한 결과를 얻으려면 목록에 올릴 영화 수를 명시하고 표 형식을 지정해야 합니다.
대상 정보와 원하는 출력 간의 균형
프롬프트에서 단순성과 복잡성의 균형을 유지하여 모호하거나 관련이 없거나 예상치 못한 답변을 피합니다. 너무 단순한 프롬프트는 컨텍스트가 부족할 수 있고, 너무 복잡한 프롬프트는 AI를 혼란스럽게 할 수 있습니다. 이는 AI가 아직 익숙하지 않을 수 있는 복잡한 주제나 분야별 용어에 있어서 특히 중요합니다. 따라서 간단한 언어를 사용하고 프롬프트 크기를 줄여 질문을 더 이해하기 쉽게 만들어야 합니다.
프롬프트 실험 및 개선
프롬프트 엔지니어링은 반복적인 프로세스입니다. 다양한 아이디어를 실험하고 AI 프롬프트를 테스트하여 결과를 확인하는 것이 중요합니다. 정확성과 연관성을 높이기 위해 최적화를 여러 번 시도해야 할 수 있습니다. 지속적인 테스트와 반복은 프롬프트 크기를 줄이고 모델이 더 나은 결과를 생성하도록 하는 데 도움이 됩니다. AI가 정보를 출력하는 방식에는 정해진 규칙이 없으므로 유연성과 적응성이 필수적입니다.
AWS는 생성형 AI 요구 사항을 어떻게 지원하나요?
Amazon Web Services(AWS)는 생성형 AI를 구축하고 사용하기 위한 다양하고 심층적인 도구를 제공합니다. 예를 들어 다음 서비스를 사용할 수 있습니다.
- Amazon CodeWhisperer는 코멘트 및 기존 코드를 기반으로 코드 조각에서 전체 함수에 이르는 코드 제안을 실시간으로 생성합니다.
- Amazon Bedrock은 인프라를 관리할 필요 없이 API를 통해 언어 모델을 사용하여 생성형 AI 애플리케이션 개발을 가속화합니다.
- Amazon SageMaker JumpStart를 사용하면 오픈 소스 언어 모델을 검색, 탐색 및 배포할 수 있습니다. 예를 들어 OpenLLaMA, RedPajama, MosaicML's MPT-7B, FLAN-T5, GPT-NeoX-20B, BLOOM 등의 모델을 사용할 수 있습니다.
모델을 직접 만들고 싶다면 Amazon SageMaker를 사용합니다. 확장 가능하고 안정적이며 안전한 모델 구축, 훈련 및 배포를 가속화하는 관리형 인프라 및 도구를 제공합니다.
지금 계정을 만들어 AWS에서 프롬프트 엔지니어링을 시작하세요.