【AI】Claude APIの拡張思考をPythonで実装する方法

当ページのリンクには広告が含まれています。
いずみ

こんな悩みを解決できる記事を書きました!

僕は現役フリーランスエンジニア(歴年)で、資格は個保有しています。

Claude APIで拡張思考(Extended Thinking)をPythonから使いたい」とお考えではありませんか?

複雑な推論やコード生成の精度を上げたい方へ。

Claude APIには、回答を出す前にモデルが内部で考える拡張思考という仕組みが用意されています。

いずみ

数行の追加でオンにできます。

ベリーイージーなのでサクッと解説します。

ということで、本記事ではClaude APIの拡張思考をPythonで実装する方法を解説します。

いずみ

すぐ読み終わるので、ぜひ最後まで読んでくださいませ。

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
執筆者/監修者
  • フリーランスエンジニア(保有資格個、企業と直接契約
  • ブログ・アフィリエイト歴7年(2018年〜)
  • ブランドせどりで月利50万円⇨脱サラ
  • 投資(仮想通貨・FX)歴7年(2018年〜)
  • X(旧Twitter)フォロワー約1,900人
  • 運営者情報はこちら
いずみです
目次

【AI】Claude APIの拡張思考をPythonで実装する方法

早速、Claude APIの拡張思考をPythonで実装する方法を解説します。

拡張思考(Extended Thinking)とは

拡張思考は、Claudeが最終的な回答を書く前に、内部で推論のステップを踏む機能です。

数学の証明・アルゴリズム設計・多段階の分析など、一度で答えを出しにくいタスクで精度が上がります。

Claude APIでは、モデルが必要な分だけ考えるAdaptive Thinkingという方式が推奨されています。

以前は思考に使うトークン量をbudget_tokensで固定指定していましたが、新しいモデルでは廃止され、指定するとエラーになります。

いずみ

「どれくらい考えさせるか」を人間が細かく決めなくてよくなった、というのが大きな変化です。

事前に準備するもの

必要なものは、Python環境とanthropicライブラリ、そしてAPIキーの3つです。

STEP
anthropicライブラリをインストールする

pipでインストールします。

pip install anthropic
STEP
APIキーを環境変数に設定する

取得したAPIキーを環境変数ANTHROPIC_API_KEYに設定します。

export ANTHROPIC_API_KEY="sk-ant-xxxxx"

anthropicライブラリは環境変数ANTHROPIC_API_KEYを自動で読み込みます。

拡張思考を有効にして呼び出す

thinkingパラメータに{"type": "adaptive"}を渡すと、拡張思考が有効になります。

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=16000,
    thinking={"type": "adaptive"},
    messages=[
        {"role": "user", "content": "1から100までの素数の個数を、手順を踏んで求めてください。"}
    ],
)

for block in response.content:
    if block.type == "thinking":
        print("思考:", block.thinking)
    elif block.type == "text":
        print("回答:", block.text)

レスポンスのcontentは、複数のブロックが入ったリストです。

typethinkingのブロックに思考内容、textのブロックに最終的な回答が入ります。

いずみ

thinkingブロックとtextブロックを分けて処理するのがポイントです。

思考の深さをeffortで調整する

どこまで深く考えるかは、output_configeffortで調整します。

指定できる値はlowmediumhighxhighmaxの5段階で、デフォルトはhighです。

response = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=16000,
    thinking={"type": "adaptive"},
    output_config={"effort": "low"},
    messages=[
        {"role": "user", "content": "配列を昇順にソートする関数をPythonで書いてください。"}
    ],
)

単純なタスクはlowにすると、トークン消費とレイテンシを抑えられます。

正確さを最優先したい場合はmaxを指定します。

いずみ

effortを上げるほど賢くなりますが、料金と待ち時間も増えます。

まずはlowかmediumから試すのがおすすめです。

思考の要約を表示する

拡張思考をオンにしても、デフォルトでは思考テキストは空文字で返ります。

思考の中身を読みたい場合は、thinking"display": "summarized"を追加します。

response = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=16000,
    thinking={"type": "adaptive", "display": "summarized"},
    messages=[
        {"role": "user", "content": "在庫管理システムのテーブル設計を提案してください。"}
    ],
)

for block in response.content:
    if block.type == "thinking":
        print(block.thinking)
    elif block.type == "text":
        print(block.text)

summarizedを指定すると、推論の要約がthinkingブロックに入ります。

生の思考過程そのものは、どの設定でも返らない仕様です。

ストリーミングで思考を受け取る

待ち時間が長くなりやすいので、拡張思考はストリーミングと組み合わせると体感が良くなります。

client.messages.streamを使い、thinking_deltatext_deltaのイベントを分けて処理します。

