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

如何让AzureML分类模型在线端点返回含传入ID的多字段响应

在AzureML在线端点中返回传入的ID字段以关联预测结果

要实现端点返回传入的ID字段并关联预测结果,需要同时修改请求代码和AutoML生成的评分脚本,具体步骤如下:

1. 更新调用端点的请求数据

确保传入的data1包含用于关联的ID字段(例如命名为record_id),让评分脚本可以获取到该字段。修改后的请求代码示例:

import json
import urllib.request
import pandas as pd

# 示例:构造包含ID的特征数据
data1 = pd.DataFrame({
    "record_id": [1001, 1002, 1003],
    "age": [32, 45, 29],
    "job": ["admin", "blue-collar", "technician"],
    "marital": ["married", "single", "married"],
    # 其他特征列...
})

data =  {
    "Inputs": {
        "data": data1.to_dict('records')
    },
    "GlobalParameters": {
        "method": "predict_proba"
    }
}
body = str.encode(json.dumps(data))

url = 'http://MyDeployement.MyRegion.azurecontainer.io/score'

headers = {'Content-Type':'application/json'}
req = urllib.request.Request(url, body, headers)

response = urllib.request.urlopen(req)
result = response.read()

encoding = response.info().get_content_charset('utf-8')
JSON_object = json.loads(result.decode(encoding))
print(JSON_object)

2. 修改AutoML生成的评分脚本

需要调整输入输出Schema,并在预测逻辑中保留ID字段与结果合并,核心修改如下:

import pandas as pd
import numpy as np
import os
import joblib
from azureml.core import Model
from azureml.automl.core.shared import logging_utilities, log_server
from azureml.automl.core.shared.constants import DEFAULT_MODEL_NAME
from azureml.automl.runtime.scoring_script import PandasParameterType, StandardPythonParameterType, NumpyParameterType

# 更新输入样本:添加ID字段的示例
data_sample = PandasParameterType(pd.DataFrame({
    "record_id": pd.Series([0], dtype="int64"),
    "age": pd.Series([0], dtype="int64"), 
    "job": pd.Series(["example_value"], dtype="object"), 
    "marital": pd.Series(["example_value"], dtype="object"), 
    "education": pd.Series(["example_value"], dtype="object"), 
    # 其他特征列...
}))  
input_sample = StandardPythonParameterType({'data': data_sample})  
method_sample = StandardPythonParameterType("predict")  
sample_global_params = StandardPythonParameterType({"method": method_sample})  

# 更新输出样本:定义包含ID和预测结果的结构
result_sample = PandasParameterType(pd.DataFrame({
    "record_id": pd.Series([0], dtype="int64"),
    "prediction": pd.Series(["example_value"], dtype="object"),
    "probability_class_0": pd.Series([0.5], dtype="float64"),
    "probability_class_1": pd.Series([0.5], dtype="float64")
}))
output_sample = StandardPythonParameterType({'Results': result_sample})  

try:  
    log_server.enable_telemetry(INSTRUMENTATION_KEY)  
    log_server.set_verbosity('INFO')  
    logger = logging.getLogger('azureml.automl.core.scoring_script_v2')  
except:  
    pass  

def init():  
    global model  
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'model.pkl')  
    path = os.path.normpath(model_path)  
    path_split = path.split(os.sep)  
    log_server.update_custom_dimensions({'model_name': path_split[-3], 'model_version': path_split[-2]})  
    try:  
        logger.info("Loading model from path.")  
        model = joblib.load(model_path)  
        logger.info("Loading successful.")  
    except Exception as e:  
        logging_utilities.log_traceback(e, logger)  
        raise  

@input_schema('GlobalParameters', sample_global_params, convert_to_provided_type=False)  
@input_schema('Inputs', input_sample)  
@output_schema(output_sample)  
def run(Inputs, GlobalParameters={"method": "predict"}):  
    data = Inputs['data']
    # 确保输入数据转为DataFrame
    if not isinstance(data, pd.DataFrame):
        data = pd.DataFrame(data)
    
    # 提取ID并移除特征数据中的ID列(避免模型报错)
    record_ids = data['record_id'].values
    feature_data = data.drop(columns=['record_id'])

    # 执行预测并合并ID
    if GlobalParameters.get("method", None) == "predict_proba":  
        result = model.predict_proba(feature_data)  
        result_df = pd.DataFrame({
            "record_id": record_ids,
            "probability_class_0": result[:, 0],
            "probability_class_1": result[:, 1]
        })
    elif GlobalParameters.get("method", None) == "predict":  
        result = model.predict(feature_data)  
        result_df = pd.DataFrame({
            "record_id": record_ids,
            "prediction": result
        })
    else:  
        raise Exception(f"Invalid predict method argument received. GlobalParameters: {GlobalParameters}")  

    return {'Results': result_df.to_dict('records')}

关键注意事项

  • 保持ID字段名称(如record_id)在请求数据和评分脚本中统一
  • 必须从特征数据中移除ID列后再传入模型,避免因模型训练时未包含该列导致报错
  • 可根据实际需求调整输出结果的字段名称和格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:07:05