代码补全

Codey for Code Completion (code-gecko) 是支持代码补全的模型的名称。这是一个可根据编写的代码生成代码的基础模型。Codey for Code Completion 可补全用户最近输入的代码。Codey for Code Completion 由代码生成 API 提供支持。Codey API 属于 PaLM API 系列。

如需详细了解如何创建代码补全提示,请参阅创建代码补全提示

如需在控制台中探索此模型,请参阅 Model Garden 中的 Codey for Code Completion 模型卡片。
前往 Model Garden

使用场景

以下是代码补全的一些常见应用场景:

  • 更快地编写代码:利用 code-gecko模型和为您建议的代码更快地编写代码。

  • 最大限度地减少代码中的 bug:使用语法上正确的代码建议来避免错误。代码补全功能可帮助您最大限度地降低在快速编写代码时意外引入 bug 的风险。

HTTP 请求

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

模型版本

如需使用最新的模型版本,请指定不含版本号的模型名称,例如 code-gecko

如需使用稳定的模型版本,请指定模型版本号,例如 code-gecko@002。每个稳定版本会在后续稳定版发布日期后的六个月内可用。

下表包含可用的稳定模型版本:

code-gecko 模型 发布日期 终止日期
code-gecko@002 2023 年 12 月 6 日 2024 年 10 月 9 日

如需了解详情,请参阅模型版本和生命周期

请求正文

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

以下是代码补全模型 code-gecko 的参数。code-gecko 模型是 Codey 模型之一。您可以使用这些参数来帮助优化代码补全提示。如需了解详情,请参阅代码模型概览创建代码补全提示

参数 说明 可接受的值

prefix

(必填)

对于代码模型,prefix 表示一条有意义的编程代码的开头,或描述要生成的代码的自然语言提示。模型尝试在 prefixsuffix 之间填充代码。 有效的文本字符串

suffix

(可选)

对于代码补全,suffix 表示一条有意义的编程代码的结尾。模型尝试在 prefixsuffix 之间填充代码。 有效的文本字符串

temperature

温度 (temperature) 在生成回复期间用于采样。温度可以控制词元选择的随机性。较低的温度有利于需要更少开放性或创造性回复的提示,而较高的温度可以带来更具多样性或创造性的结果。温度为 0 表示始终选择概率最高的词元。在这种情况下,给定提示的回复大多是确定的,但可能仍然有少量变化。

0.0–1.0

Default: 0.2

maxOutputTokens

回复中可生成的词元数量上限。词元约为 4 个字符。100 个词元对应大约 60-80 个单词。

指定较低的值可获得较短的回复,指定较高的值可获得可能较长的回复。

1-64

Default: 64

candidateCount

(可选)

要返回的响应变体数量。 对于每个请求,您需要为所有候选词元的输出词元付费,但只需为输入词元支付一次费用。

指定多个候选项是适用于 generateContent 的预览版功能(不支持 streamGenerateContent)。支持以下型号:

  • Gemini 1.5 Flash:1-8,默认值:1
  • Gemini 1.5 Pro:1-8,默认值:1

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.0-2.0

Minimum value: -2.0 Maximum value: 2.0

presencePenalty

(可选)

正值会惩罚已生成文本中已存在的词元,从而增加生成更多样化内容的概率。可接受的值为 -2.0-2.0

Minimum value: -2.0 Maximum value: 2.0

echo

(可选)

如果为 true,则提示会在生成的文本中回显。

Optional

seed

当种子固定为特定值时,模型会尽最大努力为重复请求提供相同的回答。无法保证确定性输出。此外,更改模型或参数设置(例如温度)可能会导致回答发生变化,即使您使用相同的种子值也是如此。默认情况下,系统会使用随机种子值。

这是预览版功能。

Optional

示例请求

REST

如需使用 Vertex AI API 测试文本提示,请向发布方模型端点发送 POST 请求。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目 ID
  • 如需了解其他字段,请查看请求正文表。

    HTTP 方法和网址:

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

    请求 JSON 正文:

    {
      "instances": [
        { "prefix": "PREFIX",
          "suffix": "SUFFIX"}
      ],
      "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-gecko: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-gecko:predict" | Select-Object -Expand Content

    您应该会收到类似示例响应的 JSON 响应。

Python

如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。 如需了解详情,请参阅 Python API 参考文档

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

在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Node.js 设置说明执行操作。 如需了解详情,请参阅 Vertex AI Node.js API 参考文档

如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

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

在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Java 设置说明执行操作。 如需了解详情,请参阅 Vertex AI Java API 参考文档

如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证


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();
  }
}

响应正文

{
  "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
    }
  ]
}
响应元素 说明
blocked 与安全属性关联的 boolean 标志,用于指示模型的输入或输出是否被阻止。如果 blockedtrue,则响应中的 errors 字段包含一个或多个错误代码。如果 blockedfalse,则响应不包含 errors 字段。
categories 与所生成内容关联的安全属性类别名称的列表。scores 参数中的得分顺序与类别的顺序匹配。例如,scores 参数中的第一个得分表示回复违反 categories 列表中第一个类别的可能性。
citationMetadata 包含引用数组的元素。
citations 引用数组。每个引用都包含其元数据。
content 模型使用输入文本生成的结果。
endIndex 一个整数,用于指定引用在 content 中的结束位置。
errors 错误代码数组。仅当响应中的 blocked 字段为 true 时,响应中才会包含 errors 响应字段。如需了解如何理解错误代码,请参阅安全错误
license 与引用关联的许可。
publicationDate 引用的发布日期。其有效格式为 YYYYYYYY-MMYYYY-MM-DD
score 小于零的 float 值。score 的值越高,模型回复的置信度就越高。
startIndex 一个整数,用于指定引用在 content 中的起始位置。
title 引用来源的标题。来源标题的示例可能是新闻报道或书籍标题。
url 引用来源的网址。网址来源的示例可能是新闻网站或 GitHub 代码库。
tokens 采样词元。
tokenLogProbs 采样词元的对数概率。
topLogProbs 每个步骤中最可能的候选词元及其对数概率。
logprobs “logprobs”参数的结果。1-1 映射到“候选”。

示例响应

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

流式传输来自生成式 AI 模型的响应

对于 API 的流式传输请求和非流式传输请求,这些参数是相同的。

如需使用 REST API 查看示例代码请求和响应,请参阅使用流式传输 REST API 的示例

如需使用 Python 版 Vertex AI SDK 查看示例代码请求和响应,请参阅使用 Python 版 Vertex AI SDK 进行流式传输的示例