本文へスキップ

編集ワークフロー向け Claude Sonnet API のバージョン選び

Sonnet 4.5、4.6、5、5.5 の制御項目、トークン費用、出力上限を比較し、編集リクエストを不完全な応答の確認付きで移行する方法を解説します。

執筆
Lydia
公開
読了時間
約 17 分
更新
架空の大人2人が、マイクとレコーダーのそばで台本を話し合う温かな雰囲気のラジオ編集スタジオ。独立した編集用イラスト。

編集用の連携で気にするべきなのは、モデル名だけではありません。サンプリング設定、強制された関数呼び出し、応答パーサーに依存している場合があります。バージョンを上げると、編集の質が変わる前に、この3つが変わってしまうことがあります。

新規構築には Sonnet 5、64,000 トークンを超える応答・検閲なしのフィクション・最も幅広いエフォート設定が必要なら Sonnet 5.5、temperature・top_p・top_k を使いたいなら Sonnet 4.6 を選んでください。Sonnet 5 は強制ツール呼び出しにも対応していますが、5.5 は対応していません。 モデル ID だけを差し替えるとリクエストが壊れます。Sonnet 5 と 5.5 はサンプリング用フィールドに対して 400 エラーを返し、5.5 は強制ツール選択も拒否します。回答を比較する前に、バージョンごとにこれらのフィールドを取り除いてください。

表は SpicyAPI がホストする契約内容を示しています。Anthropic の Sonnet 5.5 移行ガイドはネイティブ API 側のバージョン変更を説明していますが、フィールド名や既定値はこのインターフェースとは互換性がありません。以下の価格は 100 万トークンあたりの USD です。

各バージョンが受け付ける内容

契約項目Sonnet 4.5Sonnet 4.6Sonnet 5Sonnet 5.5
入力上限198,000 トークン1,000,0001,000,0001,000,000
出力上限64,00064,00064,000128,000
max_tokens の既定値4,0964,0964,0964,096
reasoning_effort非公開low、medium、high、maxlow、medium、highnone、low、medium、high、xhigh、max
既定のエフォート—mediummediummedium
temperature、top_p、top_k利用可利用可拒否拒否
tool_choiceauto、none、required、または名前付き関数同じ同じauto または none のみ
response_format非対応非対応非対応非対応
コンテンツ区分ソフト化検閲なしフィルター適用検閲なし

ID は anthropic/claude-sonnet-4.5/chat、anthropic/claude-sonnet-5/chat、anthropic/claude-sonnet-5.5/chat、anthropic/claude-sonnet-4.6/chat で、各ページは 4.5、5、5.5、4.6 です。4つとも同じ /v1/chat/completions のリクエスト形式を使い、stop、tools、parallel_tool_calls も受け付けます。

Sonnet 4.6 は移行の中間的な選択肢です。すでに 1M ウィンドウと reasoning_effort を備えていますが、temperature はまだ使えます。4.5 から 4.6 へ移ってもリクエスト形式は変わらず、入力単価は 11% 上がり、区分はソフト化から検閲なしに変わり、既定の推論エフォートは medium になります。サンプリングが外れるのは 4.6 から 5 への移行時です。

コンテンツ区分は、フィクションやロールプレイで重要です。Sonnet 5 はフィルター適用です。今回のテストでは、Sonnet 4.5 と 4.6 は、より過激な成人向けフィクションの依頼を和らげたり拒否したりすることがよくありました。Sonnet 5.5 はテストした場面を和らげも拒否もせずに出力したため、成人向けフィクションの作業ではここで最も有力な選択肢です。和らげられた応答にも課金されることがあります。SpicyAPI はプラットフォーム側のコンテンツフィルターを追加しません。フィクションの場面と編集上の制約は、システムメッセージで指定してください。

