개요 및 문제제기
비정형적인 고객 문의 데이터를 자동으로 카테고리화 할 수 있는 챗봇을 만들어보고자 함
GPT에게 Data analysis 기능 만을 사용하여 엑셀 문서를 분류해달라고 하면 ‘기타’ 카테고리가 너무 많이 잡히는게 큰 단점
‘기타’로 분류된 문의들을 최대한 구체화하여 이를 재카테고리화 하는 것이 목적
Data analysis 기능이 필요하여 GPTs를 사용
그동안 부트캠프를 진행하며 인상 깊었던 프롬프트 기법들을 활용하여 진행
작성한 프롬프트 전문
Act as 고객 문의 분류기.
Using Chain of Thought.
Think Step by step, and speak Korean.
Task 1
Think : [User questions]를 분석하고 유저의 질문들을 분석
Action : [User questions]을 카테고리화
Task 2
Think : 카테고리 비율을 볼때 ‘기타’가 20% 이상인지 판단
Action : 1) ‘기타’ 카테고리가 20% 이상이면 기타 카테고리에 속하는 질문들의 키워드를 추출. 2) ‘기타’ 카테고리가 20% 미만이면 추가 작업 없음. 결과를 출력하고 하위 태스크 진행하지 않음
Task 3
Think : 추출한 키워드를 기존 카테고리에 추가할 수 있을까? 없다면 새로운 카테고리를 만들어야 함
Action : 추출한 키워드를 이용하여 재카테고리화 및 신규 카테고리 생성
Task 4
Think : ‘기타’ 카테고리가 20% 수준인지 확인
Action(Case1): ‘기타’ 카테고리 재분류화 할지 되묻기
다음의 형식을 따라서 보고서처럼 답변을 만들어줘
- < > 이 기호 안에 들어간 내용은 일종의 placeholder야 적절한 제목을 찾아서 대체해줘
- [ ] 이 기호 안에 들어간 내용 또한 일종의 placeholder지만 제목이 아니라 본문에 가까워
- 각 기호 안의 요청사항에 알맞은 내용으로 대체해서 템플릿에 맞춰줘
- 요약 부분은 최대한 짧게 해
<최초 분류 과정>
[최초 분류 과정 요약]
<생각의 흐름>
[생각의 흐름 요약]
<결론>
[결론 요약]
적용된 프롬프트 기법 및 설명
persona pattern
Act as ~ 로 시작하는 전형적인 persona pattern 기법을 사용하였음.
페르소나 패턴의 가장 큰 장점인 ‘경제성’에 주목하여 부수적인 설명은 넣지 않았음
Cot & ReAct
각 수행단계 자체를 CoT 틀에 넣어 구현하였음
세부적인 태스크 수행은 ReAct 기법을 적용하여 행위의 목적과 수행의 결과를 명확화 하였음
CoT나 ReAct 기법을 단독으로 사용할 때 보다 탁월한 성능을 발휘하였음
최초, CoT 방식으로만 구현하였을 때의 프롬프트 -------- 당신은 문서 분석기 입니다. 아래 지침을 따르십시오 1. User 질문에 따라 문서를 분석하여 카테고리화 합니다. 2. 이렇게 생성한 카테고리를 우선 출력합니다. 이후 ‘기타’ 카테고리 결과에서 주요 키워드를 추출하여 하위 카테고리로 생성합니다. 3. 기타의 하위 카테고리와 기존 카테고리 간 유사성을 분석하고 유사성이 높은 카테고리끼리는 통합하여 새로운 카테고리 리스트를 생성합니다. 4. 카테고리별 간단한 설명과 카테고리별 지분율, 갯수 등을 조합하여 리스트로 출력 합니다. 5. 모든 답변은 한국어로 수행하십시오.
단순히 개념 증명을 위한 프롬프트이긴 하였으나, 시행 결과가 매번 상이하였고 지침을 올바르게 수행하지 않는 문제가 강했음
하지만 이를 아래 방식으로 변경한 후 효율이 비약적으로 상승하였음
Task 1 Think : [User questions]를 분석하고 유저의 질문들을 분석 Action : [User questions]을 카테고리화 Task 2 Think : 카테고리 비율을 볼때 ‘기타’가 20% 이상인지 판단 Action : 1) ‘기타’ 카테고리가 20% 이상이면 기타 카테고리에 속하는 질문들의 키워드를 추출. 2) ‘기타’ 카테고리가 20% 미만이면 추가 작업 없음. 결과를 출력하고 하위 태스크 진행하지 않음 Task 3 Think : 추출한 키워드를 기존 카테고리에 추가할 수 있을까? 없다면 새로운 카테고리를 만들어야 함 Action : 추출한 키워드를 이용하여 재카테고리화 및 신규 카테고리 생성 Task 4 Think : ‘기타’ 카테고리가 20% 수준인지 확인 Action(Case1): ‘기타’ 카테고리 재분류화 할지 되묻기
<굉장히 만족스러운 결과. 단일 메시지에서 충분히 데이터를 분석하고 결과를 도출>
Flipped interactive pattern
마 지막 Task 4 부분에 기타 비율이 ‘20% 가량’ 이라는 애매한 조건을 설정
이는 GPTs가 데이터 분석을 계속해서 진행하여 단위 답변의 종료 시간이 매우 길어짐에 따라 이를 사용자의 의도에 맞게 조절하고자 추가한 프롬프트
엄밀히 따지면 ‘Flipped interactive pattern’의 완벽한 예는 아니지만, 실용적인 측면에서 이를 일부 차용하여 적용할 수 있음을 확인하였음.
데이터 분석 태스크를 종료할지 유저의 판단을 물어보고 다른 질문을 추가할 수 있도록 함
**본 게시물 작성 중 프롬프트 추가(분석 과정이 종료되고 다른 질문은 없는지 지속적으로 질문하도록 변경 → 분석기 기능을 넘어 분석된 데이터를 바탕으로 다른 질문에 대응하도록 흐름을 만들어 보고자 하였음. 이에 대한 결과는 계속 FU 해보겠습니다)
Templete pattern
태스크는 올바르게 수행하나, 단위 답변의 길이가 너무 길다는 문제가 있었음
이에 템플릿 패턴을 활용하여 내용을 보고서 형식으로 정리하고, 이를 요약하여 답변의 총 길이를 줄이고자 함
사용한 프롬프트는 아래와 같음
다음의 형식을 따라서 보고서처럼 답변을 만들어줘 - < > 이 기호 안에 들어간 내용은 일종의 placeholder야 적절한 제목을 찾아서 대체해줘 - [ ] 이 기호 안에 들어간 내용 또한 일종의 placeholder지만 제목이 아니라 본문에 가까워 - 각 기호 안의 요청사항에 알맞은 내용으로 대체해서 템플릿에 맞춰줘 - 요약 부분은 최대한 짧게 해 <최초 분류 과정> [최초 분류 과정 요약] <생각의 흐름> [생각의 흐름 요약] <결론> [결론 요약]
각 기호에 대한 설명과 예시 템플릿을 제공하여 답변이 간결하면서도 이해하기 쉽게 나올 수 있도록 조절
결론
gpt의 Data analysis 기능을 활용하여 재카테고리화 기능을 구현하였음
LLM 기반이기에 카테고리 분류로 끝나는 것이 아니라, 이를 통해 ‘기능 구현 우선순위’,' ‘마케팅 방안 제안’ 등 좀 더 실용적인 질문이 가능하다는 장점이 있음
혼자 또는 그룹이 사용하기에 적절하나, 보다 디벨롭 할 수 있는 방안(분류 체계화, 프롬프트 체인을 활용하여 기능 뎁스를 늘릴 수 있는 방안)이 있을 것으로 생각됨
작업한 GPTs 링크 : https://chat.openai.com/g/g-cqj2t7NRD-gogaegmunyi-bunryugi
한계
분류 시, 세션별로 카테고리 개수 및 비율에서 차이가 있음
최초 ‘기타’ 비율이 너무 과도하게 높음
추가 질의 부분에서 지금보다 높은 가치를 제공할 수 있어야함