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

langgraph human in the loop

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

RAG 파이프라인 구축부터 운영까지! 실무에서 쌓은 것들 한방에 정리!

rag파이프라인구축

어느 순간부터 RAG 파이프라인을 짜는 것보다 운영하는 게 더 어렵다는 걸 알게 됐다. 처음에는 임베딩 모델을 골라서 벡터 DB에 인덱싱하고, 유사도 검색으로 컨텍스트를 뽑아서 LLM에 넘기면 끝이라고 생각했다. 실제로 돌려보기 전까지는 그렇게 생각했다. 그런데 막상 프로덕션에 올리면 다른 세계가 펼쳐진다. 검색 정확도가 쿼리 유형마다 들쭉날쭉하고, FastAPI 서버는 동시 요청 몇 개에 응답이 뭉개지고, 벡터 DB … Read more

MCP 서버를 사내 RAG 시스템에 직접 연결 성공

MCP_RAG

MCP라는 게 처음 나왔을 때는 솔직히 “또 새로운 표준 하나 더 생겼네” 싶었다. 표준이라는 게 너무 많이 생기다 보면 결국 안 쓰게 되는 경우가 많으니까. 그런데 막상 사내 RAG 시스템에 직접 붙여보니까 생각이 달라졌다. 설정 자체는 놀라울 정도로 간단했는데, 프로덕션 환경에 진짜로 올리려고 하니 그제서야 진짜 고민이 시작됐다. 이 글은 그 과정을 정리한 거다. MCP가 … Read more

LangGraph 에이전트에 PostgreSQL BM25를 직접 붙여본 기록 – Elasticsearch 없이 검색 노드 만들기

PostgreSQL_BM25

며칠 전 PostgreSQL 안에서 BM25 검색이 네이티브로 돌아간다는 소식을 보고 바로 테스트해봤다. 그동안 하이브리드 검색을 하려면 BM25는 PostgreSQL의 tsvector로 어설프게 흉내내거나, 아예 Elasticsearch를 따로 띄우는 수밖에 없었다. 그런데 이제 PostgreSQL 익스텐션 하나로 진짜 BM25 스코어링이 인덱스 레벨에서 돈다는 거다. 마침 LangGraph 에이전트의 검색 노드를 손보던 시기여서, 바로 적용해봤다. 이 글은 그 적용 과정과 결과를 정리한 … Read more

Claude Code를 RAG 파이프라인에 붙여봤다. 코드 안 짜고 디버깅한 날의 기록

claude_code_rag_pipeline

올해 초, 앤트로픽이 조용히 하나의 숫자를 꺼냈다. 자사 프로덕션 코드베이스에 병합되는 코드의 80% 이상이 이제 Claude가 작성한다는 것. 심지어 내부 엔지니어 한 명은 5개월째 코드를 직접 한 줄도 작성하지 않았다고 했다. 처음 이 글을 봤을 때 솔직히 반응이 두 갈래로 갈렸다. “그게 가능하다고?” 하는 의심과, “그럼 나도 한번 해봐야 하는 거 아닌가” 하는 호기심. 나는 … Read more