どれを選ぶか

  • 成人向けでない新規のテキスト連携: Sonnet 5。単価が最も低く、1M ウィンドウと3段階のエフォートがあります。
  • 長い成果物や成人向けフィクション: Sonnet 5.5。1回の応答で 64,000 トークンを超えて書けるのはこれだけで、none(思考なし)を持つのもこれだけで、検閲なしです。
  • サンプリング制御: 4.5 に固定した連携を続けるか、1M ウィンドウのために 4.6 へ移ります。サンプリングなしの強制関数呼び出し: Sonnet 5 はより低い単価で対応します。呼び出しを強制する必要があるときは、5.5 の代わりにこちらを使ってください。
  • 300,000 トークンの原稿全体を1回の呼び出しで処理する: これはコンテキストと費用の問題で、Sonnet 4.6 の長編原稿ガイドで扱っています。

価格:トークナイザーと課金される出力を考慮する

100 万トークンあたり USD4.54.655.5
入力$2.70$3$1.90$2
キャッシュ入力$0.27$0.30$0.19$0.20
出力$13.50$15$9.50$10
キャッシュ書き込み$3.30$3.75$2.375$2.50

Sonnet 5 と 5.5 は新しいトークナイザーを使います。Anthropic の移行ガイドによると、同じテキストでも内容によって 4.x より約 30% 多くのトークンが生成されるため、トークン単価ではなくタスク単位の費用で比較してください。4.5 で入力 20,000、出力 2,000 トークンとなる例示的な作業について、5 と 5.5 では両方のトークン数が 30% 増えると仮定します。

モデル課金トークン費用
4.5入力 20,000、出力 2,000$0.081
4.6入力 20,000、出力 2,000$0.090
5入力約 26,000、出力 2,600約 $0.074
5.5入力約 26,000、出力 2,600約 $0.078

このシナリオでは Sonnet 5 は 4.5 より約 9% 安くなりますが、この節約額がすべての文書で一定とは限りません。出力のトークン数には、課金される推論分を含める必要があります。エフォートを low にすると思考を減らせますが、オフにはなりません。ここで none を公開しているのは 5.5 だけです。見積もりを予算として扱う前に、実際のタスクの使用量を確認してください。

Sonnet 5.5 の単価は Sonnet 5 より約 5.3% 高く、これは課金トークン数とキャッシュ区分が同一の場合の差です。トークナイザーが変わったら長いプロンプトを数え直してください。仮に 30% 増えるなら、190,000 トークンのプロンプトは 247,000 になります。入力上限 1M は下回りますが、請求額は変わります。

Playground で編集を試す

大きなワークフローを移行する前に、この小さな事実確認の編集を試してください。

Source A: the gallery reopened to staff in April. Source B: the public launch event was in June. Draft: "The gallery reopened to the public in April." Preserve the distinction between staff access and the public event. Return the corrected sentence and one sentence explaining the change.

  1. 上でリンクした Sonnet 5.5 のモデルページを開き、Playground を選びます。2つの情報源と草稿をユーザーメッセージに入れ、システム指示には "Edit from the supplied sources only" を設定します。
  2. この1行の修正にはエフォート low を使います。費用を確認してから実行し、回答がスタッフの入館は4月、一般向けイベントは6月という区別を保っているか、正確な日付を作り出していないかを確認します。
  3. 同じテキストを Sonnet 5 でも試し、成人向けでない低コストの編集ワークフローに向くか見ます。編集そのものを判断できるよう、元のテキストは変えないでください。

実際に納品する編集に合わせて選ぶ

700 語の章をクリーンアップする作業で、情報源のパケットが 20,000 トークンなら、どのバージョンも最大コンテキストや最大出力は必要ありません。重要なのは、リクエストの制御項目とコンテンツの適合性が合っているかどうかです。通常の編集の出発点としては、価格が低い Sonnet 5 が適しています。成人向けフィクションの編集者は、原稿全体の既定にする前に、フィルター適用という区分も考慮してください。同じアプリケーションでも、露骨でないあらすじと成熟した場面のレビューとでは、必要なモデルが異なることがあります。

