2025년 04월 22일
현재 사내 진행하는 프로젝트 중 DB에서 데이터를 가져오고 LLM Model API를 호출하여 사용자에게 데이터를 전달해주는 챗봇 구현 업무를 맡고 있습니다. 그러던 중에 구글에서 개발자를 위한 프롬프트 가이드를 발표한 것을 보고 이를 사내에 도입하기 위해 간단히 적어보려합니다.
원본 링크
먼저 프롬프트에 대해 살펴보겠습니다. 프롬프트란 생성형 AI에 대한 지시문을 의미합니다. 즉, 생성형 AI에 대한 명확한 지시 혹은 가이드라고 할 수 있습니다.
이는 생성형 AI의 성능에 있어 매우 중요한 역할을 합니다. 그래서 이를 잘 작성하는 것이 매우 중요한 가운데 이를 위해 프롬프트 엔지니어링이란 기술이 떠오르고 있습니다.
프롬프트 엔지니어링이란 생성형 AI가 기대한 대로 출력하도록 지시문(프롬프트)를 설계하고 개선하는 기술을 말합니다.
특히 복잡한 작업에서 더욱 중요한 역할을 하고 있습니다. 그렇다면 프롬프트에는 어떠한 내용이 들어가야 할까요?
역할
프롬프트의 첫번째는 역할 입니다. 이는 생성형 AI가 어떤 역할을 할지 명확하게 지정하는 것입니다.
예시: 당신은 대화형 AI 어시스턴트입니다. 주어진 정보를 활용하여 사용자의 질문에 정확하게 답변해주세요.
질문
프롬프트의 두번째는 질문 입니다. 이는 생성형 AI가 어떤 질문을 할지 명확하게 지정하는 것입니다.
예시 : 일본 야구팀 A가 2023년에 우승했습니까?
정보
프롬프트의 세번째는 정보 입니다. 이는 생성형 AI가 어떤 정보를 사용할지 명확하게 지정하는 것입니다.
예시 : 일본 프로야구에 관한 뉴스 기사
출력
마지막으로 출력 입니다. 이는 생성형 AI가 어떻게 출력할 지 형식 등을 지정해주는 것입니다.
예시 : 출력은 "예" 또는 "아니오"로 답변해주세요.
가장 핵심은 사람의 관점에서 상대방에게 전달될 수 있는 지시사항 이 되도록 한 후, 생성형 AI 특성을 고려한 프롬프트 기법 을 적용하는 것이 중요하다는 것입니다.
여러 작업으로 나눠서 처리하기 프롬프트에서 여러 가지 작업을 수행하게 하려다가 잘 안되면, 작업 별로 프롬프트를 나눠서 수행해보세요.
Before :
긍정적인 댓글과 부정적인 댓글로 구분해서, 긍정적인 댓글로 이 상품에 대한 짧은 홍보 문구를 만들어보세요.
[코멘트]
배터리 수명이 너무 길어서 놀랐다! 하루종일 사용해도 전혀 부족함이 없다. 방수 기능이 없는 것이 아쉽다. 목욕탕에서 사용할 수 없다.
케이스 종류가 적다. 마음에 드는 케이스를 찾을 수 없다. 가격이 비싸다. 조금만 더 저렴하면 쉽게 구매할 수 있을텐데,
카메라의 성능은 훌륭하. 특히 야경 모드가 대단하다! 조금 무거운 것이 신경쓰인다. 장시간 들고 있으면 손이 피곤하다.
디자인이 심플하고 멋지다. 가지고 있는 것만으로도 보기 좋아진다...
After :
긍정적인 댓글과 부정적인 댓글로 구분해서,
[코멘트]
배터리 수명이 너무 길어서 놀랐다! 하루 종일 사용해도 전혀 부족함이 없다.
방수가 되지 않는 것이 아쉽다. 목욕탕에서 사용할 수 없다.
댓글로 이 상품에 대한 짧은 홍보글을 작성해보세요.
[코멘트]
배터리 수명이 너무 길어서 놀랐다! 하루 종일 사용해도 전혀 부족함이 없다.
카메라의 성능은 훌륭하다. 특히 야경 모드가 대단하다!
처리 순서대로 설명하기
연구에 따르면 다양한 LLM에서, 자연스러운 추론의 흐름에 따른 지시를 제공하지 않으면 정확도가 30% 이상 떨어질 수 있다고 보고된다고 합니다.
즉, 여러 단계로 구성된 작업의 경우, 프롬프트에 기술하는 단계의 순서를 바꾸면 기대하는 결과를 얻을 수 있습니다.
아래 Before에 비해 After는 계산 절차가 명확하기 때문에 정확한 답을 얻을 수 있습니다.
Before:
Z는 X의 5배와 Y를 더한 값, X는 Y의 3배, Y는 100, Z는 무엇인가요?
After:
Y는 100, X는 Y의 3배, Z는 X의 5배와 Y를 더한 값, Z는 무엇인가요?
DON'T 형식이 아닌 DO 작성하기 부정형 표현 대신 긍정형 표현으로 지시하면 기대하는 결과를 얻을 수 있습니다.
여러 가지 예시 제시하기
예상되는 입출력의 예시를 프롬프트 내에 대량으로 제시하는 방식을 Many-Shot Prompting 이라고 합니다.
주의해야할 점은 ### , #입력, 예시 등 데이터를 나타내는 기호는 자유롭게 해도 상관없으나, 일관된 형식으로 작성하지 않으면 성능이 저하될 수 있다는 것입니다.
Before:
다음 문장을 긍정,부정,중립으로 분류해 보십시오.
단, 긍정은 1, 부정은 2, 중립은 3으로 출력한다.
이 영화는 지루했지만 마지막 장면은 감동적이었다.
After:
다음 문장을 긍정,부정,중립으로 분류해 보십시오.
단, 긍정은 1, 부정은 2, 중립은 3으로 출력한다.
예: 이 노래는 좋아하지만 가사가 이해가 안 돼요. // 3으로 출력
예 : 이 영화는 주연배우의 연기가 최고였고 마지막까지 볼만한 가치가 있었다. // 1로 출력
이 영화는 지루했지만 마지막 장면은 감동적이었다.
사고 과정의 예시
복잡한 사고 과정이 필요한 문제에 대해서는 Few-Shot Prompting 으로 제시하는 예시에서 사고 과정을 함께 보여줌으로 성능이 향상되는 효과를 가져옵니다.
젊은 컨설턴트가 과거 사례를 통해 방법을 배우고 같은 방식으로 아웃풋을 내는 것에 비유할 수 있습니다.
우리는 이러한 것을 Chain of Thought Prompting 라고 부릅니다.
아래 After 사례처럼 사전에 생각할 수 있는 방법을 제시 한 후 생성형 AI가 그 흐름대로 따라가서 결론을 도출하게 해줘 정확도를 높일 수 있는 효과를 가져옵니다.
Before:
1000000 + 34321 * 10^2는 무엇입니까? 한국어로 대답해주세요.
After:
1000000 + 34321 * 10^2는 무엇입니까? 한국어로 대답해주세요.
1+ 1*10^2는 무엇입니까?
출력 예시 : 10^2는 100이고, 1+100은 101이므로 답은 101입니다.
업무 내용을 본업으로 삼는 사람이 되게 한다. 예를 들어 당신은 Google의 Staff Engineer 입니다 라고 특정 업무를 수행하는 전문적인 직업을 역할로 부여하면 성능이 향상되는 것으로 알려지고 있습니다.
감정을 담은 한 마디를 덧붙인다. "이것은 제 커리어에 있어 중요한 일입니다.", "성장의 기회라고 생각하고 열심히 하세요." , "힘내라, 넌 할 수 있어!" 등의 말 한마디에 성과가 올라가는 경우가 있다고 알려져 있습니다.
구조화된 프롬프트 활용
대부분 프롬프트에 작성해야 할 항목이 정해져 있기 때문에 다음과 같은 템플릿을 준비해두는 것이 좋습니다. 또한 가능하면 영어로 작성하는 것을 추천합니다.
기본적으로 Task를 단계적으로 지시하는 부분과 LLM이 모르는 정보와 내부 조건을 지정하는 부분을 어떻게 작성할 지 고민하는 것에 초점을 둡니다.
처음부터 복잡하게 지정하는 것이 아니라, 간단한 내용부터 시작해서 출력 결과를 보면서 진행하면 됩니다.
하지만 어떤 지시가 어떤 변화를 일으킬지 예측하기 어렵기 때문에 시행착오가 필요합니다.
You are a ------ , 다음 작업을 수행합니다.
[Task]
A. -----
B. -----
[Reference]
----
[Condition]
A.-----B.
[Output Format]
한국어로 출력해주세요. -----
산술 계산 혹은 회귀 작업과 같이 취약한 분야도 있습니다.
그래서 작업을 여러 단계로 나누어 처리할 때, 일부 단계를 다른 API 서비스에 의뢰하여 처리하는 방법도 생각해볼 수 있습니다.
이러한 처리를 하는 것을 function calling 이라고 합니다.
API 서비스와의 연동을 더욱 고도화하면 무엇을 해야할 지 생각(추론)하여 API 서비스로 실행(행동) 하는 과정을 다단계로 반복하여 최종 결과를 만들어내는 생성형 AI에 의한 에이전트 를 만들 수도 있습니다.
이를 ReAct(Reasoning and Acting) 이라고 합니다.
1단계 : 프롬프트에 도구에 대한 정보를 부여한 후 질문에 답하도록 요청함 2단계 : LLM이 지정한 도구를 호출한 결과를 지금까지의 상호 작용에 추가함.
# 요청사항
질문에 답해주세요.
도구를 사용해야 하는 경우, 도구 이름과 입력 데이터를 답변해주십시오.
[도구]
도구명: 날씨 API
* 기능 : {location:'도시명'} 을 입력하면 해당 도시의 현재 날씨를 확인할 수 있습니다.
[질문]
현재 도쿄의 날씨를 알려주세요.
# 당신의 답변 1 (도구가 실행되는 부분)
[도구] 도구명: 날씨 API 입력 데이터: {location: 'Tokyo'}
# 도구 응답
{location: '도쿄', weather: '맑음', temperature: '32도'}
위 까지가 프롬프트를 작성하는 가이드였고 지금 챕터에서는 구글이 가지고 있는 AI 서비스에 대해 설명하는 부분입니다. 저도 자체 TPU를 기반으로 하는 Google의 AI 사용 경험과 가격이 어마무시하다고 생각하는 터라 이 참에 한 번 짚고 어떻게 사용할 수 있을 지 정리해보고자 합니다.
Gemini
Google AI Studio
사내 스마트팜 관련 프로젝트를 맡았기 때문에 특정 분야에 대한 프롬프트를 만들어야 하는 것 외에 사용자 질문의 의도를 파악하는 프롬프트를 작성해야 하는 입장에서 템플릿 및 가이드를 파악할 수 있었습니다. 특히 빅테크 기업인 구글에서 발표한 가이드인만큼 막연하게 알고 있던 부분을 확실하게 정리하여 사내 프로젝트에 접목해보고자 합니다. 기회가 된다면 중요한 부분을 빼고 직접 작성한 프롬프트도 올릴 수 있음 합니다. 또한 앤트로픽에서도 프롬프트 가이드를 발표했던 적이 있는 것 같은데 이 부분도 추후 정리해보도록 하겠습니다.