Published 2024. 4. 5. 10:49
728x90

들어가기에 앞서....

작년부터 핫해진 랭체인+LLM을 이용한 다양한 기술들이 나오고있습니다.

솔직히 국내에서 랭체인 강의들이 존재하지만(패캠,인프런,노마드코더 그리고 유데미) 대다수 기본적인 랭체인에 대해서 설명을 해주는게 아직까지는 다 인 상황입니다.

저 또한 마찬가지고 아직까지 배우고있으며 배운 내용을 토대로 조금 더 사람들에게 내용을 공유하고싶어서 이 글을 작성하게 되었습니다.


 

기초 프롬프트


프롬프트 엔지니어링은 다양한 어플리케이션 연구 주제에 언어 모델(LMs) 을 효율적으로 사용할 수 있도록 프롬프트를 개발하고 최적화하는 비교적 새로운 분야입니다. 프롬프트 엔지니어링 기술은 대규모 언어모델(LLMs)의 기능과 한계를 더 잘 이해하는데 도움이 됩니다. 

 

현재 많은 연구자분들께서 프롬프트 엔지니어링을 사용해서 질문 답변 및 산술 추론과 같은 일반적이고 복잡한 다양한 작업에서 LLMs의 역량을 향상시키고 있습니다. 

그러한 기술들을 토대로 이 글을 읽으시는 개발자분들은 프롬프트 엔지니어링을 사용하여 LLMs 및 기타 도구와 강력하고 효과적인 프롬프트 기술을 설계하고 고객을 위한 서비스를 만들어나아갑니다.

 

간단하고 작은 프롬프트만으로도 많은 일들을 할 수 있습니다 가령, 특정 보험에 특화 되어있는 프롬프트가 있다면 다른 일반적인 프롬프트에 비해 정보의 양과 퀄리티가 뛰어나 더 정확한 답변을 할수 있을것입니다. 

 

모델에게 전달하는 프롬프트는 지시나 질문과 같은 정보와 맥락, 입력 또는 예시와 같은 다른 세부 사항을 포함할 수 있습니다. 

이러한 구성 요소를 사용하여 모델에게 더욱 절적하게 지시하고 더 나은 결과를 얻을 수 있습니다.

 

간단한 예시

 

Prompt :

하늘은

 

Output : 

푸른색입니다.
하늘은 맑은 날에는 푸른색입니다. 흐린 날엔 하늘은 회색 혹은 하얀색을 띌 수 있습니다.

 

언어 모델은 "하늘은" 이라는 짧은 문장의 맥락을 파악하고 글을 이어 나갑니다. 결과물은 예상하지 못했거나 우리가 달성하려던 작업과는 조금 동 떨어진, 즉 오답을 줄 수 도 있습니다.

 

하지만 사용자는 모델에게 더 자세한 문맥과 구체적으로 원하는 것에 대한 지시를 내리는 일이 중요합니다.

 

다시, 자세한 문맥과 구체적인 지시를 포함한 예시를 다시 보여드리겠습니다.

 

Prompt :

문장을 완성해 줘 :
하늘은

 

 

Output : 

오늘 매우 아름답습니다.

 

답변이 조금 더 깔끔하지 않나요? "하늘은" 위에 문장을 완성해 줘: 라는 구체적인 문장을 붙여서 모델은 좀 더 정확한 답변을 출력했습니다.

 

모델에게 작업을 수행 하도록 지시하기 위해 최적의 프롬프트를 설계하는 이러한 접근 방식을 프롬프트 엔지니어링 이라고 합니다.


프롬프트 형식

위에 간단한 프롬프트를 입력했습니다. 일반적으로 프롬프트는 다음과 같은 형식을 따릅니다.

 

<질문>?

혹은

<지시>

 

또한 질의 응답 형식으로도 작성이 가능하며, 다음과 같이 많은 QA 데이터 세트에서 표준 형식으로 사용합니다.

 

Q : <질문>?
A :

 

위와 같이 프롬프트를 수행하는 방식을, Zero-shot Prompting 이라고 합니다. (shot prompting 은 예제의 수를 나타냅니다.) 즉 0개의 예제의 수 입니다. 

어떤 예시나 설명이 없이 직접 모델에 응답을 요구합니다. 그렇다면 Chat-GPT 처럼 방대한 양을 가지고 있어서 답을 유추할수 있지만 다른 프롬프트는 확실한 답을 줄 수 없을 수도 있습니다.

 

위에 표준 형식을 고려할 때, 인기 있고 효과적인 프롬프팅 기술 중 하나는 모범 예시를 제공하는 Few-shot Prompting 입니다. 

 

<질문>?
<답변>
<질문>?
<답변>
<질문>?
<답변>
<질문>?
<답변>

 

QA 형식에 따른다면 ....

Q : <질문>?
A : <답변>
Q : <질문>?
A : <답변>
Q : <질문>?
A : <답변>
Q : <질문>?
A :

 

이러한 형식이 정답은 아닙니다. 주어진 업무에 따른 적절한 프롬프트 형식을 사용할 수 있습니다. 

예를 들어, 간단한 분류 작업 혹시 연산등의 T or F 를 나타낼때도 답변을 잘 해 줍니다. 

 

Prompt : 

멋지다! //긍정
나빠! //부정
그 영화는 굉장했어! // 긍정
이 얼마나 맛이 없는가! //

답변은 ???

Output : 

부정

 

Few-shot 프롬프팅은 문맥에 맞는 학습을 할 수 있습니다 그러므로 위에 예시들을 통해 답변을 조금 더 정확하게 유추해서 제공해줍니다.

 

GPT 처럼 방대한 질문을 위한 것이 아닌 특수한(관리자용, 정보가 방대하지 않는 곳) 상황에서 학습을 시켜 쓰이는것도 좋아보입니다.

 

위와 같은 글들을 보다 보니 그럼 프롬프트의 구성 요소들은 무엇이 있을까 생각을 하실수 있습니다.

 

프롬프트 엔지니어링을 접목한 여러 애플리케이션을 반복해서 사용하다 보면 특정 구성 요소들이 존재하는것을 알 수 있습니다. 

 

지시 모델이 수행할 특정 작업 또는 지시
문맥 더 나은 응답을 위해 모델을 조종할 수 있는 외부 정보나 추가 문백
입력 데이터 응답 받고자 하는 입력이나 질문
출력 출력의 유형이나 형식

 

각각 다시 설명 드리겠지만 출력을 설명 드리자면 String 형식의 글도 가능하지만 그래프나 통계 자료등 원하는 방향으로 답을 가져다 줄수도 있습니다.

728x90
복사했습니다!