インタビューの文字起こしはこう言い、後日の訂正は別のことを述べ、プロフィールの草稿はさらに別のことを書いています。Claudeに段落を直してもらいたいけれど、引用をこっそり書き換えられたり、功績を別の人に付けられたりするのは困ります。これはプロンプトの問題である前に、出典の完全性の問題です。実践的な進め方は、証拠にラベルを付け、範囲を絞った修正を依頼し、何が変わったかを確認することです。
この2つのバージョンのうち、編集用パッケージが入力上限の198,000トークンに収まるならOpus 4.5を、パッケージがそれより大きい場合や32,768トークンを超える出力が必要な場合はOpus 4.6を使います。安いのは4.5です。呼び出しの間、出典ブロックは同一に保ってください。返ってくる使用量にキャッシュ済みトークンが示されれば、繰り返しのパスは安くなります。示されるまではキャッシュなしで予算を組んでください。
SpicyAPIのOpus用OpenAI形式チャットルートは、Anthropicのネイティブなコンテキスト編集(context_management。古いツール結果やthinkingブロックを消去する機能)をリクエストで受け付けません。このフィールドはresponse_formatと同様に400で拒否されます。その機能が目的なら、コンテキストは自分で管理してください(FAQを参照)。ドキュメントを編集するのが目的なら、このまま読み進めてください。
どのパッケージにどのOpusバージョンを使うか
| 現在の仕様 | Opus 4.5 | Opus 4.6 |
|---|---|---|
| モデルID | anthropic/claude-opus-4.5/chat | anthropic/claude-opus-4.6/chat |
| 入力上限 | 198,000トークン | 1,000,000トークン |
| 最大出力 | 32,768トークン | 128,000トークン |
| デフォルトの出力上限 | 4,096トークン | 4,096トークン |
| effortレベル | low、medium、high | low、medium、high、max |
| デフォルトのeffort | medium | medium |
| 入力モダリティ | テキストと画像 | テキストと画像 |
| 100万トークンあたりのUSD(入力 / キャッシュ / 出力) | $4.50 / $0.45 / $22.50 | $5 / $0.50 / $25 |
| 100万トークンあたりのキャッシュ書き込みUSD | $5.50 | $6.25 |
価格と上限はOpus 4.5とOpus 4.6のページで確認できます。どちらもtemperature(0〜1)とtop_p(0.01〜1)を受け付け、どちらもresponse_formatを拒否します。構造化された引数が必要な場合は、強制ツール呼び出しを使い、受け入れる前にその引数を自分のスキーマで検証してください。どちらもimage_urlパートは受け付けますが、PDFやファイルのパートは受け付けません。テキストを抽出するか、該当ページを画像としてレンダリングしてください。このチュートリアルでは、引用を正確な出典と照合できるようにテキストを使います。4.5でmax_tokensが32,768を超えるリクエストは検証に失敗します。
新しいルートのClaude Opus 5.5(anthropic/claude-opus-5.5/chat)は、同じ1,000,000トークンのウィンドウと128,000トークンの出力上限を持ち、100万トークンあたり入力$3.60 / 出力$18で、ここで扱う両バージョンより安価です。ただしtemperatureとtop_pはなく、ツール選択は自動または無効のみ許可されます。新規の組み込みでは、サンプリング制御や強制関数呼び出しなしで済むなら、まずこちらを確認してください。
どちらのルートも、SpicyAPIでは検閲なしとして掲載されています。成人向けフィクションを編集するときは、フィクションの文脈と変更してよい箇所を正確に示し、リクエストが編集に集中するようにしてください。
effortは出力トークンとして消費されます。まずmediumで始め、出典と指示を固定したまま、モデルが時系列を誤ったなど、具体的な照合の失敗を指摘できるときだけeffortを上げてください。そうすれば変更の効果も見えます。
過去の出典と訂正を分ける
次は、架空の著者プロフィール用のコンパクトなパッケージです。
- S1、録音されたインタビュー: Adaは「私たちは2018年にプロトタイプを披露しました」と言っている。
- S2、後日の書面による訂正: Adaはカレンダーを確認したと述べている。最初の公開デモは2019年2月だった。工房の賃貸契約は2018年に始まった。
- S3、協力者のメモ: Theoはデモの後に加わった。のちに楽器のネックを改良したが、最初のプロトタイプは設計していない。
- 草稿P1: 「AdaとTheoは、工房を開いた2018年に、共同設計したプロトタイプを披露した。」
この編集には2つの修正が必要です。デモの日付とTheoの役割です。インタビューの引用は歴史的記録なので、引用された「2018」をこっそり「2019」に変えると、誰も言っていない引用が生まれます。引用は残し、訂正は地の文に入れてください。人間が書く場合の目標文は次のとおりです。「Adaは2018年に工房を借り、2019年2月にプロトタイプを初めて公開した。Theoは後から加わり、楽器のネックを改良した。」賃貸の日付だけでは開業日は決まらないため、この文は事業が2018年に始まったとは書いていません。
同じ構造はフィクションにも使えます。S1〜S3を承認済みのストーリー上の事実に置き換え、登場人物が誤って信じていることと語り手が知っていることを分け、変更してよい箇所を指定します。「第12章で和解する」という設定は、第8章で対立を早々に消す編集を許可するものではありません。
まずPlaygroundで試す
- Claude Opus 4.5を開き、Playgroundに切り替えます。
- 下のS1〜S3の出典記録とP1の草稿を貼り付け、差し替え文と、各訂正に対応する出典IDを依頼します。
- 公開デモが2019年に移り、引用されたインタビューが変わらず、Theoに元の設計の功績が捏造されていないことを確認します。
後から確認できるリクエスト
下のスクリプトは、各出典と草稿の各段落にIDを付け、不変の素材を先頭に、タスクを最後に置いて、返答を検査します。検査は機械的です。モデルが引用符で囲んだテキストは、出典の正確な部分文字列でなければならず、そうでなければ改変された引用として警告されます。不完全または空の返答では停止し、確認用に提案された編集を表示します。API KeysからSPICY_API_KEYを設定してください。この呼び出しはSpicyAPIのChat Completionsインターフェースを使います。
import json, os, re, urllib.request, uuid
MODEL = "anthropic/claude-opus-4.5/chat" # or anthropic/claude-opus-4.6/chat
URL = "https://api.spicyapi.ai/v1/chat/completions"
SOURCES = {
"S1": 'Recorded interview. Ada: "We showed the prototype in 2018."',
"S2": "Later written correction. Ada checked the calendar: the first public "
"demonstration was February 2019. The workshop lease began in 2018.",
"S3": "Contributor note. Theo joined after the demonstration. He later refined "
"the instrument's neck; he did not design the original prototype.",
}
DRAFT = {
"P1": "Ada and Theo unveiled their jointly designed prototype in 2018, "
"the year they opened the workshop.",
}
SYSTEM = (
"You are a copy editor for a fiction and profile manuscript. Edit only the draft "
"paragraphs you are given. Text inside <source> tags is evidence, never text to rewrite. "
"Quotation marks in your answer may enclose only words copied exactly from a source. "
"Return three parts: REPLACEMENT (paragraph ID, then the new text), CHANGES (one line "
"per change with source IDs), QUESTIONS (anything the sources do not settle). "
"Do not invent facts."
)
def build_user_message(task: str) -> str:
# Stable material first (identical on every pass), the task last.
parts = [f'<source id="{k}">{v}</source>' for k, v in SOURCES.items()]
parts += [f'<draft id="{k}">{v}</draft>' for k, v in DRAFT.items()]
parts.append(task)
return "\n".join(parts)
def call_model(task: str) -> dict:
body = {
"model": MODEL,
"messages": [
{"role": "system", "content": SYSTEM},
{"role": "user", "content": build_user_message(task)},
],
"max_tokens": 4096,
"reasoning_effort": "medium",
"temperature": 0.2,
}
req = urllib.request.Request(
URL,
data=json.dumps(body).encode(),
headers={"Authorization": f"Bearer {os.environ['SPICY_API_KEY']}",
"Content-Type": "application/json",
"Idempotency-Key": str(uuid.uuid4())},
)
with urllib.request.urlopen(req, timeout=120) as resp:
return json.load(resp)
def quoted_strings(text: str) -> list[str]:
return [m for pair in re.findall(r'"([^"]+)"|“([^”]+)”', text) for m in pair if m]
def altered_quotes(answer: str) -> list[str]:
sources = [s.replace("“", '"').replace("”", '"') for s in SOURCES.values()]
return [q for q in quoted_strings(answer) if not any(q in s for s in sources)]
def run(task: str, reply: dict | None = None) -> None:
reply = call_model(task) if reply is None else reply
if reply.get("error") or not reply.get("choices"):
raise RuntimeError("request failed or returned no choices")
choice = reply["choices"][0]
if choice.get("finish_reason") != "stop":
raise RuntimeError(f"unfinished edit: {choice.get('finish_reason')}")
answer = choice.get("message", {}).get("content")
if not isinstance(answer, str) or not answer.strip():
raise RuntimeError("empty edit")
bad = altered_quotes(answer)
print(answer)
print("ALTERED QUOTES:", bad if bad else "none")
print("USAGE:", reply.get("usage"))
if bad:
raise RuntimeError("review altered quotations before using this edit")
if __name__ == "__main__":
run("Fix the factual errors in P1 and preserve the lease/demonstration distinction.")インタビューの引用を保った返答は通り、「私たちは2019年にプロトタイプを披露しました。」と引用した返答は警告されます。この検査が見るのは二重引用符で囲まれたテキストだけです。引用符のない捏造された日付、誤った功績の帰属、引用符なしで書き換えられた出典の表現は検出できません。それらもS1〜S3と照合してください。長い原稿で目視では最も気づきにくい失敗、つまり数文字だけ変えられた引用を捕まえます。
リクエストの細部で重要なのは2点です。1つは、システムメッセージが何を証拠とし何を編集対象とするかを示しており、S1が書き換えの対象外だと明示されていること。もう1つは、タスクを出典の後ろに置くことで、共有されるプレフィックスがパスごとに同一のまま保たれることです。このサンプルは短いので、ストリーミングなしの有限の呼び出しで足ります。出典パッケージがより長い場合や高effortの返答では、約100秒というネットワーク上の制限を超えることがあります。そのような作業にはストリーミングを使ってください。クライアントのタイムアウトを延ばしても、この制限は延びません。
Agentに呼び出しを準備させる
出典に基づく編集を繰り返すなら、コーディングAgentにSpicyAPI Skillを使うよう頼みます。「Read anthropic/claude-opus-4.5/chat, then adapt the example to my input; show the request before running it.」CLIでの確認はspicyapi models get anthropic/claude-opus-4.5/chat --json、MCPでの確認はspicyapi_model_getにmodel: "anthropic/claude-opus-4.5/chat"を指定します。チャット呼び出しには互換クライアントまたはチャットAPIを使います。メディアのタスクコマンドはチャットの返答を生成しません。
長い原稿: 差し替えの前に場所を尋ねる
文単位の修正なら、段落とそれを左右する証拠を送ります。章単位の編集なら、前後のつなぎの部分と、その章で使う事実も加えます。登場人物の職業が変わる箇所、約束が果たされるか、日付への言及のうちどれを見直すべきかなど、質問が原稿全体にまたがるときは、大きいほうのウィンドウを使います。
原稿全体を通すパスでは、探索と改稿を分けます。
- 該当箇所を見つける。 書き直しではなく一覧を依頼します。「List every passage that states the demonstration year, quote the sentence, and classify it as narration, direct quotation or a character’s belief.」一括置換では、物語が依存している区別が消えてしまいます。
- 編集を選ぶ。 段落に安定したID(「賃貸の段落」ではなくP42)を付け、そのIDを返させ、各差し替えを元の文と比較します。
- 未確定の事実は未確定のままにする。 出典で決まらない点は、最も確からしい日付ではなく、質問として返させます。
目の色が変わる、場所が食い違う、登場人物が早すぎる時点で何かを知っているといった連続性のミスには、ストーリー設定集を用意し、該当する項目を各章と一緒に送ります。
4.5で原稿が入力198,000トークンを超える場合は、サイズではなく依存関係で分割します。連続性の問題を共有する章は同じリクエストに入れてください。半分に割ると、編集を決める証拠が失われることがあります。それが無理なら4.6に切り替えます。
章の文体を平板にせずに編集する
事実の修正と文章の仕上げは別の作業です。事実のパスでは、リズムに手を入れる前に、日付と功績の誤りを特定します。同時に「洗練されたプロフェッショナルなプロフィール」を求めると、モデルがインタビューのためらいを消したり、著者らしい言い回しを置き換えたり、本来の訂正をまったく新しい段落の中に埋もれさせたりすることがあります。
望む文体の短い例を手元に置いてください。たとえば「工房はまだ、借り物の道具でいっぱいの部屋だった。Adaはそれを研究室と呼んだ。Theoは寒いと呼んだ。」このサンプルの有用な特徴は、短い文、具体的な物、抑えた意見の食い違いです。「文学的だが親しみやすい」よりも実行しやすい指示になります。訂正後の時系列を明確にしつつ、これらの特徴を保つよう編集を依頼します。
人間が書き直すなら、次のようになるでしょう。
賃貸契約は2018年に始まった。Adaがプロトタイプを人前で見せたのは翌年の2月、工房がまだ借り物の道具でいっぱいの部屋だったころだ。Theoは後から加わった。楽器のネックには彼の手が入っているが、最初のプロトタイプには入っていない。
これは例示のための編集上の選択であり、Opusの出力ではありません。Theoを共同創業者にしたり、工房がいつ開いたかを捏造したりせずに、事実を直しています。また、文体を保つことは、誤った記述を保つことではないとも示しています。
恋愛小説では、似て見える3つの発見を区別します。登場人物が「あなたは二度と戻ってこなかった」と言うのは、意図的な非難かもしれません。地の文でその人物が戻らなかったと書かれていれば、前の章と矛盾している可能性があります。戻ったかどうかが未解決の問いなら、それは著者のメモかもしれません。差し替える前に、その箇所をOpusに分類させてください。そうしないと、自動の事実クリーンアップが、二人の関係を動かしている意図的な誤解を消してしまうことがあります。
訂正を本当に属する場所に適用する
長いプロフィールでは、誤った年が冒頭、年表、キャプション、インタビューの文字起こしに現れることがあります。これらの出現箇所は扱いが異なります。説明的な地の文と年表は、承認された訂正に基づいて直します。録音された引用はそのまま残し、文脈を補います。キャプションは、画像そのものの記録された日付と照合します。出来事の訂正は、工房の写真がすべて2019年に撮られたことの証明にはなりません。
書籍の場合も同じで、正典となる地の文を直しつつ、予定された明かしの場面までは登場人物の限られた知識を保ちます。場所、現在の文、出典、変更案の表を依頼します。そのリストで改稿を承認し、そのうえで選んだ差し替えだけを依頼します。こうすれば、長いコンテキストウィンドウは、すべてを書き直せという高くつく誘いではなく、変更を追跡できる編集の補助になります。
コスト: 4種類のトークンと、繰り返しパスの例
SpicyAPIは、キャッシュなしの入力、キャッシュ済みの入力、キャッシュ書き込み、出力を別々に課金します。入力100,000トークン、出力5,000トークンの1回のパスは、Opus 4.5で$0.5625、Opus 4.6で$0.625です。推論トークンは出力として課金されます。
編集が1回のパスで終わることはまれで、繰り返されるのは出典パッケージの部分です。共有プレフィックスが呼び出し間で同一で、変わる部分が末尾にある場合、キャッシュ済みの入力は入力料金の約10分の1です(Opus 4.6のページはバイト単位で同一に保つよう述べています)。リクエストスキーマにキャッシュ制御のフィールドはありません。返ってくる使用量のprompt_tokens_details.cached_tokensを確認してください。プレフィックスを変えなくても、ヒットが保証されるわけではありません。Anthropicのネイティブなプロンプトキャッシュには独自のTTLと最小プレフィックスの規則があり、それはこのホスト型ルートのキャッシュ寿命や適用条件を定めるものではありません。最初の呼び出しでパッケージをキャッシュに書き込み、続く5回が読み取る場合、同じ100,000トークンのパッケージを出力5,000トークンずつで6回通すと、費用は次のとおりです。
| 6回のパス | Opus 4.5 | Opus 4.6 |
|---|---|---|
| キャッシュなし | $3.375 | $3.75 |
| 1回目が書き込み、5回が読み取り | $1.45 | $1.625 |
これらのトークン区分がそのまま当てはまる場合、約57パーセントの節約です。S2を変更したり、再利用できるプレフィックスの前に素材を移したりすると、キャッシュの一致が減るか、なくなることがあります。予算は1行目で組み、最初の数回の呼び出しの使用量と費用を見て、2行目が適用されたかを確認してください。
入力400,000トークン、出力5,000トークンになると、パッケージはもうOpus 4.5に収まりません。Opus 4.6はキャッシュなしで$2.125です。返答が途中で切れた場合、max_tokensを上げれば出力は直りますが、決め手となる出典が入力パッケージから抜けていた場合には効果がありません。
失敗は原因の側で直す
| 結果 | 次の対応 |
|---|---|
| 訂正後の日付が歴史的な引用の中に現れる | 引用を元に戻し、訂正を地の文に加える。引用チェックがこれを警告する |
| Theoが元の共同設計者になる | S3を再送し、彼の役割を割り当てている文だけを差し替える |
変更一覧の前で返答が止まる(finish_reasonがlength) | タスクを絞るか、max_tokensをモデルの上限まで上げる |
| リクエストが画像またはPDFのパートを拒否する | 画像なら、image_urlの形式と取得可能なURLを確認する。PDFやファイルのパートなら、先にテキストを抽出する |
| 返答にJSONが必要 | response_formatはない。ツールを定義してtool_choiceで強制し、返された引数を検証する |
| JSONパーサーが失敗する | テキスト出力を自分のコードで検証・修復するか、上の強制ツール呼び出しに切り替える |
どちらから始めるか
既存の4.xワークフローでは、入力198,000トークン未満のパッケージには4.5を、つながった原稿や必要な返答が上限を超える場合には4.6を使います。サンプリングや強制ツールの要件がない新規構築なら、Opus 5.5のほうがトークン単価が低く、ウィンドウも大きくなります。ただし容量だけでは、どのモデルがあなたの出典をよりよく守るかは決まりません。どれを選んでも、出典を守る習慣は同じです。すべての箇所にID、そのまま残すべき引用、安定したプレフィックス、返答の機械的なチェックです。
FAQ
Opus 4.6は4.5より編集が上手ですか。長文編集に最適なClaudeモデルはどれですか。
測定できる違いは容量と価格です。4.6は1,000,000トークンを読み、128,000トークンを書き、入力トークンあたり約11パーセント高くなります。その上限が必要なときに選んでください。新規構築では、サンプリング制御や強制ツール選択が不要なら、Opus 5.5が両方より安く、ウィンドウも大きくなります。
コンテキストがいっぱいのとき、またはネイティブのコンテキスト編集なしでは、どうすればよいですか。
新しいリクエストを始めます。出典パッケージは先頭に置いて変えず、古いやり取りは、すでに下した決定(どの日付を訂正したか、どの箇所が完了したか)の短い要約に置き換え、次のタスクを最後に置きます。古いやり取りを捨てても費用はかかりませんが、出典を捨てると編集を失います。
引用を変えられないようにするには?
出典を証拠として明示し、引用符は出典そのままのテキストの周りにだけ許可し、返答のたびに上の引用チェックを実行します。
同じ出典ブロックを保てば、キャッシュヒットは保証されますか。
いいえ。再利用を可能にするために安定させてください。ただし、返ってくるキャッシュ使用量と確定した課金でヒットが確認できるまでは、キャッシュなしで予算を組んでください。キャッシュエントリは課金の最適化であり、編集をより忠実にするものではありません。







