4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Amazon Bedrock】長文入力におけるClaudeの仕様が変わったので検証してみる

4
Last updated at Posted at 2026-08-14

概要

こちらの記事は「MEDLEY Summer Tech Blog Relay」の23日目の記事です。

はじめに

こんにちは。医療プラットフォーム本部 病院プロダクト統括部 SREグループの竹本です。
前回は Amazon Bedrockの国内クロスリージョン推論に関する記事を執筆しました。
 

今回もまた Amazon Bedrockに関する(※ほぼ Claudeに関する) 内容を記事にします。
今となっては意識しなくとも良い内容となりましたが、これまでの振り返りがてら記事にすることにしました。

なお、メドレーでは生成AI利用のガイドラインが社内で展開されており、各部門の業務ではそのガイドラインに沿って利用をしています。

注意

本記事で紹介する内容および検証結果は 2026年8月時点のものです。
内容が古い可能性がありますのでご注意ください。

今回のテーマについて

ある日突然生成AIの機能が動かなくなった。そんな経験がある方はいらっしゃいますか?
 
システム内にAI機能を組み込む際、ごく稀に 入力テキストの長さ制限 に抵触することがかつてありました。通常の会話や短い要約といった機能であればこの制限を意識することはありません。しかし数十年にわたる履歴や蓄積したデータ、膨大なログを一括で読み込む必要がある場合、この問題に直面することがあります。

ここ数年の生成AIの進化スピードは非常に速く、仕様変更への追従が遅れると本番障害に直結するリスクも抱えています。

今回は、入力テキストの長さ制限に関わる仕様変更があったときに奮闘した際のお話を紹介します。最後までお読みいただけると幸いです。

大規模入力に対するClaudeの仕様変更の変遷

従来、Claudeで処理できる入力の上限は 200,000 トークン(以下、20万トークン)でした。その後、上限を 1,000,000 トークン(以下、100万トークン)まで引き上げる仕組みが登場したものの、最新モデルではこの上限値が標準化されたことでその機能自体の廃止を発表され、廃止された機能を使い続けるとエラーが発生するように変化しました。

では、具体的にどのような経緯を辿ったのか振り返ってみます。

1. Claude Sonnet 4で 1M context windowが利用可能になる [1] [2]
まず Claude 4 がリリースされる以前は、入力テキストが 20万トークンを超過している場合には Amazon Bedrockでエラーが返る仕様でした。 しかし、1Mコンテキストウィンドウの登場により、最大100万トークンまでの大規模な入力に対応できるようになりました。

ただし当時は 20万トークンを超える入力には長文入力による追加料金が必要となったため、コストの増加に注意が必要でした。

[1] 参考 | Anthropic - Claude Sonnet 4 now supports 1M tokens of context
[2] 参考 | AWS - Anthropic の Claude Sonnet 4 の拡張されたコンテキストウィンドウが Amazon Bedrock で利用可能に

 
利用方法は、以下の要領でベータヘッダーを付与するというシンプルなものです。 [3]
"anthropic-beta": "context-1m-2025-08-07"

[3] 参考 | AWS - Amazon Bedrock | Request and Response

anthropic_beta – (Optional) The anthropic beta parameter is a list of strings of beta headers used to indicate opt-in to a particular set of beta features.

該当箇所のみ抜粋

Beta feature Beta header
1 million tokens context-1m-2025-08-07

2. Opus 4.6とSonnet 4.6向けに1Mコンテキスト機能が利用可能に!同時に料金体系も変更!

既にリリースされていた Opus 4.6とSonnet 4.6 を対象に、2026年3月13日に 1M context window機能の公開が発表されました。[4] そしてこのタイミングで、20万トークンを超える入力に発生していた長文入力による追加料金が不要となり、一律の料金で利用できることも発表されました。これは嬉しい!

[4] 参考 | Anthropic - 1M context is now generally available for Opus 4.6 and Sonnet 4.6
 

3. Claude Sonnet 4.5で context-1m-2025-08-07 ヘッダーが廃止に
https://platform.claude.com/docs/en/release-notes/overview#march-30-2026

同月 2026年3月30日に、2026年4月30日以降は Claude Sonnet 4.5 および Claude Sonnet 4 を使用する際に "context-1m-2025-08-07" を使用できなくなることが発表されました。
そのため期日を過ぎると Claude Sonnet 4.5を使用するワークロードで、20万トークンを超える入力は処理できなくなってしまいます。

これを知った時、私は思いました。

え、1ヶ月後!? /(^o^)\

 
その当時、引き続き 20万トークンを超える入力を処理するには、モデルを Claude Sonnet 4.6 (Claude Opus 4.6も可) に変更することが現実的な選択肢となります。
 
そこで今回、改めて Claude Sonnet 4.5で 20万トークンを超える入力を処理できなくなってしまったのかを検証してみたいと思います。

検証環境の構成

今回はAPI Gatewayから Lambda関数を呼び出し、Lambda関数の中で Bedrockのモデルを呼び出すというよくある構成で検証を実施します。

testing_design.png

なおデプロイする Lambdaのコードは以下の通り、ユーザーからの入力をそのままプロンプトとして渡すというシンプルな内容をPythonで実装しました。
※検証順序の都合により Claude Sonnet 4.5 向けの実装を記載しています。

