コード補完やテキストの継続などのシナリオでは、既存のテキスト断片(プレフィックス)から始まる新しいコンテンツを生成する必要があります。部分モードは、このプロセスを正確に制御できる機能です。モデルの出力が指定されたプレフィックスとシームレスに接続されることを保証し、精度と制御性を向上させます。
仕組み
部分モードを使用するには、messages 配列を設定します。配列内の最後のメッセージにおいて、role を assistant に設定し、content フィールドにプレフィックスを指定します。また、そのメッセージ内に "partial": true パラメーターを設定する必要があります。messages のフォーマットは以下のとおりです:
[
{
"role": "user",
"content": "このフィボナッチ関数を完成させてください。それ以外の内容は追加しないでください。"
},
{
"role": "assistant",
"content": "def calculate_fibonacci(n):\n if n <= 1:\n return n\n else:\n",
"partial": true
}
]その後、モデルは指定されたプレフィックスからテキストの生成を開始します。
対応モデル
Qwen-Max シリーズ
qwen3-max、qwen3-max-2025-09-23、qwen3-max-preview(非思考モード)、qwen-max、qwen-max-latest、qwen-max-2025-01-25 以降のスナップショット
Qwen-Plus シリーズ(非思考モード)
qwen3.5-plus、qwen3.5-plus-2026-02-15 以降のスナップショット、qwen-plus、qwen-plus-latest、qwen-plus-2025-01-25 以降のスナップショット
Qwen-Flash シリーズ(非思考モード)
qwen3.5-flash、qwen3.5-flash-2026-02-23 以降のスナップショット、qwen-flash、qwen-flash-2025-07-28
Qwen-Coder シリーズ
qwen3-coder-plus、qwen3-coder-flash、qwen3-coder-480b-a35b-instruct、qwen3-coder-30b-a3b-instruct
Qwen-VL シリーズ
qwen3-vl-plus シリーズ(非思考モード)
qwen3-vl-plus、qwen3-vl-plus-2025-09-23 以降のスナップショット
qwen3-vl-flash シリーズ(非思考モード)
qwen3-vl-flash、qwen3-vl-flash-2025-10-15 以降のスナップショット
qwen-vl-max シリーズ
qwen-vl-max、qwen-vl-max-latest、qwen-vl-max-2025-04-08 以降のスナップショット
qwen-vl-plus シリーズ
qwen-vl-plus、qwen-vl-plus-latest、qwen-vl-plus-2025-01-25 以降のスナップショット
Qwen-Turbo シリーズ(非思考モード)
qwen-turbo、qwen-turbo-latest、qwen-turbo-2024-11-01 以降のスナップショット
Qwen オープンソース シリーズ
qwen3.5-397b-a17b、qwen3.5-122b-a10b、qwen3.5-27b、qwen3.5-35b-a3b(非思考モード)、Qwen3 オープンソースモデル(非思考モード)、Qwen2.5 テキストモデル、Qwen3-VL オープンソースモデル(非思考モード)
思考モードのモデルは、現時点ではプレフィックス継続機能をサポートしていません。
クイックスタート
前提条件
開始する前に、API キーを取得し、API キーを環境変数として設定してください。OpenAI SDK または DashScope SDK を使用してサービスを呼び出す場合は、SDK をインストールする必要があります。サブワークスペースのメンバーである場合は、スーパー管理者がワークスペースへのモデルアクセス権限を付与済みであることを確認してください。
DashScope Java SDK はサポートされていません。
サンプルコード
コード補完は、部分モードの主要なユースケースです。以下の例では、qwen3-coder-plus モデルを使用して Python 関数を補完する方法を示します。
OpenAI 互換
Python
import os
from openai import OpenAI
# 1. クライアントを初期化
client = OpenAI(
# API キーはリージョンによって異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 環境変数が設定されていない場合は、値を API キーに置き換えます。
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 北京リージョンのモデルを使用する場合は、URL を「https://dashscope.aliyuncs.com/compatible-mode/v1」に置き換えます。
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
# 2. 補完対象のコードプレフィックスを定義
prefix = """def calculate_fibonacci(n):
if n <= 1:
return n
else:
"""
# 3. 部分モードのリクエストを実行
# 注意:messages 配列の最後のメッセージでは、role を「assistant」に設定し、「partial」: True を含める必要があります。
completion = client.chat.completions.create(
model="qwen3-coder-plus",
messages=[
{"role": "user", "content": "このフィボナッチ関数を完成させてください。それ以外の内容は追加しないでください。"},
{"role": "assistant", "content": prefix, "partial": True},
],
)
# 4. プレフィックスとモデルが生成したコンテンツを手動で連結
generated_code = completion.choices[0].message.content
complete_code = prefix + generated_code
print(complete_code)応答
def calculate_fibonacci(n):
if n <= 1:
return n
else:
return calculate_fibonacci(n-1) + calculate_fibonacci(n-2)Node.js
import OpenAI from "openai";
const openai = new OpenAI({
// 環境変数が設定されていない場合は、次の行を「apiKey: "sk-xxx"」に置き換えます。
apiKey: process.env.DASHSCOPE_API_KEY,
// 北京リージョンのモデルを使用する場合は、URL を「https://dashscope.aliyuncs.com/compatible-mode/v1」に置き換えます。
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
// 補完対象のコードプレフィックスを定義
const prefix = `def calculate_fibonacci(n):
if n <= 1:
return n
else:
`;
const completion = await openai.chat.completions.create({
model: "qwen3-coder-plus", // コード用モデルを使用
messages: [
{ role: "user", content: "このフィボナッチ関数を完成させてください。それ以外の内容は追加しないでください。" },
{ role: "assistant", content: prefix, partial: true }
],
});
// プレフィックスとモデルが生成したコンテンツを手動で連結
const generatedCode = completion.choices[0].message.content;
const completeCode = prefix + generatedCode;
console.log(completeCode);curl
# ======= 重要なお知らせ =======
# API キーはリージョンによって異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 北京リージョンのモデルを使用する場合は、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": "このフィボナッチ関数を完成させてください。それ以外の内容は追加しないでください。"
},
{
"role": "assistant",
"content": "def calculate_fibonacci(n):\n if n <= 1:\n return n\n else:\n",
"partial": true
}
]
}'応答
{
"choices": [
{
"message": {
"content": " return calculate_fibonacci(n-1) + calculate_fibonacci(n-2)",
"role": "assistant"
},
"finish_reason": "stop",
"index": 0,
"logprobs": null
}
],
"object": "chat.completion",
"usage": {
"prompt_tokens": 48,
"completion_tokens": 19,
"total_tokens": 67,
"prompt_tokens_details": {
"cache_type": "implicit",
"cached_tokens": 0
}
},
"created": 1756800231,
"system_fingerprint": null,
"model": "qwen3-coder-plus",
"id": "chatcmpl-d103b1cf-4bda-942f-92d6-d7ecabfeeccb"
}DashScope
Python
import os
import dashscope
# 北京リージョンのモデルを使用する場合は、URL を「https://dashscope.aliyuncs.com/api/v1」に置き換えます。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# 補完対象のコードプレフィックスを定義
prefix = """def calculate_fibonacci(n):
if n <= 1:
return n
else:
"""
messages = [
{
"role": "user",
"content": "このフィボナッチ関数を完成させてください。それ以外の内容は追加しないでください。"
},
{
"role": "assistant",
"content": prefix,
"partial": True
}
]
response = dashscope.Generation.call(
# API キーはリージョンによって異なります。API キーの取得方法:https://www.alibabacloud.com/help/en/model-studio/get-api-key
# 環境変数が設定されていない場合は、次の行を「api_key="sk-xxx"」に置き換え、Alibaba Cloud Model Studio API キーを使用します。
api_key=os.getenv("DASHSCOPE_API_KEY"),
model='qwen3-coder-plus', // コード用モデルを使用
messages=messages,
result_format='message',
)
# プレフィックスとモデルが生成したコンテンツを手動で連結
generated_code = response.output.choices[0].message.content
complete_code = prefix + generated_code
print(complete_code)応答
def calculate_fibonacci(n):
if n <= 1:
return n
else:
return calculate_fibonacci(n-1) + calculate_fibonacci(n-2)curl
# ======= 重要なお知らせ =======
# API キーはリージョンによって異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 北京リージョンのモデルを使用する場合は、URL を「https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation」に置き換えます。
# === 実行前にこのコメントを削除してください ===
curl -X POST "https://dashscope.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": "このフィボナッチ関数を完成させてください。それ以外の内容は追加しないでください。"
},
{
"role": "assistant",
"content": "def calculate_fibonacci(n):\n if n <= 1:\n return n\n else:\n",
"partial": true
}
]
},
"parameters": {
"result_format": "message"
}
}'応答
{
"output": {
"choices": [
{
"message": {
"content": " return calculate_fibonacci(n-1) + calculate_fibonacci(n-2)",
"role": "assistant"
},
"finish_reason": "stop"
}
]
},
"usage": {
"total_tokens": 67,
"output_tokens": 19,
"input_tokens": 48,
"prompt_tokens_details": {
"cached_tokens": 0
}
},
"request_id": "c61c62e5-cf97-90bc-a4ee-50e5e117b93f"
}ユースケース
画像または動画を渡す
Qwen-VL モデルは、画像または動画データを含むリクエストに対して部分モードをサポートしています。これは、製品説明文の作成、SNS 向けコンテンツの生成、ニュース記事の執筆、クリエイティブなコピーライティングなどに有効です。
OpenAI 互換
Python
import os
from openai import OpenAI
client = OpenAI(
# 環境変数が設定されていない場合は、次の行を「api_key="sk-xxx"」に置き換えます。
# API キーはリージョンによって異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
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-vl-plus",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i3/O1CN01zFX2Bs1Q0f9pESgPC_!!6000000001914-2-tps-450-450.png"
},
},
{"type": "text", "text": "この画像を SNS に投稿したいと思います。キャプションを書いてください。"},
],
},
{
"role": "assistant",
"content": "今日、隠れた名店のカフェを発見しました",
"partial": True,
},
],
)
print(completion.choices[0].message.content)応答
— このティラミスはまさに至福!コーヒーとクリームの絶妙なハーモニーが、一口ごとに味わえます。純粋な喜びです! #FoodShare #Tiramisu #CoffeeTime
このキャプションがお気に召しましたか?必要に応じて修正いたしますので、お気軽にお知らせください。Node.js
import OpenAI from "openai";
const openai = new OpenAI({
// API キーはリージョンによって異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// 環境変数が設定されていない場合は、次の行を「apiKey: "sk-xxx"」に置き換えます。
apiKey: process.env.DASHSCOPE_API_KEY,
// 北京リージョンのモデルを使用する場合は、baseURL を「https://dashscope.aliyuncs.com/compatible-mode/v1」に置き換えます。
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
async function main() {
const response = await openai.chat.completions.create({
model: "qwen3-vl-plus",
messages: [
{
role: "user",
content: [
{
type: "image_url",
image_url: {
"url": "https://img.alicdn.com/imgextra/i3/O1CN01zFX2Bs1Q0f9pESgPC_!!6000000001914-2-tps-450-450.png"
}
},
{
type: "text",
text: "この画像を SNS に投稿したいと思います。キャプションを書いてください。"
}
]
},
{
role: "assistant",
content: "今日、隠れた名店のカフェを発見しました",
"partial": true
}
]
});
console.log(response.choices[0].message.content);
}
main();curl
# ======= 重要なお知らせ =======
# 北京リージョンのモデルを使用する場合は、base_url を「https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions」に置き換えます。
# API キーはリージョンによって異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === 実行前にこのコメントを削除してください ===
curl -X POST 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3-vl-plus",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i3/O1CN01zFX2Bs1Q0f9pESgPC_!!6000000001914-2-tps-450-450.png"
}
},
{
"type": "text",
"text": "この画像を SNS に投稿したいと思います。キャプションを書いてください。"
}
]
},
{
"role": "assistant",
"content": "今日、隠れた名店のカフェを発見しました",
"partial": true
}
]
}'応答
{
"choices": [
{
"message": {
"content": "— このティラミスはまさに至福!コーヒーとクリームの絶妙なハーモニーが、一口ごとに味わえます。純粋な喜びです! #FoodShare #Tiramisu #CoffeeTime\n\nこのキャプションがお気に召しましたか?必要に応じて修正いたしますので、お気軽にお知らせください。",
"role": "assistant"
},
"finish_reason": "stop",
"index": 0,
"logprobs": null
}
],
"object": "chat.completion",
"usage": {
"prompt_tokens": 282,
"completion_tokens": 56,
"total_tokens": 338,
"prompt_tokens_details": {
"cached_tokens": 0
}
},
"created": 1756802933,
"system_fingerprint": null,
"model": "qwen3-vl-plus",
"id": "chatcmpl-5780cbb7-ebae-9c63-b098-f8cc49e321f0"
}DashScope
Python
import os
import dashscope
# 北京リージョンのモデルを使用する場合は、URL を「https://dashscope.aliyuncs.com/api/v1」に置き換えます。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [
{
"role": "user",
"content": [
{
"image": "https://img.alicdn.com/imgextra/i3/O1CN01zFX2Bs1Q0f9pESgPC_!!6000000001914-2-tps-450-450.png"
},
{"text": "この画像を SNS に投稿したいと思います。キャプションを書いてください。"},
],
},
{"role": "assistant", "content": "今日、隠れた名店のカフェを発見しました", "partial": True},
]
response = dashscope.MultiModalConversation.call(
# 環境変数が設定されていない場合は、次の行を「api_key ="sk-xxx"」に置き換えます。
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3-vl-plus",
messages=messages
)
print(response.output.choices[0].message.content[0]["text"])応答
— このティラミスはまさに至福!コーヒーとクリームの絶妙なハーモニーが、一口ごとに味わえます。純粋な喜びです! #FoodShare #Tiramisu #CoffeeTime
このキャプションがお気に召しましたか?必要に応じて修正いたしますので、お気軽にお知らせください。curl
# ======= 重要なお知らせ =======
# 北京リージョンのモデルを使用する場合は、URL を「https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation」に置き換えます。
# API キーはリージョンによって異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === 実行前にこのコメントを削除してください ===
curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3-vl-plus",
"input":{
"messages":[
{"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i3/O1CN01zFX2Bs1Q0f9pESgPC_!!6000000001914-2-tps-450-450.png"},
{"text": "この画像を SNS に投稿したいと思います。キャプションを書いてください。"}]
},
{"role": "assistant",
"content": "今日、隠れた名店のカフェを発見しました",
"partial": true
}
]
}
}'応答
{
"output": {
"choices": [
{
"message": {
"content": [
{
"text": "— このティラミスはまさに至福!コーヒーとクリームの絶妙なハーモニーが、一口ごとに味わえます。純粋な喜びです! #FoodShare #Tiramisu #CoffeeTime\n\nこのキャプションがお気に召しましたか?必要に応じて修正いたしますので、お気軽にお知らせください。"
}
],
"role": "assistant"
},
"finish_reason": "stop"
}
]
},
"usage": {
"total_tokens": 339,
"input_tokens_details": {
"image_tokens": 258,
"text_tokens": 24
},
"output_tokens": 57,
"input_tokens": 282,
"output_tokens_details": {
"text_tokens": 57
},
"image_tokens": 258
},
"request_id": "c741328c-23dc-9286-bfa7-626a4092ca09"
}不完全な出力からの継続
max_tokens パラメーターの値が小さすぎる場合、大規模言語モデル(LLM)が不完全なコンテンツを返すことがあります。このような場合、部分モードを使用してその地点から生成を継続し、出力が意味的に完全になるようにできます。
OpenAI 互換
Python
import os
from openai import OpenAI
client = OpenAI(
# API キーはリージョンによって異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 環境変数が設定されていない場合は、値を API キーに置き換えます。
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 北京リージョンのモデルを使用する場合は、URL を「https://dashscope.aliyuncs.com/compatible-mode/v1」に置き換えます。
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
def chat_completion(messages,max_tokens=None):
response = client.chat.completions.create(
model="qwen-plus",
messages=messages,
max_tokens=max_tokens
)
print(f"### 生成停止理由:{response.choices[0].finish_reason}")
return response.choices[0].message.content
# 使用例
messages = [{"role": "user", "content": "短編のSF小説を書いてください"}]
# max_tokens を 40 に設定して最初の呼び出しを実行
first_content = chat_completion(messages, max_tokens=40)
print(first_content)
# 最初の応答を assistant メッセージとして追加し、partial=True を設定
messages.append({"role": "assistant", "content": first_content, "partial": True})
# 2 回目の呼び出しを実行
second_content = chat_completion(messages)
print("### 完全なコンテンツ:")
print(first_content+second_content)応答
length という理由は、max_tokens 制限に達したことを示します。stop という理由は、モデルが自然にテキスト生成を終了したか、stop パラメーターで定義されたストップワードに遭遇したことを示します。
### 生成停止理由:length
**「記憶の終焉」**
遥かな未来、地球はもはや人類にとって住みにくい場所となった。大気は汚染され、海は干上がり、都市は廃墟と化していた。人類は青い空、新鮮な空気、限りない資源を持つ「エデン」という居住可能な惑星へと移住した。
しかし、エデンは真の楽園ではなかった。そこには人類の歴史も、過去も、記憶も存在しなかった。
...
**「もし私たちが自分自身を忘れてしまったら、私たちはまだ人間なのでしょうか?」**
— 終 —Node.js
import OpenAI from "openai";
const openai = new OpenAI({
// API キーはリージョンによって異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// 環境変数が設定されていない場合は、次の行を「apiKey: "sk-xxx"」に置き換えます。
apiKey: process.env.DASHSCOPE_API_KEY,
// 北京リージョンのモデルを使用する場合は、URL を「https://dashscope.aliyuncs.com/compatible-mode/v1」に置き換えます。
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
async function chatCompletion(messages, maxTokens = null) {
const completion = await openai.chat.completions.create({
model: "qwen-plus",
messages: messages,
max_tokens: maxTokens
});
console.log(`### 生成停止理由:${completion.choices[0].finish_reason}`);
return completion.choices[0].message.content;
}
// 使用例
async function main() {
let messages = [{"role": "user", "content": "短編のSF小説を書いてください"}];
try {
// max_tokens を 40 に設定して最初の呼び出しを実行
const firstContent = await chatCompletion(messages, 40);
console.log(firstContent);
// 最初の応答を assistant メッセージとして追加し、partial=true を設定
messages.push({"role": "assistant", "content": firstContent, "partial": true});
// 2 回目の呼び出しを実行
const secondContent = await chatCompletion(messages);
console.log("### 完全なコンテンツ:");
console.log(firstContent + secondContent);
} catch (error) {
console.error('実行エラー:', error);
}
}
// 例を実行
main();DashScope
Python
サンプルコード
import os
import dashscope
# 北京リージョンのモデルを使用する場合は、URL を「https://dashscope.aliyuncs.com/api/v1」に置き換えます。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
def chat_completion(messages, max_tokens=None):
response = dashscope.Generation.call(
# API キーはリージョンによって異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 環境変数が設定されていない場合は、次の行を「api_key="sk-xxx"」に置き換えます。
api_key=os.getenv("DASHSCOPE_API_KEY"),
model='qwen-plus',
messages=messages,
max_tokens=max_tokens,
result_format='message',
)
print(f"### 生成停止理由:{response.output.choices[0].finish_reason}")
return response.output.choices[0].message.content
# 使用例
messages = [{"role": "user", "content": "短編のSF小説を書いてください"}]
# max_tokens を 40 に設定して最初の呼び出しを実行
first_content = chat_completion(messages, max_tokens=40)
print(first_content)
# 最初の応答を assistant メッセージとして追加し、partial=True を設定
messages.append({"role": "assistant", "content": first_content, "partial": True})
# 2 回目の呼び出しを実行
second_content = chat_completion(messages)
print("### 完全なコンテンツ:")
print(first_content + second_content)応答
### 生成停止理由:length
タイトル:**「折り紙タイム」**
---
西暦 2179 年、人類はついにタイムトラベルを制覇した。しかし、この技術は巨大なマシンや複雑なエネルギー場に依存していなかった。それは紙に依存していた。
一枚の紙だけだった。
それは「折り紙タイム」と呼ばれ、未知の異星由来の素材で作られていた。科学者たちはその仕組みを説明できなかった。ただ、紙にシーンを描き、特定の方法で折ることで過去や未来への扉が開くということだけを知っていた。
...
「あなたは時間の鍵ではない。あなたは、私たちの未来は常に自分の手の中にあり続けるという単なる思い出にすぎないのだ。」
そう言って、私はそれを破り捨てた。
---
(終)課金
入力トークンおよび出力トークンの両方に対して課金されます。プレフィックスは入力トークンに含まれます。
エラーコード
モデル呼び出しが失敗し、エラーメッセージが返された場合、解決方法については、「エラーメッセージ」をご参照ください。