사내 RAG 챗봇을 운영 중인데 이번 달 API 청구액이 갑자기 몇 배로 뛰었습니다. 근데 사용자 수나 대화량은 지난달이랑 비슷해요. 어디서 돈이 새는지 감이 안 잡힙니다.
구조는 흔한 형태예요. 유저 질문 들어오면 벡터DB에서 관련 문서 top-k 뽑아서, system 프롬프트(회사 톤앤매너 + few-shot 예시 몇 개)랑 검색된 문서를 다 합쳐서 매 요청마다 통째로 프롬프트에 넣고 답변을 생성합니다. system이랑 예시는 거의 고정이고, 문서도 질문별로 크게 안 변하는 편이고요.
최근에 검색 품질 높이려고 top-k를 좀 늘리고 문서 청크 크기도 키운 것 말곤 큰 변화가 없는데, 그게 이렇게까지 비용에 영향을 줄까요? 어디를 로그로 찍어봐야 원인이 보일까요?
댓글 2
먼저 로그부터. 응답 usage에서 input_tokens를 요청마다 찍어보세요. 지난달 대비 이게 확 올라와 있으면 진단 끝입니다. 검색 문서가 프롬프트에서 차지하는 비중이 제일 클 거예요.
해법은 프롬프트 캐싱입니다. 안 바뀌는 프리픽스(system + few-shot, 그리고 같은 세션에서 재사용되는 문서)에 cache_control을 걸면 그 부분이 캐시 읽기 가격(원가의 10분의 1 수준)으로 떨어져요. 유저 질문처럼 매번 바뀌는 건 브레이크포인트 뒤에 두고요. 켠 다음 cache_read_input_tokens가 0보다 큰지 확인하면 실제로 먹는지 보입니다.
그리고 top-k를 늘린 게 검색 품질에 실제로 도움이 됐는지도 따로 보세요. 관련 없는 청크를 잔뜩 넣으면 비용만 오르고 답변은 오히려 산만해지는 경우가 많아요. 리랭커로 상위 몇 개만 추리면 비용도 내려가고 품질도 올라갑니다.