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

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

最終更新日:Feb 25, 2026

Alibaba Cloud Model Studio の Qwen モデルは、OpenAI 互換インターフェイスをサポートしています。API キー、base_url、およびモデル名のみを変更することで、既存の OpenAI コードを Model Studio でそのまま利用できます。

必要な情報

base_url

base_url は、モデルサービスのエンドポイントです。OpenAI 互換インターフェイスを使用して Alibaba Cloud 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 シリーズ: qwen3.5-flash、qwen3.5-flash-2026-02-23 以降のスナップショットモデル;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.5-120b-a10b、qwen3.5-27b、qwen3.5-35b-a3b

    • 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、qwen3.5-flash、qwen3.5-flash-2026-02-23 およびそれ以降の(スナップショット)モデル;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.5-120b-a10b、qwen3.5-27b、qwen3.5-35b-a3b

    • 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
  • Alibaba Cloud Model Studio を有効化し、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"),  # 環境変数を設定していない場合は、この行を Alibaba Cloud Model Studio の API キーに置き換えてください: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/en/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(
        # 環境変数を設定していない場合は、この行を Alibaba Cloud Model Studio の API キーに置き換えてください: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/en/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":" 言語","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":"。私の名前は 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(
    # 環境変数を設定していない場合は、次の行を Alibaba Cloud Model Studio の API キーに置き換えてください: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/en/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}ラウンドの LLM 出力:{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 = 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}ラウンドの LLM 出力:{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": role, "content": content} の形式です。使用可能なロールは system、user、assistant です。system ロールは messages[0] のみでサポートされます。通常、user ロールと assistant ロールは交互に指定する必要があります。また、messages の最後の要素のロールは user でなければなりません。

top_p(任意)

浮動

-

生成時のヌクレウス・サンプリングにおける確率しきい値です。たとえば、値が 0.8 の場合、累積確率が 0.8 以上となる最も可能性の高いトークンの最小集合のみが考慮されます。値の範囲は (0, 1.0) です。値が大きいほどランダム性が高まり、小さいほど決定論的になります。

temperature(任意)

浮動小数点数

-

モデルの応答のランダム性および多様性を制御します。具体的には、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(任意)

整数

-

生成時に使用される乱数のシードです。モデル出力のランダム性を制御します。シードは 64 ビット符号なし整数である必要があります。

stream(任意)

ブール値

False

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

stop(任意)

文字列または配列

None

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

  • 文字列型

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

    たとえば、stop を "Hello" に設定した場合、モデルは "Hello" を生成しようとした時点で停止します。

  • 配列型

    配列の要素はトークン ID、文字列、またはトークン ID の配列のいずれかになります。モデルは、生成しようとしているトークンまたは対応するトークン ID が stop 配列に含まれている場合に停止します。以下に、stop パラメーターを配列として指定した場合の例を示します(トークナイザーは qwen-turbo モデルに対応):

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

    トークン ID 108386 および 104307 はそれぞれトークン "Hello" および "weather" に対応します。stop を [108386,104307] に設定した場合、モデルは "Hello" または "weather" を生成しようとした時点で停止します。

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

    stop を ["Hello","weather"] に設定した場合、モデルは "Hello" または "weather" を生成しようとした時点で停止します。

    3. 要素が配列の場合:

    トークン ID 108386 および 103924 はそれぞれトークン "Hello" および "ah" に対応します。トークン ID 35946 および 101243 はそれぞれトークン "I" および "am fine" に対応します。stop を [[108386, 103924],[35946, 101243]] に設定した場合、モデルは "Hello ah" または "I am fine" を生成しようとした時点で停止します。

    説明

    stop パラメーターが配列の場合、その要素はすべて同じ型である必要があります(すべて文字列、またはすべてトークン ID)。たとえば、["Hello", 104307] のように混在させることはできません。

tools(任意)

配列

None

モデルが呼び出すことができるツールのライブラリを指定します。モデルは、各関数呼び出しでこのライブラリから 1 つのツールを選択します。tools 配列内の各ツールは、以下の構造を持ちます:

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

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

    • name:ツール関数の名前を示す文字列です。英字、数字、アンダースコア、ハイフンのみを使用でき、最大長は 64 文字です。

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

    • parameters:ツールのパラメーターを記述するオブジェクトです。有効な 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
  • Alibaba Cloud Model Studio を有効化し、API キーを取得します。詳細については、「API キーの取得」をご参照ください。

  • セキュリティリスクを低減するため、API キーを環境変数として設定することを推奨します。詳細については、「API キーを環境変数として設定」をご参照ください。コード内に API キーを直接設定することも可能ですが、この方法では漏洩リスクが高まります

  • 使用するモデルを選択します。詳細については、「サポートされるモデル」をご参照ください。

使用方法

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

非ストリーミング出力

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

from langchain_openai import ChatOpenAI
import os

def get_response():
    llm = ChatOpenAI(
        api_key=os.getenv("DASHSCOPE_API_KEY"),  # 環境変数を設定していない場合は、この行を Alibaba Cloud Model Studio の API キーに置き換えてください: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/en/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"),  # 環境変数を設定していない場合は、この行を Alibaba Cloud Model Studio の API キーに置き換えてください: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/en/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": " Alibaba", "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": " Cloud", "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": {}, "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 インターフェイスを介して Alibaba Cloud Model Studio を呼び出すことで、OpenAI サービスと同じ構造の応答を取得できます。

前提条件

  • Alibaba Cloud Model Studio を有効化し、API キーを取得します。詳細については、「API キーの取得」をご参照ください。

  • セキュリティリスクを低減するため、API キーを環境変数として設定することを推奨します。詳細については、「API キーを環境変数として設定」をご参照ください。コード内に API キーを直接設定することも可能ですが、この方法では漏洩リスクが高まります

API 呼び出しの送信

シンガポール: 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

リクエスト例

以下の例では、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":" モデルです。Alibaba Cloud から提供されています"},"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]

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

エラー応答の例

リクエスト中にエラーが発生した場合、応答には原因を示すコードとメッセージが含まれます。

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

ステータスコード

エラーコード

説明

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

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

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

API キーが不正です。

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

クエリ/秒 (QPS) やクエリ/分 (QPM) などのレート制限を超えました。

429 — クォータを超過しました。プランおよび課金の詳細を確認してください

クォータを超過したか、支払い遅延が発生しています。

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

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

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

サーバーが過負荷状態です。リクエストを再試行できます。