멀티턴 RAG에서의 문맥 유지 전략
멀티턴 대화란 사용자가 여러 번 연속적으로 질문을 던지는 상황을 말합니다.
예를 들어, 사용자와 AI 사이에 다음과 같은 흐름이 있다고 해봅시다.
User: "X100 제품의 무게는 얼마야?"
User: "그보다 가벼운 모델은 있어?"
User: "그 모델은 방수되니?"
이처럼 두 번째 이후의 질문들은 대부분 앞선 질문의 문맥을 전제로 합니다.
따라서 RAG 시스템이 이런 흐름을 정확히 파악하고 연결된 문맥을 유지하며 검색과 생성을 수행할 수 있어야 합니다.
멀티턴 문맥이 필요한 이유
유형설명
지시어 생략 | “그거” “그 제품” “그 사람”처럼 이전 대상이 명시되지 않음 |
조건 누적 | “그중 가장 저렴한 걸 알려줘” → 이전 질문의 결과에 기반 |
시간 경과 | 사용자와의 대화가 길어질수록 이전 정보 잊지 않아야 함 |
일관된 응답 기대 | 동일 맥락에서 동일 답변을 기대 (고객지원, 상담 등) |
문맥 유지를 위한 기술적 접근 방식
1. 전체 대화 삽입 방식
- 이전 대화 전부를 prompt에 넣음
- 가장 단순하지만 context 길이 제한이 크고, 비용이 많이 듦
User: A 제품의 배터리 용량은? AI: 5000mAh입니다. User: 그보다 큰 건? → 이 대화 전체를 LLM에 다시 전달하여 문맥을 유지함 |
2. Query Rewriting 방식
- 현재 질문과 이전 대화를 기반으로 명확한 검색용 쿼리로 재작성
- 예시:
- “그보다 가벼운 모델은 있어?”
→ “X100 제품보다 가벼운 모델이 있는지 알려줘”
- “그보다 가벼운 모델은 있어?”
- 장점: 검색 정확도 향상, token 절약
- 구현: GPT-4, T5, FLAN 등을 사용하거나 LangChain의 ConversationalRetrievalChain 활용
3. Conversation Summary 방식
- 전체 대화를 한두 문장으로 요약하여 context에 넣음
- 장점: 긴 대화를 compact하게 전달
- 단점: 요약 품질이 성능에 직접 영향
4. Slot Memory 방식
- 각 턴에서 추출된 정보(제품명, 조건 등)를 저장하고 다음 질문에 자동 주입
- 자연어보다는 구조화된 대화 시스템에 적합
ConversationBufferMemory란?
LangChain에서 제공하는 메모리 전략 중 하나로,
지금까지의 모든 대화 이력을 저장하여 LLM 호출 시 함께 프롬프트로 삽입하는 기능입니다.
특징:
항목설명
저장 내용 | User와 AI 사이의 전체 대화 이력 |
구현 방식 | 문자열로 저장되어 LLM 호출 시 messages로 주입됨 |
사용 시기 | 문맥을 직접 LLM에 제공하고 싶은 경우 |
단점 | 대화가 길어질수록 토큰 초과 위험 ↑ |
예시 코드 (LangChain 기준, Python):
from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationChain from langchain.chat_models import ChatOpenAI memory = ConversationBufferMemory(return_messages=True) conversation = ConversationChain( llm=ChatOpenAI(), memory=memory, verbose=True ) conversation.predict(input="Z3 모델은 무게가 얼마나 나가?") conversation.predict(input="그보다 더 가벼운 모델은?") |
위 예시에서 두 번째 질문을 받을 때, LLM은 자동으로 첫 질문–응답을 기억한 상태로 작동합니다.
ConversationBufferMemory vs 다른 메모리
메모리 전략설명장단점
ConversationBufferMemory | 대화 전체를 문자열로 저장 | 문맥 완전 유지 / context 제한 있음 |
ConversationSummaryMemory | 대화 내용 요약 저장 | 토큰 효율 ↑ / 요약 오류 가능성 |
ConversationKGMemory | 대화 내용을 개체 간 관계로 저장 (KG 형태) | 구조화 필요 / 복잡한 흐름에 적합 |
CombinedMemory | 위 메모리들을 조합 | 정확도 + 효율 균형 가능 |
멀티턴 문맥 유지 전략 요약
전략설명
전체 삽입 | 정확하지만 비효율적 |
Query Rewriting | 검색 품질 극대화, 비용 절감 |
요약 삽입 | 긴 대화 처리에 유리 |
ConversationBufferMemory | 구현 쉬움, 토큰 효율 낮음 |
Slot Memory | 구조화된 대화에는 강력함 |
공감버튼이 큰 힘이 됩니다
'AI > RAG 이론' 카테고리의 다른 글
RAG 구현시 고려사항 : (5) RAG 성능 최적화 전략 (1) | 2025.07.11 |
---|---|
RAG 구현시 고려사항 : (4) 프롬프트 설계 및 Generator 고려사항 (1) | 2025.07.11 |
RAG 구현시 고려사항 : (3) Retriever 설계 고려사항 (0) | 2025.07.11 |
RAG 구현시 고려사항 : (1) RAG란 무엇인가? (0) | 2025.07.11 |
벡터 검색 : Reranking 필요 이유 (0) | 2025.07.11 |
댓글