58
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Sonnet 4.5が登場!ついにBedrockで国内縛りに対応(StrandsとMastraのサンプルコードも)

Last updated at Posted at 2025-09-30

この記事は人力で書きました。

日本時間2025/9/30未明に登場!Anthropicの公式リリースはこちら。

  • Claude Opus 4.1よりも全体的に高性能(ツール利用と多言語Q&Aは微妙に及ばず)
  • Claude Sonnet 4から価格据え置き(API料金がOpusの1/5)

システムカードを見ると、ナレッジカットオフ(情報鮮度の断面)は2025年7月となっています。

AWSのBedrockからの利用

いつものように、Amazon BedrockとGoogle Vertex AIでも同時リリースされています。

あれ、まだ必要? モデルアクセスの有効化

Bedrockでは、最新モデルを使う際に「モデルアクセスの有効化」が必要でしたが、今月に入ってから新モデルではこのプロセスが省略されています。
米国時間10/8からすべての既存モデルでもモデルアクセスがデフォルトで有効になるようです。

※キャプチャは日本語表示のため、変更リリース予定日が古いです。

スクリーンショット 2025-09-30 9.44.47.png

ただしClaude Sonnet 4.5はモデルアクセスがまだ必要でした。
おそらく、Anthropicのモデルは他のモデルと違ってユースケースの提出が必要なため、モデルアクセス不要化のあとも若干手順が違うのかも知れません。

気になるサービスクォータは…
なんと、私の個人AWSアカウントではマックスの200 RPMが許可されていました🎉

スクリーンショット 2025-09-30 9.55.21.png

モデルIDは anthropic.claude-sonnet-4-5-20250929-v1:0 です。

Converse APIから呼んでみる

Converse APIから、USクロスリージョン推論で叩いてみましょう。

converse.py
import boto3

# Bedrock呼び出し用のAPIクライアントを作成
client = boto3.client("bedrock-runtime")

# Converse APIを実行
response = client.converse(
    modelId="us.anthropic.claude-sonnet-4-5-20250929-v1:0",
    messages=[{
        "role": "user",
        "content": [{
            "text": "Xでよく聞く生成AIの「驚き屋」って何?"
        }]
    }]
)

# 実行結果のテキストだけを画面に表示
print(response["output"]["message"]["content"][0]["text"])

実行結果の例:

❯ python converse.py
# 「驚き屋」とは

X(旧Twitter)で使われる「驚き屋」は、生成AIに対して**過剰に驚いたり感動したりする反応を示す人**を指す、やや皮肉めいた呼び方です。

## 典型的な特徴

- 「すごい!」「これは革命だ!」など、大げさな反応を繰り返す
- AIの出力を無批判に絶賛する
- 既存技術でもできることにも「AIすごい!」と反応
- 限界や問題点を指摘されても聞き入れない傾向

## 背景

生成AIブーム(ChatGPT登場以降)で、技術的な理解が浅いまま:
- 何でもAIで解決できると考える
- 実際の精度や限界を把握していない
- マーケティング的な誇張を鵜呑みにする

といった層が増えたことで生まれた言葉です。

## ニュアンス

批判的な文脈で使われることが多いですが、必ずしも悪意だけではなく「冷静に技術を評価しよう」という意図で使われることもあります。

生成AI技術は確かに進歩していますが、過度な期待と冷静な評価のバランスが大切、という議論の中で使われる用語です。

日本語性能も完璧ですね!

なお、Bedrock Agentsやナレッジベースへのネイティブ統合には未対応でした。いつも通り、しばらく時間がかかるでしょう。
ナレッジベースの場合はRetrieveAPIのみを使えば、自分のアプリ側でSonnet 4.5と組み合わせることが可能です。

待望の国内リージョン限定に対応!

なんと、東京リージョンに「JP Anthropic Claude Sonnet 4.5」なるクロスリージョン推論プロファイルが生えています。

これによって、JTC各位が待ち望んでいた「日本国内に限定してAWSからClaudeの最新モデルを呼び出す」ことが可能になりました。AWS Japanさん頑張ってくれましたね!

スクリーンショット 2025-09-30 10.02.28.png

推論プロファイルのIDは jp.anthropic.claude-sonnet-4-5-20250929-v1:0 です。これをモデルIDの代わりに指定してAPIリクエストすれば使えます。

Strands Agentsからの利用

AWSが5月にリリースした、AIエージェントを簡単に書けるOSSフレームワークがStrandsです。

