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

Alibaba Cloud Model Studio:OpenAI 互換 - チャット

最終更新日:Feb 17, 2026

Alibaba Cloud Model Studio の Qwen モデルは、OpenAI 互換インターフェイスをサポートしています。既存の OpenAI コードを Model Studio に移行するには、API キー、base_url、およびモデル名のみを更新すればよいです。

必要情報

base_url

base_url は、モデルサービスのネットワークエンドポイントです。このアドレスにより、サービスが提供する機能やデータにアクセスできます。Web サービスや API を使用する場合、base_url は通常、特定のエンドポイントが付加される API のルート URL となります。OpenAI 互換インターフェイスを用いて Model Studio を呼び出す際には、base_url を必ず設定してください。

  • OpenAI SDK またはその他の OpenAI 互換 SDK を使用して呼び出す場合、base_url を以下のように設定します:

    シンガポール: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
    米国 (バージニア): https://dashscope-us.aliyuncs.com/compatible-mode/v1
    中国 (北京): https://dashscope.aliyuncs.com/compatible-mode/v1
  • HTTP リクエストを使用して呼び出す場合、完全なアクセスエンドポイントを以下のように設定します:

    シンガポール: POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions
    米国 (バージニア): POST https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions
    中国 (北京): POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions

サポート対象モデル

以下の表に、OpenAI 互換インターフェイスで現在サポートされている Qwen モデルを示します。

グローバル

  • 商用版

    • Qwen-Max シリーズ: qwen3-max、qwen3-max-preview、qwen3-max-2025-09-23 以降のスナップショットモデル

    • Qwen-Plus シリーズ: qwen-plus、qwen-plus-latest、qwen-plus-2025-01-25 以降のスナップショットモデル

    • Qwen-Flash シリーズ: qwen-flash、qwen-flash-2025-07-28 以降のスナップショットモデル

  • オープンソース版

    • qwen3-next-80b-a3b-thinking、qwen3-next-80b-a3b-instruct、qwen3-235b-a22b-thinking-2507、qwen3-235b-a22b-instruct-2507、qwen3-30b-a3b-thinking-2507、qwen3-30b-a3b-instruct-2507、qwen3-235b-a22b、qwen3-32b、qwen3-30b-a3b、qwen3-14b、qwen3-8b

国際

  • 商用版

    • Qwen-Max シリーズ: qwen3-max、qwen3-max-preview、qwen3-max-2025-09-23 以降のスナップショットモデル、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 シリーズ: qwen-flash、qwen-flash-2025-07-28 以降のスナップショットモデル

    • Qwen-Turbo シリーズ: qwen-turbo、qwen-turbo-latest、qwen-turbo-2024-11-01 以降のスナップショットモデル

    • Qwen-Coder シリーズ: qwen3-coder-plus、qwen3-coder-plus-2025-07-22 以降のスナップショットモデル、qwen3-coder-flash、qwen3-coder-flash-2025-07-28 以降のスナップショットモデル

    • QwQ シリーズ: qwq-plus

  • オープンソース版

    • qwen3.5-397b-a17b

    • qwen3-next-80b-a3b-thinking、qwen3-next-80b-a3b-instruct、qwen3-235b-a22b-thinking-2507、qwen3-235b-a22b-instruct-2507、qwen3-30b-a3b-thinking-2507、qwen3-30b-a3b-instruct-2507、qwen3-235b-a22b、qwen3-32b、qwen3-30b-a3b、qwen3-14b、qwen3-8b、qwen3-4b、qwen3-1.7b、qwen3-0.6b

    • qwen2.5-14b-instruct-1m、qwen2.5-7b-instruct-1m、qwen2.5-72b-instruct、qwen2.5-32b-instruct、qwen2.5-14b-instruct、qwen2.5-7b-instruct

米国

  • 商用版

    • Qwen-Plus シリーズ: qwen-plus-us、qwen-plus-2025-12-01-us 以降のスナップショットモデル

    • Qwen-Flash シリーズ: qwen-flash-us、qwen-flash-2025-07-28-us

