블로그로 돌아가기

RAG & 데이터가이드

RAG 질문의 비용: 청크를 몇 개 보낼까

RAG 질문 하나의 토큰을 추정하고, 질문 1,000건과 100,000건의 비용을 실시간 가격으로 확인하며, 예산에 맞는 청크 수를 고르세요.

작성자: CheapTokens Team 게시됨읽는 시간 6분

다이어그램: 질문과 검색된 청크가 모델로 흘러 들어가고, 비용은 청크 수에 따라 달라진다
이 페이지의 내용
  1. RAG 요청 하나에 들어가는 것
  2. 질문 1,000건의 비용
  3. Top-k: 청크마다 같은 양이 더해진다
  4. 프롬프트에 문서 전체, 아니면 청크 네 개
  5. 요청 보내기
  6. 입력을 줄이는 네 가지 방법

문서 챗봇이 동작하고, 첫 청구서가 도착했는데 질문에 비해 너무 큽니다. 거의 모든 RAG 구성에서 비용은 한 곳으로 몰립니다. 바로 모든 질문 앞에 붙여 넣는 검색된 청크입니다. RAG 질문 하나에는 입력 측의 질문 토큰, 지시문 토큰, N개 청크 토큰과 출력 측의 짧은 답변이 듭니다. 청크는 여러분이 통제할 수 있는 부분이고, 청크 하나하나가 모든 요청에 같은 수의 토큰을 더합니다.

이 가이드는 요청 하나를 세고, 1,000건과 100,000건을 실시간 가격으로 계산하며, top-k를 3에서 10으로 옮길 때 무엇이 바뀌는지 보여줍니다. 검색 자체(벡터 스토어, 청킹)는 여러분 쪽에 남고, 최종 생성 호출만 모델 API로 갑니다. 입력과 출력 과금이 처음이라면 입력 vs 출력 토큰부터 보세요.

RAG 요청 하나에 들어가는 것#

회사 문서 위에서 동작하는 지원 봇이 있다고 합시다. 고객이 "2단계 로그인은 어떻게 초기화하나요?"라고 묻고, 검색기가 가장 좋은 구절 다섯 개를 반환하면, 여러분은 이것을 모델에 보냅니다:

  • 시스템 프롬프트: "컨텍스트에서만 답하세요. 없으면 없다고 말하세요." — 서식 규칙을 더하면 약 300 토큰;
  • 약간의 채팅 컨텍스트가 붙은 질문 — 약 200 토큰;
  • 각각 약 500 토큰인 청크 5개 — 5 × 500 = 2,500 토큰;
  • 답변: 짧은 문단 두세 개 — 출력 약 300 토큰.

입력 측은 2,500 + 300 + 200 = 3,000 토큰이고 출력 측은 약 300입니다. 이는 일반적인 지원 봇에 대한 필자의 가정이니 여러분의 숫자로 바꾸세요. 아래 내용은 모두 이 요청 하나를 단위로 씁니다.

구조를 빠르게 보는 방법: 청크가 전체 입력의 약 6분의 5를 차지하고, 입력은 답변의 열 배입니다. 직접 추정해 보세요:

숫자 맞히기

위 요청은 입력 토큰을 몇 개 보낼까요?

정답 보기

정답: 3,000

3,000: 청크 5개 × 500 = 2,500, 시스템 프롬프트 300, 질문 200을 더한 값입니다. 청크가 대부분을 차지합니다.

질문 1,000건의 비용#

요청 하나는 체감하기에 너무 작으니 규모를 키워 봅시다. 입력 3,000, 출력 300이면 질문 1,000건은 입력 토큰 3,000,000개를 보내고 출력 토큰 300,000개를 생성합니다. 아래 슬라이더를 여러분의 봇에 맞게 움직이세요. 사이트가 모든 모델의 실시간 가격으로 다시 계산합니다.

비용 계산기

지원 봇의 하루

