すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:コーディング機能 (Qwen-Coder)

最終更新日:Jan 02, 2026

Qwen-Coder は、コード関連のタスク向けに設計された言語モデルです。API を使用してモデルを呼び出し、コードの生成、コードの補完、ツール呼び出しによる外部システムとの連携を行うことができます。

はじめに

前提条件

  • API キーを作成し、環境変数としてエクスポート済みであること。

  • ソフトウェア開発キット (SDK) を使用して呼び出しを行う場合は、SDK をインストールする必要があります。DashScope Python SDK のバージョンは 1.24.6 以降、DashScope Java SDK のバージョンは 2.21.10 以降である必要があります。

次の例では、Qwen-Coder モデルを呼び出して、素数を見つける Python 関数を作成する方法を示します。Qwen CodeClaude CodeCline などの開発者ツールを使用してモデルを統合することもできます。

OpenAI 互換

Python

リクエスト例

import os
from openai import OpenAI

client = OpenAI(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
    # 環境変数を設定していない場合は、次の行をご利用の Alibaba Cloud Model Studio API キーに置き換えてください:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    # この例では qwen3-coder-plus を使用しています。必要に応じて、別のモデル名に置き換えることができます。
    model="qwen3-coder-plus", 
    messages=[
        {'role': 'system', 'content': 'あなたは役立つアシスタントです。'},
        {'role': 'user', 'content': 'find_prime_numbers という名前の Python 関数を書いてください。この関数は整数 n をパラメーターとして受け取り、n 未満のすべての素数のリストを返します。コード以外のコンテンツは出力せず、Markdown コードブロックも使用しないでください。'}],
)
print(completion.choices[0].message.content)

応答

def find_prime_numbers(n):
    if n <= 2:
        return []
    
    primes = []
    for num in range(2, n):
        is_prime = True
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    
    return primes

Node.js

リクエスト例

import OpenAI from "openai";

const client = new OpenAI(
    {
        // API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
        // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        // 北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const completion = await client.chat.completions.create({
        model: "qwen3-coder-plus",  //この例では qwen3-coder-plus を使用しています。必要に応じて、別のモデル名に置き換えることができます。
        messages: [
            { role: "system", content: "あなたは役立つアシスタントです。" },
            { role: "user", content: "find_prime_numbers という名前の Python 関数を書いてください。この関数は整数 n をパラメーターとして受け取り、n 未満のすべての素数のリストを返します。コード以外のコンテンツは出力せず、Markdown コードブロックも使用しないでください。" }
        ],
    });
    console.log(completion.choices[0].message.content);
}

main();

結果

def find_prime_numbers(n):
    if n <= 2:
        return []
    
    primes = []
    for num in range(2, n):
        is_prime = True
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    
    return primes

curl

リクエスト例

北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください。

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-coder-plus",
    "messages": [
        {
            "role": "system",
            "content": "あなたは役立つアシスタントです。"
        },
        {
            "role": "user", 
            "content": "find_prime_numbers という名前の Python 関数を書いてください。この関数は整数 n をパラメーターとして受け取り、n 未満のすべての素数のリストを返します。コード以外のコンテンツは出力せず、Markdown コードブロックも使用しないでください。"
        }
    ]
}'

結果

