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/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 シリーズ: 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 openaiModel 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()「シンガポールの天気はどうですか?今何時ですか?」と入力すると、プログラムは以下の出力を返します:

入力パラメーター
入力パラメーターは OpenAI インターフェイスのパラメーターと整合しています。以下のパラメーターがサポートされています:
パラメーター | 型 | デフォルト値 | 説明 |
model | 文字列 | - | 使用するモデルを指定します。利用可能なモデルの一覧については、「モデルの可用性」をご参照ください。 |
messages | 配列 | - | ユーザーとモデル間の会話履歴です。配列内の各要素は |
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~ n の値を大きくしても入力トークンの消費量は増加しませんが、出力トークンの消費量は増加します。 現在、このパラメーターは qwen-plus モデルでのみサポートされています。tools パラメーターが渡された場合、値は 1 である必要があります。 |
max_tokens(任意) | 整数 | - | モデルが生成できる最大トークン数です。たとえば、モデルの最大出力長が 2,000 トークンの場合、このパラメーターを 1,000 に設定することで、過度に長いコンテンツの生成を防ぐことができます。 モデルによって出力制限は異なります。詳細については、モデル一覧をご参照ください。 |
seed(任意) | 整数 | - | 生成時に使用される乱数のシードで、生成されるコンテンツのランダム性を制御します。seed パラメーターは符号なし 64 ビット整数をサポートします。 |
stream(任意) | ブール値 | False | ストリーミング出力を使用するかどうかを指定します。結果をストリーミングする場合、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
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 - エンジンが現在過負荷状態です。しばらくしてから再度お試しください | サーバーが過負荷状態です。しばらくしてから再度お試しください。 |