コード補完やテキスト継続のようなシナリオでは、既存のテキストフラグメント (プレフィックス) から新しいコンテンツの生成を開始できます。パーシャルモードは、モデルの出力がプレフィックスとシームレスに接続されることを保証し、精度と制御を向上させます。
仕組み
Partial Mode を使用するには、messages 配列を設定します。配列の最後のメッセージで、role を assistant に設定し、content フィールドにプレフィックスを指定します。また、そのメッセージに "partial": true パラメーターを設定する必要があります。messages のフォーマットは次のとおりです。
[
{
"role": "user",
"content": "Complete this Fibonacci function. Do not add anything else."
},
{
"role": "assistant",
"content": "def calculate_fibonacci(n):\n if n <= 1:\n return n\n else:\n",
"partial": true
}
]
その後、モデルは指定されたプレフィックスからテキストの生成を開始します。
サポート対象モデル
-
テキスト生成モデル
-
Qwen-Max (ノンシンキングモード):Qwen3.6-Max シリーズ、Qwen3-Max シリーズ、Qwen-Max シリーズ
-
Qwen-Plus (ノンシンキングモード):Qwen3.6-Plus シリーズ、Qwen3.5-Plus シリーズ、Qwen-Plus シリーズ
-
Qwen-Flash (ノンシンキングモード):Qwen3.6-Flash シリーズ、Qwen3.5-Flash シリーズ、Qwen-Flash シリーズ
-
Qwen-Coder:Qwen3-Coder シリーズ、Qwen2.5-Coder シリーズ
-
Qwen-Turbo (ノンシンキングモード):Qwen-Turbo シリーズ
-
Qwen3.6 オープンソースシリーズ (ノンシンキングモード)
-
Qwen3.5 オープンソースシリーズ (ノンシンキングモード)
-
Qwen3 オープンソースシリーズ (ノンシンキングモード)
-
Qwen2.5 オープンソースシリーズ
-
-
マルチモーダルモデル
-
Qwen-VL:Qwen3-VL-Plus シリーズ、Qwen3-VL-Flash シリーズ、Qwen-VL-Max シリーズ、Qwen-VL-Plus シリーズ
-
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/model-studio/get-api-key
# 環境で設定されていない場合は、ここで API キーに置き換えます
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 北京リージョンの場合は、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 配列の最後のメッセージは、ロールが "assistant" であり、"partial": True を含んでいる必要があります
completion = client.chat.completions.create(
model="qwen3-coder-plus",
messages=[
{"role": "user", "content": "Complete this Fibonacci function. Do not add anything else."},
{"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,
// 北京リージョンの場合は、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: "Complete this Fibonacci function. Do not add anything else." },
{ 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/model-studio/get-api-key
# 北京リージョンの場合は、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": "Complete this Fibonacci function. Do not add anything else."
},
{
"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": "Complete this Fibonacci function. Do not add any other 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/model-studio/get-api-key
# 北京リージョンの場合は、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": "Complete this Fibonacci function. Do not add anything else."
},
{
"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/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 北京リージョンの場合は、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": "I want to post this on social media. Help me write a caption."},
],
},
{
"role": "assistant",
"content": "Today I discovered a hidden-gem café",
"partial": True,
},
],
)
print(completion.choices[0].message.content)
応答
— the tiramisu here is pure bliss! Every bite delivers perfect harmony between coffee and cream. Pure joy! #FoodShare #Tiramisu #CoffeeTime
Hope you like this caption! Let me know if you need any changes.
Node.js
import OpenAI from "openai";
const openai = new OpenAI({
// API キーはリージョンによって異なります。API キーの取得: https://www.alibabacloud.com/help/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: "I want to post this on social media. Help me write a caption."
}
]
},
{
role: "assistant",
content: "Today I discovered a hidden-gem café",
"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/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": "I want to post this on social media. Help me write a caption."
}
]
},
{
"role": "assistant",
"content": "Today I discovered a hidden-gem café",
"partial": true
}
]
}'
応答
{
"choices": [
{
"message": {
"content": "— the tiramisu here is pure bliss! Every bite delivers perfect harmony between coffee and cream. Pure joy! #FoodShare #Tiramisu #CoffeeTime\n\nHope you like this caption! Let me know if you need any changes.",
"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": "I want to post this on social media. Help me write a caption."},
],
},
{"role": "assistant", "content": "Today I discovered a hidden-gem café", "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"])
応答
— the tiramisu here is pure bliss! Every bite delivers perfect harmony between coffee and cream. Pure joy! #FoodShare #Tiramisu #CoffeeTime
Hope you like this caption! Let me know if you need any changes.
curl
# ======= 重要なお知らせ =======
# 北京リージョンのモデルの場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えます
# API キーはリージョンによって異なります。API キーの取得: https://www.alibabacloud.com/help/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": "I want to post this on social media. Help me write a caption."}]
},
{"role": "assistant",
"content": "Today I discovered a hidden-gem café",
"partial": true
}
]
}
}'
応答
{
"output": {
"choices": [
{
"message": {
"content": [
{
"text": "— the tiramisu here is pure bliss! Every bite delivers perfect harmony between coffee and cream. Pure joy! #FoodShare #Tiramisu #CoffeeTime\n\nHope you like this caption! Let me know if you need any changes."
}
],
"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 は不完全なコンテンツを返すことがあります。Partial Mode を使用してその時点から処理を継続し、出力が意味的に完全になるようにします。
OpenAI 互換
Python
import os
from openai import OpenAI
client = OpenAI(
# API キーはリージョンによって異なります。API キーの取得: https://www.alibabacloud.com/help/model-studio/get-api-key
# 環境で設定されていない場合は、ここで API キーに置き換えます
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 北京リージョンの場合は、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": "Write a short sci-fi story"}]
# max_tokens を 40 に設定した最初の呼び出し
first_content = chat_completion(messages, max_tokens=40)
print(first_content)
# 最初の応答をアシスタントメッセージとして追加し、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 パラメーターのストップワードにヒットしました。
### 生成停止理由: 長さ
**「記憶の終わり」**
遠い未来、地球はもはや人類が住める場所ではなくなっていた。大気は汚染され、海は干上がり、都市は廃墟と化していた。人類は「エデン」と名付けられた居住可能な惑星に移住した。そこには青い空、新鮮な空気、そして無尽蔵の資源があった。
しかし、エデンは真の楽園ではなかった。そこには人類の歴史も、過去も、記憶も存在しなかった。
...
**「私たちが何者であるかを忘れてしまったら、それでも私たちは人間なのだろうか?」**
— 完 —
Node.js
import OpenAI from "openai";
const openai = new OpenAI({
// API キーはリージョンによって異なります。API キーの取得: https://www.alibabacloud.com/help/model-studio/get-api-key
// 環境で設定されていない場合は、次の行を apiKey: "sk-xxx" に置き換えます
apiKey: process.env.DASHSCOPE_API_KEY,
// 北京リージョンの場合は、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": "Write a short sci-fi story"}];
try {
// max_tokens を 40 に設定した最初の呼び出し
const firstContent = await chatCompletion(messages, 40);
console.log(firstContent);
// 最初の応答をアシスタントメッセージとして追加し、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/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": "Write a short sci-fi story"}]
# max_tokens を 40 に設定した最初の呼び出し
first_content = chat_completion(messages, max_tokens=40)
print(first_content)
# 最初の応答をアシスタントメッセージとして追加し、partial=True を設定します
messages.append({"role": "assistant", "content": first_content, "partial": True})
# 2回目の呼び出し
second_content = chat_completion(messages)
print("### 完全なコンテンツ:")
print(first_content + second_content)
応答
### 生成が停止した理由: 長さ
タイトル: **『オリガミ・タイム』**
---
2179 年、人類はついにタイムトラベルを習得した。しかし、この技術は巨大な機械や複雑なエネルギー場ではなく、紙に頼るものだった。
たった一枚の、紙に。
それは『オリガミ・タイム』と呼ばれ、未知の地球外物質から作られていた。科学者たちにも、それがどのように機能するのか説明できなかった。彼らが知っていたのは、紙に場面を描き、特定の方法で折ると、過去や未来への扉が開くということだけだった。
...
「お前は時間の鍵ではない。お前は、我々の未来が常に我々の手の中にあるということを思い出させる存在にすぎないのだ」
そして私は、それを粉々に引き裂いた。
---
**(終)**
課金
課金は入力トークンと出力トークンを対象とします。プレフィックスは入力トークンの一部としてカウントされます。
エラーコード
モデルの呼び出しが失敗し、エラーメッセージが返された場合は、「エラーメッセージ」で解決策をご参照ください。