{
    "choices": [
        {
            "message": {
                "content": "def find_prime_numbers(n):\n    if n <= 2:\n        return []\n    \n    primes = []\n    \n    for num in range(2, n):\n        is_prime = True\n        for i in range(2, int(num ** 0.5) + 1):\n            if num % i == 0:\n                is_prime = False\n                break\n        if is_prime:\n            primes.append(num)\n    \n    return primes",
                "role": "assistant"
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 96,
        "completion_tokens": 90,
        "total_tokens": 186,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "created": 1761615592,
    "system_fingerprint": null,
    "model": "qwen3-coder-plus",
    "id": "chatcmpl-3de690bd-ae7f-461d-8eb6-d65b0577e803"
}

DashScope

Python

リクエスト例

import dashscope
import os

# 北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
    {
        "role": "system",
        "content": "あなたは役立つアシスタントです。"
    },
    {
        "role": "user",
        "content": "find_prime_numbers という名前の Python 関数を書いてください。この関数は整数 n をパラメーターとして受け取り、n 未満のすべての素数のリストを返します。コード以外のコンテンツは出力せず、Markdown コードブロックも使用しないでください。"
    }
]

response = dashscope.Generation.call(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
    # 環境変数を設定していない場合は、次の行をご利用の Alibaba Cloud Model Studio API キーに置き換えてください:api_key = "sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # この例では qwen3-coder-plus を使用しています。必要に応じて、別のモデル名に置き換えることができます。
    model="qwen3-coder-plus",
    messages=messages,
    result_format="message"
)

if response.status_code == 200:
    print(response.output.choices[0].message.content)
else:
    print(f"HTTP ステータスコード:{response.status_code}")
    print(f"エラーコード:{response.code}")
    print(f"エラーメッセージ:{response.message}")

結果

def find_prime_numbers(n):
    if n <= 2:
        return []
    
    primes = []
    for num in range(2, n):
        is_prime = True
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    
    return primes

Java

リクエスト例

import java.util.Arrays;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.protocol.Protocol;


public class Main {
    public static GenerationResult callWithMessage()
            throws NoApiKeyException, ApiException, InputRequiredException {
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        // 北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        Generation gen = new Generation(Protocol.HTTP.getValue(), "https://dashscope-intl.aliyuncs.com/api/v1");
        Message sysMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                .content("あなたは役立つアシスタントです。").build();
        Message userMsg = Message.builder()
                .role(Role.USER.getValue())
                .content("find_prime_numbers という名前の Python 関数を書いてください。この関数は整数 n をパラメーターとして受け取り、n 未満のすべての素数のリストを返します。コード以外のコンテンツは出力せず、Markdown コードブロックも使用しないでください。").build();
        // この例では qwen3-coder-plus を使用しています。必要に応じて、別のモデル名に置き換えることができます。
        GenerationParam param = GenerationParam.builder()
                .apiKey(apiKey)
                .model("qwen3-coder-plus")
                .messages(Arrays.asList(sysMsg, userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .build();
        return gen.call(param);
    }
    public static void main(String[] args){
        try {
            GenerationResult result = callWithMessage();
            System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent());
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.err.println("リクエスト例外: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

応答

def find_prime_numbers(n):
    if n <= 2:
        return []
    
    primes = []
    for num in range(2, n):
        is_prime = True
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    
    return primes

curl

リクエスト例

北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation に置き換えてください。

curl -X POST "https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-coder-plus",
    "input":{
        "messages":[      
            {
                "role": "system",
                "content": "あなたは役立つアシスタントです。"
            },
            {
                "role": "user",
                "content": "find_prime_numbers という名前の Python 関数を書いてください。この関数は整数 n をパラメーターとして受け取り、n 未満のすべての素数のリストを返します。コード以外のコンテンツは出力せず、Markdown コードブロックも使用しないでください。"
            }
        ]
    },
    "parameters": {
        "result_format": "message"
    }
}'

応答

{
    "output": {
        "choices": [
            {
                "message": {
                    "content": "def find_prime_numbers(n):\n    if n <= 2:\n        return []\n    \n    primes = []\n    \n    for num in range(2, n):\n        is_prime = True\n        for i in range(2, int(num ** 0.5) + 1):\n            if num % i == 0:\n                is_prime = False\n                break\n        if is_prime:\n            primes.append(num)\n    \n    return primes",
                    "role": "assistant"
                },
                "finish_reason": "stop"
            }
        ]
    },
    "usage": {
        "total_tokens": 186,
        "output_tokens": 90,
        "input_tokens": 96,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "request_id": "b1b8d1f8-0d26-4651-a466-66eefa0e7c51"
}

モデルの選択

Qwen-Coder は Qwen3 シリーズにアップグレードされました。最大 100 万トークンのコンテキストウィンドウをサポートし、さまざまなシナリオにおけるパフォーマンス、応答速度、コストに関するさまざまな要件を満たすために複数のモデルを提供します。

推奨事項

  • qwen3-coder-plus:このモデルは最も強力なコーディング機能を提供し、複雑なプロジェクトの生成や詳細なコードレビューなどの高品質なタスクに適しています。

  • qwen3-coder-flash:これは、パフォーマンスとコストのバランスが取れたコスト効率の高いモデルであり、より低い価格でより速い応答速度を提供します。迅速な応答が求められるシナリオに適しています。

モデル名、コンテキストウィンドウ、価格、スナップショットバージョンの詳細については、「モデルリスト」をご参照ください。同時リクエスト制限の詳細については、「レート制限」をご参照ください。

コア機能

ツール呼び出し

モデルが外部環境 (ファイルの読み書き、API の呼び出し、データベースとの対話など) と対話できるようにするために、一連のツールを提供できます。モデルは、ご利用の命令に基づいて、これらのツールを呼び出すかどうか、またどのように呼び出すかを決定します。詳細については、「ツール呼び出し」をご参照ください。

完全なツール呼び出しプロセスには、次のステップが含まれます:

  1. ツールの定義とリクエストの実行:リクエストでツールのリストを定義し、これらのツールを必要とするタスクを実行するようにモデルに依頼します。

  2. ツールの実行:モデルの応答から tool_calls を解析し、対応するローカルツール関数を呼び出してタスクを実行します。

  3. 実行結果の返却:ツールの実行結果を必要なフォーマットにパッケージ化し、モデルに返送します。これにより、モデルは結果に基づいて最終的なタスクを完了できます。

次の例では、モデルを誘導してコードを生成し、write_file ツールを使用してローカルファイルに保存する方法を示します。

OpenAI 互換

Python

リクエスト例

import os
import json
from openai import OpenAI

client = OpenAI(
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
    # 環境変数を設定していない場合は、次の行をご利用の Alibaba Cloud Model Studio API キーに置き換えてください:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

tools = [
    {
        "type": "function",
        "function": {
            "name": "write_file",
            "description": "指定されたファイルにコンテンツを書き込みます。ファイルが存在しない場合は作成されます。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "ターゲットファイルの相対パスまたは絶対パス。"
                    },
                    "content": {
                        "type": "string",
                        "description": "ファイルに書き込む文字列コンテンツ。"
                    }
                },
                "required": ["path", "content"]
            }
        }
    }
]

# ツール関数の実装
def write_file(path: str, content: str) -> str:
    """ファイルコンテンツを書き込む"""
    try:
        # ディレクトリが存在することを確認します。
        os.makedirs(os.path.dirname(path),
                    exist_ok=True) if os.path.dirname(path) else None
        with open(path, 'w', encoding='utf-8') as f:
            f.write(content)
        return f"成功:ファイル '{path}' が書き込まれました。"
    except Exception as e:
        return f"エラー:ファイルの書き込み中に例外が発生しました - {str(e)}"


messages = [{"role": "user", "content": "クイックソートの Python スクリプトを書き、quick_sort.py という名前を付けてください。"}]

completion = client.chat.completions.create(
    model="qwen3-coder-plus",
    messages=messages,
    tools=tools
)

assistant_output = completion.choices[0].message
if assistant_output.content is None:
    assistant_output.content = ""
messages.append(assistant_output)

# ツール呼び出しが不要な場合は、コンテンツを直接出力します。
if assistant_output.tool_calls is None:
    print(f"ツール呼び出しは不要です。直接応答します:{assistant_output.content}")
else:
    # ツール呼び出しループに入ります。
    while assistant_output.tool_calls is not None:
        for tool_call in assistant_output.tool_calls:
            tool_call_id = tool_call.id
            func_name = tool_call.function.name
            arguments = json.loads(tool_call.function.arguments)
            print(f"ツール [{func_name}] を引数で呼び出しています:{arguments}")
            # ツールを実行します。
            tool_result = write_file(**arguments)
            # ツールの戻りメッセージを構築します。
            tool_message = {
                "role": "tool",
                "tool_call_id": tool_call_id,
                "content": tool_result,
            }
            print(f"ツールが返しました:{tool_message['content']}")
            messages.append(tool_message)
        # モデルを再度呼び出して、要約された自然言語の応答を取得します。
        response = client.chat.completions.create(
            model="qwen3-coder-plus",
            messages=messages,
            tools=tools
        )
        assistant_output = response.choices[0].message
        if assistant_output.content is None:
            assistant_output.content = ""
        messages.append(assistant_output)
    print(f"モデルの最終応答:{assistant_output.content}")

応答

Calling tool [write_file] with arguments: {'content': 'def quick_sort(arr):\\n    if len(arr) <= 1:\\n        return arr\\n    pivot = arr[len(arr) // 2]\\n    left = [x for x in arr if x < pivot]\\n    middle = [x for x in arr if x == pivot]\\n    right = [x for x in arr if x > pivot]\\n    return quick_sort(left) + middle + quick_sort(right)\\n\\nif __name__ == \\"__main__\\":\\n    example_list = [3, 6, 8, 10, 1, 2, 1]\\n    print(\\"Original list:\\", example_list)\\n    sorted_list = quick_sort(example_list)\\n    print(\\"Sorted list:\\", sorted_list)', 'path': 'quick_sort.py'}
Tool returned: Success: The file 'quick_sort.py' has been written.
Model's final response: はい、`quick_sort.py` という名前のファイルを作成しました。このファイルにはクイックソートの Python 実装が含まれています。このファイルを実行して、サンプル出力を見ることができます。さらに変更や説明が必要な場合はお知らせください!

Node.js

リクエスト例

import OpenAI from "openai";
import fs from "fs/promises";
import path from "path";

const client = new OpenAI({
    // API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
    // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:apiKey: "sk-xxx",
    apiKey: process.env.DASHSCOPE_API_KEY,
    // 北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
    baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});

const tools = [
    {
        "type": "function",
        "function": {
            "name": "write_file",
            "description": "指定されたファイルにコンテンツを書き込みます。ファイルが存在しない場合は作成されます。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "ターゲットファイルの相対パスまたは絶対パス。"
                    },
                    "content": {
                        "type": "string",
                        "description": "ファイルに書き込む文字列コンテンツ。"
                    }
                },
                "required": ["path", "content"]
            }
        }
    }
];

// ツール関数の実装
async function write_file(filePath, content) {
    try {
        // セキュリティ上の理由から、ファイル書き込み機能はデフォルトで無効になっています。使用するには、コードのコメントを解除し、パスが安全であることを確認してください。
        // const dir = path.dirname(filePath);
        // if (dir) {
        //     await fs.mkdir(dir, { recursive: true });
        // }
        // await fs.writeFile(filePath, content, "utf-8");
        return `成功:ファイル '${filePath}' が書き込まれました。`;
    } catch (error) {
        return `エラー:ファイルの書き込み中に例外が発生しました - ${error.message}`;
    }
}

const messages = [{"role": "user", "content": "クイックソートの Python スクリプトを書き、quick_sort.py という名前を付けてください。"}];

async function main() {
    const completion = await client.chat.completions.create({
        model: "qwen3-coder-plus",
        messages: messages,
        tools: tools
    });

    let assistant_output = completion.choices[0].message;
    // content が null でないことを確認します。
    if (!assistant_output.content) assistant_output.content = "";
    messages.push(assistant_output);

    // ツール呼び出しが不要な場合は、コンテンツを直接出力します。
    if (!assistant_output.tool_calls) {
        console.log(`ツール呼び出しは不要です。直接応答します:${assistant_output.content}`);
    } else {
        // ツール呼び出しループに入ります。
        while (assistant_output.tool_calls) {
            for (const tool_call of assistant_output.tool_calls) {
                const tool_call_id = tool_call.id;
                const func_name = tool_call.function.name;
                const args = JSON.parse(tool_call.function.arguments);
                console.log(`ツール [${func_name}] を引数で呼び出しています:`, args);
                // ツールを実行します。
                const tool_result = await write_file(args.path, args.content);
                // ツールの戻りメッセージを構築します。
                const tool_message = {
                    "role": "tool",
                    "tool_call_id": tool_call_id,
                    "content": tool_result
                };
                console.log(`ツールが返しました:${tool_message.content}`);
                messages.push(tool_message);
            }
            // モデルを再度呼び出して、要約された自然言語の応答を取得します。
            const response = await client.chat.completions.create({
                model: "qwen3-coder-plus",
                messages: messages,
                tools: tools
            });
            assistant_output = response.choices[0].message;
            if (!assistant_output.content) assistant_output.content = "";
            messages.push(assistant_output);
        }
        console.log(`モデルの最終応答:${assistant_output.content}`);
    }
}

main();

結果

Calling tool [write_file] with arguments: {
  content: 'def quick_sort(arr):\\n    if len(arr) <= 1:\\n        return arr\\n    pivot = arr[len(arr) // 2]\\n    left = [x for x in arr if x < pivot]\\n    middle = [x for x in arr if x == pivot]\\n    right = [x for x in arr if x > pivot]\\n    return quick_sort(left) + middle + quick_sort(right)\\n\\nif __name__ == \\"__main__\\":\\n    example_list = [3, 6, 8, 10, 1, 2, 1]\\n    print(\\"Original list:\\", example_list)\\n    sorted_list = quick_sort(example_list)\\n    print(\\"Sorted list:\\", sorted_list)',
  path: 'quick_sort.py'
}
Tool returned: Success: The file 'quick_sort.py' has been written.
Model's final response: `quick_sort.py` ファイルは、クイックソートの Python 実装で正常に作成されました。ファイルを実行して、サンプルリストのソート結果を確認できます。さらに変更や説明が必要な場合はお知らせください!

curl

リクエスト例

この例では、ツール呼び出しプロセスの最初のステップを示します:リクエストを行い、ツールを呼び出すモデルの意図を取得します。

北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください。

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-coder-plus",
    "messages": [
        {
            "role": "user", 
            "content": "クイックソートの Python スクリプトを書き、quick_sort.py という名前を付けてください。"
        }
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "write_file",
                "description": "指定されたファイルにコンテンツを書き込みます。ファイルが存在しない場合は作成されます。",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "path": {
                            "type": "string",
                            "description": "ターゲットファイルの相対パスまたは絶対パス。"
                        },
                        "content": {
                            "type": "string",
                            "description": "ファイルに書き込む文字列コンテンツ。"
                        }
                    },
                    "required": ["path", "content"]
                }
            }
        }
    ]
}'