4.5 または 4.6 で3通りの言い換えがほしい場合は、サンプリング制御で生成にばらつきを出せます。ただし、temperature を上げれば破綻したストーリーのロジックが直るわけではありません。まだ知らないはずの情報を登場人物が持っている段落には、知識のルールと元の箇所が必要で、ランダム性の追加は必要ありません。5 や 5.5 では、同等のサンプリング用フィールドを自作しないでください。代わりに、台詞を短くする、説明を減らす、種明かしを後にするなど、方向性を変えた3案を依頼します。

ツールを使う編集を考えてみます。草稿に登場人物の勤務先が書かれていて、最新の記録はシリーズの正式なデータベースにあるとします。4.5、4.6、5 では、公開されているツール選択で検索を必須にできます。5.5 では auto のため、検索をせずに回答することがあります。アプリケーションが勤務先を検証する必要があるなら、編集を依頼する前に読み取りを行うか、必要な検索結果のない回答を受け付けないようにしてください。プロンプト内の一文では、auto に強制呼び出しと同じ保証は与えられません。Anthropic の移行ガイドにあるネイティブの thinking や output_config の例を、そのままこのリクエストに貼り付けないでください。

このサンプルで意味のある出力は、スタッフの4月の入館と6月の一般向けローンチの両方を保つ1文です。4月にスタッフがすでに入れたなら、"The gallery reopened in June" では大まかすぎます。"The gallery held its public launch in June, after reopening to staff in April" は、人が書く修正として許容できます。言い回しが洗練されても、この区別が失われる新バージョンは、編集の仕事を改善したことになりません。

リクエストを移行する

4.5 の連携では temperature: 0.2、top_p: 0.9、強制された submit_edit 関数を使っているかもしれません。5 に移るとサンプリング用フィールドが拒否され、5.5 に移るとサンプリングと強制ツール選択の両方が拒否されます。

  1. 5 と 5.5 ではサンプリングを外す。 これらのリクエストから temperature、top_p、top_k を削除します。未対応のフィールドは、タスクが作成・課金される前に 400 unsupported_parameter を返します。共通のパラメーターオブジェクトを送らず、モデルごとの許可リストを管理してください。
  2. 5.5 では自動ツールを使う。 submit_edit 関数は残し、システムプロンプトでその呼び出しを依頼しますが、tool_choice は auto にします。ここには response_format がなく、5.5 は関数を飛ばすことがあるため、返された引数を検証してください。ワークフローで強制呼び出しが必須なら、Sonnet 5 がより低い単価で対応します。
  3. 回答の余地を残す。 推論は max_tokens の一部を消費します。上限が 1,024 トークンだと、表示用テキストが出る前に使い切ることがあります。1行の修正には low、情報源が食い違う場合には high を使います。Sonnet 5 は high までで、5.5 の xhigh と max は受け付けません。
  4. 長い編集はストリーミングする。 下の短い例は通常の JSON 応答を使っています。大きな呼び出しはネットワークエッジの約 100 秒の制限を超えることがあります。その場合はストリーミングを使い、テキストとツール引数を別々に組み立ててください。完了イベントと使用量はテキストとストリーミングのガイドで説明しています。
  5. 会話はユーザーメッセージで終える。 4.5 から移行する際は、意図した書き出しや形式の指定を、アシスタントのプリフィルで終えるのではなく、システム指示に移してください。

エフォート名の意味も変わります。Anthropic は 5.5 のレベルを調整し直したため、high はバージョン間で同等ではありません。SpicyAPI は 5 と 5.5 の両方の既定を medium にしていますが、Anthropic のネイティブ 5.5 API の既定は high です。簡潔な短い回答には none より low をおすすめします。none では 5.5 が表示テキスト内で問いを考え始めることがあるためです。none は、キャラクターを演じる素早いやり取りには引き続き役立ちます。

