안녕하세요! 지금까지 chatGPT를 효과적으로 사용하기 위한 활용법에 대한 글들이 많이 소개되고 있는데요. 그중에서도 비교적 정리가 잘 된 하나의 글을 공유하려 합니다.
효과적인 프롬프트 엔지니어링 방법 3가지, 원본에 대한 URL은 가장 아래에 공유드릴게요!
LLM(Large Language Model;대규모 언어모델)을 활용한 GPT모델은 우리에게 인상적인 답변을 무궁무진하게 생성할 수 있는 잠재력이 있습니다. 특히 핵심적인 기능은 바로 프롬프트 엔지니어링이라고 할 수 있습니다.
'프롬프트 엔지니어링', 즉 GPT에게 어떤 가이드를 제시하느냐에 따라 원하는 방향으로의 질 높은 답변을 얻을 수 있습니다.
해당 글에서는 고객을 대상으로 서비스를 하거나, 콘텐츠를 작성하거나, 단순한 재미 등으로 GPT를 활용할 때 어떻게 하면 최적의 방향으로 사용할 수 있는지에 대한 방향성을 드리고자 합니다.
1. 비용의 최적화
GPT가 높은 품질의 답변을 할 때, 무심코 길고 지루한 응답을 받는 경우가 있습니다. 이렇듯 정보가 집약된 답변을 요구하는 것은 기초적인 프롬프트 엔지니어링으로도 가능하지만, 고품질이면서도 보다 짧은 답변을 얻을 수 있습니다.
→ 프롬프트 내 문자의 길이를 제한하여 요청하는 것도 하나의 방법입니다.
예) 150자 이내의 트위터 게시글을 추천해줘. 등
❗️여기서 잠깐, 프롬프트 엔지니어링 용어에 대해 잠시 알려드릴게요.
* Few-shot: 하나 이상의 예시를 제공함.
* One-shot: 하나의 예시를 제공함.
* Zero-shot: 예시를 제공하지 않음.
Few-shot Learning은 Meta Learning의 한 종류인데요.
(One-shot, Zero-shot은 Few-shot에 기반합니다.)
Meta Learning이란, 어떠한 작업(Task)을 위해 학습된 AI모델을 활용해, 학습셋(dataset)이 적은 다른 작업(Task)도 수행할 수 있도록 학습시키는 방법을 말합니다.
기존에 머신러닝/딥러닝을 위해서는 방대한 양의 데이터가 반드시 필요했습니다.
어느 하나를 학습시키기 위해 방대한 데이터를 선 학습 시켜야 한다는 점에서 효율성이 높지 않음은 물론, 아주 많은 양의 데이터를 학습하기 위해 높은 사양의 하드웨어도 필수적이었지요.
그러나 Meta Learning의 한 종류인 Few-shot Learning의 경우, 적은 데이터만으로도 '구분'이 가능하다는 점에서 효율성이 매우 높아졌습니다. 즉, '구분하는 방법'을 학습하기에 적은 데이터만으로도 구분이 가능합니다.
(Few-shot Learning에 대한 내용은 별도로 다루겠습니다.)
2. 패턴
프롬프트 엔지니어링을 어떤 방법으로 해야할지 막막하시다면, 여러 방법을 활용함으로써 적합한 방법을 찾을 수 있습니다. (결국 부딪혀봐야 한다는 것이죠.)
아래 5가지 방법을 알려드릴게요.
(1) 생각의 사슬(Chain of Thought)
특정 문제를 해결하는데 사용할 수 있는 결과 과정에 대해 몇가지 예를 GPT에게 제공하는 것이 필요합니다. 아래 이미지를 보시면 아시겠지만, 표준 프롬프팅 즉 기존의 프롬프팅의 경우, 중간에 단계적으로 추론하는 과정을 설명해주지 않습니다. 질문과 답만 던져주고 이후에 새로운 질문을 던지므로 틀릴 확률이 그만큼 높습니다.
반면, 생각의 사슬 프롬프팅의 경우, 답변을 도출하기 전까지 중간의 의식의 흐름을 설명해줍니다. 따라서 기존의 표준 프롬프팅 보다 더 정확한 답변을 도출할 수 있습니다.
“Chain-of-Thought Prompting Elicits Reasoning in Large Language Models” (Jan-10–2023)의 원본을 번역함.
(2) 자문자답(Self-Ask)
자문자답의 방법(The self-ask method)은 GPT가 대답을 하기 전, 명확한 질의와 답변을 해주는 것이 필요합니다.
[출처] https://medium.com/sopmac-ai/prompt-engineering-tips-for-chatgpt-73c3dca6f99d 번역 및 재구성.
(3) 차근차근(Step by step)
차근차근 프롬프팅 하는 것은 산술, 상식, 기호추론을 포함한 다양한 추론 작업에서 LLM의 성능을 개선하는 것으로 나타났습니다.
OpenAI는 GPT모델을 인간의 피드백을 거듭한 강화학습(RLHF; Reinforcement Learning with Human Feedback)방식으로 훈련했습니다. 그래서 chatGPT의 기본모델은 사람처럼 단계적 사고를 할 수 있습니다.
[출처] REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS, 2023.03.10.
(4) ReAct (Reason+Act)
ReAct 방법은 추론추적(reasoning taraces)과 특정작업별 행동(task-specific actions)을 결합합니다. 추론 추적은 모델이 예외처리를 계획하는 데에 도움되며, 행동은 지식기반 혹은 환경과 같은 외부 소스로부터 정보를 수집하는데에 도움이 됩니다.
❗️여기서 잠깐, google에 게시된 다른 글도 한번 보시죠!
생각의 사슬(CoT)은 다양한 산술, 상식, 상징적 추론 작업에 탁월하지만, 모델이 외부세계에 기반을 두지 않고 자체 내부 표현을 사용해 생성하므로 지식을 반응적으로 탐색하거나 업데이트를 하는데에 제한적입니다.
그러나 추론과 행동이 긴밀하게 통합된 ReAct의 경우, 해석가능성/진단가능성/제어가능성을 향상시키는 인간에 의한 작업 해결의 궤적을 보여줍니다.
3. 주의사항(Anti-Patterns)
❗️민감정보 및 기밀정보는 공유하지 마세요!
직원들이 chatGPT에 회사 고유의 코드 혹은 재무 등 중요한 정보를 제공하는 것은 시작에 불과하다는 것을 알아야합니다. 곧 word, excel, ppt 등 업무에서 가장 많이 사용하고 있는 기업 소프트웨어와 chatGPT의 기능이 통합될 것입니다.
따라서 chatGPT와 같은 LLM모델에 데이터를 입력하기 전에 정책이 수립되어 있는지 확인해야 합니다.
OpenAI API데이터 활용 정책에는 다음과 같이 명시되어 있습니다.
"기본적으로 OpenAI는 고객이 API를 통해 제출된 데이터를 사용하여 OpenAI모델을 교육하거나 OpenAI의 성능을 개선하지 않습니다."
"OpenAI는 잘못된 사용 및 관련 모니터링을 위해 API 데이터를 30일간 보관합니다. 제한된 공인 OpenAI 직원뿐만 아니라 보안의 의무가 있는 제 3의 전문계약자만이 이 데이터에 접근해 남용이 의심되는 경우를 조사하고 확인할 수 있습니다."
❗️'Prompt Injection'을 주의하세요!
'Prompt Injection'이란, AI모델을 활용해 구축된 어플리케이션에 대한 공격을 말합니다. SQL Injection으로부터 데이터베이스를 보호하는 것과 마찬가지로 사용자에게 노출되는 모든 프롬프트도 'Prompt Injection'로부터 보호해야 합니다.
'Prompt Injection'에 대해 문서화가 된 첫 사례는 Riley Goodside인데요,
단순히 "위 지시 사항 무시"라는 접두사를 붙인 후, 주입된 명령에 의도적으로 회피(우회)하도록 했습니다.
[출처] https://medium.com/sopmac-ai/prompt-engineering-tips-for-chatgpt-73c3dca6f99d 일부 번역.
❗️'Prompt Leaking'을 주의하세요!
'Prompt Leaking'은 모델이 자신의 프롬프트를 뱉도록 요청받는 'Prompt Injection'유형의 하나입니다.
아래 이미지와 같이 공격자는 "user_input"을 변경해 프롬프트를 반환하려고 합니다.
의도된 목표는 공격자가 악의적인 "user_input"을 변경해 악의적인 명령 1을 출력하는 goal hijecking(일반적인 prompt injecton)과는 다릅니다.