応答

{
    "choices": [
        {
            "message": {
                "content": "",
                "role": "assistant",
                "tool_calls": [
                    {
                        "index": 0,
                        "id": "call_0ca7505bb6e44471a40511e5",
                        "type": "function",
                        "function": {
                            "name": "write_file",
                            "arguments": "{\"content\": \"def quick_sort(arr):\\\\n    if len(arr) <= 1:\\\\n        return arr\\\\n    pivot = arr[len(arr) // 2]\\\\n    left = [x for x in arr if x < pivot]\\\\n    middle = [x for x in arr if x == pivot]\\\\n    right = [x for x in arr if x > pivot]\\\\n    return quick_sort(left) + middle + quick_sort(right)\\\\n\\\\nif __name__ == \\\\\\\"__main__\\\\\\\":\\\\n    example_list = [3, 6, 8, 10, 1, 2, 1]\\\\n    print(\\\\\\\"Original list:\\\\\\\", example_list)\\\\n    sorted_list = quick_sort(example_list)\\\\n    print(\\\\\\\"Sorted list:\\\\\\\", sorted_list)\", \"path\": \"quick_sort.py\"}"
                        }
                    }
                ]
            },
            "finish_reason": "tool_calls",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 494,
        "completion_tokens": 193,
        "total_tokens": 687,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "created": 1761620025,
    "system_fingerprint": null,
    "model": "qwen3-coder-plus",
    "id": "chatcmpl-20e96159-beea-451f-b3a4-d13b218112b5"
}

DashScope

Python

リクエスト例

import os
import json
import dashscope

# 北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

tools = [
    {
        "type": "function",
        "function": {
            "name": "write_file",
            "description": "指定されたファイルにコンテンツを書き込みます。ファイルが存在しない場合は作成されます。",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "ターゲットファイルの相対パスまたは絶対パス。"
                    },
                    "content": {
                        "type": "string",
                        "description": "ファイルに書き込む文字列コンテンツ。"
                    }
                },
                "required": ["path", "content"]
            }
        }
    }
]