編集を実行して検証する

これを sonnet_edit.py として保存し、API Keys から取得した SPICY_API_KEY を設定して、python3 sonnet_edit.py を実行します。Python の標準ライブラリだけを使います。ここで Sonnet 5.5 を選んでいるのは、自動ツールへの移行を示すためです。モデルだけを Sonnet 5 に変えても、これらのフィールドは受け付けられます。これは有料のテキスト呼び出しで、メディア生成タスクではありません。マルチターンやストリーミングの連携はチャットレシピで扱っています。

python
import json
import os
import sys
import uuid
from urllib.error import HTTPError
from urllib.request import Request, urlopen

def read_reply(resp: dict, *, require_edit_tool: bool = False) -> dict:
    if resp.get("error"):
        raise RuntimeError("API error")
    choices = resp.get("choices") or []
    if not choices:
        raise RuntimeError("no choices in response")
    choice = choices[0]
    finish = choice.get("finish_reason")
    if finish not in {"stop", "tool_calls"}:
        raise RuntimeError(f"incomplete or rejected reply: {finish}")
    msg = choice.get("message") or {}
    calls = msg.get("tool_calls") or []
    if calls:
        if len(calls) != 1:
            raise RuntimeError("expected one submit_edit call")
        call = calls[0]
        if call.get("type") != "function" or not isinstance(call.get("id"), str) or not call["id"]:
            raise RuntimeError("missing function type or call ID")
        fn = call.get("function") or {}
        if fn.get("name") != "submit_edit":
            raise RuntimeError("unexpected function")
        args = json.loads(fn.get("arguments") or "")
        if not isinstance(args, dict) or any(
            not isinstance(args.get(key), str) or not args[key].strip()
            for key in ("sentence", "reason")
        ):
            raise RuntimeError("sentence and reason must be nonempty strings")
        return {"kind": "tool", "call": calls[0], "edit": args}
    if require_edit_tool:
        raise RuntimeError("model skipped submit_edit")
    text = msg.get("content")
    if finish != "stop" or not isinstance(text, str) or not text.strip():
        raise RuntimeError("empty or unfinished text")
    return {"kind": "text", "text": text}


def main() -> None:
    body = {
        "model": "anthropic/claude-sonnet-5.5/chat",
        "reasoning_effort": "low",
        "max_tokens": 8192,
        "messages": [
            {"role": "system", "content": "Edit from the supplied sources only. Reply by calling submit_edit."},
            {"role": "user", "content": 'Source A: the gallery reopened to staff in April. Source B: the public launch event was in June. Draft: "The gallery reopened to the public in April." Keep the staff/public distinction.'},
        ],
        "tools": [{"type": "function", "function": {
            "name": "submit_edit",
            "description": "Return the corrected sentence and the reason.",
            "parameters": {
                "type": "object",
                "properties": {"sentence": {"type": "string"}, "reason": {"type": "string"}},
                "required": ["sentence", "reason"],
            },
        }}],
        "tool_choice": "auto",
    }
    request = Request(
        "https://api.spicyapi.ai/v1/chat/completions",
        data=json.dumps(body).encode(),
        headers={
            "Authorization": f"Bearer {os.environ['SPICY_API_KEY']}",
            "Content-Type": "application/json",
            "Idempotency-Key": str(uuid.uuid4()),
            "User-Agent": "sonnet-edit-example/1.0",
        },
    )
    try:
        with urlopen(request, timeout=80) as response:
            task_id = response.headers.get("X-Spicy-Task-Id")
            if task_id:
                print(f"Task ID: {task_id}", file=sys.stderr)
            result = read_reply(json.load(response), require_edit_tool=True)
    except HTTPError as error:
        task_id = error.headers.get("X-Spicy-Task-Id")
        print(f"HTTP {error.code}; task ID: {task_id or 'not returned'}", file=sys.stderr)
        raise
    print(json.dumps(result["edit"], indent=2))