요청당 입력 토큰: 3,000 · 요청당 출력 토큰: 300 · 일일 요청 수: 1,000

모델일일월간
GLM-5.3-Flash$0.072$2.16
DeepSeek-V4-Flash$0.075$2.25
MiniMax-M2.7$0.195$5.85

표는 세 모델 모두에 대해 같은 작업량을 보여주며, 옆에 OpenRouter 참조가 있습니다. 입력과 출력을 합친 총액으로 계산하면 여기서는 셋 다 OpenRouter보다 저렴합니다.

모델 요청당 1,000회 요청 OpenRouter, 1,000회 요청
GLM-5.3-Flash $0.000072 $0.072 $0.147
DeepSeek-V4-Flash $0.000075 $0.075 $0.19
MiniMax-M2.7 $0.0002 $0.195 $1.26

요청당 입력 3,000개 및 출력 300개 토큰입니다. 100만 토큰당 가격은 현재 기준이며 당사 요금제에 따라 함께 변경됩니다. OpenRouter 열은 동일한 작업량에 대한 참고 가격을 보여줍니다.

그리고 100,000건이라면? 입력 300,000,000 토큰, 출력 30,000,000 토큰입니다. DeepSeek-V4-Flash에서는 $7.50, GLM-5.3-Flash에서는 $7.20, MiniMax-M2.7에서는 $19.50입니다. 가격은 모델별로 고정되어 피크 시간이 없으므로, 야간 배치와 주간 채팅의 토큰당 비용이 같습니다. 전체 가격표는 가격 페이지에서 보세요.

Top-k: 청크마다 같은 양이 더해진다#

두 번째 시나리오: 사내 위키 어시스턴트입니다. 누군가 "혹시 모르니 3개 대신 10개 청크를 보내자"고 제안합니다. 입력은 직선으로 늘어납니다. 청크마다 모든 요청에 500 토큰이 더해집니다.

세 개 대 열 개: 같은 질문, 다른 입력 크기
청크당 500 토큰 가정에서 top-k 3과 top-k 10의 요청당 입력 토큰

2,000 대 5,500 토큰: 답변 길이는 같으므로 위키 어시스턴트 청구서의 차이는 전부 입력입니다. 이것이 더 나은 답변을 사 주는지는 품질의 문제입니다. 올바른 구절이 이미 컨텍스트에 들어온 지점을 넘으면, 추가 청크는 대부분 노이즈와 비용만 더합니다. k를 고르는 실용적인 방법은 실제 질문 세트를 잡고 올바른 구절이 어느 k에서 나타나는지 확인한 뒤 그보다 조금 위에서 멈추는 것입니다.

컨텍스트 윈도우가 다른 한계입니다. 여기 세 모델 모두 일반적인 top-k에는 충분한 여유가 있습니다. MiniMax-M2.7은 180K 토큰, DeepSeek-V4-Flash는 380K, GLM-5.3-Flash는 390K입니다. 출력 한도는 다릅니다. GLM-5.3-Flash와 MiniMax-M2.7은 답변당 최대 8,192 토큰, DeepSeek-V4-Flash는 최대 32,768 토큰이며, 답변이 짧은 답장이 아니라 긴 보고서라면 이 점이 중요합니다.

사례 선택하기

여러분의 RAG 사례는 무엇인가요?

몇 개의 청크로 짧은 답변

지원 봇이나 FAQ로 top-k가 3–6이고 답변이 수백 토큰이라면 세 모델 모두 맞습니다. 여러분의 질문으로 품질을 보고 고른 뒤, 위의 비용 표가 결정하게 하세요.

긴 답변과 요약

답변이 수천 토큰에 이른다면 DeepSeek-V4-Flash는 답변당 최대 32,768 출력 토큰과 380K 컨텍스트를 허용합니다.

요청당 많은 문서

많은 구절이나 섹션 전체를 합치고 싶다면 GLM-5.3-Flash가 셋 중 가장 큰 컨텍스트인 390K를 가집니다.

