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

调用SageMaker端点时报body不能为空的ValidationError如何解决

问题排查与解决方案

错误根因

  • 拆分后存在无效空样本:如果你的输入request_body末尾带有|分隔符,调用split('|')会生成最后一个空字符串元素,打印时空行容易被忽略,空字符串传入invoke_endpoint的Body参数就会触发成员不能为空的校验错误。
  • 代码缩进错误:当前代码中结果解析、结果追加到列表的逻辑在for循环外部,仅会执行一次,仅能保留最后一次接口调用的返回结果,不符合采集全量样本预测结果的需求。

修复代码

import boto3
import json

ENDPOINT_NAME = "my_endpoint"
runtime = boto3.client('runtime.sagemaker')
results = []
# 拆分时过滤空字符串,剔除无效空样本
samples = [r.strip() for r in request_body.split('|') if r.strip()]
for r in samples:
    response = runtime.invoke_endpoint(
        EndpointName=ENDPOINT_NAME,
        ContentType='text/csv',
        Body=r
    )
    # 缩进修正:将结果处理逻辑放到循环内部,每个样本对应一次结果处理
    result = json.loads(response['Body'].read().decode())
    results.append(result)

结果映射方法

修复后results列表的顺序和输入样本的顺序完全一致,你只需要提前将和样本顺序对应的id存储为一个列表,按索引即可完成配对:例如id列表为sample_ids = [id_1, id_2, ..., id_n],则results[i]就是sample_ids[i]对应的预测结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:15:04