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

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

最終更新日:Feb 21, 2026

Qwen-Coder は、コード関連タスクに特化した言語モデルです。API を使用して、コード生成、コード補完、およびツールを介した外部システムとの対話のためにモデルを呼び出します。

クイックスタート

開始する前に、API キーを取得しAPI キーを環境変数として設定します。SDK を使用してモデルを呼び出す場合は、OpenAI または DashScope SDK をインストールします

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

OpenAI 互換 Chat Completions API

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-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-coder-next", 
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        {'role': 'user', 'content': 'Write a Python function find_prime_numbers that takes an integer n as an argument and returns a list of all prime numbers less than n. Do not output any non-code content or Markdown code blocks.'}],
)
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-next",
        messages: [
            { role: "system", content: "You are a helpful assistant." },
            { role: "user", content: "Write a Python function find_prime_numbers that takes an integer n as an argument and returns a list of all prime numbers less than n. Do not output any non-code content or Markdown code blocks." }
        ],
    });
    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-next",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user", 
            "content": "Write a Python function find_prime_numbers that takes an integer n as an argument and returns a list of all prime numbers less than n. Do not output any non-code content or Markdown code blocks."
        }
    ]
}'

レスポンス

{
    "model": "qwen3-coder-next",
    "id": "chatcmpl-3123d5cb-01b8-9a90-98cc-5bffbb369xxx",
    "choices": [
        {
            "message": {
                "content": "def find_prime_numbers(n):\n    if n <= 2:\n        return []\n    \n    primes = []\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"
            },
            "index": 0,
            "finish_reason": "stop"
        }
    ],
    "created": 1770108104,
    "object": "chat.completion",
    "usage": {
        "total_tokens": 155,
        "completion_tokens": 89,
        "prompt_tokens": 66
    }
}

DashScope

Python

リクエスト例

import dashscope
import os

dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
    {
        "role": "system",
        "content": "You are a helpful assistant."
    },
    {
        "role": "user",
        "content": "Write a Python function find_prime_numbers that takes an integer n as an argument and returns a list of all prime numbers less than n. Do not output any non-code content or Markdown code blocks."
    }
]

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"),
    model="qwen3-coder-next",
    messages=messages,
    result_format="message"
)

if response.status_code == 200:
    print(response.output.choices[0].message.content)
else:
    print(f"HTTP status code: {response.status_code}")
    print(f"Error code: {response.code}")
    print(f"Error message: {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");
        Generation gen = new Generation(Protocol.HTTP.getValue(), "https://dashscope-intl.aliyuncs.com/api/v1");
        Message sysMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                .content("You are a helpful assistant.").build();
        Message userMsg = Message.builder()
                .role(Role.USER.getValue())
                .content("Write a Python function find_prime_numbers that takes an integer n as an argument and returns a list of all prime numbers less than n. Do not output any non-code content or Markdown code blocks.").build();
        GenerationParam param = GenerationParam.builder()
                .apiKey(apiKey)
                .model("qwen3-coder-next")
                .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-next",
    "input":{
        "messages":[      
            {
                "role": "system",
                "content": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "Write a Python function find_prime_numbers that takes an integer n as an argument and returns a list of all prime numbers less than n. Do not output any non-code content or Markdown code blocks."
            }
        ]
    },
    "parameters": {
        "result_format": "message"
    }
}'

応答

