Chat de code

Codey pour le chat de code (codechat-bison) est le nom du modèle compatible avec le chat de code. Il s'agit d'un modèle de fondation compatible avec les conversations multitours spécialisées dans le code. Le modèle permet aux développeurs de discuter avec un chatbot pour obtenir de l'aide concernant les questions liées au code. L'API de chat de code permet de communiquer avec le modèle Codey pour le chat de code.

Codey pour le chat de code est idéal pour effectuer des tâches de code avec des interactions aller-retour afin de poursuivre une conversation continue. Pour les tâches de code qui nécessitent une seule interaction, utilisez l'API de remplissage de code ou l'API de génération de code.

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

Cas d'utilisation

Voici quelques cas d'utilisation courants du chat de code :

  • Obtenir de l'aide concernant le code : obtenez de l'aide concernant les questions que vous vous posez sur le code, telles que les questions sur une API, la syntaxe dans un langage de programmation compatible ou la version de la bibliothèque requise pour le code que vous écrivez.

  • Débogage : obtenez de l'aide pour déboguer le code qui ne se compile pas ou qui contient un bug.

  • Documentation : obtenez de l'aide pour comprendre le code afin de pouvoir le documenter avec précision.

  • En savoir plus sur le code : obtenez de l'aide pour en savoir plus sur le code que vous ne maîtrisez pas.

Requête HTTP

POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/codechat-bison: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 codechat-bison.

Pour utiliser une version de modèle stable, indiquez le numéro de version du modèle, par exemple codechat-bison@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 codechat-bison Date de disponibilité Date d'arrêt
codechat-bison@002 6 décembre 2023 9 octobre 2024
codechat-bison@001 29 juin 2023 6 juillet 2024

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

Corps de la requête

{
  "instances": [
    {
      "context": string,
      "messages": [
        {
          "content": string,
          "author": string
        }
      ]
    }
  ],
  "parameters":{
    "temperature": number,
    "maxOutputTokens": integer,
    "candidateCount": integer,
    "logprobs": integer,
    "presencePenalty": float,
    "frequencyPenalty": float,
    "seed": integer
  }
}

Voici les paramètres du modèle de génération de code nommé codechat-bison. Le modèle codechat-bison est l'un des modèles disponibles dans Codey. Vous pouvez utiliser ces paramètres afin d'optimiser votre requête pour une conversation de chatbot sur le code. Pour en savoir plus, consultez les pages Présentation des modèles de code et Créer des requêtes pour discuter du code.

Paramètre Description Valeurs acceptables

context

Texte qui doit d'abord être fourni au modèle pour ancrer la réponse. Texte

messages

(obligatoire)

Historique de conversation fourni au modèle sous une forme alternative structurée. Les messages s'affichent dans l'ordre chronologique : le plus ancien en premier, le plus récent en dernier. Lorsque l'historique des messages entraîne un dépassement de la longueur maximale autorisée pour les entrées, les messages les plus anciens sont supprimés jusqu'à ce que l'intégralité de la requête respecte la limite autorisée.
List[Structured Message]
    "author": "user",
     "content": "user message"

temperature

(facultatif)

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

(facultatif)

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–2048

Default: 1024

candidateCount

(facultatif)

Nombre de variantes de réponse à renvoyer.

1-4

Default: 1

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

seed

Le décodeur génère du bruit aléatoire avec un générateur de nombres pseudo-aléatoires. Le bruit de température * est ajouté aux fonctions logit avant l'échantillonnage. Le générateur de nombres pseudo-aléatoires (prng) prend une graine en entrée, et génère la même sortie avec la même graine.