Pythonコード
import json
from botocore.config import Config
import boto3
from botocore.exceptions import ClientError

bedrock_runtime = boto3.client(
    service_name="bedrock-runtime",
    region_name="ap-northeast-1",
    config=Config(read_timeout=120),  # Endpoint request timed outを回避
)

def make_response(status_code, body):
    return {
        "statusCode": status_code,
        "headers": {"Content-Type": "application/json"},
        "body": json.dumps(body, ensure_ascii=False),
    }


def safe_get_text(data):
    try:
        return data["output"]["message"]["content"][0]["text"]
    except (TypeError, KeyError, IndexError):
        return None


def lambda_handler(event, context):
    raw_body = event.get("body") or ""

    if not raw_body.strip():
        return make_response(400, {"error": "Request body is empty."})

    messages = [{"role": "user", "content": [{"text": raw_body}]}]

    try:
        response = bedrock_runtime.converse(
            ## Claude Sonnet 4.5 を指定
            modelId="global.anthropic.claude-sonnet-4-5-20250929-v1:0",
            messages=messages,
            additionalModelRequestFields={
                "anthropic_beta": ["context-1m-2025-08-07"],
            },
            inferenceConfig={"temperature": 0, "maxTokens": 5000},
        )
    except ClientError as e:
        status_code = e.response["ResponseMetadata"]["HTTPStatusCode"]
        return make_response(status_code, {"error": str(e)})
    except Exception as e:
        return make_response(500, {"error": str(e)})

    return make_response(200, {
        "message": safe_get_text(response),
        "inputTokens": response["usage"]["inputTokens"],
        "outputTokens": response["usage"]["outputTokens"],
    })

Claude Sonnet 4.5 で検証

補足

前述の通り、従来であれば Claude Sonnet 4.5 は additionalModelRequestFields の中で context-1m-2025-08-07 を指定することで、必要なヘッダーを付与し 1M context window の利用を可能にしていました。

    try:
        response = bedrock_runtime.converse(
            ## Claude Sonnet 4.5 を指定
            modelId="global.anthropic.claude-sonnet-4-5-20250929-v1:0",
            messages=messages,
            additionalModelRequestFields={
                "anthropic_beta": ["context-1m-2025-08-07"],
            },
            inferenceConfig={"temperature": 0, "maxTokens": 5000},
        )

実行結果 (Claude Sonnet 4.5)

今回 APIへのリクエストはローカル端末からcurlコマンドを実行します。
20万トークンを超える入力ということもあり、送信するpayloadはファイルから渡します。

% curl -sS -X POST (API GatewayのURL) \
    -H 'Content-Type: text/plain' \
    --data-binary @payload.txt

when calling the Converse operation: The model returned the following errors: Input is too long for requested model."

以上の通り、Input is too long for requested model. のエラーが発生しました。
なお、additionalModelRequestFields ごと削除してもこの結果は変わりませんでした。

Claude Sonnet 4.6 で検証

次は Claude Sonnet 4.6で検証してみます。まず Claude Sonnet 4.6では 1M context windowを標準対応しているため、context-1m-2025-08-07 ヘッダーの指定は不要です。
Lambdaのコードのうち、モデルを呼び出す箇所を以下の通り修正し再デプロイします。

    try:
        response = bedrock_runtime.converse(
            ## Claude Sonnet 4.6 を指定
            modelId="global.anthropic.claude-sonnet-4-6",
            messages=messages,
            inferenceConfig={"temperature": 0, "maxTokens": 5000},
        )

実行結果 (Claude Sonnet 4.6)

生成された結果については割愛しますが、20万トークンを超える入力を処理することができました!

% curl -sS -X POST (API GatewayのURL) \
    -H 'Content-Type: text/plain' \
    --data-binary @payload.txt

{"message": "<割愛>", "inputTokens": 268472, "outputTokens": 547}%

 
余談ですが、Claude Sonnet 4.6 では context-1m-2025-08-07 ヘッダーを指定していても現時点では動作するようです。Amazon Bedrockのドキュメントを改めて見ると、このヘッダーはSonnet 4.5では廃止されていますが、Sonnet 4.6では引き続き対応対象とされています。

[3] 参考 | AWS - Amazon Bedrock | Request and Response

(該当箇所のみ抜粋)

Beta feature Beta header Notes
1 million tokens context-1m-2025-08-07 Compatible with Claude Sonnet 4,
Claude Sonnet 4.6, and Claude Opus 4.6.

最後に

今となっては「新しいモデルに更新すれば解決する」というだけの話かもしれません。
しかし実際には、本番環境上のモデルを変更することは一定のリスクがつきものです。

今回のような影響調査に加えて、モデル変更に伴う出力品質の評価を非常に短期間で行う必要があります。 まだまだ歴史の浅い生成AIに関する機能をサービス提供する悩みは尽きないですが、良い経験になったと思います。

We are Hiring!

メドレーでは一緒に働く仲間を募集しています!ご興味のある方、ぜひご連絡をお待ちしております。 私と同じくAWSの設計を担うポジションもオープンしております!
 

 

4
0
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
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?