Generazione del codice

Codey per la generazione di codice (code-bison) è il nome del modello che supporta la generazione di codice. È un modello di base che genera codice sulla base di una descrizione in linguaggio naturale. Il tipo di contenuti che Codey per la generazione del codice può creare include funzioni, pagine web e test delle unità. Codey per la generazione del codice è supportato dalle API Codey per la generazione del codice. Le API Codey fanno parte della famiglia delle API PaLM.

Per esplorare questo modello nella console, vedi la scheda del modello Codey per la generazione del codice in Model Garden.
Vai a Model Garden

Casi d'uso

Alcuni casi d'uso comuni per la generazione del codice sono:

  • Test delle unità: utilizza la richiesta per richiedere un test delle unità per una funzione.

  • Scrivi una funzione: passa un problema al modello per ottenere una funzione che lo risolva.

  • Creare una classe: utilizza un prompt per descrivere lo scopo di una classe e avere un codice che definisca la classe restituita.

Richiesta HTTP

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

Versioni modello

Per utilizzare la versione più recente del modello, specifica il nome del modello senza numero di versione, ad esempio code-bison.

Per utilizzare una versione del modello stabile, specifica il numero di versione del modello, ad esempio code-bison@002. Ogni versione stabile è disponibile per sei mesi dopo la data di rilascio della versione stabile successiva.

La seguente tabella contiene le versioni del modello stabile disponibili:

modello code-bisonte Data di uscita Data di interruzione
codice-bison@002 6 dicembre 2023 9 ottobre 2024
codice-bison@001 29 giugno 2023 6 luglio 2024

Per saperne di più, consulta Versioni e ciclo di vita dei modelli.

Corpo della richiesta

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

Di seguito sono riportati i parametri per il modello di generazione del codice denominato code-bison. Il modello code-bison è uno dei modelli di Codey. Puoi utilizzare questi parametri per ottimizzare la richiesta di completamento del codice. Per ulteriori informazioni, consulta Panoramica dei modelli di codice e Creare prompt per il completamento del codice.

Parametro Description Valori accettati

prefix

(obbligatorio)

Per i modelli di codice, prefix rappresenta l'inizio di una porzione di codice di programmazione significativo o di un prompt in linguaggio naturale che descrive il codice da generare. Una stringa di testo valida

temperature

La temperatura viene utilizzata per il campionamento durante la generazione delle risposte. La temperatura controlla il grado di casualità nella selezione dei token. Le temperature più basse sono ideali per prompt che richiedono una risposta meno aperta o creativa, mentre le temperature più alte possono portare a risultati più diversificati o creativi. Una temperatura pari a 0 significa che vengono sempre selezionati i token con la probabilità più alta. In questo caso, le risposte per un dato prompt sono per lo più deterministiche, ma è ancora possibile una piccola variazione.

0.0–1.0

Default: 0.2

maxOutputTokens

Numero massimo di token che possono essere generati nella risposta. Un token equivale a circa quattro caratteri. 100 token corrispondono a circa 60-80 parole.

Specifica un valore più basso per risposte più brevi e un valore più alto per risposte potenzialmente più lunghe.

1–2048

Default: 1024

candidateCount

(facoltativo)

Il numero di varianti della risposta da restituire.

1-4

Default: 1

stopSequences

(facoltativo)

Specifica un elenco di stringhe che indica al modello di interrompere la generazione di testo se una delle stringhe viene rilevata nella risposta. Se una stringa compare più volte nella risposta, la risposta viene troncata nel punto in cui è stata rilevata per la prima volta. Le stringhe sono sensibili alle maiuscole.

Ad esempio, se seguente è la risposta restituita quando stopSequences non è specificato:

public static string reverse(string myString)

La risposta restituita con stopSequences impostato su ["Str", "reverse"] è:

public static string
Un elenco di stringhe

logprobs

(facoltativo)

Restituisce i primi logprobs token candidati con più probabilità con le rispettive probabilità di log a ogni passaggio di generazione. Vengono sempre restituiti i token scelti e le relative probabilità di log in ogni passaggio. Il token scelto potrebbe trovarsi o meno tra i primi logprobs candidati con maggiore probabilità.

0-5

frequencyPenalty

(facoltativo)

I valori positivi penalizzano i token che appaiono ripetutamente nel testo generato, diminuendo la probabilità di ripetizione di contenuti. I valori accettati sono -2.0-2.0.

Minimum value: -2.0 Maximum value: 2.0

presencePenalty

(facoltativo)

I valori positivi penalizzano i token già presenti nel testo generato, aumentando la probabilità di generare contenuti più diversificati. I valori accettati sono -2.0-2.0.

Minimum value: -2.0 Maximum value: 2.0

echo

(facoltativo)

Se il valore è true, il prompt viene ripetuto nel testo generato.

Optional

seed

Il decoder genera un rumore casuale con un generatore di numeri pseudo-casuali, il rumore di temperatura * viene aggiunto ai logit prima del campionamento. Il generatore di numeri pseudo-casuali (prng) prende un seme come input, genera lo stesso output con lo stesso seed.