中国本土

  • 商用版

    • Qwen-Max シリーズ: qwen3-max、qwen3-max-preview、qwen3-max-2025-09-23 以降のスナップショットモデル、qwen-max、qwen-max-latest、qwen-max-2024-09-19 以降のスナップショットモデル

    • Qwen-Plus シリーズ: qwen3.5-plus、qwen3.5-plus-2026-02-15 以降のスナップショットモデル、qwen-plus、qwen-plus-latest、qwen-plus-2024-12-20 以降のスナップショットモデル

    • Qwen-Flash シリーズ: qwen-flash、qwen-flash-2025-07-28 以降のスナップショットモデル

    • Qwen-Turbo シリーズ: qwen-turbo、qwen-turbo-latest、qwen-turbo-2025-04-28 以降のスナップショットモデル

    • Qwen-Coder シリーズ: qwen3-coder-plus、qwen3-coder-plus-2025-07-22 以降のスナップショットモデル、qwen3-coder-flash、qwen3-coder-flash-2025-07-28 以降のスナップショットモデル、qwen-coder-plus、qwen-coder-plus-latest、qwen-coder-plus-2024-11-06、qwen-coder-turbo、qwen-coder-turbo-latest、qwen-coder-turbo-2024-09-19

    • QwQ シリーズ: qwq-plus、qwq-plus-latest、qwq-plus-2025-03-05

    • Qwen-Math: qwen-math-plus、qwen-math-plus-latest、qwen-math-plus-2024-08-16 以降のスナップショットモデル、qwen-math-turbo、qwen-math-turbo-latest、qwen-math-turbo-2024-09-19

  • オープンソース版

    • qwen3.5-397b-a17b

    • qwen3-next-80b-a3b-thinking、qwen3-next-80b-a3b-instruct、qwen3-235b-a22b-thinking-2507、qwen3-235b-a22b-instruct-2507、qwen3-30b-a3b-thinking-2507、qwen3-30b-a3b-instruct-2507、qwen3-235b-a22b、qwen3-32b、qwen3-30b-a3b、qwen3-14b、qwen3-8b、qwen3-4b、qwen3-1.7b、qwen3-0.6b

    • qwen2.5-14b-instruct-1m、qwen2.5-7b-instruct-1m、qwen2.5-72b-instruct、qwen2.5-32b-instruct、qwen2.5-14b-instruct、qwen2.5-7b-instruct、qwen2.5-3b-instruct、qwen2.5-1.5b-instruct、qwen2.5-0.5b-instruct

OpenAI SDK の使用

前提条件

  • ご利用のコンピューターに Python 環境がインストール済みであることを確認します。

  • 最新版の OpenAI SDK をインストールします。

    # 次のコマンドでエラーが発生した場合は、pip を pip3 に置き換えてください。
    pip install -U openai
  • Model Studio を有効化し、API キーを作成します:API キーの取得

  • API キーの漏洩リスクを低減するため、環境変数として API キーをエクスポートします。詳細については、「環境変数として API キーをエクスポート」をご参照ください。コード内に API キーを直接設定することも可能ですが、**これは漏洩リスクを高めます**。

  • 使用するモデルを選択します:モデルの可用性

使用方法

以下の例では、OpenAI SDK を使用して Model Studio 上の Qwen モデルにアクセスする方法を示します。

非ストリーミング呼び出しの例

from openai import OpenAI
import os

def get_response():
    client = OpenAI(
        api_key=os.getenv("DASHSCOPE_API_KEY"),  # 環境変数を設定していない場合は、この行を Model Studio の API キー(sk-xxx)を用いて api_key="sk-xxx" に置き換えてください。
        # 以下はシンガポールリージョン向けの base_url です。
        base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",  
    )
    completion = client.chat.completions.create(
        model="qwen-plus",  # この例では qwen-plus を使用しています。必要に応じてモデル名を置き換え可能です。利用可能なモデルの一覧については、https://www.alibabacloud.com/help/model-studio/getting-started/models をご参照ください。
        messages=[{'role': 'system', 'content': 'あなたは親切なアシスタントです。'},
                  {'role': 'user', 'content': 'あなたは誰ですか?'}]
        )
    print(completion.model_dump_json())

if __name__ == '__main__':
    get_response()

