GN⁺: OpenAI의 프롬프트 엔지니어링 가이드
(platform.openai.com)- 대규모 언어 모델(GPT 모델이라고도 함)에서 더 나은 결과를 얻기 위한 전략과 기술을 공유하는 가이드
- 여기서 설명하는 방법들은 때때로 결합하여 더 큰 효과를 낼 수 있으며, 가장 적합한 방법을 찾기 위해 실험을 권장
- 예시 프롬프트를 탐색하여 모델이 할 수 있는 일을 배울 수 있음
더 나은 결과를 얻기 위한 여섯 가지 전략
명확한 지시사항 작성
- 모델은 마음을 읽을 수 없으므로, 원하는 것을 명확히 요청해야 함.
- 세부사항을 포함하여 더 관련성 높은 답변을 얻고, 모델에게 특정 인물을 연기하도록 요청하거나, 입력의 구별된 부분을 명확히 나타내기 위해 구분자 사용.
- 작업을 완료하기 위해 필요한 단계를 명시하고, 예시를 제공하며, 출력의 원하는 길이를 지정.
참조 텍스트 제공
- 언어 모델은 특히 난해한 주제나 인용문, URL을 요청할 때 가짜 답변을 자신 있게 만들어낼 수 있음.
- 모델에게 참조 텍스트를 사용하여 답변하도록 지시하거나, 참조 텍스트에서 인용하여 답변하도록 지시.
복잡한 작업을 간단한 하위 작업으로 분할
- 복잡한 시스템을 모듈식 구성 요소로 분해하는 것이 소프트웨어 엔지니어링에서 좋은 관행처럼, 언어 모델에 제출된 작업도 마찬가지.
- 복잡한 작업은 오류율이 높으며, 종종 간단한 작업의 워크플로우로 재정의될 수 있음.
- 의도 분류를 사용하여 사용자 쿼리에 가장 관련성 높은 지시사항을 식별하고, 매우 긴 대화가 필요한 대화형 애플리케이션의 경우 이전 대화를 요약하거나 필터링.
- 긴 문서를 조각별로 요약하고 재귀적으로 전체 요약을 구성.
모델에게 "생각할 시간" 주기
- 모델이 답변을 서두르기보다는 답변을 작성하기 전에 "생각의 연쇄"를 요청하면 더 신뢰할 수 있는 답변을 도출할 수 있음.
- 모델에게 자체 해결책을 먼저 마련하도록 지시하고, 모델의 추론 과정을 숨기기 위해 내부 독백이나 일련의 쿼리 사용.
- 이전 패스에서 놓친 것이 있는지 모델에게 물어봄.
외부 도구 사용
- 모델의 약점을 보완하기 위해 다른 도구의 출력을 모델에게 제공.
- 임베딩 기반 검색을 사용하여 효율적인 지식 검색 구현, 코드 실행을 사용하여 더 정확한 계산 수행 또는 외부 API 호출.
- 모델에게 특정 함수에 대한 접근을 허용.
변경 사항을 체계적으로 테스트
- 성능 개선은 측정 가능할 때 더 쉬워짐.
- 변경이 전반적인 성능에 긍정적인 영향을 미치는지 확인하기 위해 포괄적인 테스트 스위트(또는 "eval") 정의 필요.
- 모델 출력을 금본답안과 비교하여 평가.
GN⁺의 의견
- 가장 중요한 점: 프롬프트 엔지니어링은 언어 모델의 성능을 최적화하는 핵심적인 방법으로, 사용자의 의도를 정확하게 파악하고 원하는 결과를 얻기 위한 구체적인 지침을 제공.
- 흥미로운 이유: 이러한 전략들은 인공지능 언어 모델의 사용을 더욱 효과적으로 만들며, 특히 GPT-4와 같은 최신 모델에서 더욱 높은 성능을 발휘할 수 있게 함.
- 주목할 만한 점: 이 가이드는 초급 소프트웨어 엔지니어가 언어 모델을 사용할 때 겪을 수 있는 일반적인 문제들을 해결하는 데 도움이 되는 구체적인 예시와 전략을 제공함으로써, 실제 작업에서 모델을 더 효과적으로 활용할 수 있는 방법을 제시함.
Hacker News 의견
-
ChatGPT 시스템 프롬프트에 대한 논의
- 복잡한 규칙을 수용하는 데 ChatGPT의 최신 모델이 효과적임.
- 시스템 프롬프트를 사용하는 것보다 더 엄격한 명령을 내리는 것이 경험상 더 나음.
- 함수 호출 및 구조화된 데이터 지원은 프롬프트 엔지니어링의 한 형태로, 시스템 프롬프트만 사용하는 것보다 훨씬 강력함.
- 시스템 프롬프트와 구조화된 데이터 결과를 비교하는 재미있는 데모 예시가 있음.
-
스페인어로 치즈버거 주문 경험담
- ChatGPT와 Google 번역기가 제안한 스페인어 번역에 대해 서버가 이상하게 반응함.
- 번역 개선에 관심이 있어, 멕시코계 미국인을 대상으로 한 스페인어 맞춤형 번역을 요청함.
- 다음 날 "Cheeseburger sin pepinillos"라는 문구로 주문했을 때 서버는 그게 더 낫다고 함.
-
LLM(Large Language Models)의 특징에 대한 논의
- 입력과 지시 사이에 거의 구분이 없어, 사용자의 입력이 프롬프트의 일부로 간주됨.
- 이로 인해 알려진 "프롬프트 주입" 취약점이 발생하지만, 이는 모델이 지시와 입력을 구분하지 않는 본질적인 특성 때문임.
- 프롬프트와 입력이 결합된 것이 프로그램의 전체 입력이 되며, 이로 인해 프로그램의 동작을 확신하기 어려움.
- LLM이 아직 복잡한 작업에 대해 신뢰할 수 있을 정도로 사용되지 않는 이유임.
-
프롬프트 작성에 대한 학습에 대한 주저함
- 새로운 버전과 다른 LLM들이 다르게 반응하기 때문에 프롬프트 작성을 완벽하게 배우는 데 많은 시간을 할애하는 것에 대해 주저함.
- 시스템이 더 똑똑해짐에 따라 복잡한 프롬프트가 필요 없어질 수도 있음.
-
프롬프트 엔지니어링과 구글 고급 검색 쿼리의 비교
- 기본적인 질문에는 챗봇이 잘 작동하지만, 요청된 정보가 복잡해질수록 정확한 정보를 얻기 어려움.
- 구글 검색에서도 기본적인 정보는 쉽게 얻을 수 있지만, 명확하지 않은 결과를 원할 때 고급 검색 연산자를 사용함.
-
구글 검색 프롬프트와 LLM 프롬프트의 비교
- 사람들이 인터넷에서 필요한 것을 얻기 위해 구글에 간단한 키워드를 입력하는 방식에 익숙해짐.
- 이제 복잡한 문장을 작성해야 하는 것은 시간이 걸릴 것이며, 이는 일시적인 단계일 수 있음.
-
인간 간의 의사소통 실패와 LLM의 한계
- 인간 간의 의사소통이 자주 실패하며, 대부분의 사람들이 효과적인 커뮤니케이터가 아님.
- 기계도 인간의 마음과 의도를 읽는 데 더 나을 것이라고 기대하기 어려움.
- 프롬프트 엔지니어링은 인간 간의 의사소통 능력 향상을 위해 존재해야 함.
-
"프롬프트 엔지니어링"이라는 용어에 대한 비판
- "엔지니어링"이라는 단어가 남용되고 있다는 의견 제시.
-
LLM이 인간에게 명확한 의사소통을 가르치는 역할
- LLM을 통해 인간이 더 명확하게 의사소통하는 방법을 배우고 있음.
-
LLM 기반 챗앱 구현의 용이성
- 이론적 진보 없이도 LLM 기반 챗앱을 구현하는 데 많은 이점이 있음.
- 현재보다 더 나은 결과를 얻기 위해 개발자의 노력이 필요함.