Se il seed non è impostato, il seed utilizzato nel decoder non sarà deterministico, quindi il rumore casuale generato non sarà deterministico. Se il seed è impostato, il rumore casuale generato sarà deterministico.

Optional

Richiesta di esempio

REST

Per testare un prompt di testo utilizzando l'API Vertex AI, invia una richiesta POST all'endpoint del modello del publisher.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto.
  • Per gli altri campi, consulta la tabella Corpo della richiesta.

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    arricciatura

    Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

    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-bison:predict"

    PowerShell

    Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

    $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-bison:predict" | Select-Object -Expand Content

    Dovresti ricevere una risposta in formato JSON simile alla risposta di esempio.

Python

Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.

from vertexai.language_models import CodeGenerationModel

# TODO(developer): update temperature value. Ex: temperature = 0.5
parameters = {
    "temperature": temperature,  # Temperature controls the degree of randomness in token selection.
    "max_output_tokens": 256,  # Token limit determines the maximum amount of text output.
}

code_generation_model = CodeGenerationModel.from_pretrained("code-bison@001")
response = code_generation_model.predict(
    prefix="Write a function that checks if a year is a leap year.", **parameters
)

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

return response

Node.js

Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella guida rapida di Vertex AI sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Node.js Vertex AI.

Per eseguire l'autenticazione in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

/**
 * 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 = 'code-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}`;

  const prompt = {
    prefix: 'Write a function that checks if a year is a leap year.',
  };
  const instanceValue = helpers.toValue(prompt);
  const instances = [instanceValue];

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

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

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

callPredict();

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java riportate nella guida rapida di Vertex AI sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java Vertex AI.

Per eseguire l'autenticazione in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


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 PredictCodeGenerationFunctionSample {

  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 generate code:
    // https://cloud.google.com/vertex-ai/docs/generative-ai/code/code-generation-prompts
    String instance = "{ \"prefix\": \"Write a function that checks if a year is a leap year.\"}";
    String parameters = "{\n" + "  \"temperature\": 0.5,\n" + "  \"maxOutputTokens\": 256,\n" + "}";
    String location = "us-central1";
    String publisher = "google";
    String model = "code-bison@001";

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

  // Use Codey for Code Generation to generate a code function
  public static void predictFunction(
      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();
  }
}

Corpo della risposta

{
  "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": false,
        "scores": [ float ],
        "errors": [ int ]
      },
      "score": float
    }
  ]
}
Elemento risposta Descrizione
blocked Un flag boolean associato a un attributo di sicurezza che indica se l'input o l'output del modello è stato bloccato. Se blocked è true, il campo errors nella risposta contiene uno o più codici di errore. Se blocked è false, la risposta non include il campo errors.
categories Un elenco di nomi delle categorie di attributi di sicurezza associati ai contenuti generati. L'ordine dei punteggi nel parametro scores corrisponde all'ordine delle categorie. Ad esempio, il primo punteggio nel parametro scores indica la probabilità che la risposta violi la prima categoria nell'elenco categories.
citationMetadata Un elemento che contiene un array di citazioni.
citations Un array di citazioni. Ogni citazione contiene i relativi metadati.
content Il risultato generato dal modello utilizzando il testo di input.
endIndex Un numero intero che specifica dove termina una citazione con content.
errors Un array di codici di errore. Il campo della risposta errors viene incluso nella risposta solo quando il campo blocked nella risposta è true. Per informazioni sulla comprensione dei codici di errore, consulta Errori di sicurezza.
license La licenza associata a una citazione.
publicationDate La data di pubblicazione di una citazione. I formati validi sono YYYY, YYYY-MM e YYYY-MM-DD.
safetyAttributes Un array di attributi di sicurezza. L'array contiene un attributo di sicurezza per ogni candidato di risposta.
score Un valore float inferiore a zero. Più elevato è il valore di score, maggiore è l'affidabilità del modello nella sua risposta.
startIndex Un numero intero che specifica il punto in cui inizia una citazione nel contenuto.
title Il titolo della fonte della citazione. Esempi di titoli di origine potrebbero essere quelli di un articolo o di un libro.
url L'URL della fonte di una citazione. Un URL può essere, ad esempio, un sito web di notizie o un repository GitHub.
tokens I token campionati.
tokenLogProbs Le probabilità di log dei token campionati.
topLogProbs I token candidati più probabili e le relative probabilità di log in ogni passaggio.
logprobs Risultati del parametro "logprobs". Mappatura 1-1 ai "candidati".

Esempio di risposta

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

Risposta in streaming dai modelli di IA generativa

I parametri sono gli stessi per le richieste in modalità flusso e non in modalità flusso alle API.

Per visualizzare le richieste di codice e le risposte di esempio utilizzando l'API REST, consulta Esempi di utilizzo dell'API REST per i flussi di dati.

Per visualizzare richieste di codice e risposte di esempio utilizzando l'SDK Vertex AI per Python, consulta Esempi di utilizzo dell'SDK Vertex AI per Python per i flussi di dati.