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

Ruby调用GCP AIPlatform获取图像分类预测结果报错排查

问题根因

报错Invalid type Instance to assign to submessage field 'instances'的核心原因是你错误自定义了Instance proto类,GCP AI Platform V1版本的PredictRequest.instances字段要求传入Google::Protobuf::Value类型的结构化值,和你本地自定义的proto类没有任何类型关联,类型校验直接不通过。
你写的代码存在两个明确问题:

  • 完全不需要自定义proto文件。AI Platform预测接口的输入结构是和你部署的模型输入schema绑定的,Ruby SDK不会识别你本地自定义的proto消息类,不需要额外生成proto代码。
  • 构造实例参数时不需要实例化自定义类,直接传入和模型输入格式匹配的Ruby原生Hash结构即可,SDK会自动将原生结构序列化为接口要求的Protobuf Value类型。
修正后可运行代码

首先删除你本地自定义的Instance proto文件及对应生成的Ruby代码,然后按如下方式构造请求:

client = ::Google::Cloud::AIPlatform::V1::PredictionService::Client.new do |config|
  config.endpoint = "#{location}-aiplatform.googleapis.com"
end

# 读取图片并做base64编码,是否需要拼接data:image/png;base64前缀以你部署的模型输入要求为准
img_content = File.open(imgPath, 'rb') do |f|
  Base64.strict_encode64(f.read)
end

# 直接用Hash构造实例,不要使用自定义的Instance类
request = Google::Cloud::AIPlatform::V1::PredictRequest.new(
  endpoint: "projects/#{project}/locations/#{location}/endpoints/#{endpoint}",
  instances: [
    { content: img_content }
  ]
)

result = client.predict request
p result
补充说明
  • 你参考的JS示例能正常运行,原因是Node.js SDK会自动把普通JS对象转换为接口要求的google.protobuf.Value类型,不存在手动传入自定义proto类的类型不匹配问题。
  • 如果后续调用出现内容格式错误,对照你部署模型的输入定义调整图片格式即可:部分AutoML图像模型要求传入带mime前缀的Data URL格式字符串,部分自定义模型要求直接传入纯base64字符串,和模型输入schema保持一致即可。
  • 所有AI Platform Prediction的Ruby SDK调用中,instances、parameters字段都直接传Ruby原生类型(Hash、数组、字符串、数字、布尔值)即可,SDK内部会自动完成类型转换,不需要手动定义proto类。

内容的提问来源于stack exchange,提问作者Maxime Vincent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:06:21