OAuth による認証のクイックスタート

PaLM API を使用すると、独自のデータでモデルをチューニングできます。データはユーザーのデータと調整されたモデルであるため、API キーよりも厳密なアクセス制御が必要です。

このクイックスタートでは、テスト環境に適した簡素化された認証方法を使用します。本番環境では、アプリに適したアクセス認証情報を選択する前に、認証と認可についてご確認ください。

目標

  • OAuth 用にクラウド プロジェクトを設定する
  • application-default-credentials を設定する
  • gcloud auth を使用する代わりにプログラムで認証情報を管理する

前提条件

このクイックスタートを実行するには、次のものが必要です。

クラウド プロジェクトを設定する

このクイックスタートを完了するには、まず Cloud プロジェクトを設定する必要があります。

1. API を有効にする

Google API を使用する前に、Google Cloud プロジェクトで API を有効にする必要があります。

  • Google Cloud コンソールで、Google Generative Language API を有効にします。

    API を有効にする

次に、プロジェクトの OAuth 同意画面を設定し、ご自身をテストユーザーとして追加します。Cloud プロジェクトでこのステップをすでに完了している場合は、次のセクションに進みます。

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [OAuth 同意画面] に移動します。

    OAuth 同意画面に移動

  2. アプリのユーザータイプに [外部] を選択し、[作成] をクリックします。

  3. アプリ登録フォームに入力(ほとんどのフィールドは空白のままにできます)を行い、[保存して次へ] をクリックします。

  4. 現時点では、スコープの追加をスキップして、[保存して次へ] をクリックします。今後、Google Workspace 組織の外部で使用するアプリを作成する場合は、アプリに必要な認可スコープを追加して確認する必要があります。

  5. テストユーザーを追加します。

    1. [テストユーザー] で [ユーザーを追加] をクリックします。
    2. メールアドレスとその他の承認済みのテストユーザーを入力し、[保存して次へ] をクリックします。
  6. アプリ登録の概要を確認します。変更するには、[編集] をクリックします。アプリの登録に問題がなければ、[Back to Dashboard] をクリックします。

3. デスクトップ アプリケーションの認証情報を承認する

エンドユーザーとして認証を行い、アプリ内でユーザーデータにアクセスするには、1 つ以上の OAuth 2.0 クライアント ID を作成する必要があります。クライアント ID は、Google の OAuth サーバーで個々のアプリを識別するために使用します。アプリが複数のプラットフォームで実行される場合は、プラットフォームごとに個別のクライアント ID を作成する必要があります。

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] > [OAuth クライアント ID] をクリックします。

  3. [アプリケーションの種類] > [デスクトップ アプリ] をクリックします。

  4. [名前] フィールドに、認証情報の名前を入力します。この名前は Google Cloud コンソールにのみ表示されます。

  5. [作成] をクリックします。OAuth クライアントの作成画面が表示され、新しいクライアント ID とクライアント シークレットが表示されます。

  6. [OK] をクリックします。新しく作成された認証情報が [OAuth 2.0 クライアント ID] に表示されます。

  7. ダウンロード ボタンをクリックして JSON ファイルを保存します。client_secret_<identifier>.json という名前で保存され、名前を client_secret.json に変更して作業ディレクトリに移動します。

アプリケーションのデフォルト認証情報を設定する

client_secret.json ファイルを使用可能な認証情報に変換するには、その場所を gcloud auth application-default login コマンドの --client-id-file 引数に渡します。

gcloud auth application-default login \
    --client-id-file=client_secret.json \
    --scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.tuning'

このチュートリアルの簡略化されたプロジェクト設定では、「Google はこのアプリを検証していません」ダイアログをトリガーします。正常です。[続行] を選択します。

これにより、生成されたトークンが既知の場所に配置され、gcloud またはクライアント ライブラリからアクセスできるようになります。

gcloud auth application-default login 
--no-browser --client-id-file=client_secret.json
--scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.tuning'

アプリケーションのデフォルト認証情報(ACD)を設定すると、ほとんどの言語のクライアント ライブラリで必要な認証情報は最小限に抑えられるか、何も起こりません。

Curl

