[AI 서비스 개발] 프로프트 엔지니어링, RAG
1. 프롬프트 엔지니어링이란?
- 생성형 AI 모델이 원하는 결과를 생성하도록 유도하는 명령어(프롬프트)를 설계하고, 최적화 하는 과정
- 인간의 의도를 AI가 정확히 이해하고, 그에 맞는 출력을 생성할 수 있도록 돕는 역할
2. 주요 프롬프트 엔지니어링 기법
- chain of Thought (CoT) 프롬프팅: 모델이 문제를 단계별로 해결하도록 유도하여, 복잡한 추론을 수행하게 하는 방식
- ReAct: 모델이 추론과 행동을 번갈아 수행하며 복잡한 작업을 해결하도록 하는 방식
- Self-Consistency Prompting(자기일관성 프롬프트 기법): 동일한 프롬프트를 여러 번 실행하여 다양한 응답을 생성하고, 그 중 가장 일관된 응답을 선택하는 방식
3. RAG
- 외부 지식 소스에서 정보를 검색해, 응답을 생성하는 방식
- 최신 정보나 도메인 특화 지식을 반영할 수 있어, LLM의 한계를 보완
1) 주요 구성 요소
- 인덱싱 및 검색: 외부 데이터를 임베딩하여 벡터 데이터베이스에 저장하고, 사용자 쿼리에 따라 관련 정보를 검색
- 생성: 검색된 정보를 LLM에 입력하여, 사용자 쿼리에 대한 응답을 생성
2) RAG와 파인튜닝의 차이점
- 파인튜닝은 모델 자체를 특정 데이터로 재학습시키는 반면, RAG는 외부 정보를 검색하여 응답에 활용
- RAG는 최신 정보 반영이 용이, 파인튜닝은 특정 작업에 최적화된 성능을 제공
3) RAG 시스템에서 검색기의 역할
- 사용자 쿼리에 맞는 관련 정보를 외부 데이터에서 찾아내는 역할
- 검색기의 성능은 전체 RAG 시스템의 응답 품질에 큰 영향을 미침
4) RAG 성능 평가 방법
- 정확도(Accuray): 응답이 실제 정답과 얼마나 일치하는지 평가
- 정밀도(Precision)와 재현율(Recall): 검색된 정보의 관련성, 포괄성 평가
- BLEU: ROUGE 점수: 생성된 텍스트의 품질 평가
5) 검색기의 성능을 향상 시키는 방법
- 하이브리드 검색: 키워드 기반 검색과 의미 기반의 검색을 결합해 정확도를 높임
- 재정렬: 검색된 결과를 추가 모델을 사용하여 재정렬하여 관련성이 높은 정보를 상ㅅ위에 배치
- 쿼리확장: 사용자 쿼리에 관련된 용어나 동의어를 추가해 검색 범위를 넓힘
6) 주요 과제
- 검색 정확도: 검색기가 관련 없는 정보를 가져올 경우, 응답의 품질이 저하
- 응답 일관성: 검색된 정보가 상충할 겨우, 응답의 일관성이 떨어질 수 있음
- 실시간 처리: 대용량 데이터에서의 실시간 검색과, 응답 생성은 시스템 자원을 많이 소모
7) 고려 요소
- 데이터 소스의 신뢰성: 정확하고 신뢰할 수 있는 외부 데이터를 사용
- 검색기와 생성기의 통합: 검색된 정보를 효과적으로 생성기에 전달하여 응답에 활용할 수 있어야 함
- 시스템 확장성: 데이터 양이 증가해도 시스템이 안정적으로 작동할 수 있도록 설계
4. 벡터 기반 검색에서 정확도를 높이기 위한 기법
1) 임베딩 품질 향상
- 도메인 특화 모델 사용: 의료/법률 문서ㅏ면 일반 모델보다 특화 모델로 개선
- 전처리 강화: 불용어 제거, 정규화, 줄바꿈/특수문자 정리로 noise 감소
- 정확한 문서 쪼개기 : 문맥이 자연스럽게 유지되도록 chunk_size와 overlap 조정
2) 검색구조 개선(Retrieval 개선)
- Hybrid Search : 키워드 기반 BM25 + 벡터 기반 검색 결합 → Recall 향상
- 쿼리 확장: 사용자 쿼리에 동의어, 관련어 추가로 검색 범위 확장
- Reranking: 1차로 검색된 문서들 중에서 질문과 가장 관련 있는 문서를 더 정밀한 모델로 다시 정렬하는 기법
- Metadata Filtering : 벡터 검색 전에 태그/카테고리로 필터링해 정밀도 높이는 방법
3) LLM과 연결 구조 튜닝
- context 압축 : 검색 결과가 너무 많을 때 핵심만 요약 후 전달해 토큰을 절약하고, 집중도를 높임
- chunck 선택 기준: top-k가 아니라, 점수 기준 필터 또는 다중 샘플링 활용
- 프롬프트 개선으로 지시 명확화