0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RAGシステムのAPIコストが膨らむ理由と、1キーで解決する設計パターン

0
Posted at

はじめに

RAGを本番運用し始めると、こんな問題が起きます。

「PoCのときは月$20だったのに、本番に入ったら月$300になった」

原因のほとんどは、コンテキストに大量のドキュメントを詰め込んでいることです。

本記事では、RAGシステムでAPIコストが膨らむ構造的な原因と、Flatkey AIを使った実践的な対処法を解説します。


なぜRAGのAPIコストは膨らむのか

RAGの基本構造はこうです。

ユーザーの質問
  ↓
ベクトル検索で関連ドキュメントを取得
  ↓
ドキュメント + 質問をLLMに渡す
  ↓
回答を生成

コストが膨らむポイントは主に3つです。

① 取得ドキュメントの量が多すぎる

関連性が低いドキュメントまで上位10〜20件取得して全部渡すと、入力トークンが爆発します。

# NG: 関係ないドキュメントまで大量に渡す
docs = vectorstore.similarity_search(query, k=20)
context = "\n".join([doc.page_content for doc in docs])
# → 入力トークンが数万になることも

② チャンクサイズが大きすぎる

ドキュメントを分割するときのチャンクサイズが大きいと、1件あたりのトークン数が増えます。

③ 全リクエストに最高性能モデルを使っている

RAGの用途によって、必要な精度は違います。社内FAQ検索と高度な分析レポートに、同じモデルを使う必要はありません。


対処法1:取得件数を絞り、スコアで足切りする

# OK: 関連性スコアで足切りする
docs_with_scores = vectorstore.similarity_search_with_score(query, k=5)
threshold = 0.75
filtered_docs = [
    doc for doc, score in docs_with_scores
    if score >= threshold
]
context = "\n".join([doc.page_content for doc in filtered_docs])

関連性の低いドキュメントを除外するだけで、入力トークンを30〜50%削減できるケースがあります。


対処法2:タスク別にモデルを使い分ける

すべてのRAGリクエストに最高性能モデルを使う必要はありません。

from openai import OpenAI

client = OpenAI(
    api_key="sk-あなたのFlatKeyキー",
    base_url="https://router.flatkey.ai/v1"
)

def rag_query(question: str, context: str, task_type: str = "general"):
    model_map = {
        "faq":      "openai/gpt-4o-mini",           # 社内FAQ(軽量)
        "general":  "anthropic/claude-sonnet-4-5",  # 一般的な質問
        "analysis": "anthropic/claude-opus-4-8",    # 深い分析が必要な場合
    }
    model = model_map.get(task_type, "anthropic/claude-sonnet-4-5")

    response = client.chat.completions.create(
        model=model,
        messages=[
            {
                "role": "system",
                "content": f"以下のコンテキストに基づいて回答してください:\n\n{context}"
            },
            {
                "role": "user",
                "content": question
            }
        ]
    )
    return response.choices[0].message.content

1本のAPIキー(Flatkey AI)で、Claude・GPT・DeepSeekをタスクに応じて使い分けられます。


対処法3:プロンプトキャッシュを活用する

固定のシステムプロンプトやドキュメントベースは、先頭に置くことでキャッシュヒット率が上がります。

Flatkey AIのClaude Officialグループでは、キャッシュ入力が $0.27/1M(通常入力の1/10)になります。

# キャッシュを意識した構造
messages = [
    {
        "role": "system",
        # ← ここに固定コンテンツを置くとキャッシュされやすい
        "content": FIXED_SYSTEM_PROMPT + FIXED_KNOWLEDGE_BASE
    },
    {
        "role": "user",
        # ← ここだけが毎回変わる
        "content": f"コンテキスト:{dynamic_context}\n\n質問:{question}"
    }
]

コスト削減の試算

月間10万リクエスト、平均入力2,000トークン・出力500トークンのRAGシステムの場合:

構成 月額コスト
全リクエストにClaude Opus(公式直接) 約$1,250
タスク別モデル分散 + Flatkey AI 約$180〜$300

※ タスク構成・キャッシュヒット率によって変動します。


Flatkey AIで始める

招待リンクから登録すると $10のテスト額度が追加付与されます(クレカ登録不要)。

👉 https://console.flatkey.ai/sign-up?aff=BunB


まとめ

RAGのAPIコストを削減する3つの対処法:

  1. 取得件数を絞り、スコアで足切りする(入力トークンを削る)
  2. タスク別にモデルを使い分ける(1本のKeyでClaude/GPT/DeepSeekを切り替え)
  3. プロンプトキャッシュを活用する(固定コンテンツをキャッシュに乗せる)

Flatkey AIを使えば、1本のAPIキーで全モデルのコストをダッシュボードで一元管理できます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?