ブログ一覧へ戻る
技術ガイド·2026年5月25日·読了7分

Claude でスペイン語 RAG チャットボットを構築 — LATAM とスペイン向け実践ガイド

スペイン語 RAG の完全なスタック:text-embedding-3-large(OpenAI を直接呼び出し — Kunavo は embeddings を提供しません)+ pgvector + Claude Sonnet 4.6 + prompt caching。両プロバイダー合計で1クエリあたり約 $0.007。地域別の変種(voseo、tuteo、ustedeo)、スペイン語トークン(英語の1.3〜1.5倍)、ハルシネーション対策、1日100〜10,000クエリの実際の月額コスト。

知識ベースについて正確に回答するスペイン語のRAGチャットボットを構築するための実践ガイドです。スペインおよびラテンアメリカのプロダクトチームを対象に、モデルの選択、スペイン語の地域差への対応、クエリごとのコスト、ハルシネーションの防止方法を扱います。

基本スタック

  1. text-embedding-3-largeによるドキュメントの埋め込み。OpenAIを直接呼び出します —— Kunavoは埋め込みを提供せず、生成ステップのみを提供します
  2. ベクトル検索(pgvector、Pinecone、またはQdrant)
  3. Claude Sonnet 4.6 + プロンプトキャッシュによる回答生成
  4. 高負荷時/最小コスト向けのGemini 2.5 Flashへのフォールバック

基本スニペット

responder.py
from openai import OpenAI

client = OpenAI(
    api_key="sk-kn-...",
    base_url="https://api.kunavo.com/v1",
)

def responder(pregunta: str, contexto: list[str]) -> str:
    """Responde en español usando contexto recuperado de la base de conocimiento."""
    resp = client.chat.completions.create(
        model="claude-sonnet-4-6",
        messages=[
            {
                "role": "system",
                "content": [
                    {
                        "type": "text",
                        "text": (
                            "Eres un asistente que responde en español neutro, "
                            "claro y conciso, basándote exclusivamente en el "
                            "contexto proporcionado. Si la respuesta no está en "
                            "el contexto, di 'No tengo esa información' en lugar "
                            "de inventar."
                        ),
                        "cache_control": {"type": "ephemeral"},
                    },
                ],
            },
            {
                "role": "user",
                "content": (
                    f"## Contexto\n{chr(10).join(contexto)}\n\n"
                    f"## Pregunta\n{pregunta}"
                ),
            },
        ],
        max_tokens=600,
    )
    return resp.choices[0].message.content

クエリあたりのコスト:キャッシュ有効時で約$0.004(ユーロ換算で0.5セント未満)。キャッシュなしでは約$0.01です。cache_controlを正しく設定する価値は十分にあります。

標準スペイン語と地域変種

スペインとLATAMのユーザーに同時にサービスを提供する場合、選択肢は3つあります:

  • 標準スペイン語(デフォルトで推奨):モデルに、フォーマルな場面では「usted/ustedes」を使い、地域固有の表現を避けるよう求めます。すべての国で機能しますが、やや無機質に聞こえます
  • 国の検出 + 専用プロンプト:IPまたはユーザー設定を使い、「voseo」(アルゼンチン、ウルグアイ)、「tuteo」(スペイン、メキシコ)、「ustedeo」(コロンビア、一部地域)から選択します。system promptに方言を渡します
  • 市場ごとに1つのモデル:各地域に専任チームと大規模なボリュームがある場合に限ります。ほとんどの場合は過剰です

Claude Sonnet 4.6とGemini 2.5 Proはすべての変種を理解し、出力はプロンプトのスタイルに従います。「リオプラテンセ・スペイン語(voseo、例:『vos podés』)で回答してください」のような一文で十分です。

スペイン語のトークン

同じ内容の場合、スペイン語は英語より約1.3~1.5倍多くのトークンを消費します(長い語尾や冠詞が理由です)。それに応じて入力と出力の予算を調整してください。英語で5Kトークンのコンテキストは、スペイン語では約6.5Kになります。

ハルシネーション対策 — 本当に効果がある方法

  • 明示的なsystem prompt:「回答がコンテキストにない場合は、『その情報はありません』と言ってください」。モデルは他の言語より標準スペイン語でこれをよく守りますが、理由はわかっていません
  • 出典を引用する:各主張の根拠にしたドキュメントのIDを返すよう求めます。IDが捏造されていれば、ハルシネーションだとわかります
  • 出力を制限する:max_tokens=300にすると、内容のない文章を捏造する誘惑が大幅に減ります
  • 敵対的テスト:現在のコンテキストでは回答できないとマークしたデータセットの質問を50件用意します。チャットボットはすべて拒否しなければなりません

推定月額費用(スペイン語)

  • 1日100クエリ:キャッシュ使用時で月約$11
  • 1日1,000クエリ:月約$110
  • 1日10,000クエリ:月約$1,100

10,000件以上に達し、さらに削減する必要がある場合は、単純なクエリをGemini 2.5 Flash(4~10倍安価)に切り替え、Sonnet 4.6は複雑なクエリだけに使います。ティアリングのパターンはコスト最適化ガイドで説明しています。

スペインおよびLATAMからの支払い

Stripeは国に応じて決済を処理します。Pix(ブラジル)、国際カード、Apple Pay、Google Pay、Linkをご利用いただけます。価格はUSD建てで、Stripeはチェックアウト時に金額をお客様の通貨で表示できます。このレートには購入者負担の2–4%の換算手数料が含まれます。USDで支払えばこの手数料を回避できます(StripeのAdaptive Pricingドキュメント、2026-10-03閲覧)。Bizum、PayPal、OXXO、Mercado Pagoは利用できません。Pay by Bankも利用できません。Kunavoのチェックアウトでは英国、アイルランド、フィンランドの購入者にのみ提供され、フランスとドイツではStripeがこの決済方法をまだ非公開プレビューとして提供しています(StripeのPay by Bankドキュメント、2026-10-03閲覧)。最低チャージ額は$10 USDです。残高に有効期限はありません。

サポートとドキュメント

contact@kunavo.comでスペイン語のサポートを24営業時間以内に受けられます。技術ドキュメントの完全版は/docs/quickstart、プロンプトキャッシュの詳細ガイドはprompt caching deep diveにあります。

準備はできましたか?無料で登録し、$10からチャージして、使った分だけ支払い、最初の実用的なプロトタイプを構築しましょう。