Skip to main content

コードインタープリター

モデルの呼び出し時に、組み込みの Python コードインタープリターを有効にします。モデルは、数学計算やデータ分析などの複雑な問題を解決するため、サンドボックスで Python コードを記述・実行します。

使用方法

コードインタープリターは 3 つの呼び出しメソッドをサポートしています。メソッドごとにパラメーターが異なります:
  • OpenAI 互換 - レスポンス API
  • OpenAI 互換 - チャット補完 API
  • DashScope
コードインタープリターを有効にするには、code_interpreter ツールを tools パラメーターに追加します。
最良の結果を得るには、code_interpreter、web_search、および web_extractor ツールを同時に有効にしてください。
# 依存関係をインポートし、クライアントを作成します。
response = client.responses.create(
    model="qwen3.8-max",
    input="What is 123 to the power of 21?",
    tools=[
        {"type": "code_interpreter"},
        {"type": "web_search"},
        {"type": "web_extractor"},
    ],
    extra_body={
        "enable_thinking": True
    }
)

print(response.output_text)
コードインタープリターが有効になると、モデルはリクエストを以下の段階で処理します:
  1. 思考:モデルはユーザーのリクエストを分析し、問題を解決するためのアイデアと手順を生成します。
  2. コード実行:モデルは Python コードを生成して実行します。
  3. 結果の統合:モデルはコード実行の結果を受け取り、次のステップを計画します。
  4. 応答:モデルは自然言語応答を生成します。
ステップ 2 と 3 は複数回ループすることがあります。
API ごとに返されるフィールドは異なります:
  • レスポンス API の出力では、思考内容は type="reasoning" を持つオブジェクトで返されます。コード実行は type="code_interpreter_call" で返されます。レスポンスは type="message" で返されます。
  • Chat Completions API / DashScope: 思考コンテンツは reasoning_content フィールドで返されます。レスポンスは content フィールドで返されます。DashScope は、tool_info フィールドでコードコンテンツを返すこともサポートしています。

対応範囲

deepseek-v4.1-flash-1017 は、モデルページに記載された全 6 リージョンと対応するデプロイ範囲で、Responses API の組み込み code_interpreter ツールをサポートします。 kimi-k3.1-pro (Alibaba Cloud Model Studio にデプロイ) は、北京、シンガポール、米国 (バージニア)、ドイツ (フランクフルト)、日本 (東京)、中国 (香港) で、Responses API の組み込み code_interpreter ツールをサポートします。

推奨モデル

  • Responses API
  • Chat Completions API / DashScope
Qwen-Max:qwen4-max-preview (Token Plan 限定)、Qwen3.8-Max シリーズ、Qwen3.7-Max シリーズQwen-Plus:Qwen3.7-Plus シリーズ、Qwen3.6-Plus シリーズ、Qwen3.5-Plus シリーズDeepSeek:deepseek-v4-flash-0731、deepseek-v4-proGLM:glm-5.2Qwen3.8 オープンソースシリーズ

その他のモデル

以下のモデルもコードインタープリターをサポートしていますが、パフォーマンスは推奨モデルほどではない場合があります。これらのモデルは Responses API 経由でのみサポートされます。
  • Qwen-Flash:Qwen3.7-Flash シリーズ、Qwen3.6-Flash シリーズ、Qwen3.5-Flash シリーズ
  • Qwen3.6 オープンソースシリーズ (qwen3.6-27b を除く)
  • Qwen3.5 オープンソースシリーズ

クイックスタート

以下の例では、コードインタープリターが数学的な問題をどのように解決するかを示します。
  • OpenAI 互換 - Responses API
  • OpenAI 互換 - Chat Completions API
  • DashScope
最良の結果を得るには、code_interpreter、web_search、web_extractor の各ツールを同時に有効にしてください。
import os
from openai import OpenAI