コードを実行すると、以下の結果が得られます:

{
    "id": "chatcmpl-xxx",
    "choices": [
        {
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null,
            "message": {
                "content": "私は Alibaba Cloud が提供する大規模事前学習済みモデルです。私の名前は Qwen です。",
                "role": "assistant",
                "function_call": null,
                "tool_calls": null
            }
        }
    ],
    "created": 1716430652,
    "model": "qwen-plus",
    "object": "chat.completion",
    "system_fingerprint": null,
    "usage": {
        "completion_tokens": 18,
        "prompt_tokens": 22,
        "total_tokens": 40
    }
}

ストリーミング呼び出しの例

from openai import OpenAI
import os


def get_response():
    client = OpenAI(
        # 環境変数を設定していない場合は、次の行を Model Studio の API キー(sk-xxx)を用いて api_key="sk-xxx" に置き換えてください。
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # 以下はシンガポールリージョン向けの base_url です。
        base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
        
    )
    completion = client.chat.completions.create(
        model="qwen-plus",  # この例では qwen-plus を使用しています。必要に応じてモデル名を置き換え可能です。利用可能なモデルの一覧については、https://www.alibabacloud.com/help/model-studio/getting-started/models をご参照ください。
        messages=[{'role': 'system', 'content': 'あなたは親切なアシスタントです。'},
                  {'role': 'user', 'content': 'あなたは誰ですか?'}],
        stream=True,
        # ストリーミング出力の最終行にトークン使用量情報を表示するには、以下の設定を使用します。
        stream_options={"include_usage": True}
        )
    for chunk in completion:
        print(chunk.model_dump_json())


if __name__ == '__main__':
    get_response()

コードを実行すると、以下の結果が得られます:

{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"","function_call":null,"role":"assistant","tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1719286190,"model":"qwen-plus","object":"chat.completion.chunk","system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"私は","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1719286190,"model":"qwen-plus","object":"chat.completion.chunk","system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"大規模言語モデルです。","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1719286190,"model":"qwen-plus","object":"chat.completion.chunk","system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"Alibaba Cloud ","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1719286190,"model":"qwen-plus","object":"chat.completion.chunk","system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"から提供されています。","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1719286190,"model":"qwen-plus","object":"chat.completion.chunk","system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"私の名前は Qwen です。","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1719286190,"model":"qwen-plus","object":"chat.completion.chunk","system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"","function_call":null,"role":null,"tool_calls":null},"finish_reason":"stop","index":0,"logprobs":null}],"created":1719286190,"model":"qwen-plus","object":"chat.completion.chunk","system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[],"created":1719286190,"model":"qwen-plus","object":"chat.completion.chunk","system_fingerprint":null,"usage":{"completion_tokens":16,"prompt_tokens":22,"total_tokens":38}}

関数呼び出しの例

このセクションでは、天気および時刻照会ツールを用いた OpenAI 互換インターフェイスによるツール呼び出し機能の実装例を示します。サンプルコードは、複数ラウンドのツール呼び出しをサポートしています。

from openai import OpenAI
from datetime import datetime
import json
import os

client = OpenAI(
    # 環境変数を設定していない場合は、次の行を Model Studio の API キー(sk-xxx)を用いて api_key="sk-xxx" に置き換えてください。
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下はシンガポールリージョン向けの base_url です。
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",  
)

# ツール一覧を定義します。モデルは、どのツールを呼び出すかを判断する際に、ツールの名前と説明を参照します。
tools = [
    # ツール 1:現在時刻を取得する。
    {
        "type": "function",
        "function": {
            "name": "get_current_time",
            "description": "現在時刻を知りたい場合に便利です。",
            # 現在時刻を取得するには入力パラメーターが不要であるため、parameters は空の辞書です。
            "parameters": {}
        }
    },  
    # ツール 2:指定された都市の天気を取得する。
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "特定の都市の天気を照会する場合に便利です。",
            "parameters": {  
                "type": "object",
                "properties": {
                    # 天気照会には場所の指定が必要であるため、パラメーターは location とします。
                    "location": {
                        "type": "string",
                        "description": "都市または郡を指定します(例:東京、大阪市、横浜市など)。"
                    }
                }
            },
            "required": [
                "location"
            ]
        }
    }
]