# ツール関数の実装
def write_file(path: str, content: str) -> str:
    """ファイルコンテンツを書き込む"""
    try:
        # セキュリティ上の理由から、ファイル書き込み機能はデフォルトで無効になっています。使用するには、コードのコメントを解除し、パスが安全であることを確認してください。
        # os.makedirs(os.path.dirname(path),exist_ok=True) if os.path.dirname(path) else None
        # with open(path, 'w', encoding='utf-8') as f:
        #     f.write(content)
        return f"成功:ファイル '{path}' が書き込まれました。"
    except Exception as e:
        return f"エラー:ファイルの書き込み中に例外が発生しました - {str(e)}"


messages = [{"role": "user", "content": "クイックソートの Python スクリプトを書き、quick_sort.py という名前を付けてください。"}]

response = dashscope.Generation.call(
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-coder-plus',
    messages=messages,
    tools=tools,
    result_format='message'
)

if response.status_code == 200:
    assistant_output = response.output.choices[0].message
    messages.append(assistant_output)

    # ツール呼び出しが不要な場合は、コンテンツを直接出力します。
    if "tool_calls" not in assistant_output or not assistant_output["tool_calls"]:
        print(f"ツール呼び出しは不要です。直接応答します:{assistant_output['content']}")
    else:
        # ツール呼び出しループに入ります。
        while "tool_calls" in assistant_output and assistant_output["tool_calls"]:
            for tool_call in assistant_output["tool_calls"]:
                func_name = tool_call["function"]["name"]
                arguments = json.loads(tool_call["function"]["arguments"])
                tool_call_id = tool_call.get("id")
                print(f"ツール [{func_name}] を引数で呼び出しています:{arguments}")
                # ツールを実行します。
                tool_result = write_file(**arguments)
                # ツールの戻りメッセージを構築します。
                tool_message = {
                    "role": "tool",
                    "content": tool_result,
                    "tool_call_id": tool_call_id
                }
                print(f"ツールが返しました:{tool_message['content']}")
                messages.append(tool_message)
            # モデルを再度呼び出して、要約された自然言語の応答を取得します。
            response = dashscope.Generation.call(
                api_key=os.getenv('DASHSCOPE_API_KEY'),
                model='qwen3-coder-plus',
                messages=messages,
                tools=tools,
                result_format='message'
            )
            if response.status_code == 200:
                print(f"モデルの最終応答:{response.output.choices[0].message.content}")
                assistant_output = response.output.choices[0].message
                messages.append(assistant_output)
            else:
                print(f"要約応答中のエラー:{response}")
                break
else:
    print(f"実行エラー:{response}")

応答

ツール呼び出し [write_file]、引数: {'content': 'def quick_sort(arr):\\n    if len(arr) <= 1:\\n        return arr\\n    pivot = arr[len(arr) // 2]\\n    left = [x for x in arr if x < pivot]\\n    middle = [x for x in arr if x == pivot]\\n    right = [x for x in arr if x > pivot]\\n    return quick_sort(left) + middle + quick_sort(right)\\n\\nif __name__ == \\"__main__\\":\\n    example_list = [3, 6, 8, 10, 1, 2, 1]\\n    print(\\"Original list:\\", example_list)\\n    sorted_list = quick_sort(example_list)\\n    print(\\"Sorted list:\\", sorted_list)', 'path': 'quick_sort.py'}
ツールからの応答: 成功: ファイル 'quick_sort.py' が書き込まれました。
モデルの最終応答: クイックソートの Python 実装を含む `quick_sort.py` ファイルが正常に作成されました。このファイルを実行すると、サンプルリストのソート結果を確認できます。さらに変更や説明が必要な場合は、お知らせください。

