1. 지시를 명확하게 한다.
- 언어 모델은 사용자의 마음을 다 알 수 없다.
- 답변이 너무 긴 것 같으면, 짧게 작성해달라고 요청해야 한다.
- 답변이 너무 단순한 것 같으면, 전문가 수준으로 작성해달라고 요청해야 한다.
- 양식(format)이 맘에 들지 않으면, 원하는 양식을 알려줘야 한다.
- 언어 모델이 사용자가 원하는 것이 무엇인지 추측해야 하는 것들이 적어질 수록, 더욱 정확하고 만족스러운 답변을 얻을 수 있다.
실전 꿀팁
- 정확한 답변을 얻기 위해서는 질문에 세부 요청사항을 많이 포함시켜야 한다.
- 언어 모델에게 역할(persona)을 수행해달라고 요청한다.
- 질문 내의 요청사항들을 구분하기 위해 각 요청사항마다 구분 기호를 사용한다.
- 원하는 결과를 얻기 위해 거쳐야 하는 과정을 상세하게 제시한다.
- 예시를 제공한다.
- 결과물의 원하는 길이를 제시한다.
2. 참고할 수 있는 내용을 제시한다.
- 언어 모델은 난해한 질문을 받거나 특정 링크나 인용을 요구하면 거짓 답변을 내놓는 경향이 크다.
- 학교나 학원에서 학생들이 노트 필기를 참고할 수 있도록 하면 더 나은 성적을 받듯이, 참고할 만한 내용을 제공해주면 거짓 답변을 확연히 줄일 수 있다.
실전 꿀팁
- 참고할 수 있는 내용을 활용하여 지시한다.
- 참고할 수 있는 내용을 제시하고, 그 내용에 기반하여 답변하도록 지시한다.
3. 복잡한 업무는 세분화하여 작성한다.
- 소프트웨어 개발에서도 복잡한 시스템을 구성할 때 모듈 형식의 구성요소로 나눠 개발하듯이, 언어모델에게 지시하고자 하는 업무도 똑같이 세분화시켜 줘야한다.
- 추상적이고 복잡한 업무 지시는 에러를 발생시키거나 답변의 질을 낮출 가능성이 세분화된 업무보다 매우 크다.
- 세분화된 업무로써 단계적으로 질문하고 답변을 받으면 다양한 효과를 볼 수 있다.
(1) 이전 단계 업무 지시에서 나온 답변을 다음 단계 업무의 질문으로 사용할 수 있다.
(2) 업무의 순서와 흐름이 뚜렷해지면서, 복잡한 업무가 재정의되어 더욱 효과적인 방법으로 일을 처리할 수 있다.
실전 꿀팁
- 의도 분류(intent classification)을 활용하여, 질문을 단계적으로 나누고 각 질문에 필요한 지시사항을 만든다.
- 아주 긴 형식의 대화를 취하는 대화형 어플리케이션이라면, 이전 대화를 요약하거나 분류(filter)한다.
- 긴 문서의 경우라면 문서를 부분으로 조각내어 요약한 후, 그 조각 요약들을 재귀적으로(recursively) 구성하여 전체 요약을 만든다.
*의도 분류(intent classification): 사용자의 의도를 명확히 분류하기 위해 사용하는 머신러닝 기법, 특정 자연어 발화 형태들을 사전에 정의한 의도(intent) 기준으로 분류하는 것을 의미함.
4. 생각할 시간을 줘야한다.
- 사람에게 17 곱하기 28을 물어보면 계산하는 데에 시간이 좀 걸리듯이, 언어 모델도 극도로 짧은 시간 내에 답변을 해야하면 잘못된 답변을 제공할 확률이 크다.
- 답변을 제공하기 전에 생각의 사슬(chain of thought)을 거치도록 하면 더욱 질좋은 답변을 얻을 수 있다.
*생각의 사슬(chain of thought): 문제를 풀 때 인과관계에 대한 풀이를 의도적으로 전개시켜 정확한 정답에 이를 수 있도록 유도하는 것
실전 꿀팁
- 언어 모델에게 일련의 풀이 및 사고 과정을 거치도록 지시하여 성급한 답변을 제공하지 않도록 지시한다.
- 내적 독백(inner monologue)과 같은 일련의 질문 프롬프트를 사용하여 모델의 사고 과정을 숨긴다.
- 문제 풀이 과정에서 놓친 부분이 없는지 확인하도록 지시한다.
*내적 독백(Inner Monologue): 거대 언어 모델이 풀이 과정을 말(혹은 텍스트)로 표현하면서 문제를 해결하도록 하는 프롬프트 엔지니어링 기법
5. 외부 도구를 사용하는 것도 좋다.
- 다른 도구를 통해 나온 결과물들을 활용하여 언어 모델이 부족한 부분을 상쇄하는 것도 좋은 방법이다.
- 예를 들어, 텍스트 검색 증강 생성(RAG, Retrieval Augmented Generation)은 언어 모델이 관련 문서를 찾을 수 있게 해준다.
- OpenAI의 Code Interpreter와 같은 코드 실행 엔진은 언어 모델이 수학을 하거나 코드를 만들고 실행할 수 있게 해준다.
- 하고자 하는 업무가 언어 모델에 의해서만 할 수 없을 것 같다면, 다른 도구들을 연결하여 최상의 결과를 만드는 것이 좋다.
실전 꿀팁
- 효율적인 정보 검색(knowledge retrieval)을 실행하기 위해 임베딩 기반(embeddings-based)의 검색을 사용한다.
- 정확한 계산이 필요하다면 코드 실행 도구를 연결하거나 외부 API를 연결하여 사용한다.
- 특정 기능이 필요하다면 언어 모델을 거기에 연결한다.
*임베딩(embeddings): 고차원 벡터를 변환할 수 있는 비교적 저차원의 공간으로, 단어를 나타내는 희소 벡터와 같은 큰 입력에 대해 더 쉽게 머신러닝을 수행할 수 있음.
6. 체계적으로 변화를 추적하라.
- 언어 모델의 성능을 측정할 수 있다면 개선시키는 것이 쉬워질 수 있다.
- 일부 프롬프트에 대한 수정이 극히 소수의 예시에서만 엄청난 개선을 보여주지만 전체적으로는 매우 좋지 않은 성능을 보여주는 경우도 있기 때문에, 수정 사항이 유효하게 의미있는 개선을 만들어냈는지 확인하기 위해 종합적인 테스트 묶음(comprehensive test suite, eval)을 구성하여 성능을 측정해야한다.
실전 꿀팁
- 최상의 답변을 마련하여 언어 모델이 내놓는 답변과 비교하여 평가한다.
Source