Si elle n'est pas définie, la graine utilisée dans le décodeur ne sera pas déterministe. Par conséquent, le bruit aléatoire généré ne sera pas déterministe. Si la graine est définie, le bruit aléatoire généré sera déterministe.

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/codechat-bison:predict

    Corps JSON de la requête :

    {
      "instances": [
        {
          "messages": [
            {
              "author": "AUTHOR",
              "content": "CONTENT"
            }
          ]
        }
      ],
      "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/codechat-bison: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/codechat-bison: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 CodeChatModel

# TODO developer - override these parameters as needed:
parameters = {
    "temperature": temperature,  # Temperature controls the degree of randomness in token selection.
    "max_output_tokens": 1024,  # Token limit determines the maximum amount of text output.
}

code_chat_model = CodeChatModel.from_pretrained("codechat-bison@001")
chat = code_chat_model.start_chat()

response = chat.send_message(
    "Please help write a function to calculate the min of two numbers", **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): Uncomment these variables before running the sample.\
 * (Not necessary if passing values as arguments)
 */
// const project = 'YOUR_PROJECT_ID';
// const location = 'YOUR_PROJECT_LOCATION';
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',
};
const publisher = 'google';
const model = 'codechat-bison@001';

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

async function callPredict() {
  // Configure the parent resource
  const endpoint = `projects/${project}/locations/${location}/publishers/${publisher}/models/${model}`;

  // Learn more about creating prompts to work with a code chat model at:
  // https://cloud.google.com/vertex-ai/docs/generative-ai/code/code-chat-prompts
  const prompt = {
    messages: [
      {
        author: 'user',
        content: 'Hi, how are you?',
      },
      {
        author: 'system',
        content: 'I am doing good. What can I help you in the coding world?',
      },
      {
        author: 'user',
        content:
          'Please help write a function to calculate the min of two numbers',
      },
    ],
  };
  const instanceValue = helpers.toValue(prompt);
  const instances = [instanceValue];

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

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

  // Predict request
  const [response] = await predictionServiceClient.predict(request);
  console.log('Get code chat 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 PredictCodeChatSample {

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

    // Learn more about creating prompts to work with a code chat model at:
    // https://cloud.google.com/vertex-ai/docs/generative-ai/code/code-chat-prompts
    String instance =
        "{ \"messages\": [\n"
            + "{\n"
            + "  \"author\": \"user\",\n"
            + "  \"content\": \"Hi, how are you?\"\n"
            + "},\n"
            + "{\n"
            + "  \"author\": \"system\",\n"
            + "  \"content\": \"I am doing good. What can I help you in the coding world?\"\n"
            + " },\n"
            + "{\n"
            + "  \"author\": \"user\",\n"
            + "  \"content\":\n"
            + "     \"Please help write a function to calculate the min of two numbers.\"\n"
            + "}\n"
            + "]}";
    String parameters = "{\n" + "  \"temperature\": 0.5,\n" + "  \"maxOutputTokens\": 1024\n" + "}";
    String location = "us-central1";
    String publisher = "google";
    String model = "codechat-bison@001";

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

  // Use a code chat model to generate a code function
  public static void predictCodeChat(
      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": [
    {
      "candidates": [
        {
          "author": string,
          "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": false,
        "scores": [ float ]
      },
      "score": float
    }
  ]
}
Élément de réponse Description
author Une string qui indique l'auteur d'une réponse de chat.
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.
content Contenu d'une réponse de chat.
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.
safetyAttributes Tableau d'attributs de sécurité. Le tableau contient un attribut de sécurité pour chaque réponse candidate.
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.
scores Tableau de valeurs float. Chaque valeur est un score qui indique la probabilité que la réponse ne respecte pas la catégorie de sécurité sur laquelle elle est vérifiée. Plus la valeur est faible, plus le modèle prend en compte la réponse. L'ordre des scores dans le tableau correspond à l'ordre des attributs de sécurité dans l'élément de réponse categories.
startIndex Entier spécifiant l'emplacement du début d'une citation dans le contenu.
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": [
    {
      "citationMetadata": [
        {
          "citations": []
        }
      ],
      "candidates": [
        {
          "author": "AUTHOR",
          "content": "RESPONSE"
        }
      ],
      "safetyAttributes": {
        "categories": [],
        "blocked": false,
        "scores": []
      },
      "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.