Java

リクエスト例

import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.protocol.Protocol;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.tools.FunctionDefinition;
import com.alibaba.dashscope.tools.ToolCallBase;
import com.alibaba.dashscope.tools.ToolCallFunction;
import com.alibaba.dashscope.tools.ToolFunction;
import com.alibaba.dashscope.utils.JsonUtils;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {

    /**
     * ファイルコンテンツを書き込みます。
     * @param arguments モデルから渡される JSON 文字列。ツールに必要なパラメーターが含まれています。
     * @return ツール実行結果を含む文字列。
     */
    public static String writeFile(String arguments) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            JsonNode argsNode = objectMapper.readTree(arguments);
            String path = argsNode.get("path").asText();
            String content = argsNode.get("content").asText();

            // セキュリティ上の理由から、ファイル書き込み機能はデフォルトで無効になっています。使用するには、コードのコメントを解除し、パスが安全であることを確認してください。
            // File file = new File(path);
            // File parentDir = file.getParentFile();
            // if (parentDir != null && !parentDir.exists()) {
            //     parentDir.mkdirs();
            // }
            // Files.write(Paths.get(path), content.getBytes(StandardCharsets.UTF_8));
            return "成功:ファイル '" + path + "' が書き込まれました。";
        } catch (Exception e) {
            return "エラー:ファイルの書き込み中に例外が発生しました - " + e.getMessage();
        }
    }

    public static void main(String[] args) {
        try {
            // ツールパラメーターのスキーマを定義します。
            String writePropertyParams =
                    "{\"type\":\"object\",\"properties\":{\"path\":{\"type\":\"string\",\"description\":\"ターゲットファイルの相対パスまたは絶対パス。\"},\"content\":{\"type\":\"string\",\"description\":\"ファイルに書き込む文字列コンテンツ。\"}},\"required\":[\"path\",\"content\"]}";

            FunctionDefinition writeFileFunction = FunctionDefinition.builder()
                    .name("write_file")
                    .description("指定されたファイルにコンテンツを書き込みます。ファイルが存在しない場合は作成されます。")
                    .parameters(JsonUtils.parseString(writePropertyParams).getAsJsonObject())
                    .build();

            // 北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
            Generation gen = new Generation(Protocol.HTTP.getValue(), "https://dashscope-intl.aliyuncs.com/api/v1");

            String userInput = "クイックソートの Python スクリプトを書き、quick_sort.py という名前を付けてください。";
            List<Message> messages = new ArrayList<>();
            messages.add(Message.builder().role(Role.USER.getValue()).content(userInput).build());

            // モデルへの最初の呼び出し。
            GenerationParam param = GenerationParam.builder()
                    .model("qwen3-coder-plus")
                    .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                    .messages(messages)
                    .tools(Arrays.asList(ToolFunction.builder().function(writeFileFunction).build()))
                    .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                    .build();

            GenerationResult result = gen.call(param);
            Message assistantOutput = result.getOutput().getChoices().get(0).getMessage();
            messages.add(assistantOutput);

            // ツール呼び出しが不要な場合は、コンテンツを直接出力します。
            if (assistantOutput.getToolCalls() == null || assistantOutput.getToolCalls().isEmpty()) {
                System.out.println("ツール呼び出しは不要です。直接応答します: " + assistantOutput.getContent());
            } else {
                // ツール呼び出しループに入ります。
                while (assistantOutput.getToolCalls() != null && !assistantOutput.getToolCalls().isEmpty()) {
                    for (ToolCallBase toolCall : assistantOutput.getToolCalls()) {
                        ToolCallFunction functionCall = (ToolCallFunction) toolCall;
                        String funcName = functionCall.getFunction().getName();
                        String arguments = functionCall.getFunction().getArguments();
                        System.out.println("ツール [" + funcName + "] を引数で呼び出しています: " + arguments);

                        // ツールを実行します。
                        String toolResult = writeFile(arguments);

                        // ツールの戻りメッセージを構築します。
                        Message toolMessage = Message.builder()
                                .role("tool")
                                .toolCallId(toolCall.getId())
                                .content(toolResult)
                                .build();
                        System.out.println("ツールが返しました: " + toolMessage.getContent());
                        messages.add(toolMessage);
                    }

                    // モデルを再度呼び出して、要約された自然言語の応答を取得します。
                    param.setMessages(messages);
                    result = gen.call(param);
                    assistantOutput = result.getOutput().getChoices().get(0).getMessage();
                    messages.add(assistantOutput);
                }
                System.out.println("モデルの最終応答: " + assistantOutput.getContent());
            }

        } catch (NoApiKeyException | InputRequiredException e) {
            System.err.println("エラー: " + e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

応答

Calling tool [write_file] with arguments: {"content": "def quick_sort(arr):\\n    if len(arr) <= 1:\\n        return arr\\n    pivot = arr[len(arr) // 2]\\n    left = [x for x in arr if x < pivot]\\n    middle = [x for x in arr if x == pivot]\\n    right = [x for x in arr if x > pivot]\\n    return quick_sort(left) + middle + quick_sort(right)\\n\\nif __name__ == \\\"__main__\\\":\\n    example_array = [3, 6, 8, 10, 1, 2, 1]\\n    print(\\\"Original array:\\\", example_array)\\n    sorted_array = quick_sort(example_array)\\n    print(\\\"Sorted array:\\\", sorted_array)", "path": "quick_sort.py"}
Tool returned: Success: The file 'quick_sort.py' has been written.
Model's final response: Python コードファイル `quick_sort.py` を正常に作成しました。このファイルには `quick_sort` 関数とその使用例が含まれています。ターミナルやエディターで実行して、クイックソート機能をテストできます。

curl

リクエスト例

この例では、ツール呼び出しプロセスの最初のステップを示します:リクエストを行い、ツールを呼び出すモデルの意図を取得します。

北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation に置き換えてください。

curl --location "https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation" \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen3-coder-plus",
    "input": {
        "messages": [{
            "role": "user",
            "content": "クイックソートの Python スクリプトを書き、quick_sort.py という名前を付けてください。"
        }]
    },
    "parameters": {
        "result_format": "message",
        "tools": [
        {
            "type": "function",
            "function": {
                "name": "write_file",
                "description": "指定されたファイルにコンテンツを書き込みます。ファイルが存在しない場合は作成されます。",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "path": {
                            "type": "string",
                            "description": "ターゲットファイルの相対パスまたは絶対パス。"
                        },
                        "content": {
                            "type": "string",
                            "description": "ファイルに書き込む文字列コンテンツ。"
                        }
                    },
                    "required": ["path", "content"]
                }
            }
        }
    ]
    }
}'

