ブログに戻る

RAGとデータガイド

RAGの質問にかかるコスト:チャンクをいくつ送るか

RAGの質問1回のトークンを見積もり、1,000回と100,000回の質問のコストを最新価格で確認し、予算に合うチャンク数を選びましょう。

投稿者: CheapTokens Team公開日 読了時間 7 分

図:質問と取得したチャンクがモデルに流れ込み、コストはチャンク数に依存する
このページの内容
  1. RAGリクエスト1回の中身
  2. 1,000回の質問にかかるコスト
  3. Top-k:どのチャンクも同じ量を加算する
  4. プロンプトに文書全体、それとも4つのチャンク
  5. リクエストを送る
  6. 入力を減らす4つの方法

ドキュメントチャットボットが動き、最初の請求書が届くと、その金額は質問に見合わないほど大きい。ほぼすべてのRAG構成でコストがかかるのは一箇所だ。それは、すべての質問の前に貼り付ける取得済みチャンクである。RAGの質問1回には、入力側で質問・指示・N個のチャンクのトークン数がかかり、出力側で短い回答がかかる。チャンクはあなたが制御できる部分であり、1つ追加するごとにすべてのリクエストに同じトークン数が加算される。

このガイドではリクエスト1回を数え、1,000回と100,000回のコストを最新価格で算出し、top-kを3から10に変えたときに何が変わるかを示す。検索自体(ベクターストア、チャンキング)はあなたの側に残り、モデルAPIに送られるのは最終的な生成呼び出しだけである。入力と出力の課金が初めてなら、入力トークンと出力トークンから始めよう。

RAGリクエスト1回の中身#

社内ドキュメント上で動くサポートボットを考えよう。顧客が「二要素ログインをリセットするには?」と尋ね、検索器が最上位の5つのパッセージを返し、これをモデルに送るとする。

  • システムプロンプト:「コンテキストからのみ回答せよ。そこになければそう言え。」— 書式ルールを加えると約300トークン。
  • 質問と少しのチャットコンテキスト — 約200トークン。
  • 各約500トークンのチャンク5個 — 5 × 500 = 2,500トークン。
  • 回答:短い段落2〜3個 — 出力約300トークン。

入力側は2,500 + 300 + 200 = 3,000トークン、出力側は約300トークン。これらは典型的なサポートボットに対する著者の仮定であり、自分の数値に置き換えてほしい。以下ではすべてこのリクエスト1回を単位とする。

全体の形を素早く見るには、チャンクが入力全体のおよそ6分の5を占め、入力が回答の10倍であることに注目しよう。自分で見積もってみよう。

数字を当てる

上のリクエストは入力トークンをいくつ送るか?

答えを表示

答え: 3,000

3,000:チャンク5個 × 500 = 2,500、さらにシステムプロンプト300と質問200。チャンクが大部分を占める。

1,000回の質問にかかるコスト#

リクエスト1回では実感できないので、スケールさせよう。入力3,000トークン、出力300トークンなら、1,000回の質問で入力3,000,000トークンを送り、出力300,000トークンを生成する。下のスライダーを自分のボットに合わせて動かすと、サイトがすべてのモデルの最新価格で再計算する。

コスト計算機

サポートボットの1日

リクエストあたりの入力トークン数: 3,000 · リクエストあたりの出力トークン数: 300 · 1日あたりのリクエスト数: 1,000

モデル1日あたり1か月あたり
GLM-5.3-Flash$0.072$2.16
DeepSeek-V4-Flash$0.075$2.25
MiniMax-M2.7$0.195$5.85

表は3モデルすべてについて同じワークロードを示し、横に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:どのチャンクも同じ量を加算する#

2つ目のシナリオ:社内wikiアシスタント。誰かが「念のため3個ではなく10個のチャンクを送ろう」と言う。入力は直線的に増える。各チャンクはすべてのリクエストにさらに500トークンを加える。

3個のチャンクと10個:同じ質問、異なる入力サイズ
top-k 3とtop-k 10でのリクエストあたりの入力トークン、チャンクあたり500トークンの仮定の下で

2,000対5,500トークン。回答の長さは同じなので、wikiアシスタントの請求額の差はすべて入力である。それがより良い回答をもたらすかは品質の問題だ。正しいパッセージがすでにコンテキストにある地点を超えると、余分なチャンクは主にノイズとコストを加える。kを選ぶ実用的な方法は、実際の質問のセットを取り、正しいパッセージが現れるkを確認し、その少し上で止めることだ。

コンテキストウィンドウがもう一つの制限である。ここにある3モデルはすべて通常の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、回答が数百トークンなら、3モデルのどれでも合う。自分の質問で品質によって選び、コストは上の表で決めよう。

長い回答と要約

回答が数千トークンに及ぶなら、DeepSeek-V4-Flashは回答あたり最大32,768出力トークンと380Kコンテキストを許容する。

リクエストあたり多数のドキュメント

多くのパッセージやセクション全体をマージしたいなら、GLM-5.3-Flashが3モデル中最大のコンテキスト390Kを持つ。

プロンプトに文書全体、それとも4つのチャンク#

3つ目のシナリオ:契約書Q&A。怠惰な方法は、30,000トークンのPDF全体をすべての質問に貼り付ける。検索を使う方法は、質問、指示、各約650トークンの関連チャンク4個を送り、合計約3,000トークン。同じ1,000回の質問、同じ300トークンの回答:

DeepSeek-V4-Flashでの契約書質問1,000回のコスト
  • すべてのリクエストに30,000トークンの文書全体$0.48
  • 質問、指示、取得した4チャンク、約3,000トークン$0.075

文書全体は同じ質問に対して10倍の入力(30,000 ÷ 3,000 = 10)を送る。コンテキストに収まる文書についての1回限りの質問ならまだ意味がある。一日中答えるボットには高くつくデフォルトだ。その入力の多くが毎回同じテキストなら、プロンプトキャッシュについて読もう。

リクエストを送る#

以下は生成ステップである。検索部分はあなたのものだ。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はドキュメントに記載されている。完全なセットアップはドキュメントにあり、ボットのトークンが対話全体でどう積み上がるかを見たいなら、長いチャットが高くつく理由が履歴部分を扱っている。

入力を減らす4つの方法#

まずmax_tokensから始めよう。これは回答を上限し、暴走した返答から守る。次にkを、正しいパッセージをまだ見つけられる最小値まで下げる。チャンクをより密にし、500トークンがヘッダーや定型文ではなく500トークン分の意味を運ぶようにする。送信前に重複チャンクを削除する。ほぼ同一の2つのパッセージは2倍のコストで1回しか語らない。そして実際のトラフィックでusageを使って測定する。500トークンチャンクについての推測は推測にすぎないからだ。API呼び出しでトークンがどこへ行くかをより広く見るには、リクエストが使うトークン数を参照。

リクエストあたりの自分のトークンを上の計算機に入れて、3モデルすべてでボットの価格を算出しよう。回答が長いなら、まずDeepSeek-V4-Flashを見るべきだ。