동적 컨텍스트 선택 — 질문에 따라 자동으로 맞는 정보 가져오기
한줄 요약
동적 컨텍스트 선택은 질문을 분류하고, 분류 결과에 따라 적절한 데이터 소스에서 컨텍스트를 자동으로 가져오는 파이프라인이다 — 의료 AI에서는 처방 질문과 진단 질문에 서로 다른 DB를 연결하는 것이 대표적이다.
본문
정적 컨텍스트의 한계
정적 컨텍스트는 미리 정해진 정보를 모든 질문에 동일하게 제공하는 방식이다.
[정적 컨텍스트]
시스템 프롬프트: 당신은 내과 전문의입니다.
참조 문서: 고혈압 가이드라인 전문 (50페이지)
이 방식은 고혈압 관련 질문에는 잘 작동한다. 하지만 당뇨 질문이 들어오면? 약물 상호작용 질문이 들어오면? 정적 컨텍스트에는 해당 정보가 없으니 AI는 학습 데이터에 의존하거나 환각을 생성한다.
그렇다고 모든 가이드라인을 컨텍스트에 넣을 수도 없다. 컨텍스트 윈도우에는 용량 제한이 있고, 불필요한 정보가 많으면 오히려 답변 품질이 떨어진다.
동적 컨텍스트의 개념
동적 컨텍스트는 질문이 들어올 때마다 필요한 정보를 실시간으로 선택해서 컨텍스트를 구성하는 방식이다.
[동적 컨텍스트 흐름]
질문 입력 → 질문 유형 분류 → 해당 DB에서 관련 문서 검색
→ 검색 결과를 컨텍스트로 조립 → LLM에 전달 → 답변 생성
핵심은 질문 유형 분류와 적절한 소스 연결이다.
질문 유형 분류 파이프라인
질문을 분류하는 방법은 여러 가지다.
규칙 기반 분류: 키워드로 분류한다. “용량”, “처방”, “약물”이 포함되면 처방 질문, “진단”, “감별”, “증상”이 포함되면 진단 질문으로 분류한다. 간단하지만 오분류가 잦다.
LLM 기반 분류: 작은 LLM을 사용해 질문의 의도를 파악한다. 정확도가 높지만 추가 비용과 지연 시간이 발생한다.
임베딩 기반 분류: 질문을 벡터로 변환하고 사전 정의된 카테고리 벡터와 유사도를 비교한다. 빠르고 비교적 정확하다.
의료 AI에서는 LLM 기반 분류가 가장 신뢰할 수 있다. 의료 질문은 맥락에 따라 의미가 달라지기 때문이다.
[LLM 분류 프롬프트 예시]
다음 질문을 아래 카테고리 중 하나로 분류하세요.
카테고리:
1. 처방/약물 (용량, 약물 선택, 상호작용)
2. 진단/감별 (증상 해석, 검사 해석, 감별진단)
3. 가이드라인/프로토콜 (치료 기준, 스크리닝 기준)
4. 환자 교육 (생활습관, 질환 설명)
5. 행정/수가 (보험, 청구, 서류)
질문: "메트포르민과 시타글립틴 병용 시 주의사항은?"
→ 카테고리: 1. 처방/약물
라우터 패턴 (Router Pattern)
라우터 패턴은 질문 분류 결과에 따라 서로 다른 데이터 소스로 요청을 라우팅하는 아키텍처다.
[라우터 패턴 구조]
┌─ 처방 질문 → 약물 DB (DrugBank, 상호작용 DB)
질문 → 라우터 ─┼─ 진단 질문 → 감별진단 DB (DxPlain, 증상 DB)
├─ 가이드라인 질문 → 가이드라인 저장소 (최신 PDF)
└─ 환자 교육 질문 → 환자 교육 자료 DB
각 경로에서 검색된 문서가 컨텍스트가 된다. 이렇게 하면 처방 질문에는 약물 정보만, 진단 질문에는 감별진단 정보만 컨텍스트에 들어가므로 관련성이 극대화된다.
의료 시나리오: 자동 컨텍스트 연결
구체적인 의료 시나리오를 설계해 보자.
시나리오 1: 처방 질문
입력: "eGFR 25인 환자에게 메트포르민 사용 가능한가?"
→ 분류: 처방/약물
→ 연결 DB: 약물 데이터베이스
→ 검색: 메트포르민 + 신기능 기준
→ 컨텍스트: "메트포르민은 eGFR < 30에서 금기 (FDA, KDIGO 2024)"
→ 답변 생성
시나리오 2: 진단 질문
입력: "65세 남성, 갑자기 발생한 흉통 + 호흡곤란의 감별진단은?"
→ 분류: 진단/감별
→ 연결 DB: 감별진단 데이터베이스
→ 검색: 급성 흉통 + 호흡곤란 + 고령 남성
→ 컨텍스트: 급성관상동맥증후군, 폐색전증, 대동맥박리,
긴장성 기흉의 감별 포인트
→ 답변 생성
시나리오 3: 복합 질문
입력: "이 당뇨 환자가 흉통을 호소합니다. 현재 약물 조절이 필요한가요?"
→ 분류: 처방/약물 + 진단/감별 (복합)
→ 연결 DB: 약물 DB + 감별진단 DB 동시 조회
→ 컨텍스트: 흉통 감별 정보 + 당뇨약 심혈관 영향 정보
→ 답변 생성
복합 질문은 여러 카테고리에 동시에 해당할 수 있다. 라우터가 다중 경로를 지원해야 한다.
검색 품질이 전체 품질을 결정한다
동적 컨텍스트 선택에서 가장 중요한 것은 검색 품질이다. 분류가 정확해도 DB에서 엉뚱한 문서를 가져오면 의미가 없다.
검색 품질을 높이는 방법은 다음과 같다.
의료 용어 동의어 사전: “고혈압”과 “HTN”, “hypertension”을 동일하게 취급한다. 청크 크기 최적화: 의료 문서는 섹션 단위로 잘라야 한다. 문단 단위로 자르면 맥락이 끊긴다. 메타데이터 필터링: 검색 결과에서 날짜, 출처, 근거 수준으로 필터링한다. 리랭킹: 1차 검색 결과를 LLM이 다시 관련성 순으로 정렬한다.
구현 시 고려사항
- 분류 지연 시간: LLM 분류는 0.5~2초가 추가된다. 실시간 응답이 필요하면 임베딩 기반 분류를 고려한다.
- 분류 오류 대응: 오분류 시 답변 품질이 크게 떨어진다. 확신도가 낮은 분류는 여러 경로를 동시에 조회하는 폴백 전략이 필요하다.
- 비용 관리: 매 질문마다 여러 DB를 조회하면 비용이 늘어난다. 캐싱과 배치 처리를 활용한다.
핵심 정리
- 정적 컨텍스트는 한 주제에만 대응하고, 동적 컨텍스트는 질문에 따라 적절한 정보를 실시간으로 가져온다
- 질문 유형 분류는 규칙 기반, LLM 기반, 임베딩 기반이 있으며 의료에서는 LLM 기반이 가장 정확하다
- 라우터 패턴으로 질문 유형별 서로 다른 데이터 소스를 연결한다
- 복합 질문은 다중 경로 동시 조회로 대응한다
- 동적 컨텍스트의 최종 품질은 검색 품질에 의해 결정된다