# 天気照会ツールを模擬します。サンプル結果:「本日、東京は雨です。」
def get_current_weather(location):
    return f"本日、{location}は雨です。"

# 現在時刻を照会するツールです。サンプル結果:「現在時刻:2024-04-15 17:15:18。」
def get_current_time():
    # 現在の日時を取得します。
    current_datetime = datetime.now()
    # 現在の日時をフォーマットします。
    formatted_time = current_datetime.strftime('%Y-%m-%d %H:%M:%S')
    # フォーマットされた現在時刻を返します。
    return f"現在時刻:{formatted_time}。"

# モデル応答関数をカプセル化します。
def get_response(messages):
    completion = client.chat.completions.create(
        model="qwen-plus",  # この例では qwen-plus を使用しています。必要に応じてモデル名を置き換え可能です。利用可能なモデルの一覧については、https://www.alibabacloud.com/help/model-studio/getting-started/models をご参照ください。
        messages=messages,
        tools=tools
        )
    return completion.model_dump()

def call_with_messages():
    print('\n')
    messages = [
            {
                "content": input('クエリを入力してください:'),  # サンプル質問:「今何時ですか?」、「1時間後は何時ですか?」、「東京の天気はどうですか?」
                "role": "user"
            }
    ]
    print("-"*60)
    # 最初のラウンドのモデル呼び出し。
    i = 1
    first_response = get_response(messages)
    assistant_output = first_response['choices'][0]['message']
    print(f"\n第{i}ラウンドのモデル出力:{first_response}\n")
    if  assistant_output['content'] is None:
        assistant_output['content'] = ""
    messages.append(assistant_output)
    # ツール呼び出しが不要な場合は、最終回答を直接返します。
    if assistant_output['tool_calls'] == None:  # モデルがツール呼び出しを不要と判断した場合、アシスタントの返答をそのまま表示します。2回目のモデル呼び出しは不要です。
        print(f"ツール呼び出しは不要です。直接回答できます:{assistant_output['content']}")
        return
    # ツール呼び出しが必要な場合は、モデルがツール呼び出しを不要と判断するまで、複数ラウンドのモデル呼び出しを実行します。
    while assistant_output['tool_calls'] != None:
        # モデルが天気照会ツールの呼び出しを必要と判断した場合、天気照会ツールを実行します。
        if assistant_output['tool_calls'][0]['function']['name'] == 'get_current_weather':
            tool_info = {"name": "get_current_weather", "role":"tool"}
            # location パラメーター情報を抽出します。
            location = json.loads(assistant_output['tool_calls'][0]['function']['arguments'])['location']
            tool_info['content'] = get_current_weather(location)
        # モデルが時刻照会ツールの呼び出しを必要と判断した場合、時刻照会ツールを実行します。
        elif assistant_output['tool_calls'][0]['function']['name'] == 'get_current_time':
            tool_info = {"name": "get_current_time", "role":"tool"}
            tool_info['content'] = get_current_time()
        print(f"ツール出力:{tool_info['content']}\n")
        print("-"*60)
        messages.append(tool_info)
        assistant_output = get_response(messages)['choices'][0]['message']
        if  assistant_output['content'] is None:
            assistant_output['content'] = ""
        messages.append(assistant_output)
        i += 1
        print(f"第{i}ラウンドのモデル出力:{assistant_output}\n")
    print(f"最終回答:{assistant_output['content']}")

if __name__ == '__main__':
    call_with_messages()

シンガポールの天気はどうですか?今何時ですか?」と入力すると、プログラムは以下の出力を返します:

2024-06-26_10-04-56 (1).gif

入力パラメーター

入力パラメーターは OpenAI インターフェイスのパラメーターと整合しています。以下のパラメーターがサポートされています:

パラメーター

デフォルト値

説明

model

文字列

-

使用するモデルを指定します。利用可能なモデルの一覧については、「モデルの可用性」をご参照ください。

messages

配列

-

