독서 및 회고

[좋은 글] 생성형 AI 실무 적용:프롬프트 엔지니어링 전략

지미닝 2024. 10. 12. 20:07

요약

본 글은 ‘Applied LLMs: What We’ve Learned From A Year of Building with LLMs’라는 글을 바탕으로, IT 스타트업에서 생성형 AI를 활용하여 제품 개발에 적용한 경험과 그 과정에서 얻은 전략을 공유합니다. B2B 고객의 자연어로 된 운송 예약을 정해진 주문서 형식으로 변환하는 작업을 담당하면서, 해당 글에서 제시한 프롬프트 엔지니어링 전략이 큰 도움이 되었습니다. 이 글에서는 n-shot 프롬프트와 체인 오브 씽킹(Chain of Thought) 기법 등의 생성형 AI 모델 성능 향상을 위한 프롬프트 기법을 소개하며, 이를 실제로 업무에 적용한 경험을 바탕으로 효과적인 프롬프트 엔지니어링 전략을 논의합니다.

 

서론

지난 6개월 동안  IT 스타트업에서 생성형 AI를 활용한 운송 예약 처리 시스템 개발에 참여하며, 특히 B2B 고객들이 카카오톡이나 수기로 요청한 운송 예약 건을 정해진 주문서 양식으로 변환하는 작업을 수행했습니다. 생성형 AI를 통해 이 작업을 자동화할 수 있었으며, 프로젝트를 진행하면서 ‘Applied LLMs: What We’ve Learned From A Year of Building with LLMs’라는 글과 GeekNews에서 제공한 한국어 번역본이 큰 도움이 되었습니다. 생성형 AI 모델을 사용할 때 성능과 속도 간의 trade-off가 존재하지만, 이 글에서는 성능을 높이기 위한 프롬프트 엔지니어링에 초점을 맞추어 서술하고자 합니다.

 

본론

 ‘Applied LLMs: What We’ve Learned From A Year of Building with LLMs’에서는 생성형 AI를 실무에 적용할 때 성능을 극대화하기 위해서는 프롬프트 엔지니어링이 핵심적이라 주장합니다. 이 글에서는 프롬프트 구성을 최적화하는 방법과 효과적인 전략을 제시하며, n-shot 프롬프트, 구조화된 프롬프트 설계, 그리고 작업별 프롬프트 분리를 통해 모델의 성능을 크게 향상시킬 수 있음을 설명합니다. 실제 업무에서 이를 적용한 경험을 바탕으로 설명하고자 합니다.

 먼저, n-shot 프롬프트는 모델에게 여러 데모를 제공하여 문맥을 학습하고, 새로운 상황에 일반화할 수 있도록 돕는 기법입니다.[1] n이 너무 낮으면 특정 사례에 고정되어 일반화하는 능력이 떨어질 수 있으므로 최소 5개의 예시를 제공하는 것이 좋습니다. OpenAI의 연구에 따르면, GPT-3zero-shot, one-shot, 그리고 few-shot 학습 각각에서 다른 성능을 보였는데, 그 중에서도 few-shot은 일부 과제에서 사전 학습된 모델보다 더 뛰어난 성과를 나타내었습니다.[2] GPT-4 역시 다양한 작업에서 few-shot 학습의 성능이 탁월하게 향상하였음을 확인할 수 있었습니다.[3] 업무에서 이를 적용했을 때, 다양한 입력 예시를 제공하면 모델이 새로운 입력에 대해서 더 유연하게 반응할 수

있음을 확인했습니다. Gpt-4o 모델에 주문서 변환 요청을 하였을 때, zero-shot 프롬프트로 시도했을 때, 출력 형식조차 따르지 못하는 사례를 확인했습니다. 3개의 데모를 제공하니 출력 형식을 대체로 맞췄으나, 데모 데이터에 속한 특정 값에 의해서 의도한 대로 출력하지 못한 사례를 확인했습니다. 해당 화주의 운송 내역에서 최소 5개의 데이터를 선별해 데모로 제공한 결과 이전에 비해 더욱 유연하게 새로운 입력을 처리하는 것을 확인했습니다.

 다음으로, 프롬프트는 구조화된 입력과 출력 형식을 사용하는 것이 좋습니다. 모델에게 제공하는 데이터를 구조화된 형식으로 제공하면, 모델이 입력을 더 쉽게 이해하고 더 정확한 출력을 생성할 수 있습니다. OpenAIGPT-4의 경우 특정 파라미터를 통해서 JSON이나 마크다운 형식으로 데이터를 제공했을 때, 모델의 출력 품질이 크게 향상되도록 설계하였습니다.[4]

 마지막으로, 작고 한 가지 일을 명확히 지시하는 것이 좋습니다. 프롬프트를 복잡하게 구성하면 정확도가 떨어질 수 있습니다. 대신, 프롬프트를 단일 목적에 맞춰 작고 명확하게 설계하면 더 높은 정확도를 유지할 수 있습니다.[5] 앞서 언급한 주문서 자동완성 프로젝트의 자연어의 운송 예약 데이터에서 /도착지 정보를 처리하는 과정에서 어려움이 있었습니다. 일부 데이터는 출발지가 명시되어 있었지만 도착지가 빠져 있거나, 반대로 도착지만 있는 경우가 많았습니다. 해당하는 상황에서 변환 결과에 정확도가 떨어져, 프롬프트를 전체 주문서와 따로 분리하여 출/도착지를 별도로 처리하도록 설계했습니다. 각 작업에 맞춘 단일 프롬프트를 사용하였고, 이에 따라 모델이 더 명확한 작업 지시를 받아 성능이 향상되었습니다. 특히, 데이터가 일관되지 않았음에도 불구하고 이러한 프롬프트 분할을 사용하여 예측 정확도를 높일 수 있었습니다. 또한 학습 데이터를 별도로 관리하면서 더욱 구조화된 데이터를 제공하였고, 결과적으로 성능이 향상되었습니다.

이와 같은 프롬프트 엔지니어링 기법은 프로젝트 전반에서 모델의 성능을 향상하는 데 있어 매우 효과적이었습니다.

 

결론

 생성형 AI는 실무에서 다양한 산업에 혁신적인 변화를 가져올 수 있는 강력한 도구입니다. 특히 자연어 주문 처리에 AI 기술을 도입한 경험을 통해, 프롬프트 엔지니어링의 중요성과 n-shot 프롬프트, 데이터 구조화를 통한 성능 향상 가능성을 확인할 수 있었습니다.

또한, AI를 단순히 제품에 적용하는 것을 넘어, 개발 과정에서 GPT 같은 모델을 사용할 때 올바른 질문을 구성하는 방법이 필수적임을 깨달았습니다. 프롬프트 최적화와 질문 구성 능력은 AI와 상호작용할 때 더 나은 결과를 얻기 위한 핵심 요소이며, 이를 통해 개발자와 다양한 사용자들에게도 큰 도움이 될 수 있는 중요한 기술이라고 생각합니다.

 

참고

[1] Yan, Eugene, Bryan Bischof, Charles Frye, Hamel Husain, Jason Liu, and Shreya Shankar. 2024. ‘Applied LLMs - What We’ve Learned From A Year of Building with LLMs’. Applied LLMs. 8 June 2024. https://applied-llms.org/.

[2] GeekNews 한국어 번역본: 1 동안 LLM 함께 구축하고 배운