Cloudflare Vectorize(ベクトルを保存して近傍検索できるサービス)の料金がどう決まるのか調べた。あとで見返す用にまとめておく。数字は2026年4月時点の公式ページのもので、そのうち変わると思う。最後に、10〜20万字くらいの本を100冊ぶん入れたらいくらになるか、という例で計算してみる。

料金の測り方

最初は「ベクトルを何本保存したか」で課金されると思っていたが、違った。「本数 × 次元数」の総量で測る。次元数というのは、1本のベクトルが持つ数値の個数のこと(bge-m3なら1024個)。軸は2つある。

中身 単価(無料枠を超えた分)
Stored(保存) 置いてあるベクトルの次元の総量 1億次元あたり月 $0.05
Queried(検索) 検索で消費した次元の総量 100万次元あたり $0.01

公式の計算式はこう書いてある。

月額 = (検索回数 + 保存本数) × 次元数 × ($0.01 / 100万)
     + (保存本数 × 次元数) × ($0.05 / 1億)

検索側の項に保存本数が足されているのが、最初はよく分からなかった。公式の例を見ると腑に落ちる。768次元のベクトルを1万本保存して、月3万回検索するケースだと、

  • 検索の次元 = (30,000 + 10,000) × 768 ≒ 3072万
  • 保存の次元 = 10,000 × 768 ≒ 768万

で月 $0.31。ただしこれは無料枠を引く前の素の額で、あとで出す無料枠に収まればこの分は請求されない。単価の感覚を掴むための例、ということみたい。

無料枠と有料枠

請求されるのは無料枠を超えた分だけ。枠はプランで違う。

  • Freeプラン:保存500万次元、検索3000万次元/月まで無料
  • Workers Paid(月$5のプラン):保存1000万次元、検索5000万次元/月まで込み

CPUやメモリ、インデックスの数、egress(転送量)では課金されないらしい。純粋に上の2軸だけ見ればいい。

例:10〜20万字の本を100冊入れる

ここで最初に予告した見積もり。前提を先に決める。

  • 1冊は10〜20万字。あいだをとって15万字とする
  • chunkは1つ500字くらい。すると1冊で 150,000 ÷ 500 = 約300 chunk
  • 100冊で約3万 chunk
  • 埋め込みは1024次元のモデルを使うとする
  • 検索は執筆で使うくらいで、月1万回とする

これを式に入れる。

保存の次元 = 30,000 × 1024            = 3072万
検索の次元 = (10,000 + 30,000) × 1024 = 4096万

Workers Paid の込み枠(保存1000万・検索5000万)を引くと:
  保存の課金分 = 3072万 − 1000万 = 2072万 → × $0.05/1億 ≒ $0.01
  検索の課金分 = 4096万 − 5000万 < 0     → 枠内なので $0

というわけで、Vectorizeの追加料金は月1セント程度。本を100冊入れてもこの安さになる。実際に効いてくるのはWorkers Paidの月$5のほうで、Vectorizeはそのオマケくらいの位置づけ。

見落としがちなところ

Freeプランのままだと100冊は入らない。保存の無料枠が500万次元で、1024次元で割ると約4,900本。1冊300 chunkなら15〜16冊で頭打ちになる。まとまった量を入れるつもりなら、Workers Paidが実質の前提。

あと、次元数がそのまま保存コストに乗る。1536次元のモデルを選ぶと、1024次元より1.5倍の保存量になる。とはいえ上で見たとおり元の額が小さいので、100冊くらいなら誤差の範囲。次元数を気にするのは、もっと桁が増えてからでよさそう。

検索のコストは検索回数にだいたい比例する(保存本数は月1回足されるだけ)ので、大量に叩く用途でなければほぼ無視していい。書くたびに数回検索するくらいなら、料金を気にする場面はまず来ないと思う。