Qwen3-Omni-Captioner は、Qwen3-Omni をベースに構築されたオープンソースモデルです。プロンプトなしで、複雑な音声 (スピーチ、環境音、音楽、効果音) に対して、正確かつ包括的な説明を自動的に生成します。このモデルは、話者の感情、音楽的要素 (スタイル、楽器)、機密情報を識別します。音声コンテンツ分析、セキュリティ監査、インテント認識、ビデオ編集に最適です。
サポートされるモデル
シンガポール
|
モデル |
コンテキストウィンドウ |
最大入力 |
最大出力 |
入力コスト |
出力コスト |
無料クォータ |
|
(トークン) |
(100 万トークンあたり) |
|||||
|
qwen3-omni-30b-a3b-captioner |
65,536 |
32,768 |
32,768 |
$3.81 |
$3.06 |
100 万トークン Model Studio のアクティベート後 90 日間有効 |
中国 (北京)
中国本土のデプロイメント範囲を選択した場合、モデル推論の計算リソースは中国本土に制限されます。静的データは選択したリージョンに保存されます。サポートされるリージョン:中国 (北京)。
|
モデル |
コンテキストウィンドウ |
最大入力 |
最大出力 |
入力コスト |
出力コスト |
無料クォータ |
|
(トークン) |
(100 万トークンあたり) |
|||||
|
qwen3-omni-30b-a3b-captioner |
65,536 |
32,768 |
32,768 |
$2.265 |
$1.821 |
無料クォータなし |
音声のトークン変換ルール:合計トークン数 = 音声の持続時間 (秒) × 12.5。音声の持続時間が 1 秒未満の場合は、1 秒としてカウントされます。
クイックスタート
前提条件
-
API キーを取得し、環境変数としてエクスポートしていること。
-
SDK を使用して呼び出しを行う場合は、最新バージョンの SDK をインストールしてください。
Qwen3-Omni-Captioner は API 呼び出しのみをサポートします。Model Studio コンソールでのオンラインテストは利用できません。
これらのコードサンプルは、ローカルファイルではなく URL を介してオンライン音声を分析します。ローカルファイルの受け渡し方法と音声ファイルの制限についてご確認ください。
OpenAI 互換
Python
import os
from openai import OpenAI
client = OpenAI(
# API キーはリージョンによって異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 次の URL はシンガポールリージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。北京リージョンの場合は、[中国 (北京)] タブに表示されている URL を使用してください。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3-omni-30b-a3b-captioner",
messages=[
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/xvappi/%E8%A3%85%E4%BF%AE%E5%99%AA%E9%9F%B3.wav"
}
}
]
}
]
)
print(completion.choices[0].message.content)
Node.js
import OpenAI from "openai";
const openai = new OpenAI(
{
// シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
apiKey: process.env.DASHSCOPE_API_KEY,
// 次の URL はシンガポールリージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。北京リージョンの場合は、[中国 (北京)] タブに表示されている URL を使用してください。
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
}
);
const completion = await openai.chat.completions.create({
model: "qwen3-omni-30b-a3b-captioner",
messages: [
{
"role": "user",
"content": [{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/xvappi/%E8%A3%85%E4%BF%AE%E5%99%AA%E9%9F%B3.wav"
}
}]
}]
});
console.log(completion.choices[0].message.content)
curl
# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# シンガポールリージョンの base_url。北京リージョンの場合は、https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/chat/completions を使用してください
# === 実行前にこのコメントを削除してください ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-omni-30b-a3b-captioner",
"messages": [
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/xvappi/%E8%A3%85%E4%BF%AE%E5%99%AA%E9%9F%B3.wav"
}
}
]
}
]
}'
DashScope
Python
import dashscope
import os
# 次の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"
messages = [
{
"role": "user",
"content": [
{"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/xvappi/%E8%A3%85%E4%BF%AE%E5%99%AA%E9%9F%B3.wav"}
]
}
]
response = dashscope.MultiModalConversation.call(
# API キーはリージョンによって異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# 環境変数が設定されていない場合は、ご利用の API キーに置き換えてください: api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qwen3-omni-30b-a3b-captioner",
messages=messages
)
print("Output:")
print(response["output"]["choices"][0]["message"].content[0]["text"])
Java
import java.util.Arrays;
import java.util.Collections;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの base-url です。北京リージョンのモデルを使用する場合は、URL を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder()
.role(Role.USER.getValue())
.content(Arrays.asList(
Collections.singletonMap("audio", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/xvappi/%E8%A3%85%E4%BF%AE%E5%99%AA%E9%9F%B3.wav")))
.build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
.model("qwen3-omni-30b-a3b-captioner")
.message(userMessage)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println("Output:\n" + result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
simpleMultiModalConversationCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
curl
# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# シンガポールリージョンの base_url。北京リージョンの場合は、https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation を使用してください
# === 実行前にこのコメントを削除してください ===
curl -X POST 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3-omni-30b-a3b-captioner",
"input":{
"messages":[
{
"role": "user",
"content": [
{"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/xvappi/%E8%A3%85%E4%BF%AE%E5%99%AA%E9%9F%B3.wav"}
]
}
]
}
}'
仕組み
-
シングルターンインタラクション:各リクエストは独立した分析タスクです。マルチターン会話はサポートされていません。
-
固定タスク:モデルは音声の説明を英語でのみ生成します。命令 (システムメッセージなど) を使用して、動作、出力フォーマット、またはコンテンツのフォーカスを変更することはできません。
-
音声入力のみ:モデルは音声のみを受け付けます。テキストプロンプトは不要です。
messageパラメーターのフォーマットは固定されています。
ストリーミング出力
ストリーミング出力は、中間結果を段階的に生成し、同時に返すことで、生成中の応答を読み取ることができます。これにより、待機時間が短縮されます。
OpenAI 互換
stream を true に設定して、ストリーミング出力を有効にします。
Python
import os
from openai import OpenAI
client = OpenAI(
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 次の URL はシンガポールリージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。北京リージョンの場合は、[中国 (北京)] タブに表示されている URL を使用してください。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3-omni-30b-a3b-captioner",
messages=[
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/xvappi/%E8%A3%85%E4%BF%AE%E5%99%AA%E9%9F%B3.wav"
}
}
]
}
],
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
# stream_options.include_usage が True の場合、最後のチャンクの choices フィールドは空のリストであり、スキップする必要があります。トークンの使用量は chunk.usage から取得できます。
if chunk.choices and chunk.choices[0].delta.content != "":
print(chunk.choices[0].delta.content,end="")
Node.js
import OpenAI from "openai";
const openai = new OpenAI(
{
// シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
apiKey: process.env.DASHSCOPE_API_KEY,
// 次の URL はシンガポールリージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。北京リージョンの場合は、[中国 (北京)] タブに表示されている URL を使用してください。
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
}
);
const completion = await openai.chat.completions.create({
model: "qwen3-omni-30b-a3b-captioner",
messages: [
{
"role": "user",
"content": [{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/xvappi/%E8%A3%85%E4%BF%AE%E5%99%AA%E9%9F%B3.wav"
},
}]
}],
stream: true,
stream_options: {
include_usage: true
},
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta.content);
} else {
console.log(chunk.usage);
}
}
curl
# ======= 重要 =======
# シンガポールリージョンの base_url。北京リージョンの場合は、https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/chat/completions を使用してください
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# === 実行前にこのコメントを削除してください ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-omni-30b-a3b-captioner",
"messages": [
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/xvappi/%E8%A3%85%E4%BF%AE%E5%99%AA%E9%9F%B3.wav"
}
}
]
}
],
"stream":true,
"stream_options":{
"include_usage":true
}
}'
DashScope
DashScope SDK または HTTP 経由で呼び出します。使用するメソッドに応じてパラメーターを設定します:
-
Python SDK:
streamパラメーターを True に設定します。 -
Java SDK:
streamCallメソッドを使用します。 -
HTTP:ヘッダーで
X-DashScope-SSEをenableに設定します。
デフォルトでは、ストリーミング出力は非増分です。つまり、返される各チャンクには、以前に生成されたすべてのコンテンツが含まれます。増分出力を得るには、incremental_output(Java ではincrementalOutput) をtrueに設定します。
Python
import dashscope
# 次の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"
messages = [
{
"role": "user",
"content": [
{"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/xvappi/%E8%A3%85%E4%BF%AE%E5%99%AA%E9%9F%B3.wav"}
]
}
]
response = dashscope.MultiModalConversation.call(
# 環境変数が設定されていない場合は、ご利用の API キーに置き換えてください: api_key="sk-xxx"
# API キーはリージョンによって異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qwen3-omni-30b-a3b-captioner",
messages=messages,
stream=True,
incremental_output=True
)
full_content = ""
print("Streaming output:")
for response in response:
if response["output"]["choices"][0]["message"].content:
print(response["output"]["choices"][0]["message"].content[0]["text"])
full_content += response["output"]["choices"][0]["message"].content[0]["text"]
print(f"Full content: {full_content}")
Java
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 次の URL はシンガポールリージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。北京リージョンの場合は、[中国 (北京)] タブに表示されている URL を使用してください。
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
public static void streamCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
// qwen3-omni-30b-a3b-captioner は入力として 1 つの音声ファイルのみをサポートします。
.content(Arrays.asList(
new HashMap<String, Object>(){{put("audio", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/xvappi/%E8%A3%85%E4%BF%AE%E5%99%AA%E9%9F%B3.wav");}}
)).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// 環境変数が設定されていない場合は、ご利用の API キーに置き換えてください: .apiKey("sk-xxx")
// シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3-omni-30b-a3b-captioner")
.message(userMessage)
.incrementalOutput(true)
.build();
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(item -> {
try {
List<com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult.Output.Choice.Message.Content> content = item.getOutput().getChoices().get(0).getMessage().getContent();
// content が存在し、空でないことを確認します。
if (content != null && !content.isEmpty()) {
System.out.println(content.get(0).get("text"));
}
} catch (Exception e){
System.exit(0);
}
});
}
public static void main(String[] args) {
try {
streamCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
curl
# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# シンガポールリージョンの base_url。北京リージョンの場合は、https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation を使用してください
# === 実行前にこのコメントを削除してください ===
curl -X POST 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'X-DashScope-SSE: enable' \
-d '{
"model": "qwen3-omni-30b-a3b-captioner",
"input":{
"messages":[
{
"role": "user",
"content": [
{"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/xvappi/%E8%A3%85%E4%BF%AE%E5%99%AA%E9%9F%B3.wav"}
]
}
]
},
"parameters": {
"incremental_output": true
}
}'
ローカルファイルの受け渡し (Base64 エンコーディングまたはファイルパス)
ローカルファイルをアップロードするには、2 つの方法があります:
-
Base64 エンコーディングを使用する
-
直接ファイルパスを使用する (転送の安定性が高いため推奨)
アップロード方法:
ファイルパスによる受け渡し
ファイルパスをモデルに直接渡します。DashScope Python および Java SDK のみでサポートされており、HTTP ではサポートされていません。言語とオペレーティングシステムごとのパス形式については、以下の表をご参照ください。
Base64 エンコーディングによる受け渡し
ファイルを Base64 文字列に変換し、モデルに渡します。
制限事項:
-
推奨:転送の安定性を高めるために、ファイルパスを直接渡すことをお勧めします。1 MB 未満のファイルの場合は、Base64 エンコーディングも機能します。
-
ファイルパスで渡す場合、音声ファイルは 10 MB 未満である必要があります。
-
Base64 を使用する場合、エンコードされた文字列は 10 MB 未満である必要があります。注意:Base64 はファイルサイズを増加させます。
ファイルパスによる受け渡し
ファイルパスによる受け渡しは、DashScope Python および Java SDK のみでサポートされており、HTTP ではサポートされていません。
Python
import dashscope
import os
# 次の URL はシンガポールリージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。北京リージョンの場合は、[中国 (北京)] タブに表示されている URL を使用してください。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
# ABSOLUTE_PATH/welcome.mp3 をご利用のローカル音声ファイルの絶対パスに置き換えてください。
# ローカルファイルの完全なパスは、有効なパスを確保するために file:// で始まる必要があります。例:file:///home/images/test.mp3
audio_file_path = "file://ABSOLUTE_PATH/welcome.mp3"
messages = [
{
"role": "user",
# audio パラメーターに file:// で始まるファイルパスを渡します。
"content": [{"audio": audio_file_path}],
}
]
response = dashscope.MultiModalConversation.call(
# API キーはリージョンによって異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qwen3-omni-30b-a3b-captioner",
messages=messages)
print("Output:")
print(response["output"]["choices"][0]["message"].content[0]["text"])
Java
import java.util.Arrays;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
public static void callWithLocalFile()
throws ApiException, NoApiKeyException, UploadFileException {
// ABSOLUTE_PATH/welcome.mp3 をご利用のローカル音声ファイルの絶対パスに置き換えてください。
// ローカルファイルの完全なパスは、有効なパスを確保するために file:// で始まる必要があります。例:file:///home/images/test.mp3
// 現在のテストシステムは macOS です。Windows を使用する場合は、代わりに "file:///ABSOLUTE_PATH/welcome.mp3" を使用してください。
String localFilePath = "file://ABSOLUTE_PATH/welcome.mp3";
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
new HashMap<String, Object>(){{put("audio", localFilePath);}}
))
.build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
// 環境変数が設定されていない場合は、ご利用の API キーに置き換えてください: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3-omni-30b-a3b-captioner")
.message(userMessage)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println("Output:\n" + result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
callWithLocalFile();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
Base64 エンコーディングによる受け渡し
OpenAI 互換
Python
import os
from openai import OpenAI
import base64
client = OpenAI(
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 次の URL はシンガポールリージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。北京リージョンの場合は、[中国 (北京)] タブに表示されている URL を使用してください。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
def encode_audio(audio_path):
with open(audio_path, "rb") as audio_file:
return base64.b64encode(audio_file.read()).decode("utf-8")
# ABSOLUTE_PATH/welcome.mp3 をご利用のローカル音声ファイルの絶対パスに置き換えてください。
audio_file_path = "xxx/ABSOLUTE_PATH/welcome.mp3"
base64_audio = encode_audio(audio_file_path)
completion = client.chat.completions.create(
model="qwen3-omni-30b-a3b-captioner",
messages=[
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
# Base64 エンコーディングでローカルファイルを渡す場合、有効なファイル URL を確保するために data: プレフィックスを使用する必要があります。
# "base64" キーワードは、Base64 エンコードされたデータ (base64_audio) の前に含める必要があります。そうしないとエラーが発生します。
"data": f"data:;base64,{base64_audio}"
},
}
],
},
]
)
print(completion.choices[0].message.content)
Node.js
import OpenAI from "openai";
import { readFileSync } from 'fs';
const openai = new OpenAI(
{
// シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
apiKey: process.env.DASHSCOPE_API_KEY,
// 次の URL はシンガポールリージョン用です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。北京リージョンの場合は、[中国 (北京)] タブに表示されている URL を使用してください。
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
}
);
const encodeAudio = (audioPath) => {
const audioFile = readFileSync(audioPath);
return audioFile.toString('base64');
};
// ABSOLUTE_PATH/welcome.mp3 をご利用のローカル音声ファイルの絶対パスに置き換えてください。
const base64Audio = encodeAudio("xxx/ABSOLUTE_PATH/welcome.mp3")
const completion = await openai.chat.completions.create({
model: "qwen3-omni-30b-a3b-captioner",
messages: [
{
"role": "user",
"content": [{
"type": "input_audio",
"input_audio": { "data": `data:;base64,${base64Audio}`}
}]
}]
});
console.log(completion.choices[0].message.content);
curl
-
ファイルを Base64 エンコードされた文字列に変換する方法については、コードサンプルをご参照ください。
-
デモンストレーションのため、
"data:;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5...."の Base64 文字列は切り捨てられています。実際には、完全なエンコード済み文字列を渡す必要があります。
# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# シンガポールリージョンの base_url。北京リージョンの場合は、https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/chat/completions を使用してください
# === 実行前にこのコメントを削除してください ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-omni-30b-a3b-captioner",
"messages": [
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "data:;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5...."
}
}
]
}
]
}'
DashScope
Python
import os
import base64
import dashscope
dashscope.base_http_api_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"
# エンコード関数:ローカルファイルを Base64 エンコードされた文字列に変換する
def encode_audio(audio_file_path):
with open(audio_file_path, "rb") as audio_file:
return base64.b64encode(audio_file.read()).decode("utf-8")
# ABSOLUTE_PATH/welcome.mp3 をご利用のローカル音声ファイルの絶対パスに置き換えてください。
audio_file_path = "xxx/ABSOLUTE_PATH/welcome.mp3"
base64_audio = encode_audio(audio_file_path)
print(base64_audio)
messages = [
{
"role": "user",
# Base64 エンコーディングでローカルファイルを渡す場合、有効なファイル URL を確保するために data: プレフィックスを使用する必要があります。
# "base64" キーワードは、Base64 エンコードされたデータ (base64_audio) の前に含める必要があります。そうしないとエラーが発生します。
"content": [{"audio":f"data:;base64,{base64_audio}"}],
}
]
response = dashscope.MultiModalConversation.call(
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: api_key="sk-xxx"
# API キーはリージョンによって異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3-omni-30b-a3b-captioner",
messages=messages,
)
print(response.output.choices[0].message.content[0]["text"])
Java
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Base64;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
private static String encodeAudioToBase64(String audioPath) throws IOException {
Path path = Paths.get(audioPath);
byte[] audioBytes = Files.readAllBytes(path);
return Base64.getEncoder().encodeToString(audioBytes);
}
public static void callWithLocalFile()
throws ApiException, NoApiKeyException, UploadFileException,IOException{
// ABSOLUTE_PATH/welcome.mp3 をご利用のローカルファイルの実際のパスに置き換えてください。
String localFilePath = "ABSOLUTE_PATH/welcome.mp3";
String base64Audio = encodeAudioToBase64(localFilePath);
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
// Base64 エンコーディングでローカルファイルを渡す場合、有効なファイル URL を確保するために data: プレフィックスを使用する必要があります。
// "base64" キーワードは、Base64 エンコードされたデータ (base64_audio) の前に含める必要があります。そうしないとエラーが発生します。
.content(Arrays.asList(
new HashMap<String, Object>(){{put("audio", "data:;base64," + base64Audio);}}
))
.build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
.model("qwen3-omni-30b-a3b-captioner")
// シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.message(userMessage)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println("Output:\n" + result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
callWithLocalFile();
} catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
curl
-
ファイルを Base64 エンコードされた文字列に変換する方法については、コードサンプルをご参照ください。
-
デモンストレーションのため、
"data:;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5...."の Base64 文字列は切り捨てられています。実際には、完全なエンコード済み文字列を渡す必要があります。
# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# シンガポールリージョンの base_url。北京リージョンの場合は、https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation を使用してください
# === 実行前にこのコメントを削除してください ===
curl -X POST 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3-omni-30b-a3b-captioner",
"input":{
"messages":[
{
"role": "user",
"content": [
{"audio": "data:;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5...."}
]
}
]
}
}'
API リファレンス
Qwen3-Omni-Captioner のパラメーターについては、テキスト生成をご参照ください。
エラーコード
モデルの呼び出しが失敗し、エラーメッセージが返された場合は、エラーコードを参照して解決してください。
よくある質問
制限事項
音声ファイルの制限:
-
持続時間:最大 40 分。
-
ファイル数:リクエストごとに 1 つの音声ファイルのみがサポートされます。
-
ファイル形式:AMR、WAV (CodecID: GSM_MS)、WAV (PCM)、3GP、3GPP、AAC、および MP3。
-
ファイル入力方法:パブリック URL、Base64 エンコーディング、またはローカルファイルパス。
-
ファイルサイズ:
-
パブリック URL:1 GB 以下。
-
ファイルパス:音声ファイルは 10 MB 未満である必要があります。
-
Base64 エンコーディング:エンコードされた Base64 文字列は 10 MB 未満である必要があります。詳細については、ローカルファイルの受け渡しをご参照ください。
ファイルを圧縮するには、音声ファイルを必要なサイズに圧縮する方法は?
-