Complétion de code

Codey pour la saisie de code (code-gecko) est le nom du modèle qui accepte la saisie de code. Il s'agit d'un modèle de fondation qui génère du code basé sur le code en cours d'écriture. Codey pour la saisie de code complète le code récemment saisi par un utilisateur. Codey pour la complétion de code est compatible avec l'API de génération de code. Les API Codey appartiennent à la famille d'API PaLM.

Pour en savoir plus sur la création de requêtes pour la complétion de code, consultez la section Créer des requêtes pour la complétion de code.

Pour explorer ce modèle dans la console, consultez la fiche de modèle Codey pour la saisie de code dans Model Garden.
Accéder au Model Garden

Cas d'utilisation

Voici quelques cas d'utilisation courants de la complétion de code:

  • Écrire du code plus rapidement: utilisez le modèle code-gecko pour écrire du code plus rapidement en tirant parti du code suggéré.

  • Réduire les bugs de code: utilisez des suggestions de code correctes en termes de syntaxe afin d'éviter les erreurs. La saisie semi-automatique du code vous aide à minimiser le risque d'introduction accidentelle de bugs pouvant survenir lorsque vous écrivez rapidement du code.

Requête HTTP

POST https://us-central1-googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/code-gecko:predict

Versions de modèle

Pour utiliser la dernière version de modèle, spécifiez le nom du modèle sans numéro de version, par exemple code-gecko.

Pour utiliser une version de modèle stable, indiquez le numéro de version du modèle, par exemple code-gecko@002. Chaque version stable est disponible pendant six mois après la date de disponibilité de la version stable ultérieure.

Le tableau suivant contient les versions de modèle stable disponibles:

modèle code-gecko Date de disponibilité Date d'arrêt
code-gecko@002 6 décembre 2023 9 octobre 2024

Pour en savoir plus, consultez la page Versions et cycle de vie des modèles.

Corps de la requête

{
  "instances":[
    {
      "prefix": string,
      "suffix": string
    }
  ],
  "parameters": {
    "temperature": number,
    "maxOutputTokens": integer,
    "candidateCount": integer,
    "stopSequences": [ string ],
    "logprobs": integer,
    "presencePenalty": float,
    "frequencyPenalty": float,
    "echo": boolean,
    "seed": integer
  }
}

Voici les paramètres du modèle de complétion de code nommé code-gecko. Le modèle code-gecko est l'un des modèles Codey. Vous pouvez utiliser ces paramètres pour optimiser votre requête de complétion de code. Pour en savoir plus, consultez les pages Présentation des modèles de code et Créer des requêtes pour la complétion de code.

Paramètre Description Valeurs acceptables

prefix

(obligatoire)

Pour les modèles de code, prefix représente le début d'un code de programmation significatif ou une requête en langage naturel décrivant le code à générer. Le modèle tente de remplir le code entre le prefix et le suffix. Une chaîne de texte valide

suffix

(facultatif)

Pour la complétion de code, suffix représente la fin d'une portion de code de programmation pertinent. Le modèle tente de remplir le code entre le prefix et le suffix. Une chaîne de texte valide

temperature

La température est utilisée pour l'échantillonnage pendant la génération des réponses. La température permet de contrôler le degré de hasard dans la sélection des jetons. Des températures inférieures sont idéales pour les requêtes qui nécessitent une réponse moins ouverte ou créative, tandis que des températures plus élevées peuvent entraîner des résultats plus diversifiés ou plus créatifs. Une température de 0 signifie que les jetons de probabilité les plus élevés sont toujours sélectionnés. Dans ce cas, les réponses pour une requête donnée sont principalement déterministes, mais une petite quantité de variation est toujours possible.

0.0–1.0

Default: 0.2

maxOutputTokens

Nombre maximal de jetons pouvant être générés dans la réponse. Un jeton correspond environ à quatre caractères. 100 jetons correspondent à environ 60-80 mots.

Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses potentiellement plus longues.

