コード生成

コード生成用の Codey(code-bison)は、コード生成をサポートするモデルの名前です。これは、自然言語の記述に基づいてコードを生成する基盤モデルです。コード生成用の Codey で作成できるコンテンツ タイプには、関数、ウェブページ、単体テストがあります。コード生成用の Codey は、コード生成 Codey API でサポートされています。Codey API は PaLM API ファミリーに含まれています。

このモデルをコンソールで確認するには、Model Garden に移動して「コード生成用の Codey」モデルカードをご覧ください。
<a{: class="button button-primary" l10n-attrs-original-order="href,target,class,track-name,track-type" l10n-encrypted-href="kDsq5VTi6ASK/vNFlrWmnltigmNHgUGOXn/QVSGplOi71dheYhG9dKuv3S+0ajmQkfzB9oP/Mo2x7xIe1klR5YSKTX7LV1jkkg0C2Ndofq2g0LY5rER9QL0JoE/A8FHO" target="console" track-name="consoleLink" track-type="tasks" }="">Model Garden に移動</a{:>

ユースケース

コード生成の一般的なユースケースには次のものがあります。

  • 単体テスト: プロンプトを使用して、関数の単体テストをリクエストします。

  • 関数を記述する: 問題をモデルに渡し、問題を解決する関数を取得します。

  • クラスを作成する: プロンプトを使用してクラスの目的を説明し、返されるクラスを定義するコードを用意します。

HTTP リクエスト

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

モデル バージョン

モデルの最新バージョンを使用するには、バージョン番号なしでモデル名を指定します(例: code-bison)。

モデルの安定版を使用する場合は、モデルのバージョン番号を指定します(例: code-bison@002)。安定版は、後続の安定版のリリース日から 6 か月間利用できます。

次の表に、利用可能なモデルの安定版を示します。

code-bison モデル リリース日 廃止日
code-bison@002 2023 年 12 月 6 日 2024 年 10 月 9 日
code-bison@001 2023 年 6 月 29 日 2024 年 7 月 6 日

詳細については、モデルのバージョンとライフサイクルをご覧ください。

リクエストの本文

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

code-bison という名前のコード生成モデルのパラメータは次のとおりです。code-bison モデルは Codey のモデルの一つです。これらのパラメータを使用して、コード補完プロンプトを最適化できます。詳細については、コードモデルの概要コード補完のプロンプトを作成するをご覧ください。

パラメータ 説明 使用できる値

prefix

(必須)

コードモデルの場合、prefix は、意味のあるプログラミング コードの一部、または生成されるコードを記述する自然言語プロンプトの開始を表します。 有効なテキスト文字列

temperature

温度は、レスポンス生成時のサンプリングに使用されます。温度は、トークン選択のランダム性の度合いを制御します。温度が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、温度が高いと、より多様で創造的な結果を導くことができます。温度が 0 の場合、確率が最も高いトークンが常に選択されます。この場合、特定のプロンプトに対するレスポンスはほとんど確定的ですが、わずかに変動する可能性は残ります。

0.0–1.0

Default: 0.2

maxOutputTokens

レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。

レスポンスを短くする場合は小さい値、長くする場合は大きい値を指定します。

1–2048

Default: 1024

candidateCount

(省略可)

返すレスポンス バリエーションの数。

1-4

Default: 1

stopSequences

(省略可)

レスポンスでいずれかの文字列が検出された場合に、テキストの生成を停止するようモデルに指示する文字列のリストを指定します。レスポンスで文字列が複数回出現する場合、レスポンスでは最初に見つかった箇所が切り捨てられます。文字列では大文字と小文字が区別されます。

たとえば、stopSequences が指定されていない場合に、次のレスポンスが返されたとします。

public static string reverse(string myString)

この場合に、stopSequences["Str", "reverse"] に設定されているレスポンスは次のとおりです。

public static string
文字列のリスト

logprobs

(省略可)

各生成ステップで、最上位 logprobs の最も可能性の高い候補トークンとそのログ確率を返します。各ステップで選択したトークンとそのログ確率は常に返されます。選択したトークンは、最上位 logprobs の最も可能性の高い候補に含まれる場合もあれば、含まれない場合もあります。

0-5

frequencyPenalty

(省略可)

値が正の場合は、生成されたテキストに繰り返し出現するトークンにペナルティが課されるため、コンテンツが繰り返される確率は低下します。有効な値は -2.02.0 です。

Minimum value: -2.0 Maximum value: 2.0

presencePenalty

(省略可)

値が正の場合は、生成されたテキスト内の既存のトークンにペナルティが課されるため、より多様なコンテンツが生成される確率は高くなります。有効な値は -2.02.0 です。

Minimum value: -2.0 Maximum value: 2.0

echo

(省略可)

true の場合、生成されたテキスト内でプロンプトがエコーされます。

Optional

seed

デコーダは、擬似乱数生成ツールを使用してランダムなノイズを生成します。サンプリングを行う前に、温度 * ノイズをロジットに追加します。疑似乱数生成ツール(prng)は、シードを入力として受け取り、同じシードを使用して同じ出力を生成します。

シードが設定されていない場合、デコーダで使用されるシードが決定的ではないため、生成されたランダムノイズは変動する可能性があります。シードが設定されている場合、生成されるランダムノイズは決定的です。

Optional

リクエストの例

REST

Vertex AI API を使用してテキスト プロンプトをテストするには、パブリッシャー モデル エンドポイントに POST リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • 他のフィールドについては、リクエストの本文の表をご覧ください。

    HTTP メソッドと URL:

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

    リクエストの本文(JSON):

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

    リクエストを送信するには、次のいずれかのオプションを選択します。

    curl

    リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

    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

    リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

    $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

    レスポンスの例のような JSON レスポンスが返されます。

Python

Python をインストールまたは更新する方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。

from vertexai.language_models import CodeGenerationModel

def generate_a_function(temperature: float = 0.5) -> object:
    """Example of using Codey for Code Generation to write a function."""

    # TODO developer - override these parameters as needed:
    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

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

/**
 * 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

このサンプルを試す前に、Vertex AI クライアント ライブラリをインストールするにある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。


import com.google.cloud.aiplatform.v1beta1.EndpointName;
import com.google.cloud.aiplatform.v1beta1.PredictResponse;
import com.google.cloud.aiplatform.v1beta1.PredictionServiceClient;
import com.google.cloud.aiplatform.v1beta1.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();
  }
}

レスポンスの本文

{
  "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
    }
  ]
}
レスポンス要素 説明
blocked boolean フラグ。モデルの入力または出力がブロックされたかどうかを示す安全性属性に関連するフラグです。blockedtrue の場合、レスポンスの errors フィールドには 1 つ以上のエラーコードが含まれます。blockedfalse の場合、レスポンスに errors フィールドは含まれません。
categories 生成されたコンテンツに関連付けられた安全性属性のカテゴリ名のリスト。scores パラメータのスコアの順序はカテゴリの順序と同じです。たとえば、scores パラメータの最初のスコアは、レスポンスが categories リストの最初のカテゴリに違反する可能性を示しています。
citationMetadata 引用の配列を含む要素。
citations 引用の配列。各引用にはメタデータが含まれます。
content 入力テキストを使用してモデルによって生成された結果。
endIndex content の中で引用の終了位置を示す整数。
errors エラーコードの配列。errors レスポンス フィールドは、レスポンスの blocked フィールドが true の場合にのみレスポンスに含まれます。エラーコードの詳細については、安全性エラーをご覧ください。
license 引用に関連付けられているライセンス。
publicationDate 引用が公開された日付。有効な形式は、YYYYYYYY-MMYYYY-MM-DD です。
safetyAttributes 安全性属性の配列。この配列には、レスポンスの候補ごとに 1 つの安全性属性が含まれます。
score float 値。0 未満の値です。score の値が高いほど、モデルのレスポンスの信頼度が高くなります。
startIndex コンテンツ内での引用の開始位置を示す整数。
title 引用元のタイトル。引用元のタイトルとしては、ニュース記事や書籍などがあります。
url 引用元の URL。引用元の URL ソースとしては、ニュースサイトや GitHub リポジトリなどがあります。
tokens サンプリングされたトークン。
tokenLogProbs サンプリングされたトークンのログ確率。
topLogProbs 各ステップで最も可能性の高い候補トークンとそのログ確率。
logprobs logprobs パラメータの結果。candidates に対する 1 対 1 のマッピング。

レスポンスの例

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

生成 AI モデルからのレスポンスをストリーミングする

API に対するストリーミング リクエストと非ストリーミング リクエストでパラメータは同じです。

REST API を使用してサンプルコードのリクエストとレスポンスを表示するには、ストリーミング REST API の使用例をご覧ください。

Vertex AI SDK for Python を使用してサンプルコードのリクエストとレスポンスを表示するには、ストリーミングでの Vertex AI SDK for Python の使用例をご覧ください。