효율적으로 프롬프트 엔지니어링을 하기 위해서는?
격변하는 AI 시장
현재 AI 시장에서 OpenAI의 영향력은 말 그대로 어마어마합니다.
22년 11월 공개된 ChatGPT는 이전의 여러 AI들과는 달리 그 실용성과 성능에 힘입어 우리들의 생활에 빠르게 스며들었습니다.
향상된 성능의 GPT4 출시, 코딩 없이 챗봇을 간단하게 제작할 수 있는 GPTs의 공개 등 이어진 인상적인 활동들을 거쳐, 지난 1월 10일 자체 제작한 맞춤형 챗봇을 판매하고 수익을 나눌 수 있는 GPT Store를 출시함으로써 챗봇 시장에서 큰 변화를 일으켰습니다.
Dalpha는 이런 변화들을 최대한 빠르게 접하기 위해 노력하고, 새로 생긴 기능들로 어떤 서비스를 만들 수 있는지 끊임없이 고민하고 있습니다.
아무리 챗봇을 쉽게 만들 수 있게 되어도, 업무 자동화 등의 문제들을 해결해줄 수 있는 고성능의 서비스를 만들기 위해서는 여전히 코딩 기술과 통찰력이 필요합니다.
특히 AI가 항상 정해진 형식을 지키고 대부분의 경우에 오류 없이 제대로 된 답변을 하도록 유도하는 기술이 필요하게 되었습니다.
프롬프트 엔지니어링은 무엇인가?
생성형 AI가 최적의 결과를 도출하도록 안내하는 명령을 작성하는 행위를 프롬프트 엔지니어링 (Prompt Engineering) 이라고 합니다.
“단순히 결과가 잘 나올 때까지 마구잡이로 아무 명령이나 시도해보면 되는 것 아닌가?” 라고 생각하실 수 있지만, '엔지니어링'이란 단어가 붙듯 다양한 방면의 지식, 기술 그리고 노하우가 필요합니다.
해당 인공지능의 작동 방식, 학습 데이터 종류, 알고 있는 단어 등을 파악하여 프롬프트를 작성하는 것 외에도 생성 결과에서 서비스에 사용할 정보만 추출하여 재구성하는 코딩 스킬도 요구됩니다.
달파에서는 GPT를 사용하는 프로젝트를 다수 진행하였습니다.
소설의 앞부분을 토대로 뒷부분을 작성하는 소설 생성 AI, 엑셀이나 PDF를 읽고 이해하여 요약하는 정보 추출 AI, 사용자의 질문을 이해하고 답변해주는 CS 대응 AI 등을 개발하고 실서비스에 적용시키기도 했습니다.
하나하나 재미있는 프로젝트들이었고 다양한 종류의 AI들을 개발하면서 인터넷에서 알게 된 인사이트들도, 달파만의 인사이트들도 많이 생겼습니다.
달파 전용 프롬프트 창고를 만들자!
달파의 다음 고민은 ‘어떻게 얻은 인사이트들을 팀원들에게 효과적으로 공유할지’, 그리고 ‘어떻게 팀원들의 인사이트들을 쉽게 공유받을 수 있는지’ 였습니다.
GPT는 다양한 프로젝트에서 유용하게 사용할 수 있는 서비스이고, 그를 잘 쓰기 위한 프롬프트 엔지니어링은 이미 저희가 가진 핵심 기술들 중 하나가 되었습니다.
하지만 팀원들끼리 그동안 했던 프로젝트에서 사용했던 GPT prompt나 변수들에 대한 사항들이 제대로 공유되지 않았고, 때로는 거의 재사용이 가능한 비슷한 task에서 처음부터 프롬프트 엔지니어링을 하는 상황도 생겼습니다.
병렬적으로 다양한 AI를 동시에 제작하는 달파의 시스템상 개개인의 반복되는 시행착오를 줄여 생산성을 높히기 위한 방법이 절실했습니다.
GPT 이외의 부분에서 성능 개선을 하기 위한 여유도 확보해야 했고요. 개인이 아닌 팀 단위로 인사이트를 쌓는 방법을 강구했고, 얼마 안 가 ‘달파만의 프롬프트 창고가 있었으면 좋겠다!’라는 결론에 도달했습니다.
방법이 결정되자 빠르게 구체화하여 행동에 옮겼고, 그렇게 사내 github에 ‘tech-awesome-gpt-prompts’ 라는 레포지토리가 만들어졌습니다.
‘tech-awesome-gpt-prompts’은 GPT를 사용하는 프로젝트들에 대한 모든 인사이트를 모아 생산성과 안정성을 빠르게 확보하자는 목표로 제작되었습니다.
가장 먼저 저희가 한 것은 이제까지 한 모든 프로젝트들을 비슷한 것들끼리 모은 것이었습니다.
CS 대응, 정보 추출, 요약, 번역, 생성 등 목적에 따라 8가지로 나눴고 수십 개의 프롬프트들을 분류했습니다.
프롬프트뿐만 아니라 사용한 모델이나 GPT를 사용할 때 설정해줘야 하는 다양한 parameter들도 포함하여 다른 엔지니어들이 바로 테스트해볼 수 있게 만들었습니다.
비슷한 역할을 하는 프롬프트들을 보면 겹치는 부분도 많지만 각 AI 엔지니어들의 개성이 담긴 문구들이 눈에 띕니다.
‘왜 이런 식으로 작성했냐’를 물어보면 전부 이유가 있었고 뜻밖에 도움이 되는 부분도 많았습니다. 실제로 이 과정에서 많은 프로젝트들의 프롬프트에 개선이 이루어졌고 더 좋은 서비스를 제공할 수 있었습니다.
이렇게 서로 간의 차집합을 보며 흩어질 뻔했던 아이디어들을 공유하여 자신의 것을 개선하고, 합집합을 점점 키워 GPT의 포텐셜을 100% 활용할 수 있도록 노력하는 것이 각 엔지니어들의 지적 만족감도 채워주고 회사의 Sales에도 도움이 되었습니다.
거기서 끝나지 않고 코드적인 인사이트도 공유하고 있습니다.
갑자기 OpenAI 서버가 불안정해져서 API에서 오류가 발생하거나 결과 전송이 지연될 때, 원하는 형식의 결과가 나오지 않을 때 등 다양한 예외적인 상황에서의 처리 방법 등을 파악하여 안정적인 서비스를 제공하기 위한 뼈대 코드 (Skeleton Code)를 게시하였습니다.
서비스를 개발할 때 엔지니어가 가장 골머리를 앓는 부분이 이런 예외 처리라고 해도 과언이 아닌데, 이런 인사이트의 공유는 서비스 불안정성을 사전에 방지하는 동시에 AI 엔지니어의 불필요한 리소스 낭비 또한 줄여줬습니다.
AI 인사이트 공유의 중요성
요약하자면 인사이트 공유의 장점은 아래의 3가지로 요약할 수 있습니다.
- 엔지니어들의 장기적인 성장과 지적 만족감 충족
- 상품 생산성 증대 및 서비스 성능 향상
- 실서비스 안정성 확보와 불필요한 리소스 낭비 방지
저희는 구성원들의 생산성과 성장을 위해 많은 고민을 하고 있고, ‘tech-awesome-gpt-prompts’ 또한 그 중 하나입니다.
GPT 관련 인사이트뿐 아니라 데이터 정제, AI 모델 학습, 최신 AI 트렌드 및 논문, 외부 툴 사용 등 다양한 항목들에 대해 팀원들 간의 공유를 적극적으로 권장하고 있습니다.
만약 개발팀의 성장을 위해 뭘 해야하는 지 고민하고 계신다면, 이런 내부 공유 프로세스가 터닝포인트가 될 수 있습니다.
당장 맡고 있는 프로젝트 업무와의 균형을 유지하면서 장기적으로 성장을 위한 포석도 쌓아올려 좋은 팀을 만들어가셨으면 좋겠습니다.
긴 글 읽어주셔서 감사합니다!