これが機能していることをテストする最も簡単な方法は、curl で残りの API にアクセスすることです。

access_token=$(gcloud auth application-default print-access-token)
project_id=<MY PROJECT ID>

curl -X GET https://generativelanguage.googleapis.com/v1beta3/models \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}" | grep '"name"'
"name": "models/chat-bison-001",
"name": "models/text-bison-001",
"name": "models/embedding-gecko-001",

Python

Python では、クライアント ライブラリによって自動的に検索されるはずです。

pip install google-generativeai

テストの最小スクリプトは次のようになります。

import google.generativeai as genai

print('Available base models:', [m.name for m in genai.list_models()])
print('My tuned models:', [m.name for m in genai.list_tuned_models()])

想定される出力は次のとおりです。

Available base models: ['models/chat-bison-001', 'models/text-bison-001', 'models/embedding-gecko-001']
My tuned models: []

Node.js

これらの認証情報を Node.js クライアント ライブラリで使用するには、GOOGLE_APPLICATION_CREDENTIALS 環境変数を設定します。

export GOOGLE_APPLICATION_CREDENTIALS='<PATH_TO>/application_default_credentials.json'

クライアント ライブラリをインストールする

npm install @google-ai/generativelanguage

最小限のスクリプトを作成します。

const { ModelServiceClient } =
  require("@google-ai/generativelanguage").v1beta3;

const MODEL_NAME = "models/text-bison-001";

const client = new ModelServiceClient({});

client
  .listModels({})
  .then((result) => {
    result = result[0]
    for (let i = 0; i < result.length; i++) {
      console.log(result[i].name);
    }
  });

出力は次のようになります。

models/chat-bison-001
models/text-bison-001
models/embedding-gecko-001

次のステップ

うまくいったら、自分でモデルをチューニングしてみましょう。チューニングのスタートガイドをお試しください。

認証情報を自分で管理する [Python]

多くの場合、クライアント ID(client_secret.json)からアクセス トークンを作成するための gcloud コマンドは使用できません。Google は、アプリ内でこのプロセスを管理できるように、さまざまな言語のライブラリを用意しています。このセクションでは、このプロセスを Python で示します。他の言語におけるこの種の手順の同等の例が、drive API ドキュメントにあります。

1. 必要なライブラリのインストール

Python 用 Google クライアント ライブラリと PaLM クライアント ライブラリをインストールします。

pip install --upgrade -q google-api-python-client google-auth-httplib2 google-auth-oauthlib

pip install google-generativeai

2. 認証情報マネージャーを作成する

作業ディレクトリに load_creds.py という名前のファイルを作成します。まず次のコードで、client_secret.jsongenai.configure で使用できるトークンに変換します。

import os.path

from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow

SCOPES = ['https://www.googleapis.com/auth/generative-language.tuning']

def load_creds():
    """Converts `oauth-client-id.json` to a credential object.

    This function caches the generated tokens to minimize the use of the
    consent screen.
    """
    creds = None
    # The file token.json stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'oauth-client-id.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.json', 'w') as token:
            token.write(creds.to_json())
    return creds

token.json ファイルをキャッシュに保存して、後で再利用したり、有効期限が切れた場合に更新したりする場合に、認証画面をクリックする回数を最小限に抑えるため。

3. プログラムを作成する

次に、script.py を作成します。

import pprint
import google.generativeai as genai
from load_creds import load_creds

creds = load_creds()

genai.configure(credentials=creds)

print()
print('Available base models:', [m.name for m in genai.list_tuned_models()])
print('My tuned models:', [m.name for m in genai.list_tuned_models()])

4. プログラムを実行する

作業ディレクトリでサンプルを実行します。

python script.py

初めてスクリプトを実行すると、ブラウザ ウィンドウが開き、アクセスの承認を求められます。

  1. Google アカウントにまだログインしていない場合は、ログインするよう求められます。複数のアカウントにログインしている場合は、プロジェクトを構成する際に「テスト アカウント」として設定しているアカウントを必ず選択してください。

  2. 認可情報はファイル システムに保存されるため、サンプルコードを次回実行したときに承認を求められません。

これで認証の設定が完了しました。