応答

{
    "output": {
        "choices": [
            {
                "finish_reason": "tool_calls",
                "message": {
                    "role": "assistant",
                    "tool_calls": [
                        {
                            "function": {
                                "name": "write_file",
                                "arguments": "{\"content\": \"def quick_sort(arr):\\\\n    if len(arr) <= 1:\\\\n        return arr\\\\n    pivot = arr[len(arr) // 2]\\\\n    left = [x for x in arr if x < pivot]\\\\n    middle = [x for x in arr if x == pivot]\\\\n    right = [x for x in arr if x > pivot]\\\\n    return quick_sort(left) + middle + quick_sort(right)\\\\n\\\\nif __name__ == \\\\\\\"__main__\\\\\\\":\\\\n    example_list = [3, 6, 8, 10, 1, 2, 1]\\\\n    print(\\\\\\\"Original list:\\\\\\\", example_list)\\\\n    sorted_list = quick_sort(example_list)\\\\n    print(\\\\\\\"Sorted list:\\\\\\\", sorted_list), \"path\": \"quick_sort.py\"}"
                            },
                            "index": 0,
                            "id": "call_645b149bbd274e8bb3789aae",
                            "type": "function"
                        }
                    ],
                    "content": ""
                }
            }
        ]
    },
    "usage": {
        "total_tokens": 684,
        "output_tokens": 193,
        "input_tokens": 491,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "request_id": "d2386acd-fce3-9d0f-8015-c5f3a8bf9f5c"
}

コード補完

Qwen-Coder は、コード補完のための 2 つのメソッドをサポートしています。ニーズに合わせていずれかを選択してください:

  • 部分モード:このメソッドを推奨します。実装が簡単で、プレフィックス補完をサポートし、すべての Qwen-Coder モデルとリージョンで利用できます。

  • Completions API中国本土 (北京) リージョンの qwen2.5-coder モデルシリーズのみをサポートします。プレフィックス補完と中間補完をサポートします。

部分モード

この機能により、モデルは提供されたプレフィックスに基づいてコードの残りの部分を自動的に補完できます。

この機能を有効にするには、messages リストに roleassistant で、partial: true を含むメッセージを追加します。assistant メッセージの content は、提供するコードのプレフィックスです。詳細については、「部分モード」をご参照ください。

OpenAI 互換

Python

リクエスト例

import os
from openai import OpenAI


client = OpenAI(
    # 環境変数を設定していない場合は、次の行をご利用の Alibaba Cloud Model Studio API キーに置き換えてください:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-coder-plus",
    messages=[{
        "role": "user",
        "content": "100 までの素数を生成する Python スクリプトの作成を支援してください。コード以外のコンテンツや Markdown コードブロックは出力しないでください。"
    },
    {
        "role": "assistant",
        "content": "def generate_prime_number",
        "partial": True
    }]
    )
print(completion.choices[0].message.content)

応答

(n):
    primes = []
    for i in range(2, n+1):
        is_prime = True
        for j in range(2, int(i**0.5)+1):
            if i % j == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(i)
    return primes

prime_numbers = generate_prime_number(100)
print(prime_numbers)

Node.js

リクエスト例

import OpenAI from "openai";

const client = new OpenAI(
    {
        // 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        // 北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const completion = await client.chat.completions.create({
        model: "qwen3-coder-plus",
        messages: [
            { role: "user", content: "100 までの素数を生成する Python スクリプトの作成を支援してください。コード以外のコンテンツや Markdown コードブロックは出力しないでください。" },
            { role: "assistant", content: "def generate_prime_number", partial: true}
        ],
    });
    console.log(completion.choices[0].message.content);
}

main();

戻り値

(n):
    primes = []
    for i in range(2, n+1):
        is_prime = True
        for j in range(2, int(i**0.5)+1):
            if i % j == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(i)
    return primes

prime_numbers = generate_prime_number(100)
print(prime_numbers)

curl

リクエスト例

北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください。

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-coder-plus",
    "messages": [{
        "role": "user",
        "content": "100 までの素数を生成する Python スクリプトの作成を支援してください。コード以外のコンテンツや Markdown コードブロックは出力しないでください。"
    },
    {
        "role": "assistant",
        "content": "def generate_prime_number",
        "partial": true
    }]
}'

応答

