Skip to main content

コード機能 (Qwen-Coder)

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

はじめに

開始する前に、API キーを取得し、環境変数として設定する必要があります。SDK ユーザーは、OpenAI または DashScope SDK をインストールする必要もあります。 以下の例では、qwen-coder-plus-latest を呼び出して、素数を見つける Python 関数を作成する方法を示します。
  • OpenAI 互換-Chat Completions API
  • DashScope
  • Python
  • Node.js
  • curl
リクエスト例
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="qwen-coder-plus-latest",
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        {'role': 'user', 'content': '整数 n をパラメーターとして受け取り、n 未満のすべての素数を含むリストを返す Python 関数 find_prime_numbers を記述してください。コード以外のコンテンツや 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

モデルの選択

  • 推奨: qwen-coder-plus-latest は、コード品質、速度、コストのバランスが取れており、ほとんどのシナリオに最適です。マルチターンツール呼び出し、最適化されたリポジトリレベルのコード理解、強化されたツール呼び出しの安定性、および Agentic ツールの互換性を特徴としています。
  • 最高品質を求める場合: 非常に複雑で最高品質が求められるタスクの場合、qwen-coder-plus-latest を使用します。
モデルの詳細 (名前、コンテキスト、価格、バージョン) については「モデルリスト」 (商用版 | オープンソース版) を、同時リクエスト制限については「レート制限」 (商用版 | オープンソース版) をご参照ください。

コア機能

ツール呼び出し

モデルが外部環境と対話するためのツール (ファイル I/O、API 呼び出し、データベース操作など) を提供します。モデルは、ご利用の命令に基づいて、いつ、どのようにツールを使用するかを決定します。詳細については、「関数呼び出し」をご参照ください。 完全なツール呼び出しプロセス:
  1. ツールの定義とリクエストの作成:ツールを定義し、それらを必要とするタスクを完了するようにモデルに依頼します。
  2. ツールの実行: tool_calls を解析し、ローカルのツール関数を実行します。
  3. 結果の返却:タスクを完了するために、必要な形式でツール結果をモデルに送信します。
例: モデルにコードを生成させ、write_file を使用して保存するよう指示します。
  • OpenAI 互換-Chat Completions API
  • DashScope
  • Python
  • Node.js
  • curl
import os
import json
from openai import OpenAI

client = OpenAI(
    # API キーはリージョンによって異なります。API キーの取得:https://www.alibabacloud.com/help/model-studio/get-api-key
    # 設定されていない場合は、次の行をご利用の 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"成功:ファイル '{path}' が書き込まれました"
    except Exception as e:
        return f"エラー:ファイルの書き込み中に例外が発生しました - {str(e)}"

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

completion = client.chat.completions.create(
    model="qwen-coder-plus-latest",
    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="qwen-coder-plus-latest",
            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}")
応答
ツール [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' が書き込まれました
モデルの最終応答:OKです。クイックソートの Python 実装を含むファイル `quick_sort.py` を作成しました。このファイルを実行してサンプル出力を確認できます。さらに変更や説明が必要な場合はお知らせください!

コード補完

Qwen-Coder は、2つのコード補完メソッドをサポートしています:
  • 部分モード:すべての Qwen-Coder モデルとリージョンで利用可能です。プレフィックス補完をサポートし、実装が簡単です (推奨)。
  • Completions API: 北京リージョンの qwen2.5-coder シリーズでのみ利用可能で、プレフィックス補完とプレフィックスおよびサフィックス補完をサポートしています。

部分モード

この機能は、指定されたプレフィックスに基づいてコードを自動的に補完します。 この機能を使用するには、role を assistant に設定し、partial: true を指定したメッセージを messages リストに追加します。この content は、assistant メッセージの内容であり、指定したコードプレフィックスになります。詳細については、「Partial mode」をご参照ください。
  • OpenAI 互換
  • DashScope
  • Python
  • Node.js
  • curl
リクエスト例
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="qwen-coder-plus-latest",
    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)

Completions API

Completions API は、中国 (北京) リージョンのモデルにのみ適用され、中国 (北京) リージョンの API キー を使用する必要があります。
サポートされているモデル: 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-latest 特別な fim (中間補完) タグを prompt 内で使用して、補完をガイドします。
  • プレフィックスベースの補完
  • プレフィックスとサフィックスに基づく補完
プロンプトテンプレート:
<|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)

本番環境への適用

Qwen-Coder を使用する際の効率を最適化し、コストを削減するには:
  • 有効化[ストリーミング出力]: stream=True を設定して、中間結果をリアルタイムで受信します。タイムアウトのリスクを低減し、ユーザーエクスペリエンスを向上させます。
  • 温度パラメーターを低くする: コード生成には決定的な結果が必要です。 temperature を低くすると、出力のランダム性が低減されます。
  • コンテキストキャッシュ付きのモデルを使用する:反復的なプレフィックス (コード補完、コードレビュー) を含むシナリオでは、コンテキストキャッシュをサポートするモデル (qwen-coder-plus-latest, qwen3-coder-flash) を使用して、オーバーヘッドを削減します。
  • ツール数を制限する:効率とコスト効果を確保するために、リクエストごとに 20 個以下のツールを渡してください。多くのツール記述は多くのトークンを消費し、コストを増加させ、応答を遅くし、ツール選択の精度を低下させます。詳細については、「関数呼び出し」をご参照ください。

課金とレート制限

  • 基本課金: 入力および出力 トークンに基づき、リクエスト単位で課金されます。単価はモデルによって異なります。詳細については、「モデル一覧」をご参照ください。
  • 特別課金項目:
    • 段階課金: qwen3-coder シリーズでは、段階課金が採用されています。入力トークン数が段階のしきい値に達すると、そのリクエストの入力トークンおよび出力トークンはすべて、段階別価格で課金されます。
    • コンテキストキャッシュ: コンテキストキャッシュを備えたモデル(qwen-coder-plus-latest、qwen3-coder-flash)では、リクエストに繰り返し入力(例:コードレビュー)が含まれる場合、キャッシュによりコストを削減できます。暗黙的キャッシュにヒットした入力テキストは、標準レートの 20% で課金されます。明示的キャッシュにヒットした入力テキストは、標準レートの 10% で課金されます。詳細については、「コンテキストキャッシュ」をご参照ください。
    • ツール呼び出し (関数呼び出し): tools パラメーター内のツールの説明は入力コンテンツと見なされ、料金が発生します。
  • レート制限:API 呼び出しには、1 分あたりのリクエスト数 (RPM) と 1 分あたりのトークン数 (TPM) の 2 つの制限があります。詳細については、「 レート制限」をご参照ください。
  • 無料クォータ(シンガポールリージョンのみ):Model Studio を有効にした日、またはモデルへのアクセスが承認された日から 90 日間有効です。各 Qwen-Coder モデルは、新規ユーザー向け無料クォータとして 100 万トークンを提供します。

API リファレンス

Qwen-Coder モデルの入力および出力パラメーターについては、「Qwen」をご参照ください。

よくある質問

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

外部の開発ツールは API を複数回呼び出す可能性があり、多くのトークンを消費します。トークン消費を監視および削減する方法については、「Qwen Code」および「Claude Code」のドキュメントをご参照ください。無料クォータ後の停止機能を有効にすると、無料クォータを使い切った後の追加料金を防ぐことができます。 AI コーディングプランを購入することもできます。このプランは、AI ツールで使用できる月間リクエストクォータに対して固定の月額料金を提供します。詳細については、「コーディングプランの概要」をご参照ください。

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

モデルを呼び出してから 1 時間後に、モニタリング (シンガポール または 北京) ページに移動します。時間範囲やワークスペースなどのクエリ条件を設定します。次に、モデルエリアでターゲットモデルを見つけ、アクション列の モニターをクリックして、モデルの呼び出し統計を表示します。詳細については、「モニタリング」ドキュメントをご参照ください。
データは 1 時間ごとに更新されます。ピーク時には、1 時間レベルの遅延が発生する場合があります。
image

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

以下の方法を検討できます:
  1. プロンプトの制約:「コードのみを返してください。説明、コメント、Markdown タグは含めないでください」のような明確な指示を与えます。
  2. 設定する stop シーケンス: stop=["\n# Explanation:", "Note:", "Description:"] を使用して、説明テキストの前に生成を停止します。詳細については、「Qwen API リファレンス」をご参照ください。

Qwen Code の 1 日 1,000 回の無料呼び出しを使用するにはどうすればよいですか?

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