with client.messages.stream(
    model="claude-sonnet-5",
    max_tokens=16000,
    thinking={"type": "adaptive", "display": "summarized"},
    messages=[
        {"role": "user", "content": "クイックソートの実装と計算量を説明してください。"}
    ],
) as stream:
    for event in stream:
        if event.type == "content_block_delta" and event.delta.type == "thinking_delta":
            print(event.delta.thinking, end="", flush=True)
        elif event.type == "content_block_delta" and event.delta.type == "text_delta":
            print(event.delta.text, end="", flush=True)

thinking_deltaで思考の要約、text_deltaで回答本文が少しずつ届きます。

マルチターンで思考を引き継ぐ

会話を続ける場合は、同じモデルに対してthinkingブロックを含めた履歴をそのまま送り返します。

レスポンスのcontentを、そのままassistantメッセージのcontentに入れるだけです。

messages = [
    {"role": "user", "content": "二分探索をPythonで実装してください。"}
]

first = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=16000,
    thinking={"type": "adaptive"},
    messages=messages,
)

messages.append({"role": "assistant", "content": first.content})
messages.append({"role": "user", "content": "計算量も教えてください。"})

second = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=16000,
    thinking={"type": "adaptive"},
    messages=messages,
)

first.contentをそのまま履歴へ戻すことで、前のターンの思考が保持されます。

いずみ

thinkingブロックを削って戻すと、次のターンの精度が落ちることがあります。

丸ごと戻すのが安全です。

拡張思考を使うべき場面

判断の目安は「質問に30秒で答えられるかどうか」です。

すぐ答えが出る質問なら、拡張思考はオフのままで問題ありません。

多段階の推論・コード生成・数学・バグ調査といったタスクでは、拡張思考をオンにすると精度が上がります。

単純な分類・要約・定型的な応答では、拡張思考はコストとレイテンシを増やすだけになりがちです。

いずみ

すべての呼び出しでオンにするのではなく、難しいタスクに絞って使うのがコスパの良い使い方です。

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式

【厳選】フリーランスエンジニアにおすすめなエージェント3選

フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。

僕が実際に利用しているおすすめエージェントを紹介しますね。

いずみ

エージェントは必ず複数登録してください。

担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…

僕は実際に5つのエージェントを使い回していますよ。

フリーランスを始めるなら「

案件数マージン率単価
約88,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 業界最大級の案件数。
  • 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
  • 案件参画中のフォローの充実。

※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。

は業界最大手のフリーランスエージェントです。

とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!

いずみ

僕もはじめてフリーランスの案件を貰ったのはです。

保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。

手厚い保障を重視したいなら「

案件数マージン率単価
約10,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 手厚い保障で正社員並みの安心感。
  • 還元率60%超え&単価公開でクリアな契約。
  • 給与保障制度(審査あり)。

は手厚い保障が特徴のフリーランスエージェントです。

フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。

いずみ

僕も何度か案件を紹介してもらいました。

自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。

週2〜3日の案件探しなら「

案件数マージン率単価
約5,000件非公開
初心者福利厚生申し込み
経験者向け無料
Good Point
  • IT案件に特化したフリーランスエージェント。
  • 週2〜3日の案件が豊富。
  • リモート案件が多く、直エンドなので単価も高い。

※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。

はIT案件に特化したフリーランスエージェントです。

週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。

いずみ

週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。

とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!

よくある質問

拡張思考はどのモデルで使えますか?

Adaptive Thinkingは、Claude Opus 4.6・Sonnet 4.6以降のモデルで利用できます。

claude-sonnet-5claude-opus-5でもそのまま使えます。

budget_tokensは今でも使えますか?

新しいモデルではbudget_tokensは廃止されており、指定すると400エラーになります。

代わりにoutput_configeffortで思考量を調整します。

拡張思考をオンにすると料金は上がりますか?

思考に使われたトークンも出力トークンとして課金されます。

effortlowに下げる、簡単なタスクではオフにする、といった使い分けでコストを抑えられます。

思考の生のログは取得できますか?

生の思考過程は取得できない仕様です。

displaysummarizedを指定すると、要約版の思考だけを読めます。

まとめ

今回は、Claude APIの拡張思考をPythonで実装する方法について解説しました。

以下が本記事のまとめになります。

まとめ
  • 拡張思考はthinking={"type": "adaptive"}を渡すだけで有効になる。
  • 思考の深さはoutput_configeffortで5段階に調整できる。
  • 思考の中身を読むにはdisplaysummarizedを指定する。
  • マルチターンではthinkingブロックを含む履歴をそのまま送り返す。
  • 難しいタスクに絞って使うと、コストと精度のバランスが良い。
まとめ
いずみ

最後までお読みいただき、ありがとうございました!

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
  • クソおすすめ本
¥4,480 (2024/06/01 23:28時点 | Amazon調べ)
いずみ

海外のエンジニアがどういった思考で働いているかが理解できます。

海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。

この記事が気に入ったら
フォローしてね!

シェアしてね!
  • URLをコピーしました!
目次