멀티모달 RAG 실시간 이미지 질의 구현 – FastAPI로 이미지 업로드부터 답변 합성까지

실시간_이미지_질의

2편까지 정리하고 나니 인덱싱 쪽은 어느 정도 자신이 붙었다. 그런데 정작 데모 날짜가 다가오면서 진짜 부담스러웠던 건 따로 있었다. 현장 엔지니어가 설비 사진을 찍어서 바로 질문하는 시나리오였다. 사용자가 이미지를 올리는 순간부터 답변이 나오기까지, 텍스트 전용 RAG에서는 신경 쓸 필요 없던 문제들이 줄줄이 튀어나왔다. 이미지를 받는 엔드포인트를 어떻게 설계할지, 이미지에서 뽑은 정보와 벡터 검색 결과를 어떻게 … Read more

GraphDB, pgvector 비교 – 그래프 DB, 벡터 DB 선택과 결정

graphdb-vs-pgvector-rag-comparison

pgvector를 RAG에 붙이고 꽤 만족스럽게 쓰고 있었다. 이미 PostgreSQL을 쓰고 있었고, 확장 하나 설치하면 벡터 검색까지 되니까 인프라를 늘리지 않아도 됐다. 문서 수가 수십만 건 수준일 때는 HNSW 인덱스로 응답 속도도 충분했고, BM25 하이브리드 검색까지 붙이니까 검색 품질도 나쁘지 않았다. 그러다 어느 날 질문 하나가 들어왔다. “이 계약서에 등장하는 모든 법인이 서로 어떻게 연결돼 있고, … Read more

RAG를 도입했는데도 AI가 틀린 답을 내놓는 이유! GraphRAG가 해결하는 방식

graphrag_rag

RAG를 붙이면 환각이 줄어든다고 했다. 분명히 줄긴 했다. 그런데 없어지지는 않았다. LangGraph 기반 RAG 시스템을 직접 운영하면서 가장 자주 들은 피드백이 “왜 이 질문에는 제대로 답을 못 하지?”였다. 단순한 사실 조회는 잘 됐다. 그런데 조금만 복잡해지면 흔들렸다. 여러 개체의 관계를 엮어서 추론해야 하는 질문, 전체 데이터에서 패턴을 찾아야 하는 질문에서 벡터 검색 기반 RAG는 근본적인 … Read more

LangGraph에서 에이전트가 멈추는 이유 – Human in the Loop 설계 패턴 정리

langgraph human in the loop

에이전트가 멈춰야 할 때 멈추지 않거나, 멈추지 말아야 할 때 멈추는 문제를 LangGraph로 멀티에이전트 시스템을 운영하면서 꽤 오래 고민했다. 이론적으로 Human-in-the-Loop는 단순하다. 에이전트가 스스로 판단하기 어려운 지점에서 사람에게 확인을 요청하고, 사람의 입력을 받아서 다시 진행하는 것이다. 그런데 실제로 구현해보면 “어느 노드에 interrupt를 거냐”와 “체크포인터를 어떻게 설계하냐”가 에이전트 전체 흐름을 좌우한다는 걸 알게 된다. 이 글은 … Read more

vLLM 배치 사이즈부터 모델 스왑까지 직접 운영

vLLM_배치사이즈_모델스왑

공식 문서는 설치까지는 친절하다. 그 다음부터가 문제다. vLLM 깃허브 star 수는 이미 수만을 넘었고, 한국어로 된 설치 가이드도 제법 나온다. 그런데 막상 추론 서버를 실제 운영 환경에 올려보면 공식 문서가 다루지 않는 영역이 금방 나타난다. GPU 메모리 설정을 어떻게 잡아야 안정적으로 돌아가는지, 배치 사이즈가 응답 시간에 어떻게 영향을 주는지, 모델을 스왑해야 할 때 서비스를 얼마나 … Read more