ユーザーとモデル間の会話履歴です。配列内の各要素は {"role": "ロール", "content": "内容"} の形式です。ロールには system、user、assistant のいずれかを指定できます。messages[0] のみ role を system に設定できます。通常、user と assistant は交互に出現し、messages の最後の要素の role は user でなければなりません。

top_p(任意)

浮動

-

ネクレウス・サンプリングの確率しきい値です。たとえば、このパラメーターを 0.8 に設定した場合、モデルは累積確率が 0.8 以上となる上位トークンの最小集合からトークンを生成します。有効範囲:(0, 1.0)。値が大きいほどランダム性が高まり、小さいほど決定性が高まります。

temperature(任意)

浮動

-

モデルの応答のランダム性および多様性を制御します。temperature 値が高いほど、候補語の確率分布が滑らかになり、確率の低い語も選択されやすくなり、より多様な結果が生成されます。temperature 値が低いほど、確率分布が鋭くなり、確率の高い語が選択されやすくなり、より決定的な結果が生成されます。

有効範囲:[0, 2)。値を 0 に設定しないことを推奨します。

プレゼンスペナルティ

(オプション)

浮動

-

生成されたコンテンツ全体におけるシーケンスの繰り返しを制御します。presence_penalty の値が高いほど、繰り返しが抑制されます。有効範囲:[-2.0, 2.0]。

説明

現在、このパラメーターは Qwen 商用モデルおよび qwen1.5 以降のオープンソースモデルでのみサポートされています。

n(任意)

整数

1

生成する応答の数です。有効範囲:1~4。クリエイティブライティングや広告コピーなど、複数の応答を必要とするシナリオでは、n の値を大きく設定できます。

n の値を大きくしても入力トークンの消費量は増加しませんが、出力トークンの消費量は増加します。
現在、このパラメーターは qwen-plus モデルでのみサポートされています。tools パラメーターが渡された場合、値は 1 である必要があります。

max_tokens(任意)

整数

-

モデルが生成できる最大トークン数です。たとえば、モデルの最大出力長が 2,000 トークンの場合、このパラメーターを 1,000 に設定することで、過度に長いコンテンツの生成を防ぐことができます。

モデルによって出力制限は異なります。詳細については、モデル一覧をご参照ください。

seed(任意)

整数

-

生成時に使用される乱数のシードで、生成されるコンテンツのランダム性を制御します。seed パラメーターは符号なし 64 ビット整数をサポートします。

stream(任意)

ブール値

False

ストリーミング出力を使用するかどうかを指定します。結果をストリーミングする場合、API はジェネレーターを返します。結果を取得するには、反復処理を行う必要があります。各出力は、現在生成中の増分シーケンスです。

stop(任意)

文字列または配列

None

stop パラメーターは、コンテンツ生成プロセスを精密に制御します。モデルは、指定された文字列またはトークン ID を含もうとする直前に自動的に生成を停止します。stop パラメーターは文字列または配列のいずれかになります。

  • 文字列型

    モデルは、指定されたストップワードを生成しようとする直前に停止します。

    たとえば、stop を "こんにちは" に設定した場合、モデルは "こんにちは" を生成しようとする直前に停止します。

  • 配列型

    配列の要素はトークン ID、文字列、またはトークン ID の配列のいずれかになります。次に生成されるトークン、またはその対応するトークン ID が stop 配列に含まれている場合、モデルはコンテンツの生成を停止します。以下に、stop パラメーターに配列を使用する例を示します。これらの例では、トークナイザーは qwen-turbo モデルに対応しています:

    1. 要素がトークン ID の場合:

    トークン ID 108386 および 104307 はそれぞれトークン "こんにちは" および "天気" に対応します。stop を [108386,104307] に設定した場合、モデルは "こんにちは" または "天気" を生成しようとする直前に停止します。

    2. 要素が文字列の場合:

    stop を ["こんにちは","天気"] に設定した場合、モデルは "こんにちは" または "天気" を生成しようとする直前に停止します。

    3. 要素が配列の場合:

    トークン ID 108386 および 103924 は、それぞれトークン「Hello」と「there」に対応します。トークン ID 35946 および 101243 は、それぞれトークン「I」と「fine」に対応します。stop を [[108386, 103924],[35946, 101243]] に設定すると、モデルは「Hello there」または「I am fine」を生成しようとしたときに停止します。

    説明

    stop が配列の場合、要素としてトークン ID と文字列を混在させないでください。たとえば、["こんにちは",104307] のように設定しないでください。

