내 글투를 학습해 few-shot으로 글 생성해보자(RAG 위생)
과거 글 통계와 임베딩 few-shot 선택에 자기 참조·중복 제외 위생 규칙을 더해 LLM이 내 문체로 초안을 만드는 파이프라인을 정리했다
내 글투를 학습해 few-shot으로 글 생성해보자(RAG 위생)
내 글투를 학습해 few-shot으로 글 생성해보자(RAG 위생)
LLM에 글쓰기를 시키면 내 문체가 아닌 일반 AI 문체가 나왔다. 과거 글을 few-shot으로 넣으면 나아졌지만, 고르는 방식에 따라 품질 차이가 컸다.
1. 서론 (Introduction)
- 문제/상황 (Problem): LLM이 생성한 글은 내 문체가 아니었다. 과거 글을 few-shot으로 넣으면 나아졌지만 잘못된 글을 골라넣으면 오히려 망쳤다.
- 목적 (Purpose): few-shot 예시 선택을 자동화하고 RAG 위생 규칙(자기 참조·중복 제외)을 적용해 일관된 문체의 초안을 만드는 파이프라인을 구현한다.
- 대상 (Target Audience): LLM으로 자신의 문체를 재현하는 글 생성 도구를 만들고 싶은 개발자.
2. 방법 및 과정 (Methods & Process)
- 배경 조사 및 데이터 (Data Collection): 작성한 글 전체를 문단 단위로 쪼개 임베딩하고 글 ID·날짜·카테고리를 메타데이터로 붙여 ChromaDB에 저장했다. 별도로 전체 글에서 평균 문장 길이, 자주 쓰는 어미(~했다/~이다/~됐다/~한다/~해보자/~하자), 문단 구성 패턴 같은 문체 통계를 뽑아 “이런 스타일로 쓰라”는 프롬프트 가이드로 함께 넣었다.
- 접근 방법 (Approach Methods):
- [방법 1]: 유사도 기반 선택. 새 글 주제를 임베딩해 가장 유사한 과거 글 상위 N개를 찾는다.
- [방법 2]: RAG 위생 필터. 지금 쓰려는 글과 주제가 동일한 과거 글(자기 참조)은 제외하고, 선택된 예시 간 유사도가 0.6 이상이면 하나만 남겨(중복 제외) 3~5개만 최종 선택한다.
- 분석 및 해결 프로세스 (Analysis Flow):
- 도구/기술: 문단 단위 임베딩, ChromaDB, TF-IDF성 문체 통계 추출, 자카드/코사인 유사도 기반 중복 판정.
- 주요 단계: 새 글 주제 임베딩 $\rightarrow$ 유사도 상위 후보 추출 $\rightarrow$ 자기 참조 제외 $\rightarrow$ 중복 제외 $\rightarrow$ 최종 3~5개 few-shot 확정 $\rightarrow$ 문체 통계와 함께 프롬프트 구성.
- 결과 도출 및 검증: 자기 참조 제외가 없을 때는 이전 글의 내용이 그대로 재사용되는 경우가 있었다. 3~5개의 다양한 예시를 넣었을 때가 동일 예시를 반복해서 넣었을 때보다 문체 일관성이 높았다.
3. 결과 (Results)
- 분석 결과 요약: few-shot 예시 선택을 자동화한 뒤 생성된 초안의 문체가 기존 글과 유사해졌다. 자기 참조 제외가 없을 때는 이전 글의 내용이 그대로 재사용되는 문제가 있었고, 3~5개 다양한 예시가 동일 예시 반복보다 문체 일관성이 높았다.
4. 인사이트 및 액션 (Insights & Action)
- 인사이트 (Insight): few-shot 선택의 핵심은 “가장 유사한 것”이 아니라 “스타일은 같지만 내용은 다양한 것”이다. 다양성이 일반화를 돕고, 자기 참조는 복사로 이어진다.
- 실행 방안 (Action Plan): 글을 발행할 때마다 색인을 갱신해 최신 글이 few-shot 풀에 포함되게 한다. 최근 글일수록 현재 문체에 가까우므로 날짜 가중치를 주는 것도 효과적이다.
- 한 줄 결론 (Key Takeaway): LLM 문체 학습의 핵심은 few-shot 품질이고, 좋은 예시를 고르는 로직이 생성 품질을 결정한다. 샘플 코드
- 다음 스텝 (Next Step): 현재 중복 판정 임계값(0.6)은 고정값인데, 글 종류(Quick/Deep/Diary)별로 적정 임계값이 다를 수 있어 트랙별로 별도 튜닝하는 작업이 남아 있다.
This post is licensed under CC BY 4.0 by the author.