{
    "output": {
        "choices": [
            {
                "message": {
                    "content": "def find_prime_numbers(n):\n    if n <= 2:\n        return []\n    \n    primes = []\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": 155,
        "input_tokens": 66,
        "output_tokens": 89
    },
    "request_id": "dd78b1cf-8029-46bb-9bea-b794ded7bxxx"
}

モデルの選択

  • 最も推奨: qwen3-coder-next は、コード品質、応答速度、コストのバランスに優れており、ほとんどのシナリオで最適な選択肢です。このモデルはマルチターンツール呼び出しをサポートし、最適化されたリポジトリレベルのコード理解を提供します。また、ツール呼び出しの安定性が強化され、エージェント型コーディングツールとの互換性も向上しています。

  • 最高品質の場合: 非常に複雑なタスクや最高品質の生成が必要な場合は、qwen3-coder-plus を使用して最良の結果を得てください。

モデルコード、コンテキストウィンドウ、料金、およびスナップショットについては、モデルリスト (商用版 | オープンソース) をご参照ください。同時リクエスト制限については、レート制限 ( 商用版 | オープンソース) をご参照ください。

コア機能

ツール呼び出し

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

ツール呼び出しの全プロセスには、以下のステップが含まれます。

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

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

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

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

OpenAI 互換 Chat Completions API

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",
)

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"Success: File '{path}' has been written."
    except Exception as e:
        return f"Error: An exception occurred while writing the file - {str(e)}"


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

completion = client.chat.completions.create(
    model="qwen3-coder-next",
    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"No tool call is required. Direct response: {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"Calling tool [{func_name}] with arguments: {arguments}")
            # ツールを実行します。
            tool_result = write_file(**arguments)
            # ツールリターンメッセージを構築します。
            tool_message = {
                "role": "tool",
                "tool_call_id": tool_call_id,
                "content": tool_result,
            }
            print(f"Tool returns: {tool_message['content']}")
            messages.append(tool_message)
        # モデルを再度呼び出して、要約された自然言語の応答を取得します。
        response = client.chat.completions.create(
            model="qwen3-coder-next",
            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"Final model response: {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 returns: Success: File 'quick_sort.py' has been written.
Final model response: OK. I have created a file named `quick_sort.py` for you, which contains the Python implementation of quick sort. You can run this file to see the sample output. Let me know if you need any further modifications or explanations!

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,
    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 `Success: File '${filePath}' has been written.`;
    } catch (error) {
        return `Error: An exception occurred while writing the file - ${error.message}`;
    }
}

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

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

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

    // ツール呼び出しが不要な場合は、直接コンテンツを出力します。
    if (!assistant_output.tool_calls) {
        console.log(`No tool call is required. Direct response: ${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(`Calling tool [${func_name}] with arguments:`, 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 returns: ${tool_message.content}`);
                messages.push(tool_message);
            }
            // モデルを再度呼び出して、要約された自然言語の応答を取得します。
            const response = await client.chat.completions.create({
                model: "qwen3-coder-next",
                messages: messages,
                tools: tools
            });
            assistant_output = response.choices[0].message;
            if (!assistant_output.content) assistant_output.content = "";
            messages.push(assistant_output);
        }
        console.log(`Final model response: ${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 returns: Success: File 'quick_sort.py' has been written.
Final model response: The `quick_sort.py` file has been successfully created with the Python implementation of quick sort. You can run the file to see the sorting result for the example list. Let me know if you need any further modifications or explanations!

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-next",
    "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-next",
    "id": "chatcmpl-20e96159-beea-451f-b3a4-d13b218112b5"
}

DashScope

Python

import os
import json
import dashscope

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"Success: File '{path}' has been written."
    except Exception as e:
        return f"Error: An exception occurred while writing the file - {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-next',
    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"No tool call is required. Direct response: {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"Calling tool [{func_name}] with arguments: {arguments}")
                # ツールを実行します。
                tool_result = write_file(**arguments)
                # ツールリターンメッセージを構築します。
                tool_message = {
                    "role": "tool",
                    "content": tool_result,
                    "tool_call_id": tool_call_id
                }
                print(f"Tool returns: {tool_message['content']}")
                messages.append(tool_message)
            # モデルを再度呼び出し、要約された自然言語の応答を取得します。
            response = dashscope.Generation.call(
                api_key=os.getenv('DASHSCOPE_API_KEY'),
                model='qwen3-coder-next',
                messages=messages,
                tools=tools,
                result_format='message'
            )
            if response.status_code == 200:
                print(f"Final model response: {response.output.choices[0].message.content}")
                assistant_output = response.output.choices[0].message
                messages.append(assistant_output)
            else:
                print(f"Error during summary response generation: {response}")
                break
else:
    print(f"Execution error: {response}")

応答

Calling tool [write_file], parameters: {'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: File 'quick_sort.py' has been written
Final model response: `quick_sort.py` ファイルが正常に作成されました。このファイルにはクイックソートの Python 実装が含まれています。ファイルを実行すると、サンプルリストのソート結果を確認できます。修正や説明がさらに必要な場合は、お気軽にお知らせください。

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 "Success: File '" + path + "' has been written.";
        } catch (Exception e) {
            return "Error: An exception occurred while writing the file - " + 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();

            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-next")
                    .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("No tool call is required. Direct response: " + 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("Calling tool [" + funcName + "] with arguments: " + arguments);

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

                        // ツールリターンメッセージを構築します。
                        Message toolMessage = Message.builder()
                                .role("tool")
                                .toolCallId(toolCall.getId())
                                .content(toolResult)
                                .build();
                        System.out.println("Tool returns: " + 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("Final model response: " + assistantOutput.getContent());
            }

        } catch (NoApiKeyException | InputRequiredException e) {
            System.err.println("Error: " + 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 returns: Success: File 'quick_sort.py' has been written.
Final model 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-next",
    "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 シリーズでのみ利用可能です。プレフィックス補完と中間補完の両方をサポートします。

パーシャルモード

部分的に記述されたプレフィックスに基づいて、コードの残りの部分を自動的に補完します。

この機能を使用するには、roleassistant に設定したメッセージを messages リストに追加し、partial: true を設定します。contentassistant メッセージは、指定したコードのプレフィックスです。詳細については、「パーシャルモード」をご参照ください。

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-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-coder-next",
    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,
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const completion = await client.chat.completions.create({
        model: "qwen3-coder-next",
        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-next",
    "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

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-next',
    messages=messages,
    result_format='message',  
)
if response.status_code == HTTPStatus.OK:
    print(response.output.choices[0].message.content)
else:
    print(f"HTTP status code: {response.status_code}")
    print(f"Error code: {response.code}")
    print(f"Error message: {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-next",
    "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, qwen-coder-turbo

Completions API では、prompt 内で特別な fim (中間補完) タグを使用して、モデルの補完をガイドします。

プレフィックスベースの補完

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

<|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|>"
}'

本番稼働

効率を最適化し、コストを削減するために、以下の推奨事項を考慮してください。

  • ストリーミング出力: stream=True を設定すると、中間結果をリアルタイムで返し、タイムアウトのリスクを低減し、ユーザーエクスペリエンスを向上させます。

  • 温度を下げる: コード生成タスクでは、通常、決定論的で正確な結果が求められます。生成される結果のランダム性を低減するために、temperature を下げてください。

  • コンテキストキャッシュ: コード補完やコードレビューなど、繰り返し出現するプレフィックスが多いシナリオでは、コンテキストキャッシュをサポートするモデル (qwen3-coder-plus や qwen3-coder-flash など) を使用して、オーバーヘッドを効果的に削減してください。

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

課金とレート制限

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

  • 特別課金項目

    • 階層型課金qwen3-coder モデルは階層型課金を使用します。1 回のリクエストにおける入力トークン数が特定の階層に達した場合、そのリクエストのすべての入力トークンと出力トークンは、その階層の単価で課金されます。

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

    • ツール呼び出し (関数呼び出し):ツール呼び出しを使用する場合、tools パラメーターで定義したツールの説明が入力 token 数としてカウントされ、料金が発生します。

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

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

API リファレンス

入力パラメーターと出力パラメーターについては、Qwen をご参照ください。

よくある質問

Qwen Code や Claude Code などの開発ツールは、なぜ多くのトークンを消費するのですか?

外部開発ツールを使用して Qwen-Coder を呼び出し、タスクを完了する場合、ツールは API を複数回呼び出す可能性があり、これにより多くのトークンが消費されます。ツールを特定のプロジェクト ディレクトリで起動することをお勧めします。起動ディレクトリ (ルートディレクトリなど) に多くのファイルがあると、トークン消費量が増加します。無料クォータが使い果たされた後に、追加料金が発生するのを回避するため、無料クォータのみ機能を有効にできます。

また、固定月額料金で月間リクエストクォータを提供し、AI ツールで使用できる Coding Plan を購入することもできます。詳細については、「Coding Plan」をご参照ください。

モデルの使用状況を確認する方法を教えてください。

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

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

image

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

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

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

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

Qwen-Coder の1日あたり2,000回の無料呼び出しを使用する方法を教えてください。

このクォータは Qwen Code ツール専用であり、それを通じて使用する必要があります。これは、Model Studio をアクティブ化するときに受け取る 新規ユーザー向けの無料クォータ とは別に計算されます。両者は競合しません。詳細については、「1日あたり2,000回の無料呼び出しを使用する方法」をご参照ください。