1-64

Default: 64

candidateCount

(facultatif)

Nombre de variantes de réponse à renvoyer. Pour chaque requête, vous êtes facturé pour les jetons de sortie de tous les candidats, mais vous ne payez qu'une seule fois pour les jetons d'entrée.

La spécification de plusieurs candidats est une fonctionnalité bêta qui fonctionne avec generateContent (streamGenerateContent n'est pas disponible). Les modèles suivants sont compatibles :

  • Gemini 1.5 Flash : 1-8 (par défaut : 1)
  • Gemini 1.5 Pro : 1-8 (par défaut : 1)

1-4

Default: 1

(facultatif)

stopSequences

(facultatif)

Spécifie une liste de chaînes qui indiquent au modèle d'arrêter de générer du texte si l'une des chaînes est détectée dans la réponse. Si une chaîne apparaît plusieurs fois dans la réponse, celle-ci effectue une troncation lors de la première rencontre. Les chaînes sont sensibles à la casse.

Par exemple, si la réponse suivante est renvoyée lorsque stopSequences n'est pas spécifié :

public static string reverse(string myString)

La réponse renvoyée avec stopSequences défini sur ["Str", "reverse"] est alors la suivante :

public static string
Une liste de chaînes

logprobs

(facultatif)

Renvoie les principaux jetons candidats les plus probables logprobs avec leurs probabilités logarithmiques à chaque étape de génération. Les jetons choisis et leurs probabilités logarithmiques sont toujours renvoyés à chaque étape. Le jeton choisi peut se trouver ou non dans les principaux candidats les plus probables logprobs.

0-5

frequencyPenalty

(facultatif)

Les valeurs positives pénalisent les jetons qui apparaissent de manière répétée dans le texte généré, ce qui réduit la probabilité de répétition du contenu. Les valeurs acceptées sont -2.02.0.

Minimum value: -2.0 Maximum value: 2.0

presencePenalty

(facultatif)

Les valeurs positives pénalisent les jetons qui apparaissent déjà dans le texte généré, ce qui augmente la probabilité de générer un contenu plus diversifié. Les valeurs acceptées sont -2.02.0.

Minimum value: -2.0 Maximum value: 2.0

echo

(facultatif)

Si la valeur est "true", la requête est renvoyée dans le texte généré.

Optional

seed

Lorsque la graine est fixée à une valeur spécifique, le modèle s'efforce de fournir la même réponse pour les requêtes répétées. La sortie déterministe n'est pas garantie. De plus, la modification du modèle ou des paramètres, comme la température, peut entraîner des variations dans la réponse, même si vous utilisez la même valeur de graine. Par défaut, une valeur de graine aléatoire est utilisée.

Il s'agit d'une fonctionnalité en preview.

Optional

Exemple de requête

REST

Pour tester une requête de texte à l'aide de l'API Vertex AI, envoyez une requête POST au point de terminaison du modèle de l'éditeur.

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

  • PROJECT_ID : l'ID de votre projet.
  • Pour les autres champs, consultez le tableau Corps de la requête.

    Méthode HTTP et URL :

    POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/code-gecko:predict

    Corps JSON de la requête :

    {
      "instances": [
        { "prefix": "PREFIX",
          "suffix": "SUFFIX"}
      ],
      "parameters": {
        "temperature": TEMPERATURE,
        "maxOutputTokens": MAX_OUTPUT_TOKENS,
        "candidateCount": CANDIDATE_COUNT
      }
    }
    

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/code-gecko:predict"

    PowerShell

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    $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://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/code-gecko:predict" | Select-Object -Expand Content

    Vous devriez recevoir une réponse JSON semblable à l'exemple de réponse.

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.

from vertexai.language_models import CodeGenerationModel

parameters = {
    "temperature": 0.2,  # Temperature controls the degree of randomness in token selection.
    "max_output_tokens": 64,  # Token limit determines the maximum amount of text output.
}

code_completion_model = CodeGenerationModel.from_pretrained("code-gecko@001")
response = code_completion_model.predict(
    prefix="def reverse_string(s):", **parameters
)

print(f"Response from Model: {response.text}")

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js décrites dans le guide de démarrage rapide de Vertex AI à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Node.js.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

/**
 * TODO(developer): Update these variables before running the sample.
 */
const PROJECT_ID = process.env.CAIP_PROJECT_ID;
const LOCATION = 'us-central1';
const PUBLISHER = 'google';
const MODEL = 'code-gecko@001';
const aiplatform = require('@google-cloud/aiplatform');

// Imports the Google Cloud Prediction service client
const {PredictionServiceClient} = aiplatform.v1;

// Import the helper module for converting arbitrary protobuf.Value objects.
const {helpers} = aiplatform;

// Specifies the location of the api endpoint
const clientOptions = {
  apiEndpoint: 'us-central1-aiplatform.googleapis.com',
};

// Instantiates a client
const predictionServiceClient = new PredictionServiceClient(clientOptions);

async function callPredict() {
  // Configure the parent resource
  const endpoint = `projects/${PROJECT_ID}/locations/${LOCATION}/publishers/${PUBLISHER}/models/${MODEL}`;

  const prompt = {
    prefix:
      'def reverse_string(s): \
        return s[::-1] \
      #This function',
  };
  const instanceValue = helpers.toValue(prompt);
  const instances = [instanceValue];

  const parameter = {
    temperature: 0.2,
    maxOutputTokens: 64,
  };
  const parameters = helpers.toValue(parameter);

  const request = {
    endpoint,
    instances,
    parameters,
  };

  // Predict request
  const [response] = await predictionServiceClient.predict(request);
  console.log('Get code completion response');
  const predictions = response.predictions;
  console.log('\tPredictions :');
  for (const prediction of predictions) {
    console.log(`\t\tPrediction : ${JSON.stringify(prediction)}`);
  }
}

callPredict();

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java décrites dans le guide de démarrage rapide de Vertex AI à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Java.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


import com.google.cloud.aiplatform.v1.EndpointName;
import com.google.cloud.aiplatform.v1.PredictResponse;
import com.google.cloud.aiplatform.v1.PredictionServiceClient;
import com.google.cloud.aiplatform.v1.PredictionServiceSettings;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.Value;
import com.google.protobuf.util.JsonFormat;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class PredictCodeCompletionCommentSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace this variable before running the sample.
    String project = "YOUR_PROJECT_ID";

    // Learn how to create prompts to work with a code model to create code completion suggestions:
    // https://cloud.google.com/vertex-ai/docs/generative-ai/code/code-completion-prompts
    String instance =
        "{ \"prefix\": \""
            + "def reverse_string(s):\n"
            + "  return s[::-1]\n"
            + "#This function"
            + "\"}";
    String parameters = "{\n" + "  \"temperature\": 0.2,\n" + "  \"maxOutputTokens\": 64,\n" + "}";
    String location = "us-central1";
    String publisher = "google";
    String model = "code-gecko@001";

    predictComment(instance, parameters, project, location, publisher, model);
  }

  // Use Codey for Code Completion to complete a code comment
  public static void predictComment(
      String instance,
      String parameters,
      String project,
      String location,
      String publisher,
      String model)
      throws IOException {
    final String endpoint = String.format("%s-aiplatform.googleapis.com:443", location);
    PredictionServiceSettings predictionServiceSettings =
        PredictionServiceSettings.newBuilder().setEndpoint(endpoint).build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (PredictionServiceClient predictionServiceClient =
        PredictionServiceClient.create(predictionServiceSettings)) {
      final EndpointName endpointName =
          EndpointName.ofProjectLocationPublisherModelName(project, location, publisher, model);

      Value instanceValue = stringToValue(instance);
      List<Value> instances = new ArrayList<>();
      instances.add(instanceValue);

      Value parameterValue = stringToValue(parameters);

      PredictResponse predictResponse =
          predictionServiceClient.predict(endpointName, instances, parameterValue);
      System.out.println("Predict Response");
      System.out.println(predictResponse);
    }
  }

  // Convert a Json string to a protobuf.Value
  static Value stringToValue(String value) throws InvalidProtocolBufferException {
    Value.Builder builder = Value.newBuilder();
    JsonFormat.parser().merge(value, builder);
    return builder.build();
  }
}

