Compatibilité avec OpenAI

Les modèles Gemini sont accessibles à l'aide des bibliothèques OpenAI (Python, TypeScript et JavaScript), ainsi que de l'API REST. Seule l'authentification Google Cloud est compatible avec la bibliothèque OpenAI dans Gemini Enterprise Agent Platform. Si vous n'utilisez pas encore les bibliothèques OpenAI, appelez directement l'API Gemini. Si vous utilisez des bibliothèques OpenAI et que vous souhaitez migrer vers les SDK Agent Platform, consultez Migrer du SDK OpenAI vers le SDK Google Gen AI.

Python

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 = "global"

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())

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

response = client.chat.completions.create(
  model="google/gemini-3.5-flash",
  messages=[
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Explain to me how AI works"}
  ]
)

print(response.choices[0].message)

Notez les différences suivantes par rapport à la configuration standard du client OpenAI :

  • api_key=credentials.token : utilise un jeton d'accès OAuth obtenu à partir des identifiants par défaut de l'applicationGoogle Cloud .

  • base_url : indique à la bibliothèque OpenAI d'envoyer les requêtes au point de terminaison compatible avec OpenAI de la plate-forme d'agents au lieu de l'URL par défaut.

  • model="google/gemini-3.5-flash" : sélectionne un modèle Gemini compatible hébergé sur Agent Platform.

Raisonnement

Les modèles Gemini 3 génèrent un processus de raisonnement interne avant de renvoyer une réponse, ce qui améliore les performances pour les tâches complexes en plusieurs étapes. Dans l'API Gemini, le paramètre thinking_level contrôle la profondeur du raisonnement sur différents niveaux discrets (MINIMAL, LOW, MEDIUM et HIGH).

Dans l'API Chat Completions compatible avec OpenAI, vous contrôlez la profondeur du raisonnement avec le paramètre reasoning_effort ("minimal", "low", "medium" ou "high"), qui correspond au paramètre thinking_level pour les modèles Gemini 3.

Si vous omettez reasoning_effort, la configuration de réflexion par défaut du modèle sera utilisée.

Pour contrôler directement les paramètres de configuration de la réflexion à partir de l'API compatible avec OpenAI, utilisez extra_body.google.thinking_config.

Python

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 = "global"

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())

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

response = client.chat.completions.create(
  model="google/gemini-3.5-flash",
  reasoning_effort="low",
  messages=[
      {"role": "system", "content": "You are a helpful assistant."},
      {
          "role": "user",
          "content": "Explain to me how AI works"
      }
  ]
)
print(response.choices[0].message)

Streaming

L'API Gemini est compatible avec les réponses en flux continu.

Python

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 = "global"

credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())

client = openai.OpenAI(
  base_url=f"https://aiplatform.googleapis.com/v1/projects/{project_id}/locations/{location}/endpoints/openapi",
  api_key=credentials.token
)
response = client.chat.completions.create(
  model="google/gemini-3.5-flash",
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello!"}
  ],
  stream=True
)

for chunk in response:
  print(chunk.choices[0].delta)

Appel de fonction

L'appel de fonction facilite l'obtention de données structurées à partir de modèles génératifs. Il est compatible avec l'API Gemini.

Python

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 = "global"

credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())

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

tools = [
  {
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "Get the weather in a given location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. Chicago, IL",
          },
          "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
        },
        "required": ["location"],
      },
    }
  }
]

messages = [{"role": "user", "content": "What's the weather like in Chicago today?"}]
response = client.chat.completions.create(
  model="google/gemini-3.5-flash",
  messages=messages,
  tools=tools,
  tool_choice="auto"
)

print(response)

Compréhension des images

Les modèles Gemini sont multimodaux par nature et sont compatibles avec de nombreuses tâches de vision courantes.

Python

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

import base64
from openai import OpenAI

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

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())

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

# Function to encode the image
def encode_image(image_path):
  with open(image_path, "rb") as image_file:
    return base64.b64encode(image_file.read()).decode('utf-8')

# Getting the base64 string
# base64_image = encode_image("Path/to/image.jpeg")

response = client.chat.completions.create(
  model="google/gemini-3.5-flash",
  messages=[
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "What is in this image?",
        },
        {
          "type": "image_url",
          "image_url": {
            "url":  f"data:image/jpeg;base64,{base64_image}"
          },
        },
      ],
    }
  ],
)

print(response.choices[0])

Générer une image

REST

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "choices": [{
    "finish_reason": "stop",
    "index": 0,
    "image": {
      "data":"IMAGE_DATA",
      "extra_content": {
        "google": {
          "mime_type":"image/png"
        }
      }
    },
    "content":"Here is an image of a banana: ",
    "role":"assistant"
  }],
  "created":1757099999,
  "id":"sample_response_id",
  "model":"google/gemini-3.1-flash-image",
  "object":"chat.completion",
  "system_fingerprint":"",
  "usage": {
    "completion_tokens":1299,
    "prompt_tokens":7,
    "total_tokens":1306
  }
}

Compréhension audio

L'exemple suivant montre comment analyser une entrée audio :

Python

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

import base64
from openai import OpenAI

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

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())

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

with open("/path/to/your/audio/file.wav", "rb") as audio_file:
  base64_audio = base64.b64encode(audio_file.read()).decode('utf-8')

response = client.chat.completions.create(
  model="google/gemini-3.5-flash",
  messages=[
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Transcribe this audio",
        },
        {
              "type": "input_audio",
              "input_audio": {
                "data": base64_audio,
                "format": "wav"
          }
        }
      ],
    }
  ],
)

print(response.choices[0].message.content)

Sortie structurée

Les modèles Gemini peuvent générer des objets JSON dans n'importe quelle structure que vous définissez.

Python

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

from pydantic import BaseModel
from openai import OpenAI

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

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())

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

class CalendarEvent(BaseModel):
  name: str
  date: str
  participants: list[str]

completion = client.beta.chat.completions.parse(
  model="google/gemini-3.5-flash",
  messages=[
      {"role": "system", "content": "Extract the event information."},
      {"role": "user", "content": "John and Susan are going to an AI conference on Friday."},
  ],
  response_format=CalendarEvent,
)

print(completion.choices[0].message.parsed)

Limites actuelles

Tenez compte de la limitation suivante lorsque vous utilisez l'API compatible avec OpenAI :

  • Par défaut, les jetons d'accès sont valides pendant une heure. Une fois qu'ils ont expiré, ils doivent être actualisés. Pour en savoir plus, consultez Actualiser vos identifiants.

Étapes suivantes