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

Azure ML Web服务序列化问题:字符串键无法正常序列化

解决Azure ML Web服务返回字典键被错误编码的问题

我之前也碰到过一模一样的情况——本地调用函数返回的字典键明明是正常可读的字符串,部署成Azure ML Web服务后,键就变成了cmFkaXVz这种像乱码一样的Base64编码值。折腾了半天发现,问题出在Azure ML默认用的CloudPickle序列化器上,它有时候会把字符串键误当成二进制数据处理,没走标准的JSON序列化逻辑。

下面是几个亲测有效的解决办法:

方法1:显式用JSON序列化结果并返回标准响应

修改你的推理脚本(score.py),用Flask的Response类包装JSON格式的结果,强制服务输出标准JSON:

import json
from flask import Response

def init():
    # 这里初始化你的模型、加载资源等操作
    pass

def run(raw_data):
    # 解析传入的原始数据
    input_data = json.loads(raw_data)
    
    # 你的预测逻辑,生成{string: float}格式的结果字典
    prediction_result = {"user_profile": 0.94, "risk_score": 0.67}
    
    # 用json.dumps确保键以可读字符串输出,同时指定响应的内容类型
    return Response(json.dumps(prediction_result), mimetype="application/json")

这样Web服务会直接返回标准JSON结构,键不会再被错误编码。

方法2:确保字典键是标准字符串类型

有时候问题根源是生成字典时,键被意外转换成了bytes类型(比如从二进制流、数据库读取数据时)。本地环境可能自动做了类型转换,但部署环境没这个处理逻辑。这种情况下,生成字典时显式把键转为字符串:

# 生成结果字典时,强制将所有键转为str类型
prediction_result = {str(key): float(value) for key, value in your_prediction_data.items()}

处理后再返回这个字典,Azure ML的序列化器就能正确识别字符串键了。

方法3:自定义部署的序列化配置

如果上面两种方法都没解决问题,可以在部署时直接指定使用JSON序列化器。创建InferenceConfig时,给环境设置序列化选项:

from azureml.core import Environment
from azureml.core.model import InferenceConfig

# 加载你已经配置好的环境
env = Environment.get(workspace=ws, name="your-deployment-env")

# 强制使用JSON序列化器
env.inferencing_stack.serializer = "json"

# 创建推理配置
inference_config = InferenceConfig(entry_script="score.py", environment=env)

# 后续部署服务的代码(省略)

这样Azure ML会用标准JSON序列化处理输出,从根源上避免键被编码的问题。

调整完之后再调用Web服务,应该就能看到正常的可读字符串键了。如果还有问题,可以检查一下输入数据的处理逻辑,确保中间步骤没把键的类型搞混。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:35:49