tools(任意)

配列

None

モデルが呼び出せるツールライブラリを指定します。ツール呼び出しプロセスでは、モデルがライブラリから 1 つのツールを選択します。tools 配列内の各ツールの構造は以下のとおりです:

  • type:ツールの種類を示す文字列です。現在は function のみがサポートされています。

  • function:name、description、parameters のキーと値のペアを含むオブジェクトです。

    • name:ツール関数の名前を示す文字列です。英字および数字で構成され、アンダースコア (_) およびハイフン (-) を含むことができます。最大長は 64 文字です。

    • description:ツール関数を説明する文字列です。モデルはこの説明を基に、いつおよびどのように関数を呼び出すかを判断します。

    • parameters:ツールのパラメーターを説明するオブジェクトです。有効な JSON Schema である必要があります。JSON Schema の詳細については、「JSON Schema ドキュメント」をご参照ください。parameters オブジェクトが空の場合、関数には入力パラメーターがありません。

ツール呼び出しプロセスでは、ツール呼び出しを開始するときと、ツール関数の実行結果をモデルに送信するときに、tools パラメーターを設定する必要があります。現在サポートされているモデルには、qwen-turbo、qwen-plus、qwen-max があります。

説明

tools パラメーターは stream=True と同時に使用できません。

stream_options(任意)

オブジェクト

None

ストリーミング出力時のトークン使用量情報を表示するかどうかを設定します。このパラメーターは、stream が True に設定されている場合にのみ有効です。ストリーミング出力モードでトークン数をカウントするには、このパラメーターを stream_options={"include_usage":True} に設定します。

応答パラメーター

戻り値

データ型

説明

備考

id

文字列

この呼び出しに対してシステムが生成した ID です。

なし

model

文字列

呼び出されたモデルの名前です。

なし

system_fingerprint

文字列

モデル実行時の構成バージョンです。現時点では未対応であり、空文字列 "" を返します。

なし

choices

配列

モデルが生成したコンテンツの詳細です。

なし

choices[i].finish_reason

文字列

以下の 3 つのケースが該当します:

  • 生成中は値が null です。

  • stop:入力パラメーターで指定された停止条件がトリガーされました。

  • length:出力が最大長を超えました。

choices[i].message

オブジェクト

モデルが出力するメッセージです。

choices[i].message.role

文字列

モデルのロールで、固定値として assistant が設定されます。

choices[i].message.content

文字列

モデルが生成したテキストです。

choices[i].index

整数

生成結果の連番です。デフォルト値:0。

created

整数

結果が生成された UNIX タイムスタンプ(秒単位)です。

なし

usage

オブジェクト

リクエストのトークン消費量です。

なし

usage.prompt_tokens

整数

入力テキストのトークン数です。

なし

usage.completion_tokens

整数

生成された応答のトークン数です。

なし

usage.total_tokens

整数

usage.prompt_tokens と usage.completion_tokens の合計です。

なし

langchain_openai SDK の使用

前提条件

  • ご利用のコンピューターに Python 環境がインストール済みであることを確認します。

  • 以下のコマンドを実行して、langchain_openai SDK をインストールします。

    # 次のコマンドでエラーが発生した場合は、pip を pip3 に置き換えてください。
    pip install -U langchain_openai
  • Model Studio を有効化し、API キーを作成します:API キーの取得

  • API キーの漏洩リスクを低減するため、環境変数として API キーをエクスポートします。詳細については、「環境変数として API キーをエクスポート」をご参照ください。コード内に API キーを直接設定することも可能ですが、**これは漏洩リスクを高めます**。

  • 使用するモデルを選択します:モデルの可用性

使用方法

以下の例では、langchain_openai SDK を使用して Model Studio の Qwen モデルを呼び出す方法を示します。

非ストリーミング出力

非ストリーミング出力は invoke メソッドを使用して実装されます。以下のサンプルコードをご参照ください。

from langchain_openai import ChatOpenAI
import os