Corps de la réponse

{
  "predictions": [
    {
      "content": string,
      "citationMetadata": {
        "citations": [
          {
            "startIndex": integer,
            "endIndex": integer,
            "url": string,
            "title": string,
            "license": string,
            "publicationDate": string
          }
        ]
      },
      "logprobs": {
        "tokenLogProbs": [ float ],
        "tokens": [ string ],
        "topLogProbs": [ { map<string, float> } ]
      },
      "safetyAttributes":{
        "categories": [ string ],
        "blocked": boolean,
        "scores": [ float ],
        "errors": [ int ]
      },
      "score": float
    }
  ]
}
Élément de réponse Description
blocked Une option boolean associée à un attribut de sécurité qui indique si l'entrée ou la sortie du modèle a été bloquée. Si la valeur blocked est définie sur true, le champ errors de la réponse contient un ou plusieurs codes d'erreur. Si la valeur blocked est définie sur false, la réponse n'inclut pas le champ errors.
categories Liste des noms de catégories d'attributs de sécurité associés au contenu généré. L'ordre des scores dans le paramètre scores correspond à l'ordre des catégories. Par exemple, le premier score du paramètre scores indique la probabilité que la réponse enfreint la première catégorie de la liste categories.
citationMetadata Élément contenant un tableau de citations.
citations Tableau de citations. Chaque citation contient ses métadonnées.
content Résultat généré par le modèle à l'aide du texte d'entrée
endIndex Entier qui spécifie l'emplacement de la fin de la citation dans le fichier content.
errors Un tableau de codes d'erreur. Le champ de réponse errors n'est inclus dans la réponse que lorsque le champ blocked de la réponse est défini sur true. Pour en savoir plus sur les codes d'erreur, consultez la page Erreurs de sécurité.
license Licence associée à une citation.
publicationDate Date à laquelle une citation a été publiée. Ses formats valides sont YYYY, YYYY-MM et YYYY-MM-DD.
score Une valeur float inférieure à zéro. Plus la valeur de score est élevée, plus le modèle a de confiance dans sa réponse.
startIndex Entier spécifiant l'emplacement du début d'une citation dans le contenu content.
title Titre de la source d'une citation. Il peut s'agir, par exemple, du titre d'un article d'actualité ou d'un livre.
url URL de la source d'une citation. Une source d'URL peut être un site Web d'actualités ou un dépôt GitHub.
tokens Jetons échantillonnés.
tokenLogProbs Probabilités logarithmiques des journaux échantillonnés.
topLogProbs Jetons candidats les plus probables et leurs probabilités logarithmiques à chaque étape.
logprobs Résultats du paramètre "logprobs". Le mappage 1-1 correspond aux candidats.

Exemple de réponse

{
  "predictions": [
    {
      "safetyAttributes": {
        "blocked": false,
        "categories": [],
        "scores": []
      },
      "content": " reverses a string",
      "citationMetadata": {
        "citations": []
      }
    },
    "score": -1.1161688566207886
  ]
}

Réponse en streaming des modèles Generative AI

Les paramètres sont identiques pour les requêtes en streaming et sans streaming vers les API.

Pour afficher des exemples de requêtes et de réponses de code à l'aide de l'API REST, consultez la page Exemples d'utilisation de l'API REST en streaming.

Pour afficher des exemples de requêtes et de réponses de code à l'aide du SDK Vertex AI pour Python, consultez la page Exemples d'utilisation du SDK Vertex AI pour Python pour le streaming.