{
    "choices": [
        {
            "message": {
                "content": "(n):\n    primes = []\n    for num in range(2, n + 1):\n        is_prime = True\n        for i in range(2, int(num ** 0.5) + 1):\n            if num % i == 0:\n                is_prime = False\n                break\n        if is_prime:\n            primes.append(num)\n    return primes\n\nprime_numbers = generate_prime_number(100)\nprint(prime_numbers)",
                "role": "assistant"
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 38,
        "completion_tokens": 93,
        "total_tokens": 131,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "created": 1761634556,
    "system_fingerprint": null,
    "model": "qwen3-coder-plus",
    "id": "chatcmpl-c108050a-bb6d-4423-9d36-f64aa6a32976"
}

DashScope

Python

リクエスト例

from http import HTTPStatus
import dashscope
import os

# 北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
    "role": "user",
    "content": "100 までの素数を生成する Python スクリプトの作成を支援してください。コード以外のコンテンツや Markdown コードブロックは出力しないでください。"
},
{
    "role": "assistant",
    "content": "def generate_prime_number",
    "partial": True
}]
response = dashscope.Generation.call(
    # 環境変数を設定していない場合は、次の行をご利用の Model Studio API キーに置き換えてください:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-coder-plus',
    messages=messages,
    result_format='message',  
)
if response.status_code == HTTPStatus.OK:
    print(response.output.choices[0].message.content)
else:
    print(f"HTTP ステータスコード:{response.status_code}")
    print(f"エラーコード:{response.code}")
    print(f"エラーメッセージ:{response.message}")

応答

(n):
    primes = []
    for i in range(2, n+1):
        is_prime = True
        for j in range(2, int(i**0.5)+1):
            if i % j == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(i)
    return primes

prime_numbers = generate_prime_number(100)
print(prime_numbers)

curl

リクエスト例

北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation に置き換えてください。

curl -X POST "https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-coder-plus",
    "input":{
        "messages":[{
            "role": "user",
            "content": "100 までの素数を生成する Python スクリプトの作成を支援してください。コード以外のコンテンツや Markdown コードブロックは出力しないでください。"
        },
        {
            "role": "assistant",
            "content": "def generate_prime_number",
            "partial": true
        }]
    },
    "parameters": {
        "result_format": "message"
    }
}'

応答

{
    "output": {
        "choices": [
            {
                "message": {
                    "content": "(n):\n    prime_list = []\n    for i in range(2, n+1):\n        is_prime = True\n        for j in range(2, int(i**0.5)+1):\n            if i % j == 0:\n                is_prime = False\n                break\n        if is_prime:\n            prime_list.append(i)\n    return prime_list\n\nprime_numbers = generate_prime_number(100)\nprint(prime_numbers)",
                    "role": "assistant"
                },
                "finish_reason": "stop"
            }
        ]
    },
    "usage": {
        "total_tokens": 131,
        "output_tokens": 92,
        "input_tokens": 39,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    },
    "request_id": "9917f629-e819-4519-af44-b0e677e94b2c"
}

Completions API

重要

Completions API は、中国本土 (北京) リージョンのモデルにのみ適用され、中国本土 (北京) リージョン用の API キー が必要です。

サポートされているモデル:

qwen2.5-coder-0.5b-instruct, qwen2.5-coder-1.5b-instruct, qwen2.5-coder-3b-instruct, qwen2.5-coder-7b-instruct, qwen2.5-coder-14b-instruct, qwen2.5-coder-32b-instruct, qwen-coder-turbo-0919, qwen-coder-turbo-latest, and qwen-coder-turbo

Completions API は、prompt 内の特別な fim (Fill-in-the-Middle) タグを使用して、モデルに補完を実行するように指示します。

プレフィックス補完

プロンプトテンプレート:

<|fim_prefix|>{prefix_content}<|fim_suffix|>
  • <|fim_prefix|><|fim_suffix|> は、モデルにテキストを補完するように指示する特別なトークンです。変更しないでください。

  • {prefix_content} を、関数名、入力パラメーター、使用方法などのプレフィックス情報に置き換えてください。

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    api_key=os.getenv("DASHSCOPE_API_KEY")
)

completion = client.completions.create(
  model="qwen2.5-coder-32b-instruct",
  prompt="<|fim_prefix|>def quick_sort(arr):<|fim_suffix|>",
)

print(completion.choices[0].text)
import OpenAI from "openai";

const client = new OpenAI(
    {
        // 環境変数を設定していない場合は、次の行をご利用の Alibaba Cloud Model Studio API キーに置き換えてください:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const completion = await client.completions.create({
        model: "qwen2.5-coder-32b-instruct",
        prompt: "<|fim_prefix|>def quick_sort(arr):<|fim_suffix|>",
    });
    console.log(completion.choices[0].text)
}

main();
curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen2.5-coder-32b-instruct",
    "prompt": "<|fim_prefix|>def quick_sort(arr):<|fim_suffix|>"
}'

プレフィックスとサフィックスの補完

プロンプトテンプレート

<|fim_prefix|>{prefix_content}<|fim_suffix|>{suffix_content}<|fim_middle|>
  • <|fim_prefix|><|fim_suffix|><|fim_middle|> は、モデルにテキストを補完するように指示する特別なトークンです。変更しないでください。

  • {prefix_content} を、関数名、入力パラメーター、使用方法などのプレフィックス情報に置き換えてください。

  • {suffix_content} を、関数の戻りパラメーターなどのサフィックス情報に置き換えてください。

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    api_key=os.getenv("DASHSCOPE_API_KEY")
)

prefix_content = """def reverse_words_with_special_chars(s):
'''
文字列内の各単語を逆順にしますが、非アルファベット文字の位置を保持し、単語の順序を維持します。
    例:
    reverse_words_with_special_chars("Hello, world!") -> "olleH, dlrow!"
    パラメーター:
        s (str):句読点を含む可能性のある入力文字列。
    戻り値:
        str:逆順の単語を含む処理済み文字列。非アルファベット文字の位置は変更されません。
'''
"""

suffix_content = "return result"

completion = client.completions.create(
  model="qwen2.5-coder-32b-instruct",
  prompt=f"<|fim_prefix|>{prefix_content}<|fim_suffix|>{suffix_content}<|fim_middle|>",
)

print(completion.choices[0].text)
import OpenAI from 'openai';


const client = new OpenAI({
  baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
  apiKey: process.env.DASHSCOPE_API_KEY
});

const prefixContent = `def reverse_words_with_special_chars(s):
'''
文字列内の各単語を逆順にしますが、非アルファベット文字の位置を保持し、単語の順序を維持します。
    例:
    reverse_words_with_special_chars("Hello, world!") -> "olleH, dlrow!"
    パラメーター:
        s (str):句読点を含む可能性のある入力文字列。
    戻り値:
        str:逆順の単語を含む処理済み文字列。非アルファベット文字の位置は変更されません。
'''
`;

const suffixContent = "return result";

