Autentikasikan

Untuk menggunakan library Python OpenAI dengan Vertex AI, Anda harus melakukan autentikasi menggunakan kredensial Google dan mengonfigurasi klien untuk menggunakan endpoint Vertex AI. Dokumen ini menunjukkan cara menyiapkan lingkungan dan melakukan autentikasi menggunakan dua metode yang berbeda.

Sebelum memulai

Prasyarat

1. Menginstal SDK

Instal OpenAI dan Google Auth SDK:

pip install openai google-auth requests

2. Menyiapkan autentikasi

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi (ADC). Untuk informasi selengkapnya, lihat Menyiapkan Kredensial Default Aplikasi.

3. Mengidentifikasi endpoint

Endpoint Anda bergantung pada jenis model yang Anda panggil:

  • Model Gemini: Gunakan openapi sebagai ID endpoint.
  • Model yang di-deploy sendiri: Model tertentu di Model Garden dan model Hugging Face yang didukung harus di-deploy terlebih dahulu sebelum dapat menayangkan permintaan. Saat memanggil model ini, Anda harus menentukan ID endpoint unik dari deployment Anda.

Metode autentikasi

Anda dapat mengautentikasi dengan mengonfigurasi objek klien secara langsung dalam kode atau dengan menetapkan variabel lingkungan. Alur kerja berikut menguraikan prosesnya.

Diagram Alur

Pilih metode yang paling sesuai dengan kasus penggunaan Anda.

Metode Kelebihan Kekurangan Paling Cocok untuk
Penyiapan Klien Terprogram dan fleksibel. Memungkinkan pengelolaan kredensial dinamis dalam aplikasi. Memerlukan lebih banyak kode untuk mengelola kredensial dan endpoint secara langsung. Aplikasi yang perlu mengelola beberapa klien atau memuat ulang kredensial secara dinamis.
Variabel Lingkungan Penyiapan sederhana yang memisahkan konfigurasi dari kode. Ideal untuk pengembangan dan pengujian lokal. Kurang aman jika tidak dikelola dengan benar. Kurang fleksibel untuk perubahan kredensial dinamis. Panduan memulai, pengembangan lokal, dan deployment dalam container dengan variabel lingkungan standar.

Penyiapan klien

Anda dapat mendapatkan kredensial Google secara terprogram dan mengonfigurasi klien OpenAI dalam kode Python. Secara default, masa berlaku token akses akan berakhir setelah satu jam. Untuk aplikasi yang berjalan lama, lihat cara memuat ulang kredensial.

Melihat kode Python untuk penyiapan klien

import openai

from google.auth import default
import google.auth.transport.requests

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())
# Note: the credential lives for 1 hour by default (https://cloud.google.com/docs/authentication/token-types#at-lifetime); after expiration, it must be refreshed.

##############################
# Choose one of the following:
##############################

# If you are calling a Gemini model, set the ENDPOINT_ID variable to use openapi.
ENDPOINT_ID = "openapi"

# If you are calling a self-deployed model from Model Garden, set the
# ENDPOINT_ID variable and set the client's base URL to use your endpoint.
# ENDPOINT_ID = "YOUR_ENDPOINT_ID"

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1/projects/{project_id}/locations/{location}/endpoints/{ENDPOINT_ID}",
    api_key=credentials.token,
)
    

Variabel lingkungan

Anda dapat menggunakan Google Cloud CLI untuk mendapatkan token akses. Library OpenAI secara otomatis membaca variabel lingkungan OPENAI_API_KEY dan OPENAI_BASE_URL untuk mengonfigurasi klien default.

  1. Tetapkan variabel lingkungan umum:

    export PROJECT_ID=PROJECT_ID
    export LOCATION=LOCATION
    export OPENAI_API_KEY="$(gcloud auth application-default print-access-token)"
            
  2. Tetapkan URL dasar untuk jenis model Anda:

    • Untuk model Gemini:

      export MODEL_ID=MODEL_ID
      export OPENAI_BASE_URL="https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/openapi"
                  
    • Untuk model yang di-deploy sendiri dari Model Garden:

      export ENDPOINT=ENDPOINT_ID
      export OPENAI_BASE_URL="https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT}"
                  
  3. Lakukan inisialisasi klien:

    Klien menggunakan variabel lingkungan yang Anda tetapkan.

    client = openai.OpenAI()
            

Secara default, masa berlaku token akses akan berakhir setelah satu jam. Anda harus memuat ulang token secara berkala dan memperbarui variabel lingkungan OPENAI_API_KEY.

Memuat ulang kredensial

Masa berlaku token akses yang diperoleh dari Kredensial Default Aplikasi akan berakhir setelah satu jam. Untuk layanan atau aplikasi yang berjalan lama, Anda harus menerapkan mekanisme untuk memuat ulang token. Contoh berikut menunjukkan class wrapper yang otomatis memuat ulang token saat masa berlakunya habis.

Melihat contoh class pembaruan kredensial

from typing import Any

import google.auth
import google.auth.transport.requests
import openai


class OpenAICredentialsRefresher:
    def __init__(self, **kwargs: Any) -> None:
        # Set a placeholder key here
        self.client = openai.OpenAI(**kwargs, api_key="PLACEHOLDER")
        self.creds, self.project = google.auth.default(
            scopes=["https://www.googleapis.com/auth/cloud-platform"]
        )

    def __getattr__(self, name: str) -> Any:
        if not self.creds.valid:
            self.creds.refresh(google.auth.transport.requests.Request())

            if not self.creds.valid:
                raise RuntimeError("Unable to refresh auth")

            self.client.api_key = self.creds.token
        return getattr(self.client, name)



# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

client = OpenAICredentialsRefresher(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1/projects/{project_id}/locations/{location}/endpoints/openapi",
)

response = client.chat.completions.create(
    model="google/gemini-2.0-flash-001",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
)

print(response)
    

Langkah berikutnya