📚

Amazon BedrockでClaude Sonnet 4の1M コンテキストウインドウを使う

に公開

2025年8月13日、Claude Sonnet 4が1Mトークンのコンテキストウインドウをサポートしました。Amazon Bedrockでも利用可能です。

参考リンク:
https://www.anthropic.com/news/1m-context
https://aws.amazon.com/jp/about-aws/whats-new/2025/08/anthropic-claude-sonnet-bedrock-expanded-context-window/
https://docs.anthropic.com/en/api/claude-on-amazon-bedrock#1m-token-context-window
https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-anthropic-claude-messages-request-response.html

注意点

  1. Amazon Bedrockにおいてはこの機能は現在USのオレゴン、バージニア、オハイオリージョンのみ提供しています。
  2. 1M-Context-Windowを利用する場合、Amazon BedrockにおいてもAnthropic APIでも単価が上がるので注意してください。
プロンプトサイズ Input Output
≤ 200K tokens $3 / MTok $15 / MTok
> 200K tokens $6 / MTok $22.50 / MTok

Python SDK (Boto3) + Converse APIのサンプルコード

import boto3

# Bedrockクライアント初期化
bedrock = boto3.client(
    service_name='bedrock-runtime',
    region_name='us-west-2'
)

# 現在はClaude Sonnet 4のみ1M Context Windowをサポート
model_id = "us.anthropic.claude-sonnet-4-20250514-v1:0"

# 大量のテキストを準備
large_text = "サンプルテキスト " * 50000

# リクエスト構築
request_body = {
    "messages": [
        {
            "role": "user",
            "content": [{"text": f"このテキストを要約してください: {large_text}"}]
        }
    ],
    "additionalModelRequestFields": {
        "anthropic_beta": ["context-1m-2025-08-07"]  # 1Mコンテキスト有効化
    },
    "inferenceConfig": {
        "maxTokens": 500
    }
}

# API呼び出し
response = bedrock.converse(
    modelId=model_id,
    **request_body
)

# 結果表示
print(f"入力トークン: {response['usage']['inputTokens']:,}")
print(f"出力トークン: {response['usage']['outputTokens']:,}")
print(response['output']['message']['content'][0]['text'])

TypeScript SDK + Converse APIのサンプルコード

import { BedrockRuntimeClient, ConverseCommand } from "@aws-sdk/client-bedrock-runtime";

// Bedrockクライアント初期化
const bedrock = new BedrockRuntimeClient({
    region: "us-west-2"
});

// 現在はClaude Sonnet 4のみ1M Context Windowをサポート
const modelId = "us.anthropic.claude-sonnet-4-20250514-v1:0";

async function main() {
    try {
        // 大量のテキストを準備
        const largeText = "サンプルテキスト ".repeat(50000);

        // リクエスト構築
        const requestBody = {
            modelId: modelId,
            messages: [
                {
                    role: "user" as const,
                    content: [
                        {
                            text: `このテキストを要約してください: ${largeText}`
                        }
                    ]
                }
            ],
            additionalModelRequestFields: {
                anthropic_beta: ["context-1m-2025-08-07"]  // 1Mコンテキスト有効化
            },
            inferenceConfig: {
                maxTokens: 500
            }
        };

        // API呼び出し
        const command = new ConverseCommand(requestBody);
        const response = await bedrock.send(command);

        // 結果表示
        console.log(`入力トークン: ${response.usage?.inputTokens?.toLocaleString()}`);
        console.log(`出力トークン: ${response.usage?.outputTokens?.toLocaleString()}`);
        console.log(response.output?.message?.content?.[0]?.text);

    } catch (error) {
        console.error("Error:", error);
    }
}

// 実行
if (require.main === module) {
    main();
}

export { bedrock, modelId };

TypeScript SDK + InvokeModelのサンプルコード

import { BedrockRuntimeClient, InvokeModelCommand } from "@aws-sdk/client-bedrock-runtime";

// Bedrockクライアント初期化
const bedrock = new BedrockRuntimeClient({
    region: "us-west-2"
});

// 現在はClaude Sonnet 4のみ1M Context Windowをサポート
const modelId = "us.anthropic.claude-sonnet-4-20250514-v1:0";

async function main() {
    try {
        // 大量のテキストを準備
        const largeText = "サンプルテキスト ".repeat(50000);

        // リクエスト構築
        const requestBody = {
            anthropic_version: "bedrock-2023-05-31",
            anthropic_beta: ["context-1m-2025-08-07"], // 1Mコンテキスト有効化
            max_tokens: 500,
            messages: [
                {
                    role: "user",
                    content: [
                        {
                            type: "text",
                            text: `このテキストを要約してください: ${largeText}`
                        }
                    ]
                }
            ]
        };

        // API呼び出し
        const command = new InvokeModelCommand({
            modelId: modelId,
            contentType: "application/json",
            accept: "application/json",
            body: JSON.stringify(requestBody)
        });

        const response = await bedrock.send(command);
        const responseBody = JSON.parse(new TextDecoder().decode(response.body));

        // 結果表示
        console.log(`入力トークン: ${responseBody.usage.input_tokens.toLocaleString()}`);
        console.log(`出力トークン: ${responseBody.usage.output_tokens.toLocaleString()}`);
        console.log(responseBody.content[0].text);

    } catch (error) {
        console.error("Error:", error);
    }
}

// 実行
if (require.main === module) {
    main();
}

export { bedrock, modelId };

実行結果の例

入力トークン: 400,018
出力トークン: 184
申し訳ございませんが、提供されたテキストは「サンプルテキスト」という文字が大量に繰り返されているだけで...

トラブルシューティング

  1. Amazon BedrockにおいてUSリージョンのみサポートしているため、使うリージョンによってはサポートしていないエラーが出ます。
  2. Claude Sonnet 4はインスタンスプロファイルを使ったクロスリージョン推論のみサポートしており、2025年8月15日時点ではモデルIDus.anthropic.claude-sonnet-4-20250514-v1:0を指定する場合のみ動作します。その際にはクロスリージョン推論で使う可能性のあるすべてのリージョンのモデルアクセスを有効化する必要があり、そうでなければYou don't have access to the model with the specified model ID.のエラーが出ることがあります。
  3. Too many tokens, please wait before trying again.のエラーが出る際にはコンテキストウインドウの問題ではなくスロットリングです。AWS AccountのQuotaを確認してください。

まとめ

ポイントは2つ:

  1. モデルIDに us.anthropic.claude-sonnet-4-20250514-v1:0 を指定
  2. additionalModelRequestFieldsanthropic_beta: ["context-1m-2025-08-07"] を追加

これで1Mトークンまでのコンテキストが利用できます。

GitHubで編集を提案

Discussion