async function main() {
  const completion = await client.completions.create({
    model: "qwen2.5-coder-32b-instruct",
    prompt: `<|fim_prefix|>${prefixContent}<|fim_suffix|>${suffixContent}<|fim_middle|>`
  });

  console.log(completion.choices[0].text);
}

main();
curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen2.5-coder-32b-instruct",
    "prompt": "<|fim_prefix|>def reverse_words_with_special_chars(s):\n\"\"\"\n文字列内の各単語を逆順にしますが、非アルファベット文字の位置を保持し、単語の順序を維持します。\n    例:\n    reverse_words_with_special_chars(\"Hello, world!\") -> \"olleH, dlrow!\"\n    パラメーター:\n        s (str):句読点を含む可能性のある入力文字列。\n    戻り値:\n        str:逆順の単語を含む処理済み文字列。非アルファベット文字の位置は変更されません。\n\"\"\"\n<|fim_suffix|>return result<|fim_middle|>"
}'

本番環境への適用

Qwen-Coder モデルの使用効率を最適化し、コストを削減するために、次の推奨事項を考慮してください:

  • ストリーミング出力を有効にするstream=True を設定して、中間結果をリアルタイムで返します。これにより、タイムアウトのリスクが軽減され、ユーザーエクスペリエンスが向上します。

  • temperature パラメーターを下げる:コード生成タスクは通常、決定的で正確な結果を必要とします。低い temperature 値は、生成される結果のランダム性を低減します。

  • コンテキストキャッシュをサポートするモデルを使用する:コード補完やコードレビューなど、プレフィックスが多数繰り返されるシナリオでは、コンテキストキャッシュをサポートするモデル (qwen3-coder-plus や qwen3-coder-flash など) を使用すると、オーバーヘッドが削減されます。

  • ツールの数を制御する:効率的でコスト効果の高いモデル呼び出しを確保するために、一度に 20 を超える tools を渡さないでください。多くのツール記述を渡すと、入力トークンが過剰に消費されます。これにより、コストが増加し、応答速度が低下し、モデルが正しいツールを選択するのが難しくなります。詳細については、「ツール呼び出し」をご参照ください。

課金とレート制限

  • 基本課金:各リクエストは、入力 Token と出力 Token の数に基づいて課金されます。単価はモデルによって異なります。具体的な価格については、「モデルリスト」をご参照ください。

  • 特別課金項目

    • 段階的価格設定qwen3-coder シリーズのモデルは、段階的価格設定構造を使用します。単一リクエストの入力トークン数が特定の段階に達すると、そのリクエストのすべての入力および出力トークンがその段階のレートで課金されます。

    • コンテキストキャッシュqwen3-coder-plusqwen3-coder-flash など、コンテキストキャッシュをサポートするモデルの場合、キャッシュ機構により、コードレビュー中など、大量の繰り返し入力を含むリクエストのコストを大幅に削減できます。暗黙的キャッシュにヒットした入力テキストは標準価格の 20% で課金され、明示的キャッシュにヒットした入力テキストは標準価格の 10% で課金されます。詳細については、「コンテキストキャッシュ」をご参照ください。

    • ツール呼び出し:ツール呼び出し機能を使用する場合、tools パラメーターで定義したツール記述は入力コンテンツとしてカウントされ、課金対象の合計 Token 数に含まれます。

  • レート制限API 呼び出しは、1 分あたりのリクエスト数 (RPM) と 1 分あたりのトークン数 (TPM) の両方の制限を受けます。詳細については、レート制限」をご参照ください。

  • 無料クォータ(シンガポールリージョンのみ):有効期間は、Model Studio をアクティベートしたとき、またはモデルリクエストが承認されたときに開始されます。この 90 日間の期間中、各 Qwen-Coder モデルは 100 万トークンの新規ユーザー向け無料クォータを提供します。

API リファレンス

Qwen-Coder モデルの入力および出力パラメーターについては、「Qwen」で説明されています。

よくある質問

Qwen Code や Claude Code などの開発者ツールを使用すると、なぜ多くのトークンが消費されるのですか?

外部の開発者ツールを使用して Qwen-Coder モデルを呼び出すと、ツールが複数の API 呼び出しを行う可能性があり、その結果、トークン消費量が高くなることがあります。特定のプロジェクトディレクトリでツールを起動してください。ルートディレクトリなど、起動ディレクトリにファイルが多すぎると、トークン消費量が増加します。無料クォータのみ機能を有効にすると、無料クォータを使い切った後に追加料金が発生するのを防ぐことができます。

モデルの使用状況を確認するにはどうすればよいですか?

モデルを呼び出してから 1 時間後に、モデル監視 (シンガポールまたは北京) ページに移動します。時間範囲やワークスペースなどのクエリ条件を設定します。次に、モデルエリアでターゲットモデルを見つけ、アクション列のモニターをクリックして、モデルの呼び出し統計を表示します。詳細については、「モデル監視」ドキュメントをご参照ください。

データは 1 時間ごとに更新されます。ピーク時には、1 時間レベルの遅延が発生する場合があります。

image

モデルに説明テキストなしでコードのみを出力させるにはどうすればよいですか?

次の方法を使用できます:

  1. プロンプト制約:プロンプトで明確な指示を提供します。例:「コードのみを返してください。説明、コメント、Markdown タグは含めないでください。」

  2. stop シーケンスを設定するstop=["\n# Explanation:", "Description", "Explanation:", "Note:"] などのフレーズを使用して、モデルが説明テキストを生成し始めたときに早期に停止させます。詳細については、「Qwen API リファレンス」をご参照ください。

qwen3-coder-plus の 1 日あたり 2,000 回の無料呼び出しを使用するにはどうすればよいですか?

このクォータは Qwen Code ツール専用であり、そのツールを通じてのみ使用できます。これは、Model Studio をアクティベートしたときに受け取る新規ユーザー向けの無料クォータとは独立して計算されます。2 つのクォータは競合しません。詳細については、「1 日あたり 2,000 回の無料呼び出しを使用するにはどうすればよいですか?」をご参照ください。