client = OpenAI(
    # 環境変数が設定されていない場合、次の行を `api_key="sk-xxx"` のように、ご自身の Alibaba Cloud Model Studio API キーに置き換えてください。
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下の URL はシンガポールリージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
)

response = client.responses.create(
    model="qwen3.8-max",
    input="12 の 3 乗",
    tools=[
        {
            "type": "code_interpreter"
        },
        {
            "type": "web_search"
        },
        {
            "type": "web_extractor"
        }
    ],
    extra_body = {
        "enable_thinking": True
    }
)
# 以下の行のコメントを解除すると、中間プロセスの出力を表示できます
# print(response.output)
print("="*20+"応答内容"+"="*20)
print(response.output_text)
print("="*20+"トークン消費量とツール呼び出し"+"="*20)
print(response.usage)
応答例
====================応答内容====================
12 の 3 乗は **1728** です。

計算プロセス:
12³ = 12 × 12 × 12 = 144 × 12 = 1728
====================トークン消費量とツール呼び出し====================
ResponseUsage(input_tokens=1160, input_tokens_details=InputTokensDetails(cached_tokens=0), output_tokens=195, output_tokens_details=OutputTokensDetails(reasoning_tokens=105), total_tokens=1355, x_tools={'code_interpreter': {'count': 1}})

応答の解析

  • OpenAI 互換 - Responses API
  • DashScope
以下の OpenAI Python SDK の例は、ストリーミング応答を解析する方法を示しています。
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下の URL はシンガポールリージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
)

response = client.responses.create(
    model="qwen3.8-max",
    input="12 の 3 乗",
    tools=[
        {"type": "code_interpreter"}
    ],
    extra_body={
        "enable_thinking": True
    },
    stream=True
)

def print_section(title):
    print(f"\n{'=' * 20}{title}{'=' * 20}")

current_section = None
final_response = None

for event in response:
    # 思考プロセスの増分出力
    if event.type == "response.reasoning_summary_text.delta":
        if current_section != "reasoning":
            print_section("思考プロセス")
            current_section = "reasoning"
        print(event.delta, end="", flush=True)

    # コードインタープリター呼び出し完了
    elif event.type == "response.output_item.done" and hasattr(event.item, "code"):
        print_section("コード実行")
        print(f"コード:\n{event.item.code}")
        if event.item.outputs:
            print(f"結果: {event.item.outputs[0].logs}")
        current_section = "code"

    # 最終応答の増分出力
    elif event.type == "response.output_text.delta":
        if current_section != "answer":
            print_section("完全な応答")
            current_section = "answer"
        print(event.delta, end="", flush=True)

    # 応答完了、最終結果を保存して使用状況を取得
    elif event.type == "response.completed":
        final_response = event.response

# トークン消費量とツール呼び出し回数を出力
if final_response and final_response.usage:
    print_section("トークン消費量とツール呼び出し")
    usage = final_response.usage
    print(f"入力トークン: {usage.input_tokens}")
    print(f"出力トークン: {usage.output_tokens}")
    print(f"思考トークン: {usage.output_tokens_details.reasoning_tokens}")
    # モデルが実際にコードインタープリターを呼び出さなかった場合(例:単純な質問に直接回答した場合)、レスポンスに x_tools フィールドが含まれません
    if hasattr(usage, 'x_tools'):
        print(f"コードインタープリター呼び出し回数: {usage.x_tools.get('code_interpreter', {}).get('count', 0)}")
    else:
        print("コードインタープリター呼び出し回数: 0")

注意事項

  • コードインタープリターと 関数呼び出し は相互排他的です。
    同じリクエストで両方を有効にすると、エラーが発生します。
  • コードインタープリターを有効にすると、1 つのリクエストで複数のモデル推論がトリガーされる場合があります。 usage フィールドには、そのリクエスト内のすべての呼び出しの合計トークン消費量が要約されます。

課金

コードインタープリターは 期間限定で無料 ですが、トークン消費量は増加します。