Claude Sonnet 4.5を東京&大阪リージョンのクロスリージョン推論で利用するサンプルコードは以下です。

strands_jp45.py
from strands import Agent
from strands.models import BedrockModel

# Bedrockモデルを設定
bedrock_model = BedrockModel(
    model_id="jp.anthropic.claude-sonnet-4-5-20250929-v1:0",
    region_name="ap-northeast-1"
)

# エージェントを作成
agent = Agent(model=bedrock_model)

agent("JTCでBedrockの国内リージョン限定対応のニーズが高い理由は?")

Strandsのバージョンを上げずとも、モデルが増えたぐらいなら問題なく動きますね。
なお最新バージョンはv1.10.0がちょうど今朝リリースされています。

Mastraからの利用

TypeScriptでAIエージェントが書ける最近人気のフレームワーク、MastraでもBedrockのSonnet 4.5が使えます。これは、内部的に利用しているVercel製のAI SDKのBedrockプロバイダー側がすでにSonnet 4.5に対応しているためです。

npx create-mastra@latest コマンドで、好きなプロジェクト名を付けてセットアップしましょう。
AWS認証は、IAM IICのSSOポータルから取得した一時認証情報 .env ファイルに記載しておきます。

src/mastra/index.ts
import { bedrock } from '@ai-sdk/amazon-bedrock';
import { Mastra } from '@mastra/core/mastra';
import { Agent } from '@mastra/core/agent';

// エージェントを作成
const agent = new Agent({
  name: 'japanese-agent',
  instructions: '日本語で賢く応答します。',
  model: bedrock('jp.anthropic.claude-sonnet-4-5-20250929-v1:0'),
});

// Mastraインスタンスを作成
export const mastra = new Mastra({
  agents: {agent}
});

npm run dev でプレイグラウンドから無事に動きました!

スクリーンショット 2025-09-30 10.29.21.png

Claude Agent SDK

Claude Agent SDKなるAIエージェント構築ツールもリリースされてますね!

TypeScript版とPython版が提供されており、Claude CodeのようにAWSのBedrockと組み合わせても利用できます。

単発の query() メソッドと、ステートフルな ClaudeSDKClient クラスの2オプションが提供されています。

以下はツールを使うAIエージェントの例です。

claude_agent.py
import asyncio
from typing import Any

from claude_agent_sdk import (
    ClaudeSDKClient,
    ClaudeAgentOptions,
    tool,
    create_sdk_mcp_server,
    AssistantMessage,
    TextBlock,
)

# ツール定義:文字列 text を count 回繰り返す
@tool("repeat_text", "Repeat text N times", {"text": str, "count": int})
async def repeat_text(args: dict[str, Any]) -> dict[str, Any]:
    text = args["text"]
    count = int(args["count"])
    return {
        "content": [{
            "type": "text",
            "text": text * count
        }]
    }

async def main():
    # SDK内蔵のMCPサーバーを作成してツールを登録
    mcp_server = create_sdk_mcp_server(
        name="mini",
        version="1.0.0",
        tools=[repeat_text],
    )

    options = ClaudeAgentOptions(
        mcp_servers={"mini": mcp_server},
        allowed_tools=["mcp__mini__repeat_text"],
        system_prompt="あなたは簡潔で日本語が得意なエージェントです。",
        permission_mode="acceptEdits",
    )

    # 連続会話ができ、ツールも使えるクライアントを作成
    async with ClaudeSDKClient(options=options) as client:
        await client.query(
            "次のテキストを3回繰り返して: text='AWS + LLM'"
            "必要なら 'repeat_text' ツールを使って。"
        )

        async for msg in client.receive_response():
            if isinstance(msg, AssistantMessage):
                for block in msg.content:
                    if isinstance(block, TextBlock):
                        print(block.text)

if __name__ == "__main__":
    asyncio.run(main())

pip install claude-agent-sdk してから実行できます。

最近主流の「シンプルに書けるエージェント用SDK」とはちょっと趣向が違う感じですね。
もうちょい低レイヤーで、まさに彼らの言う "Building Effective Agents" の思想が垣間見えて興味深いですね!

おまけ

AIエージェント開発、めちゃ楽しいですね!
入門にうってつけの書籍をあす出版しますので、ご興味あればぜひ予約ください。すでに都内の本屋さんには並び始めているようです。

5E89ACFC-D263-49A9-96DF-1BBDAE75DEA0_1_105_c.jpeg

58
35
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
58
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?