Vertex AI の多くのオープンモデルは、Vertex AI Chat Completions API を使用して、API としてフルマネージド モデルとサーバーレス モデルを提供します。これらのモデルでは、インフラストラクチャのプロビジョニングや管理は必要ありません。
レスポンスをストリーミングして、エンドユーザーのレイテンシを軽減できます。回答をストリーミングする際には、サーバー送信イベント(SSE)を使用して回答を段階的にストリーミングします。
このページでは、OpenAI Chat Completions API をサポートするオープンモデルに対してストリーミング呼び出しと非ストリーミング呼び出しを行う方法について説明します。Llama 固有の考慮事項については、Llama の予測をリクエストするをご覧ください。
始める前に
Vertex AI でオープンモデルを使用するには、次の操作を行う必要があります。Vertex AI を使用するには、Vertex AI API(aiplatform.googleapis.com
)を有効にする必要があります。既存のプロジェクトで Vertex AI API が有効になっている場合は、新しいプロジェクトを作成する代わりに、そのプロジェクトを使用できます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Vertex AI API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - 使用するモデルの Model Garden モデルカードに移動し、[有効にする] をクリックして、プロジェクトで使用できるようにモデルを有効にします。
- MODEL: 使用するモデル名(
deepseek-ai/deepseek-v3.1-maas
など)。 - ROLE: メッセージに関連付けられたロール。
user
またはassistant
を指定できます。最初のメッセージでは、user
ロールを使用する必要があります。Claude モデルはuser
とassistant
のターンを交互に操作します。最後のメッセージがassistant
ロールを使用する場合、そのメッセージのコンテンツの直後にレスポンス コンテンツが続きます。これを使用して、モデルのレスポンスの一部を制限できます。 - CONTENT:
user
またはassistant
のメッセージの内容(テキストなど)。 - MAX_OUTPUT_TOKENS: レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。
レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。
- LOCATION: オープンモデルをサポートするリージョン。
- MODEL: 使用するモデル名(
deepseek-ai/deepseek-v2
など)。 - ROLE: メッセージに関連付けられたロール。
user
またはassistant
を指定できます。最初のメッセージでは、user
ロールを使用する必要があります。Claude モデルはuser
とassistant
のターンを交互に操作します。最後のメッセージがassistant
ロールを使用する場合、そのメッセージのコンテンツの直後にレスポンス コンテンツが続きます。これを使用して、モデルのレスポンスの一部を制限できます。 - CONTENT:
user
またはassistant
のメッセージの内容(テキストなど)。 - MAX_OUTPUT_TOKENS: レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。
レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。
- STREAM: レスポンスがストリーミングされるかどうかを指定するブール値。レスポンスのストリーミングを行うことで、エンドユーザーが認識するレイテンシを短縮できます。レスポンスをストリーミングする場合は
true
、すべてのレスポンスを一度に戻すにはfalse
に設定します。 - MODEL: 使用するモデル名(
deepseek-ai/deepseek-v3.1-maas
など)。 - ROLE: メッセージに関連付けられたロール。
user
またはassistant
を指定できます。最初のメッセージでは、user
ロールを使用する必要があります。Claude モデルはuser
とassistant
のターンを交互に操作します。最後のメッセージがassistant
ロールを使用する場合、そのメッセージのコンテンツの直後にレスポンス コンテンツが続きます。これを使用して、モデルのレスポンスの一部を制限できます。 - CONTENT:
user
またはassistant
のメッセージの内容(テキストなど)。 - MAX_OUTPUT_TOKENS: レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。
レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。
- LOCATION: オープンモデルをサポートするリージョン。
- MODEL: 使用するモデル名(
deepseek-ai/deepseek-v2
など)。 - ROLE: メッセージに関連付けられたロール。
user
またはassistant
を指定できます。最初のメッセージでは、user
ロールを使用する必要があります。Claude モデルはuser
とassistant
のターンを交互に操作します。最後のメッセージがassistant
ロールを使用する場合、そのメッセージのコンテンツの直後にレスポンス コンテンツが続きます。これを使用して、モデルのレスポンスの一部を制限できます。 - CONTENT:
user
またはassistant
のメッセージの内容(テキストなど)。 - MAX_OUTPUT_TOKENS: レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。
レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。
- STREAM: レスポンスがストリーミングされるかどうかを指定するブール値。レスポンスのストリーミングを行うことで、エンドユーザーが認識するレイテンシを短縮できます。レスポンスをストリーミングする場合は
true
、すべてのレスポンスを一度に戻すにはfalse
に設定します。
オープンモデルにストリーミング呼び出しを行う
次のサンプルでは、オープンモデルに対してストリーミング呼び出しを行います。
Python
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Python の設定手順を完了してください。詳細については、Vertex AI Python API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを実行する前に、必ず OPENAI_BASE_URL
環境変数を設定してください。詳細については、認証と認証情報をご覧ください。
from openai import OpenAI client = OpenAI() stream = client.chat.completions.create( model="MODEL", messages=[{"role": "ROLE", "content": "CONTENT"}], max_tokens=MAX_OUTPUT_TOKENS, stream=True, ) for chunk in stream: print(chunk.choices[0].delta.content or "", end="")
REST
環境をセットアップしたら、REST を使用してテキスト プロンプトをテストできます。次のサンプルは、パブリッシャー モデルのエンドポイントにリクエストを送信します。
リクエストのデータを使用する前に、次のように置き換えます。
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions
リクエストの本文(JSON):
{ "model": "MODEL", "messages": [ { "role": "ROLE", "content": "CONTENT" } ], "max_tokens": MAX_OUTPUT_TOKENS, "stream": true }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"
PowerShell
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
オープンモデルに非ストリーミング呼び出しを行う
次のサンプルでは、オープンモデルに対して非ストリーミング呼び出しを行います。
Python
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Python の設定手順を完了してください。詳細については、Vertex AI Python API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを実行する前に、必ず OPENAI_BASE_URL
環境変数を設定してください。詳細については、認証と認証情報をご覧ください。
from openai import OpenAI client = OpenAI() completion = client.chat.completions.create( model="MODEL", messages=[{"role": "ROLE", "content": "CONTENT"}], max_tokens=MAX_OUTPUT_TOKENS, stream=False, ) print(completion.choices[0].message)
REST
環境をセットアップしたら、REST を使用してテキスト プロンプトをテストできます。次のサンプルは、パブリッシャー モデルのエンドポイントにリクエストを送信します。
リクエストのデータを使用する前に、次のように置き換えます。
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions
リクエストの本文(JSON):
{ "model": "MODEL", "messages": [ { "role": "ROLE", "content": "CONTENT" } ], "max_tokens": MAX_OUTPUT_TOKENS, "stream": false }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"
PowerShell
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
リージョナル エンドポイントとグローバル エンドポイント
リージョナル エンドポイントの場合、リクエストは指定されたリージョンから処理されます。データ所在地に関する要件がある場合や、モデルがグローバル エンドポイントをサポートしていない場合は、リージョナル エンドポイントを使用します。
グローバル エンドポイントを使用すると、Google は使用モデルでサポートされている任意のリージョンからリクエストを処理して提供できます。これにより、レイテンシが増加する場合があります。グローバル エンドポイントは、全体的な可用性を高め、エラーを減らすのに役立ちます。
グローバル エンドポイントを使用する場合、リージョナル エンドポイントとの料金差はありません。ただし、グローバル エンドポイントの割り当てとサポートされているモデルの機能は、リージョナル エンドポイントと異なる場合があります。詳細については、関連するサードパーティ モデルのページをご覧ください。
グローバル エンドポイントを指定する
グローバル エンドポイントを使用するには、リージョンを global
に設定します。
たとえば、curl コマンドのリクエスト URL は次の形式を使用します。
https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/endpoints/openapi
Vertex AI SDK の場合、リージョナル エンドポイントがデフォルトです。グローバル エンドポイントを使用するには、リージョンを GLOBAL
に設定します。
グローバル API エンドポイントの使用を制限する
リージョナル エンドポイントの使用を強制するには、constraints/gcp.restrictEndpointUsage
組織のポリシーの制約を使用して、グローバル API エンドポイントへのリクエストをブロックします。詳細については、エンドポイントの使用の制限をご覧ください。