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/v1HTTP リクエストを送信する場合、以下の完全なアクセスエンドポイントを使用します:
シンガポール: 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 openaiAlibaba 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()「杭州と北京の天気はどうですか?今何時ですか?」と入力すると、プログラムは以下の出力を生成します:

入力パラメーター
入力パラメーターは OpenAI インターフェイスと整合しています。現在サポートされているパラメーターは以下のとおりです:
パラメーター | 型 | デフォルト | 説明 |
model | 文字列 | - | 使用するモデルを指定します。利用可能なモデルの一覧については、「サポートされるモデル」をご参照ください。 |
messages | 配列 | - | ユーザーとモデル間の会話履歴です。配列内の各要素は |
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 | 生成する応答の数です。値の範囲は n の値を大きく設定しても入力トークンの消費量は増加しませんが、出力トークンの消費量は増加します。 現在、この機能は qwen-plus モデルでのみサポートされており、tools パラメーターを渡す場合は固定で 1 となります。 |
max_tokens(任意) | 整数 | - | モデルが生成できる最大トークン数を指定します。たとえば、モデルの最大出力長が 2,000 トークンの場合、過度に長い出力を防ぐためにこれを 1,000 に設定できます。 モデルによって出力制限は異なります。詳細については、モデル一覧をご参照ください。 |
seed(任意) | 整数 | - | 生成時に使用される乱数のシードです。モデル出力のランダム性を制御します。シードは 64 ビット符号なし整数である必要があります。 |
stream(任意) | ブール値 | False | ストリーミング出力を使用するかどうかを制御します。stream が有効な場合、API はジェネレーターを返します。結果を得るには、このジェネレーターを反復処理する必要があります。各出力は、現在生成中のテキストの増分シーケンスです。 |
stop(任意) | 文字列または配列 | None | stop パラメーターは、モデルが指定された文字列またはトークン ID を生成しようとする際に自動的に生成を停止することで、コンテンツ生成プロセスを正確に制御します。stop パラメーターは文字列または配列のいずれかになります。
|
tools(任意) | 配列 | None | モデルが呼び出すことができるツールのライブラリを指定します。モデルは、各関数呼び出しでこのライブラリから 1 つのツールを選択します。tools 配列内の各ツールは、以下の構造を持ちます:
関数呼び出しフローでは、関数呼び出しを開始するラウンドと、ツール関数の実行結果をモデルに送信するラウンドの両方で、tools パラメーターを設定する必要があります。このパラメーターは、現在 qwen-turbo、qwen-plus、qwen-max モデルでサポートされています。 説明 tools パラメーターは stream=True と同時に使用することはできません。 |
stream_options(任意) | オブジェクト | None | ストリーミング出力中に使用されるトークン数を表示するかどうかを設定するパラメーターです。stream が True に設定されている場合にのみ有効です。ストリーミングモードでトークン数をカウントするには、このパラメーターを |
出力パラメーター
応答パラメーター | データ型 | 説明 | 備考 |
id | 文字列 | システムが生成した呼び出し ID です。 | なし |
model | 文字列 | 呼び出しに使用されたモデルの名前です。 | なし |
system_fingerprint | 文字列 | モデルが実行時に使用した構成バージョンです。現時点ではサポートされておらず、空文字列 "" を返します。 | なし |
choices | 配列 | モデルが生成したコンテンツの詳細です。 | なし |
choices[i].finish_reason | 文字列 | 以下の 3 つのケースがあります:
| |
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 — エンジンが現在過負荷状態です。しばらくしてから再試行してください | サーバーが過負荷状態です。リクエストを再試行できます。 |