def get_response():
    llm = ChatOpenAI(
        api_key=os.getenv("DASHSCOPE_API_KEY"),  # 環境変数を設定していない場合は、この行を Model Studio の API キー(sk-xxx)を用いて api_key="sk-xxx" に置き換えてください。
        base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1", # これはシンガポールリージョン向けの base_url です。
        model="qwen-plus"  # この例では qwen-plus を使用しています。必要に応じてモデル名を置き換え可能です。利用可能なモデルの一覧については、https://www.alibabacloud.com/help/model-studio/getting-started/models をご参照ください。
        )
    messages = [
        {"role":"system","content":"あなたは親切なアシスタントです。"},
        {"role":"user","content":"あなたは誰ですか?"}
    ]
    response = llm.invoke(messages)
    print(response.json())

if __name__ == "__main__":
    get_response()

コードを実行すると、以下の結果が得られます:

{
    "content": "私は Alibaba Cloud が提供する大規模言語モデルです。私の名前は Qwen です。",
    "additional_kwargs": {},
    "response_metadata": {
        "token_usage": {
            "completion_tokens": 16,
            "prompt_tokens": 22,
            "total_tokens": 38
        },
        "model_name": "qwen-plus",
        "system_fingerprint": "",
        "finish_reason": "stop",
        "logprobs": null
    },
    "type": "ai",
    "name": null,
    "id": "run-xxx",
    "example": false,
    "tool_calls": [],
    "invalid_tool_calls": []
}

ストリーミング出力

ストリーミング出力は stream メソッドを使用して実装されます。stream パラメーターを設定する必要はありません。

from langchain_openai import ChatOpenAI
import os

def get_response():
    llm = ChatOpenAI(
        api_key=os.getenv("DASHSCOPE_API_KEY"),  # 環境変数を設定していない場合は、この行を Model Studio の API キー(sk-xxx)を用いて api_key="sk-xxx" に置き換えてください。
        base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",   # これはシンガポールリージョン向けの base_url です。
        model="qwen-plus",   # この例では qwen-plus を使用しています。必要に応じてモデル名を置き換え可能です。利用可能なモデルの一覧については、https://www.alibabacloud.com/help/model-studio/getting-started/models をご参照ください。
        stream_usage=True
        )
    messages = [
        {"role":"system","content":"あなたは親切なアシスタントです。"}, 
        {"role":"user","content":"あなたは誰ですか?"},
    ]
    response = llm.stream(messages)
    for chunk in response:
        print(chunk.model_dump_json())

if __name__ == "__main__":
    get_response()

コードを実行すると、以下の結果が得られます:

{"content": "", "additional_kwargs": {}, "response_metadata": {}, "type": "AIMessageChunk", "name": null, "id": "run-xxx", "example": false, "tool_calls": [], "invalid_tool_calls": [], "usage_metadata": null, "tool_call_chunks": []}
{"content": "私は", "additional_kwargs": {}, "response_metadata": {}, "type": "AIMessageChunk", "name": null, "id": "run-xxx", "example": false, "tool_calls": [], "invalid_tool_calls": [], "usage_metadata": null, "tool_call_chunks": []}
{"content": "大規模言語モデル", "additional_kwargs": {}, "response_metadata": {}, "type": "AIMessageChunk", "name": null, "id": "run-xxx", "example": false, "tool_calls": [], "invalid_tool_calls": [], "usage_metadata": null, "tool_call_chunks": []}
{"content": "です", "additional_kwargs": {}, "response_metadata": {}, "type": "AIMessageChunk", "name": null, "id": "run-xxx", "example": false, "tool_calls": [], "invalid_tool_calls": [], "usage_metadata": null, "tool_call_chunks": []}
{"content": "。私の名前は Qwen です。", "additional_kwargs": {}, "response_metadata": {}, "type": "AIMessageChunk", "name": null, "id": "run-xxx", "example": false, "tool_calls": [], "invalid_tool_calls": [], "usage_metadata": null, "tool_call_chunks": []}
{"content": "", "additional_kwargs": {}, "response_metadata": {"finish_reason": "stop"}, "type": "AIMessageChunk", "name": null, "id": "run-xxx", "example": false, "tool_calls": [], "invalid_tool_calls": [], "usage_metadata": null, "tool_call_chunks": []}
{"content": "", "additional_kwargs": {}, "response_metadata": {}, "type": "AIMessageChunk", "name": null, "id": "run-xxx", "example": false, "tool_calls": [], "invalid_tool_calls": [], "usage_metadata": {"input_tokens": 22, "output_tokens": 16, "total_tokens": 38}, "tool_call_chunks": []}

