Vertex AI에서 OpenAI Python 라이브러리를 사용하려면 Google 사용자 인증 정보를 사용하여 인증하고 클라이언트에서 Vertex AI 엔드포인트를 사용하도록 구성해야 합니다. 이 문서에서는 두 가지 방법을 사용하여 환경을 설정하고 인증하는 방법을 설명합니다.
시작하기 전에
기본 요건
1. SDK 설치
OpenAI 및 Google Auth SDK를 설치합니다.
pipinstallopenaigoogle-authrequests
2. 인증 설정
Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보(ADC)를 설정합니다. 자세한 내용은 애플리케이션 기본 사용자 인증 정보 설정을 참조하세요.
3. 엔드포인트 식별
엔드포인트는 호출하는 모델 유형에 따라 다릅니다.
Gemini 모델:openapi를 엔드포인트 ID로 사용합니다.
자체 배포 모델: Model Garden의 특정 모델과 지원되는 Hugging Face 모델에서 요청을 처리하려면 먼저 이러한 모델을 배포해야 합니다. 이러한 모델을 호출할 때는 배포의 고유한 엔드포인트 ID를 지정해야 합니다.
인증 방식
코드에서 클라이언트 객체를 직접 구성하거나 환경 변수를 설정하여 인증할 수 있습니다. 다음 워크플로는 이 프로세스를 간략하게 보여줍니다.
사용 사례에 가장 적합한 방법을 선택합니다.
메서드
장점
단점
권장
클라이언트 설정
프로그래매틱하고 유연합니다. 애플리케이션 내에서 동적 사용자 인증 정보 관리를 허용합니다.
사용자 인증 정보와 엔드포인트를 직접 관리하는 코드가 더 필요합니다.
여러 클라이언트를 관리하거나 인증 정보를 동적으로 새로고침해야 하는 애플리케이션
환경 변수
구성을 코드와 분리하는 간단한 설정입니다. 로컬 개발과 테스트에 적합합니다.
올바르게 관리하지 않으면 보안이 취약해집니다. 유연하게 동적 사용자 인증 정보를 변경하기가 어렵습니다.
애플리케이션 기본 사용자 인증 정보에서 가져온 액세스 토큰은 1시간 후에 만료됩니다. 장기 실행 서비스나 애플리케이션의 경우 토큰을 새로고침하는 메커니즘을 구현해야 합니다. 다음 예시에서는 토큰이 만료될 때 자동으로 토큰을 새로고침하는 래퍼 클래스를 보여줍니다.
사용자 인증 정보 새로고침 클래스 예시 보기
fromtypingimportAnyimportgoogle.authimportgoogle.auth.transport.requestsimportopenaiclassOpenAICredentialsRefresher:def__init__(self,**kwargs:Any)->None:# Set a placeholder key hereself.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:ifnotself.creds.valid:self.creds.refresh(google.auth.transport.requests.Request())ifnotself.creds.valid:raiseRuntimeError("Unable to refresh auth")self.client.api_key=self.creds.tokenreturngetattr(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)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["이해하기 어려움","hardToUnderstand","thumb-down"],["잘못된 정보 또는 샘플 코드","incorrectInformationOrSampleCode","thumb-down"],["필요한 정보/샘플이 없음","missingTheInformationSamplesINeed","thumb-down"],["번역 문제","translationIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-29(UTC)"],[],[],null,["# Authenticate\n\nTo use the OpenAI Python libraries, install the OpenAI SDK: \n\n pip install openai\n\nTo authenticate with the Chat Completions API, you can\neither modify your client setup or change your environment\nconfiguration to use Google authentication and a Vertex AI\nendpoint. Choose whichever method that's easier, and follow the steps for\nsetting up depending on whether you want to call Gemini models\nor self-deployed Model Garden models.\n\nCertain models in Model Garden and\n[supported Hugging Face models](/vertex-ai/generative-ai/docs/open-models/use-hugging-face-models)\nneed to be\n[deployed to a Vertex AI endpoint](/vertex-ai/docs/general/deployment)\nfirst before they can serve requests.\nWhen\ncalling these self-deployed models from the Chat Completions API, you need to\nspecify the endpoint ID. To list your\nexisting Vertex AI endpoints, use the\n[`gcloud ai endpoints list` command](/sdk/gcloud/reference/ai/endpoints/list). \n\n### Client setup\n\nTo programmatically get Google credentials in Python, you can use the\n`google-auth` Python SDK: \n\n pip install google-auth requests\n\n\u003cbr /\u003e\n\n### Python\n\n\nBefore trying this sample, follow the Python setup instructions in the\n[Vertex AI quickstart using\nclient libraries](/vertex-ai/docs/start/client-libraries).\n\n\nFor more information, see the\n[Vertex AI Python API\nreference documentation](/python/docs/reference/aiplatform/latest).\n\n\nTo authenticate to Vertex AI, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n import openai\n\n from google.auth import default\n import google.auth.transport.requests\n\n # TODO(developer): Update and un-comment below lines\n # project_id = \"PROJECT_ID\"\n # location = \"us-central1\"\n\n # Programmatically get an access token\n credentials, _ = default(scopes=[\"https://www.googleapis.com/auth/cloud-platform\"])\n credentials.refresh(google.auth.transport.requests.Request())\n # 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.\n\n ##############################\n # Choose one of the following:\n ##############################\n\n # If you are calling a Gemini model, set the ENDPOINT_ID variable to use openapi.\n ENDPOINT_ID = \"openapi\"\n\n # If you are calling a self-deployed model from Model Garden, set the\n # ENDPOINT_ID variable and set the client's base URL to use your endpoint.\n # ENDPOINT_ID = \"YOUR_ENDPOINT_ID\"\n\n # OpenAI Client\n client = openai.OpenAI(\n base_url=f\"https://{location}-aiplatform.googleapis.com/v1/projects/{project_id}/locations/{location}/endpoints/{ENDPOINT_ID}\",\n api_key=credentials.token,\n )\n\nBy default, access tokens last for 1 hour. You can\n[extend the life of your access token](/docs/authentication/token-types#at-lifetime)\nor periodically refresh your token and update the `openai.api_key` variable.\n\n### Environment variables\n\n[Install](/sdk/docs/install-sdk) the Google Cloud CLI. The OpenAI library can\nread the `OPENAI_API_KEY` and `OPENAI_BASE_URL` environment\nvariables to change the authentication and endpoint in their default client.\nSet the following variables: \n\n $ export PROJECT_ID=\u003cvar translate=\"no\"\u003ePROJECT_ID\u003c/var\u003e\n $ export LOCATION=\u003cvar translate=\"no\"\u003eLOCATION\u003c/var\u003e\n $ export OPENAI_API_KEY=\"$(gcloud auth application-default print-access-token)\"\n\nTo call a Gemini model, set the `MODEL_ID`\nvariable and use the `openapi` endpoint: \n\n $ export MODEL_ID=\u003cvar translate=\"no\"\u003eMODEL_ID\u003c/var\u003e\n $ export OPENAI_BASE_URL=\"https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/openapi\"\n\nTo call a self-deployed model from Model Garden, set the `ENDPOINT`\nvariable and use that in your URL instead: \n\n $ export ENDPOINT=\u003cvar translate=\"no\"\u003eENDPOINT_ID\u003c/var\u003e\n $ export OPENAI_BASE_URL=\"https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT}\"\n\nNext, initialize the client: \n\n client = openai.OpenAI()\n\nThe Gemini Chat Completions API uses OAuth to authenticate\nwith a\n[short-lived access token](/iam/docs/create-short-lived-credentials-direct#sa-credentials-oauth).\nBy default, access tokens last for 1 hour. You can\n[extend the life of your access token](/docs/authentication/token-types#at-lifetime)\nor periodically refresh your token and update the `OPENAI_API_KEY`\nenvironment variable.\n\nRefresh your credentials\n------------------------\n\nThe following example shows how to refresh your credentials automatically as\nneeded: \n\n### Python\n\n from typing import Any\n\n import google.auth\n import google.auth.transport.requests\n import openai\n\n\n class OpenAICredentialsRefresher:\n def __init__(self, **kwargs: Any) -\u003e None:\n # Set a placeholder key here\n self.client = openai.OpenAI(**kwargs, api_key=\"PLACEHOLDER\")\n self.creds, self.project = google.auth.default(\n scopes=[\"https://www.googleapis.com/auth/cloud-platform\"]\n )\n\n def __getattr__(self, name: str) -\u003e Any:\n if not self.creds.valid:\n self.creds.refresh(google.auth.transport.requests.Request())\n\n if not self.creds.valid:\n raise RuntimeError(\"Unable to refresh auth\")\n\n self.client.api_key = self.creds.token\n return getattr(self.client, name)\n\n\n\n # TODO(developer): Update and un-comment below lines\n # project_id = \"PROJECT_ID\"\n # location = \"us-central1\"\n\n client = OpenAICredentialsRefresher(\n base_url=f\"https://{location}-aiplatform.googleapis.com/v1/projects/{project_id}/locations/{location}/endpoints/openapi\",\n )\n\n response = client.chat.completions.create(\n model=\"google/gemini-2.0-flash-001\",\n messages=[{\"role\": \"user\", \"content\": \"Why is the sky blue?\"}],\n )\n\n print(response)\n\nWhat's next\n-----------\n\n- See examples of calling the [Chat Completions API](/vertex-ai/generative-ai/docs/migrate/openai/examples) with the OpenAI-compatible syntax.\n- See examples of calling the [Inference API](/vertex-ai/generative-ai/docs/model-reference/inference#examples) with the OpenAI-compatible syntax.\n- See examples of calling the [Function Calling API](/vertex-ai/generative-ai/docs/model-reference/function-calling#examples) with OpenAI-compatible syntax.\n- Learn more about the [Gemini API](/vertex-ai/generative-ai/docs/overview).\n- Learn more about [migrating from Azure OpenAI to the Gemini API](/vertex-ai/generative-ai/docs/migrate/migrate-from-azure-to-gemini)."]]