임베딩에서 LLM으로 최종 전환
나는 며칠간 요동치던 ClawMux 분류기를 최종적으로 확정하고 컨텍스트 압축 시스템을 완성한 날이었다.
그리고 QA Agent 시트 작성 에이전트도 다듬었다.
ClawMux의 양 축이 제자리를 잡은 마일스톤이었다.
며칠 전에 키워드 분류기를 임베딩 모델로 바꿨다.
118메가바이트짜리 다국어 임베딩 모델이었다.
의미 기반으로 분류하니까 키워드보다는 나았지만 경량 모델의 한계가 명확했다.
사전 학습된 가벼운 모델이 내놓는 분류 품질에 천장이 있었다.
그래서 임베딩을 버리고 싼 LLM으로 왔다.
에이전트 플랫폼에 이미 연결된 프로바이더를 재사용하니까, 새로운 인프라를 붙일 필요도 없었다.
reasoning 비활성화
LLM으로 바꾸면서 비용이 걱정됐다.
LLM이 분류할 때 추론에 토큰을 쓰면 비용이 들고 속도도 느려진다.
그래서 reasoning 비활성화 모듈을 만들었다.
6개 API 포맷별로 reasoning 비활성화 파라미터를 주입한다.
분류기 LLM이 추론에 토큰을 낭비하지 않게 막는 거다.
그리고 최대 토큰 수를 1로 잡았다.
L, M, H 세 글자 중 하나만 반환한다.
단순, 보통, 복잡. 이 세 글자로 라우팅이 결정된다.
Q 등급 제거
원래는 네 등급이었다.
L, M, H에 Q가 있었다.
Q는 컨텍스트가 부족하다는 뜻이었다.
근데 Q를 빼기로 했다.
이유는 단순했다.
이제 분류기가 전체 메시지 기록을 항상 볼 수 있게 됐다.
그러니까 “컨텍스트가 부족하다”는 판정 자체가 의미가 없어졌다.
맥락을 다
볼 수 있는데 더 보겠다는 건 말이 안 된다.
그래서 Q를 없애고 세 등급으로 정리했다.
실패를 숨기지 않는다
포맷 에러가 나면 피드백을 주고 최대 두 번 재시도한다.
그래도 실패하면 503 에러를 반환한다.
조용히 기본값으로 폴백하지 않는다.
분류 실패를 숨기면 잘못된 라우팅이 조용히 일어난다.
단순한 요청을 비싼 모델로 보내거나, 복잡한 요청을 싼 모델로 보내는 식이다.
그걸 막으려면 분류 실패를 명시적으로 드러내야 한다.
컨텍스트 압축 완성
분류기와 함께 ClawMux의 다른 축인 컨텍스트 압축도 완성했다.
LLM 에이전트는 대화가 길어지면 컨텍스트 윈도우가 찬다.
그러면 이전 대화를 요약해서 압축해야 한다.
그래야 더 긴 대화를 유지할 수 있다.
근데 압축이 잘못되면 중요한 정보가 날아간다.
그래서 압축 품질을 보장하는 장치가 필요했다.
구조화된 프롬프트
압축 프롬프트를 구조화했다.
대화를 태그로 감싸고 목표, 진행 상황, 결정 사항을 구조화된 섹션으로 정리하라고 지시한다.
그리고 고유 식별자, 해시, URL은 보존하라고 강조한다.
이런 값이 날아가면 복구가 안 된다.
대화의 원래 언어도 유지하라고 넣었다.
품질 검증
압축 결과를 검증하는 품질 보장 장치도 만들었다.
필수 섹션 여섯 개를 확인한다.
빠진 섹션이 있으면 피드백과 함께 다시 만든다.
최대 세 번까지 재생성한다.
재시도 로직도 보강했다.
작업자가 세 번 재시도하고 지수 백오프에 최대 5초 지터를 넣었다.
그리고 타임아웃을 60초에서 900초로 늘렸다.
압축은 생각보다 오래 걸리는 작업이라 타임아웃이 너무 짧으면 제대로 완료되기 전에 잘렸다.
Compaction 감지
그리고 Compaction 감지도 만들었다.
요청 헤더나 프롬프트 패턴으로 감지하면 미리 만들어둔 요약을 즉시 반환한다.
업스트림 호출을 생략하는 거다.
대화 정리 요청이 들어오면 바로 처리할 수 있게 하는 장치다.
QA Agent 시트 작성 에이전트
ClawMux 외에 QA Agent 시트 작성 에이전트도 다듬었다.
자동 테스트가 불가능한 케이스를 식별하는 기준을 명확히 했다.
그리고 memo 필드를 기획자 중심으로 다시 썼다.
이전에는 memo가 엔지니어 중심이었다.
기술 디테일 위주로 적혀 있었다.
근데 memo를 읽는 사람은 기획자다.
의사결정에 쓸 수 있는 요약이 들어가야 했다.
그래서 memo 작성 기준을 기획자 독자 중심으로 바꿨다.
이 케이스가 왜 자동화 대상이 아닌지, 사람이 확인하려면 뭘 봐야 하는지를 기획자가 읽고 바로 이해할 수 있게 적는다.
마무리
ClawMux의 양 축이 제자리를 잡았다.
분류기는 임베딩에서 싼 LLM 한 글자 방식으로 최종 확정됐고 컨텍스트 압축은 품질 검증과 재시도 로직을 갖추고 완성됐다.
분류기 진화는 세 번의 시도 끝에 가장 단순한 방식이 이긴 케이스다.
14개 차원의 키워드 점수보다, 118메가바이트짜리 임베딩 모델보다, 싼 LLM이 내놓는 한 글자가 더 정확했다.
복잡한 걸 쓰려다가 결국 가장 단순한 게 이기는 경우가 많다.
컨텍스트 압축은 품질 보장이 핵심이었다.
그냥 요약하면 중요한 정보가 날아간다.
필수 섹션을 검증하고 빠지면 다시 만들게 해서 압축이 의미를 잃지 않게 만들었다.
이제 ClawMux가 들어온 요청을 분류하고, 변환하고, 필요하면 압축하는 전체 흐름이 안정적으로 돌아간다.