프롬프트에 문서 전체, 아니면 청크 네 개#

세 번째 시나리오: 계약 Q&A입니다. 게으른 방식은 30,000 토큰짜리 PDF 전체를 모든 질문에 붙여 넣습니다. 검색 방식은 질문, 지시문, 각각 약 650 토큰인 관련 청크 네 개를 보내 총 약 3,000 토큰입니다. 같은 질문 1,000건, 같은 300 토큰 답변:

DeepSeek-V4-Flash에서 계약 질문 1,000건의 비용
  • 모든 요청에 30,000 토큰 문서 전체$0.48
  • 질문, 지시문, 검색된 청크 4개, 약 3,000 토큰$0.075

문서 전체는 같은 질문에 입력을 열 배, 30,000 ÷ 3,000 = 10, 보냅니다. 컨텍스트에 들어가는 문서에 대한 일회성 질문 하나에는 여전히 말이 됩니다. 하루 종일 답하는 봇이라면 비싼 기본값입니다. 그 입력의 많은 부분이 매번 같은 텍스트라면 프롬프트 캐싱을 읽어 보세요.

요청 보내기#

아래는 생성 단계입니다. 검색 부분은 여러분 몫입니다. chunks은 여러분의 벡터 스토어가 반환한 것입니다. 같은 코드가 OpenAI SDK나 순수 curl에서 동작합니다.

검색된 청크로 질문하기

Python

python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key="YOUR_CHEAPTOKENS_KEY",
)

chunks = ["Chunk 1 text...", "Chunk 2 text...", "Chunk 3 text..."]
context = "\n\n---\n\n".join(chunks)

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    max_tokens=400,
    messages=[
        {"role": "system", "content": "Answer only from the context. If the answer is not there, say so."},
        {"role": "user", "content": f"Context:\n{context}\n\nQuestion: How do I reset two-factor login?"},
    ],
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

curl

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer YOUR_CHEAPTOKENS_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
    "max_tokens": 400,
    "messages": [
      {"role": "system", "content": "Answer only from the context. If the answer is not there, say so."},
      {"role": "user", "content": "Context:\nChunk 1...\n\nQuestion: How do I reset two-factor login?"}
    ]
  }'

Python 예제의 마지막 줄이 유용한 부분입니다. usage.prompt_tokens이 질문당 실제 입력이니, 3,000 추정치와 비교하고 필자의 가정을 여러분의 숫자로 바꾸세요. 예제처럼 전체 모델 id를 쓰세요: deepseek-ai/DeepSeek-V4-Flash-0731. id는 문서에 나열되어 있습니다. 전체 설정은 문서에 있고, 봇의 토큰이 대화에서 어떻게 쌓이는지 보고 싶다면 긴 채팅이 더 비싼 이유가 히스토리 부분을 다룹니다.

입력을 줄이는 네 가지 방법#

max_tokens부터 시작하세요. 답변을 제한하고 폭주하는 응답으로부터 보호합니다. 그다음 k를 올바른 구절을 여전히 찾는 가장 작은 값으로 줄이세요. 청크를 더 촘촘하게 만들어 500 토큰이 헤더와 상용구가 아니라 500 토큰 분량의 의미를 담게 하세요. 보내기 전에 중복 청크를 버리세요. 거의 같은 구절 두 개는 두 번 비용을 내고 한 번만 말합니다. 그리고 실제 트래픽에서 usage로 측정하세요. 500 토큰 청크에 대한 추측은 추측일 뿐입니다. API 호출에서 토큰이 어디로 가는지 더 넓게 보려면 요청이 쓰는 토큰 수를 보세요.

요청당 여러분의 토큰을 위 계산기에 넣어 세 모델 모두에서 봇 가격을 매겨 보세요. 답변이 길다면 DeepSeek-V4-Flash를 먼저 살펴보세요.