TL;DR
PPT 보고서를 LLM을 통해 특정 형식(JSON)으로 요약할 때, 키워드 누락 문제가 발생하여 명시적 지시문 추가, Chain-of-Thought(생각의 사슬), 역할 기반 프롬프팅, 퓨샷(Few-Shot) 프롬프팅 등 다양한 전략을 시도함.
결과적으로 원샷 대신 퓨샷 프롬프팅으로 변경하니 입력 토큰은 약 22% 증가했지만, 키워드 누락 없이 정확도가 크게 개선됨.
비용과 정확성의 트레이드오프를 고려했을 때 퓨샷 프롬프팅이 효과적임을 확인함.
PPT로 작성된 보고서를 텍스트만 전달하여 LLM 기반으로 보고서를 특정 형식에 맞게 요약하는 시스템을 개발하고 있었습니다.
현재 이슈는 보고서의 특정 슬라이드에 포함되어 있는 키워드들만 가져와서 요약해줘야 했는데, 키워드들이 누락되어 요약되는 이슈가 있었습니다. (여기서 말하는 키워드는 검색어를 의미합니다 (e.g. 삼성전자, 불닭 등등)
문제 상황
예를 들어 “구글 키워드”라는 제목의 슬라이드에 작성된 키워드가 “농심”, “엔씨소프트”, “하이브”이고 “유튜브 키워드”라는 제목의 슬라이드에 작성된 키워드는 “삼양식품”, “롯데칠성” 으로 작성되어 있다고 가정하겠습니다.
요약되어야 하는 키워드들은 “농심”, “엔씨소프트”, “하이브”, “삼양식품”, “롯데칠성” 으로 전부 추출이 되어야 하는데, 실제로 요약 내용에는 “하이브”, “롯데칠성” 키워드가 누락되는 문제가 반복적으로 발생했습니다. (“농심”, “엔씨소프트”, “삼양식품” 만 요약됨.)
현재 프롬프트 작성 전략
기본적으로 작성했던 프롬프트는 보고서 내용에서 작성된 날짜, 제목, 키워드 등등 에 대한 요약 프롬프트를 작성하고 JSON 형식으로 응답받기 위해 JSON 구조를 같이 전달하였습니다.
현재 “원샷” (단 하나의 예시만 제공함으로써 추론 하는 것) 프롬프트 전략을 적용하였습니다.
추가로 낮은 Temperature를 설정하여 모델이(GPT-4o mini 기준) 단어를 불필요하게 변형 없이 생성하도록 하였습니다.
‘Temperature' 값을 낮게 설정하면 일반적인 문장의 답변을, 높게 설정하면 창의적인 답변을 생성하게 됩니다.
프롬프트 최적화 전략
하지만 현재 내용 요약시 키워드가 누락되는 문제가 있어 아래와 같은 프롬프트 최적화를 시도해 보았습니다.
1. 명시적 지시문 추가
- 키워드 강조: 프롬프트 내에 “특정 플랫폼에 나타나는 키워드는 반드시 포함해 주세요”와 같이 직접 명시함으로써, 모델이 해당 키워드들을 요약에 반드시 포함하도록 유도하였습니다.
추가로 키워드들의 개수가 너무 많아지면 모델이 자동으로 키워드들을 누락하는 건지 싶어, 키워드의 개수 제한을 두지 말라고 명시적으로 작성해 주었습니다. - 예시 포함: 실제로 누락되지 않은 올바른 요약 예시를 제공하여, 모델이 어떤 결과를 기대하는지 학습할 수 있도록 하였습니다.
예시 프롬프트
Summarize the PPT content and return a concise JSON response.
Focus especially on any text matching the pattern "keyword:text"
and include all such instances without removing or changing them.
Do not limit the quantity of keywords.
Return your answer in the following JSON structure (in Korean):
{
"title": "<보고서 제목>",
"keywords": [
"keyword:text",
"keyword:text",
"... 추가 키워드 ..."
],
"summary": "<보고서 요약>"
}
2. 생각의 사슬 (Chain of Thought)
생각의 사슬 기법은 모델에게 각 단계를 차례로 생각하며 문제를 해결하도록 요청함으로써, 최종 답변에 이르기까지의 과정을 명확하게 하는 기법입니다.
- 단계 분리: 첫 번째 단계에서 “구글 (유튜브, 네이버) 키워드” 슬라이드 내 키워드들을 추출하도록 요청한 후, 두 번째 단계에서 해당 키워드들을 원하는 변형 하여 응답하도록 요청하였습니다.
예시 프롬프트
[지시사항]
1) 최종 요약에 필요한 모든 텍스트를 PPT 내용에서 발췌하되, 'keyword:'로 시작하는 항목을 절대 누락하지 마세요.
2) 'keyword:'라는 접두어와 뒤에 오는 텍스트(회사명, 상품명, 브랜드명 등)는 원본 그대로 유지해 주세요.
3) 보고서 전체 맥락에 대한 요약은 'summary' 필드에 작성해 주시고, 'title' 필드는 PPT의 첫 슬라이드 또는 주제 문구를 활용해 주세요.
4) 출력은 반드시 JSON 형태의 텍스트여야 하며, 올바른 JSON 구문을 준수해야 합니다.
3. 역할 기반 프롬프트
역할 기반 프롬프트는 명확한 직업(또는 역할)을 명시해 주어 도메인별 맞춤형 응답을 제공받도록 유도할 수 있습니다. 해당 기법을 통해 모델이 올바른 어휘를 선택하도록 할 수 있습니다.
- 역할 부여: 요청에 맞는 명확한 역할을 특정인물이나 직업을 넣어 페르소나를 부여하였습니다. (e.g. 당신은 한국 시장의 전문 데이터 애널리스트입니다. 주어진 보고서를 형식에 맞게 요약하는 것이 과제입니다.)
예시 프롬프트
You are an expert data summarizer specializing in analyzing PPT slides.
Your primary objective is to ensure that all keywords appearing in the slides
are captured accurately without any omission.
Please provide all answers in Korean.
4. 원샷 프롬프트에서 퓨샷 프롬프트로 변경
기존 원샷 프롬프팅 전략으로 1개의 예시를 제공했던 방식에서 퓨샷(few-shot) 프롬프팅 전략을 사용하여 2개의 예시를 제공하여 퓨샷 프롬프팅 전략으로 변경하여 모델이 더 정확하게 추론하도록 퓨샷 프롬프팅 전략을 적용하였습니다.
기존에 “원샷 프롬프팅” 전략을 선택했던 이유는 보고서 내용이 길어서 작성해야 하는 프롬프트 내용도 길었고, 여러 예시를 던져주게 되면 추가 비용(입력 토큰이 많아짐에 따라)이 발생하기 때문에 “원샷”을 통해 문제를 해결하려고 하였습니다.
하지만 키워드 누락 문제는 계속 발생하였습니다.
“요약 정확도 vs 모델 호출 비용” 트레이드오프
보고서 요약 정확도를 더 높이기 위해 GPT-4o mini 모델 사용과 출력 토큰에 비해 입력 토큰의 비용이 적은 점, 보고서 요약은 1달에 최대 7번인 점을 고려해 비용을 감수해야 한다는 것을 말씀드렸습니다.
비용과 정확도를 트레이드오프를 하여 “퓨샷 프롬프팅” 전략을 선택하였고 결론적으로 기존 원샷 대비 퓨샷 프롬프팅 전략 사용 시 입력 토큰이 약 22% 정도 증가 하였지만 정확도 측면에서 큰 이점을 얻었습니다.
(일반적으로 입력 토큰보다 출력 토큰에 더 많은 연산 리소스가 소모되기 때문에 출력 토큰의 비용이 더 높다.)
자세한 pricing 정책은 https://openai.com/api/pricing/ 참고
LLM 기반으로 보고서를 요약하는 과정에서 프롬프팅 최적화 전략을 알아보았고, 더 다양한 상황에서 LLM을 통해 가치 창출을 할 수 있을 것 같다는 생각을 하였습니다.
'트러블슈팅' 카테고리의 다른 글
멀티 스레드로 병렬 처리하는것은 항상 성능에 이점이 있을까? (0) | 2025.01.29 |
---|---|
주식 시황 피드의 종가 오류 해결기(데이터 일관성 개선) (0) | 2024.07.30 |
Confluent Schema Reference 관련 문제 (0) | 2024.07.24 |
[E-commerce] 동시성 문제 해결하기 (비관적 락, 네임드 락, 분산 락) (0) | 2024.05.01 |
[E-commerce] 주문 결제를 이벤트 기반 아키텍처로 구축하기 (0) | 2024.04.16 |