API 진입
FastAPI 엔드포인트에서 사용자 질문을 ChatState로 구성한 뒤 메인 오케스트레이터를 호출하고, 결과와 출처를 DB에 저장 후 반환하는 핵심 흐름입니다.
사용자가 복용 중인 약 정보와 건강 기록을 저장하고, LLM 기반 의료 챗봇을 통해 질병·약물 관련 질문에 답변하는 개인 의료 정보 관리 서비스 입니다.

Medinote는 흩어져 있는 처방전과 진료 기록을 구조화된 데이터로 정리하고, 복약 이력을 체계적으로 관리할 수 있도록 돕는 서비스입니다. 특히 단일 RAG 구조가 가지는 환각과 도메인 혼선 문제를 해결하기 위해, 질문 의도를 파악하는 Supervisor와 6개의 전문 도메인 에이전트로 구성된 멀티 에이전트 아키텍처를 주도적으로 설계 및 구현하여 보다 정확하고 안전한 의료 정보를 제공합니다.
처방전과 약 사진을 찍으면 OCR이 핵심 정보를 추출하여 자동으로 복약 리스트를 생성합니다.
병용 금기나 주의 사항을 데이터베이스 기반으로 분석해 사용자에게 즉각적인 주의 메시지를 전달합니다.
단순 통합 검색이 아닌, Supervisor가 질문을 분류해 사용자DB·질병·약·웹 등 6개의 에이전트 중 최적의 경로로 답변을 생성합니다.
복잡한 의료 데이터를 로드맵 형태로 요약하여 사용자가 자신의 건강 흐름을 이해하도록 돕습니다.

* OCR·LLM·STT 처리는 Redis Queue 기반의 비동기 파이프라인으로 구성해, 요청이 몰리는 상황에서도 메인 API 응답을 안정적으로 유지하도록 설계했습니다.

* Supervisor 노드가 사용자의 질문 의도를 분석하고, 6개의 특화 에이전트(사용자 정보 DB, 채팅 내역 DB, 비의료 담당, 질병 전문, 약 전문, 웹서치) 중 가장 적합한 에이전트를 동적으로 선택하여 답변을 생성하도록 직접 구조를 설계했습니다.
FastAPI 엔드포인트에서 사용자 질문을 ChatState로 구성한 뒤 메인 오케스트레이터를 호출하고, 결과와 출처를 DB에 저장 후 반환하는 핵심 흐름입니다.
프레임워크 종속성 없이, 사용자 질문을 벡터화하여 에이전트 키워드들과 코사인 유사도를 계산해 가장 연관성 높은 1차 후보군을 빠르게 도출합니다.
LLM 플래너로 동적 순서를 수립해 에이전트들을 순차적으로 실행하며 Context를 쌓은 뒤, 슈퍼바이저가 한 번에 매끄러운 최종 답변을 생성하여 비용과 시간을 최적화합니다.
선택된 에이전트는 독립적으로 RAG 검색, Reranking, Q-score 평가를 수행하며, 신뢰도가 낮을 경우 동적으로 Fallback)까지 연동해 할루시네이션을 방어합니다.
문제 — 약물·질병 데이터 출처별 구조와 표현 방식 상이 → 서비스 활용 어려움
해결 — 질병·약품 데이터 분리 전처리 전략 및 약품 중심 정규화 파이프라인 구축
근거 기반 의료 정보 제공 가능한 정규화 데이터 구조 확보
문제 — 하나의 범용 RAG 파이프라인으로 모든 질문 처리 → 도메인 혼선 및 확장성 한계
해결 — 프레임워크 종속성을 배제한 커스텀 Supervisor + 6개 특화 에이전트 아키텍처 직접 설계
질문 유형별 최적의 에이전트가 동적으로 조합되어, 환각을 방어하고 비용·속도·안정성을 모두 잡아낸 고품질 커스텀 RAG 아키텍처 완성
문제 — 의료 챗봇 답변의 법적·윤리적 위험 관리 필요
해결 — 프롬프트·응답 템플릿 기반 답변 범위 제한 가드레일 설계
법적 리스크 최소화 및 안전 중심 의료 챗봇 UX 확보
문제 — 유사/동일 질문에 대해 매번 LLM을 호출하여 불필요한 비용과 대기 시간 발생
해결 — Redis 기반 시맨틱 캐싱(Semantic Caching) 도입
LLM API 호출 횟수 감소를 통한 토큰 비용 대폭 절감 및 사용자 평균 응답 대기 시간 단축