入力パラメーターの設定については、「リクエストパラメーター」をご参照ください。関連するパラメーターは ChatOpenAI オブジェクトで定義されています。

HTTP インターフェイスの使用

HTTP インターフェイスを使用して Model Studio を呼び出すことで、OpenAI サービスからの応答と同じ構造の応答を受け取ることができます。

前提条件

  • Model Studio を有効化し、API キーを作成します:API キーの取得

  • API キーの漏洩リスクを低減するため、環境変数として API キーをエクスポートします。詳細については、「環境変数として API キーをエクスポート」をご参照ください。コード内に API キーを直接設定することも可能ですが、**これは漏洩リスクを高めます**。

API リクエストの送信

シンガポール、米国 (バージニア): POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions
中国 (北京): POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions

サンプルリクエスト

以下の例は、cURL コマンドを使用して API を呼び出すスクリプトを示しています。

説明

API キーを環境変数として設定していない場合は、$DASHSCOPE_API_KEY をご自身の API キーに置き換える必要があります。

非ストリーミング出力

# これはシンガポールリージョン向けの base_url です。
curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen-plus",
    "messages": [
        {
            "role": "system",
            "content": "あなたは親切なアシスタントです。"
        },
        {
            "role": "user", 
            "content": "あなたは誰ですか?"
        }
    ]
}'

コマンドを実行すると、以下の結果が得られます:

{
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "私は Alibaba Cloud が提供する大規模言語モデルです。私の名前は Qwen です。"
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 11,
        "completion_tokens": 16,
        "total_tokens": 27
    },
    "created": 1715252778,
    "system_fingerprint": "",
    "model": "qwen-plus",
    "id": "chatcmpl-xxx"
}

ストリーミング出力

ストリーミング出力を使用する場合は、リクエストボディで stream パラメーターを true に設定します。

# これはシンガポールリージョン向けの base_url です。
curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen-plus",
    "messages": [
        {
            "role": "system",
            "content": "あなたは親切なアシスタントです。"
        },
        {
            "role": "user", 
            "content": "あなたは誰ですか?"
        }
    ],
    "stream":true
}'

コマンドを実行すると、以下の結果が得られます:

data: {"choices":[{"delta":{"content":"","role":"assistant"},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: {"choices":[{"finish_reason":null,"delta":{"content":"私は"},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: {"choices":[{"delta":{"content":"大規模言語モデル"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: {"choices":[{"delta":{"content":"です"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: {"choices":[{"delta":{"content":"。私の名前は Qwen です。"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: [DONE]

入力パラメーターの詳細については、「リクエストパラメーター」をご参照ください。

異常応答の例

リクエスト中にエラーが発生した場合、応答の code フィールドおよび message フィールドにエラーの原因が示されます。

{
    "error": {
        "message": "不正な API キーが指定されました。",
        "type": "invalid_request_error",
        "param": null,
        "code": "invalid_api_key"
    }
}

ステータスコード

エラーコード

説明

400 - 不正なリクエストエラー

リクエストが不正です。詳細については、エラーメッセージをご参照ください。

401 - 不正な API キーが指定されました

API キーが不正です。

429 - リクエストのレート制限に達しました

クエリ/秒 (QPS)、クエリ/分 (QPM)、またはその他の制限を超えました。

429 - クォータを超えたため、プランおよび課金の詳細を確認してください

クォータが超過しているか、アカウントの支払い遅延が発生しています。

500 - サーバーでリクエストの処理中にエラーが発生しました

サーバー側でエラーが発生しました。

503 - エンジンが現在過負荷状態です。しばらくしてから再度お試しください

サーバーが過負荷状態です。しばらくしてから再度お試しください。