Category
RAG가 자꾸 엉뚱한 답을 해서 top-k만 만지다가, 리랭커 한 단 끼웠더니 검색 품질이 확 살아난 경험.
Model Context Protocol(MCP) 메인테이너가 2026년 로드맵을 공개했다. 네 가지 우선순위는 (1) 전송 계층 확장성 — 원격 HTTP 전송을 개선해 수평 확장을 가능케 하고 .well-known 메타데이터로 서버 역량을 탐색, (2) 에이전트 통신 — 장시간 작업을 다루는 Tasks 프리미티브에 재시도·만료 정책을 추가, (3) 거버넌스 성숙 — Working Group 중심으로 SEP(스펙 개선 제안) 검토를 위임, (4) 엔터프라이즈 준비 — 감사 로그·SSO 인증·게이트웨이·설정 이식성이다. 핵심은 로컬 stdio 중심에서 평범한 HTTP 인프라 위에서 스케일하는 상태 비저장(stateless) 원격 서버로 무게중심이 옮겨간다는 점이다. 한국 개발자라면 사내 MCP 서버를 round-robin 로드밸런서 뒤에 둘 수 있는지, Tasks 확장으로 장시간 잡을 어떻게 모델링할지 미리 검토할 가치가 있다.
Chroma 연구진(2025-07)이 18개 모델(Claude/GPT/Gemini/Qwen)을 측정해 보인 핵심은, LLM이 컨텍스트를 균일하게 처리한다는 통념이 틀렸다는 것이다. 입력 길이가 늘면 단순 과제에서도 성능이 의미 있게 떨어진다(컨텍스트 로트). 발견: ①질문-정답의 의미 유사도가 낮을수록 길이가 길어질 때 더 빨리 무너진다 ②distractor(방해 문장)는 하나만 있어도 성능을 깎고, 4개면 가중된다(이때 Claude가 환각률 최저, GPT가 최고) ③반직관적으로 구조가 잘 잡힌 haystack보다 섞인(shuffled) haystack에서 더 잘 찾는다 — 구조적 패턴이 어텐션을 교란한다는 뜻. 원인 중 하나로 대부분 모델이 쓰는 RoPE 위치 인코딩의 감쇠 효과가 지목된다. 그래서 부상한 분야가 '컨텍스트 엔지니어링': 전부 욱여넣지 말고 매 스텝 필요한 정보만 동적으로 조립하는 설계다. 대표 기법이 컨텍스트 컴팩션(한도 근처에서 내용을 요약→새 윈도우 재시작)과 검색 기반 선별 주입이며, 엔터프라이즈 AI의 70% 이상이 장기 세션 에이전트라는 점에서 필수가 됐다.
RAG를 운영에 올리려면 '체감'이 아니라 측정이 필요하고, 2026년 오픈소스 평가 3종의 역할 분담이 정리됐다. RAGAS는 reference-free(정답셋 없이 LLM-as-judge) 평가를 개척한 사실상의 산업 표준으로, 월 40만 다운로드·누적 2천만 회 평가가 돌고 있다. 핵심 4지표는 context precision/recall(검색 단계)과 faithfulness/answer relevancy(생성 단계)로, 검색 실패와 생성 실패를 분리해 진단한다. faithfulness는 출력이 검색된 컨텍스트를 벗어나거나 모순되는 경우 — 즉 추론 계층에서의 환각 — 를 잡아내며, faithfulness·context precision이 0.8을 넘으면 프로덕션 수준으로 본다. 실무 권고는 명확하다: 지표 탐색·분석은 RAGAS, CI/CD에서 회귀를 막는 자동 게이트는 DeepEval, 실험 추적 대시보드는 TruLens. 한 도구로 다 하려 하지 말고 단계별로 쓰라는 것이다.
대규모 LLM 추론에서 prefill(입력 프롬프트 전체 처리)과 decode(토큰 1개씩 생성)를 같은 인스턴스에 두지 않고 물리적으로 분리하는 'disaggregated serving'이 2026년 사실상 표준 패턴으로 올라섰다. 이유는 두 단계의 병목이 다르기 때문이다. prefill은 compute-bound라 큰 배치로 묶을수록 유리하고, decode는 memory-bandwidth-bound이면서 지연에 민감하다. 한 인스턴스에 섞으면 서로의 SLA를 깎아먹는다. vLLM은 prefill·decode를 각각 별도 인스턴스로 띄우고 --kv-transfer-config로 KV 캐시 전송 커넥터(NIXL, LMCache, 공유메모리)를 지정한다. SGLang은 라우터의 --disaggregation-mode로 prefill 워커·decode 워커·라우터를 구성하고 Mooncake/NIXL 백엔드를 지원하며, GB200 NVL72 클러스터에서 디코딩 처리량 2.7배를 보고했다. Meta·LinkedIn·Mistral·HuggingFace가 이미 vLLM 기반 분리 서빙을 프로덕션에서 돌리고 있고, LMSYS는 H100 96장(prefill 3노드+decode 9노드)으로 DeepSeek-R1 분리 서빙을 시연했다.
2026 벡터 검색은 '비용'과 '멀티모달' 두 축에서 흔들린다. 비용 축: 대량 코퍼스에서 메모리 상주형 전용 벡터DB는 비싸다. Turbopuffer는 벡터를 S3/GCS 오브젝트 스토리지(약 $0.02/GB)에 두고 자주 쓰는 데이터만 SSD($0.1/GB)로 캐싱해, 대형 문서 아카이브에서 압도적으로 싸지만 콜드 쿼리 지연(300~800ms)을 감수한다. 반대로 이미 Postgres를 쓰고 1천만~1억 벡터 미만이면 pgvector(+pgvectorscale)가 8~25ms p95에 월 $30 수준으로 가성비 1위, Qdrant는 하이브리드 검색·필터링(15~40ms), Pinecone은 가장 쉬운 매니지드지만 같은 규모에서 월 ~$180로 비싸다. 멀티모달 축: ColBERT 계열의 late interaction(쿼리 토큰×문서 패치를 MaxSim으로 매칭)을 비전 모델로 확장한 ColPali/ColQwen이 부상했다. PDF 페이지를 이미지(시각 패치 임베딩 그리드)로 바로 인코딩해 OCR을 통째로 건너뛰고, 표·차트·다이어그램·레이아웃을 보존한다 — OCR 파이프라인이 깨먹던 정보다.
2026 상반기 RAG 검색 품질의 정석 조합이 굳어졌다. 임베딩은 최고 품질 API로 Voyage voyage-3-large, 범용으로 OpenAI text-embedding-3-large, 멀티미디어(텍스트+이미지 단일 임베딩)로 Cohere embed-v4, 다국어/교차언어로 Gemini Embedding 2가 꼽힌다. 셀프호스팅은 BGE-M3가 dense+BM25+리랭커 세 모델을 하나로 대체하는 하이브리드 모드로 현실적 1순위이고, Apache-2.0로 풀린 Qwen3-Embedding 시리즈(0.6B/4B/8B)는 8B가 MTEB 다국어 리더보드 1위(70.58, 2025-06 기준)에 100개 이상 언어를 지원해 오픈소스 진영을 끌어올렸다. 핵심 실무 원칙: 'top-50 안에는 정답 문서가 있는데 top-5에는 없다'면 더 좋은 임베딩으로 갈아타는 것보다 리랭커 추가가 더 큰 이득을 준다. 리랭커는 프로토타입엔 CPU에서 도는 무료 ms-marco-MiniLM-L-6-v2, 운영엔 Cohere rerank-v3나 BGE 리랭커를 붙이는 식으로 비용·지연·언어지원을 저울질한다.
한국어 사내 문서 RAG 만들면서 임베딩 모델 4개를 갈아끼웠는데, 정작 정확도를 살린 건 모델이 아니라 청킹이었다는 삽질기.
프롬프트 평가 자동화하려고 LLM-as-judge를 만들었다가 점수 인플레·순서 편향·그럴듯함 편향에 차례로 데인 기록.
자체 모델을 서빙할 때 어떤 추론 엔진을 고르느냐가 비용·지연·처리량을 모델 아키텍처보다 더 크게 좌우한다. vLLM은 빠른 기동과 폭넓은 모델 호환성이 강점이라 합리적인 기본값이다. SGLang은 RadixAttention(접두사 공유 KV 캐시 재사용), 커널 퓨전, 구조적 생성에 강해 공통 시스템 프롬프트나 RAG 접두사를 공유하는 워크로드, 구조화 출력에서 큰 이득을 낸다. TensorRT-LLM은 NVIDIA GPU에 깊게 최적화돼 최대 처리량을 노리지만 빌드·운영 복잡도가 높다. 실무 원칙은 단순하다 — 워크로드가 긴 공유 접두사를 자주 쓰면 SGLang을, 다양한 모델을 빠르게 띄워야 하면 vLLM을, 고정 모델로 극한 처리량이 필요하면 TensorRT-LLM을 검토한다. 어떤 경우든 자사 트래픽 패턴(입력/출력 길이 분포, 동시성)으로 직접 벤치마크해야 한다.
Qdrant self-host에서 200만 벡터를 4GB 인스턴스에 욱여넣다 OOM으로 검색이 통째로 죽은 새벽, 그리고 양자화·재색인 분리·관리형 비교 후기.
Anthropic의 Claude API 프롬프트 캐싱이 2026년 2월부터 조직 단위가 아닌 워크스페이스 단위 격리로 바뀌었다. 같은 조직 안에서도 워크스페이스 간 캐시가 분리돼 데이터 경계가 명확해진다. 캐시 읽기 비용은 표준 입력가의 10% 수준이라 동일 컨텍스트를 반복 주입할 때 최대 90%를 아낄 수 있고, 기본 5분 TTL 외에 추가 비용으로 1시간 캐시도 선택할 수 있다. 긴 시스템 프롬프트, 도구 정의, RAG로 끌어온 문서 블록처럼 매 호출 동일하게 들어가는 앞부분에 cache breakpoint를 두는 것이 핵심 패턴이다. 여기에 Batch API(입·출력 50% 할인), 모델 라우팅, 컨텍스트 편집(오래된 도구 결과·thinking 블록 정리)을 결합하면 에이전트 워크로드의 토큰 비용 구조를 크게 바꿀 수 있다. 한국 팀이 다회전 대화형 서비스를 운영한다면 캐시 적중률을 KPI로 잡을 만하다.
LLM 출력을 안정적으로 다루려면 구조화 출력(Structured Outputs)과 함수 호출(Function Calling)의 차이를 이해해야 한다. JSON 모드는 '유효한 JSON'만 보장하지만, 구조화 출력은 strict: true로 제공한 JSON 스키마를 모델이 반드시 따르도록 제약한다 — 즉 형식뿐 아니라 필드·타입 준수까지 보장된다. 함수 호출은 모델이 어떤 도구를 어떤 인자로 부를지 결정하게 하는 메커니즘이며, 여기에도 스키마 강제를 결합할 수 있다. 실무 구분은 이렇다 — 외부 행동(도구 실행)을 트리거하려면 함수 호출을, 단지 응답을 타입 안전한 JSON으로 받아 후속 코드에 넘기려면 구조화 출력을 쓴다. 둘은 배타적이지 않고 함께 쓰인다. 참고로 OpenAI의 구형 Assistants API는 2026년 8월 26일 종료 예정이므로 신규 설계는 최신 권장 경로(Responses/Agents 계열)를 따르는 것이 안전하다. 한국 팀이 안정적 파이프라인을 만들 때 파싱 실패·재시도 비용을 크게 줄여 준다.
에이전트 품질은 모델 자체보다 컨텍스트 창에 무엇을 채우느냐에 점점 더 좌우된다. 컨텍스트 엔지니어링은 시스템 지침·사용자 입력·검색 문서·메모리·세션 상태·도구 결과를 한정된 토큰 예산 안에 어떻게 배치할지 설계하는 작업이다. 핵심 기법은 여섯 가지다 — 압축(추출·추상 요약, 사실 추출), 메모리 큐레이션, 프롬프트 캐싱, 요약 아티팩트, RAG, 필터링. 특히 RAG에서는 모든 청크를 그냥 프롬프트에 쏟아붓는 대신, 높은 재현율로 50개 후보를 검색한 뒤 리랭킹으로 상위 5개로 정밀화하는 파이프라인이 일반적으로 더 낫다. 청킹·임베딩·재현율/정밀도 트레이드오프, 최신성 가중치, 중요도 임계값을 함께 다뤄야 환각을 줄이고 비용을 통제할 수 있다. '컨텍스트가 길수록 좋다'는 직관은 종종 틀린다 — 관련성 낮은 토큰은 노이즈이자 비용이다.
2026년 들어 오픈웨이트 코딩 모델이 폐쇄형 프런티어 모델과의 격차를 빠르게 좁히고 있다. DeepSeek-V4(Pro/Flash, 1M 컨텍스트·MIT 라이선스), Qwen3.6 계열의 오픈웨이트 공개, Kimi K2.6, GLM-5.1 등이 멀티스텝 과제 완수, 도구 호출 정확도, 복구 가능한 실패 처리 같은 에이전틱 코딩 지표에서 의미 있는 성과를 보였다. 여러 서드파티 벤치마크(SWE-bench 계열·LiveBench 스냅샷)에서 상위 오픈모델 간 점수 차가 0.2~수 점 수준으로 좁혀졌다는 보고도 나온다. 단, 이런 수치는 측정 시점·하니스·프롬프트에 민감하므로 자사 코드베이스에서 직접 재현 평가하는 것이 필수다. 한국 개발자에게 핵심은 MIT·Apache 등 관대한 라이선스 + 1M 컨텍스트 조합이 온프레미스·VPC 자체 호스팅과 보안 민감 코드 작업의 선택지를 넓힌다는 점이다.