if __name__ == "__main__":
    main()

有効な編集は、スタッフの入館が4月、一般向けイベントが6月という点を保ちます。パーサーは、空の回答、途中での打ち切り、関数呼び出しの省略や不正な形式を拒否します。ただし、有効な引数であっても、その事実確認は別に必要です。Sonnet 移行のレポートでは、空のフォールバックが成功した結果としてユーザーに届いた例が紹介されています。

finish_reason が length の場合は、新しい呼び出しで出力の余地を増やすか、依頼を小さくしてください。再び費用をかける前に、部分的な結果とタスク ID を保存します。ツールを使うマルチターンのワークフローでは、次のターンの前に、対応する tool_call_id を付けてツール結果を返します。移行チェックには、矛盾が1つ、変更のない事実が1つ、"unknown" の回答が1つ、"no match" のツール結果が1つ含まれるようにします。長い抽出では、JSON が有効であることに加えて、必須セクションが揃っているかも確認します。

Agent に連携の準備を任せる

リクエストを自分で貼り付ける代わりに、既存のエディターを Agent に適合させたいときは Agent を使います。依頼には、同じギャラリーの情報源と草稿を入れておきます。

  • CLI: SPICY_API_KEY を設定したら、npx @spicyapi/cli models get anthropic/claude-sonnet-5.5/chat --json で選んだ契約内容を確認させます。この読み取り専用コマンドは CLI ガイドに記載されています。
  • MCP: SpicyAPI MCP サーバーを接続したうえで、次のように依頼します。"Use spicyapi_model_get for anthropic/claude-sonnet-5.5/chat, then adapt my gallery edit to its accepted effort and tool-choice settings. Prepare the request without running it."
  • Skill: npx skills add spicyapi-ai/spicy-skill で公式 SpicyAPI Skill をインストールし、新しい Agent セッションを開始して、次のように依頼します。"Use the SpicyAPI Skill to migrate my gallery editor from Sonnet 4.5 to 5.5. Keep the source facts and validate submit_edit; show me the request before calling it."

CLI と MCP が担うのは、このテキストワークフローのモデル探索です。編集そのものは、上のプログラムまたは Agent の HTTP クライアントを通じて /v1/chat/completions を使います。編集を繰り返し任せる前に、API キーに利用上限を設定してください。

FAQ

Sonnet 5.5 は Sonnet 5 より安いですか?

いいえ。トークンあたり約 5.3% 高くなります($1.90 と $9.50 に対して $2 と $10)。課金トークン数とキャッシュ区分が同一の場合にだけ、タスクの費用がその分だけ高くなります。その差額で得られるのは、128,000 トークンの応答上限、none と xhigh のエフォート、そして検閲なしの区分です。

Sonnet 5.5 は Opus 5.5 より優れていますか?

一概にはいえません。SpicyAPI での Opus 5.5 は入力 $3.60、出力 $18 で、Sonnet 5.5 の約 1.8 倍です。1M ウィンドウと 128,000 の出力上限は同じです。まず Sonnet 5.5 から始め、自分の最も難しい箇所で誤りが返ってくる場合にだけ上位へ移ってください。その進め方は、「Claude Opus 5.5 による NSFW ロールプレイ」のガイドで扱っています。

Sonnet 5.5 で temperature を使い続けられますか?

いいえ。深さの調整には推論エフォートを使い、トーンのルールはシステムプロンプトに書いてください。サンプリング制御が必要なら、選択肢は 4.5 と 4.6 です。

他の言語 English · 한국어 · Deutsch · Français · Español · Português (Brasil) · Русский · Italiano · Polski

実際に試してみる

支払いは実行した分だけ。プランもサブスクリプションもありません。

使用モデル:MiniMax H3 · ByteDance Seedance 2.0 Fast