You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google AUTOML TABLE的payload对象中传入字符串数组类型values属性

Google Cloud AutoML Tables Java端传入字符串数组类型参数的实现方案

核心实现逻辑

AutoML Tables 的预测请求参数基于 Protobuf 协议定义,字符串数组类型的特征不能直接传入Java原生数组或List,需要先封装为Protobuf的ListValue结构再传入Payload。

步骤1:引入必要依赖(如果未配置)

首先确保你的pom.xml中已经引入AutoML Tables客户端和Protobuf相关依赖:

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-automl</artifactId>
    <version>2.27.0</version>
</dependency>
<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.24.4</version>
</dependency>

步骤2:构造字符串数组对应的Protobuf结构

import com.google.protobuf.Value;
import com.google.protobuf.ListValue;
import com.google.cloud.automl.v1.PredictRequest;
import com.google.cloud.automl.v1.PredictResponse;
import com.google.cloud.automl.v1.PredictionServiceClient;
import java.util.Arrays;
import java.util.Collections;
import java.util.stream.Collectors;

// 待传入的字符串数组
String[] valuesArr = {"value1", "value2", "value3"};

// 将Java字符串数组转换为Protobuf ListValue
ListValue listVal = ListValue.newBuilder()
    .addAllValues(
        Arrays.stream(valuesArr)
            .map(item -> Value.newBuilder().setStringValue(item).build())
            .collect(Collectors.toList())
    )
    .build();

// 封装为可传入Payload的Value对象
Value valuesField = Value.newBuilder().setListValue(listVal).build();

步骤3:组装Payload并发起预测请求

// 构造预测Payload,字段名需和模型训练时的特征列名完全一致
PredictRequest.Payload payload = PredictRequest.Payload.newBuilder()
    .putFields("values", valuesField)
    // 其他单值特征的传入示例
    .putFields("user_id", Value.newBuilder().setStringValue("u12345").build())
    .putFields("age", Value.newBuilder().setNumberValue(28).build())
    .build();

// 发起请求
try (PredictionServiceClient client = PredictionServiceClient.create()) {
    // 替换为你的模型完整资源ID
    String modelName = "projects/你的项目ID/locations/你的区域/models/你的模型ID";
    PredictResponse response = client.predict(modelName, payload, Collections.emptyMap());
    // 处理预测返回结果
    response.getPayloadList().forEach(result -> {
        // 自定义结果解析逻辑
    });
} catch (Exception e) {
    e.printStackTrace();
}

注意事项

  • 请提前确认你训练模型时,名为values的特征列已经被正确标记为数组类型,否则会返回字段类型不匹配的报错
  • 如果是数值类型的数组,只需要把setStringValue替换为setNumberValue即可,逻辑完全一致

内容的提问来源于stack exchange,提问作者P Y

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:42:01