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

序列化Azure OpenAI响应JSON时缺失prompt_filter_results的原因

问题:Azure OpenAI响应序列化为JSON时缺失prompt_filter_results字段?

运行Azure OpenAI请求并尝试将响应转为JSON时,发现打印的completion对象包含prompt_filter_results字段,但序列化后的JSON里却没有。相关代码、打印结果如下:

示例代码

#Note: This code sample requires OpenAI Python library version 1.0.0 or higher.
import json
import pprint
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = "https://xxxxxx.openai.azure.com/",
  api_key='xxxxxxxxxxxxxxxxxxxxx',
  api_version="2023-07-01-preview"
)

message_text = [{"role":"system","content":"You are an AI assistant that helps people find information."}]
completion = client.chat.completions.create(
  model="gpt-4xxxxxxxx", 
  messages = message_text,
  temperature=0.7,
  max_tokens=800,
  top_p=0.95,
  frequency_penalty=0,
  presence_penalty=0,
  stop=None
)

print('completion:\n')
pprint.pprint(completion)

# Convert Python object to JSON
json_data = json.dumps(completion, default=lambda o: o.__dict__, indent=4)

# Print JSON
print(json_data)

打印的completion对象(含prompt_filter_results)

ChatCompletion(id='chatcmpl-xxxxxxxxx', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='Great! How can I assist you today?', role='assistant', function_call=None, tool_calls=None), content_filter_results={'hate': {'filtered': False, 'severity': 'safe'}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}})], created=1709313222, model='gpt-4', object='chat.completion', system_fingerprint='fp_xxxxx', usage=CompletionUsage(completion_tokens=9, prompt_tokens=18, total_tokens=27), prompt_filter_results=[{'prompt_index': 0, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}])

序列化后的JSON(缺失prompt_filter_results)

{
    "id": "chatcmpl-xxxxxxx",
    "choices": [
        {
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null,
            "message": {
                "content": "Great! How can I assist you today?",
                "role": "assistant",
                "function_call": null,
                "tool_calls": null
            }
        }
    ],
    "created": 1709313222,
    "model": "gpt-4",
    "object": "chat.completion",
    "system_fingerprint": "fp_xxxxx",
    "usage": {
        "completion_tokens": 9,
        "prompt_tokens": 18,
        "total_tokens": 27
    }
}

原因及解决方法

原因

OpenAI Python SDK v1.x的响应对象基于Pydantic构建,prompt_filter_results属于额外扩展字段(不在ChatCompletion核心模型定义中):

  • 打印对象时能看到该字段,是因为Pydantic模型的__repr__方法会包含所有字段(包括额外字段);
  • 但直接通过o.__dict__获取属性时,只能拿到模型定义内的标准属性,取不到额外的prompt_filter_results,因此序列化JSON时会缺失。

解决方法

方法1:使用Pydantic的model_dump()方法(推荐)

Pydantic模型提供的model_dump()方法会导出所有字段(包括额外字段),替换原序列化代码即可:

# 替换原json.dumps行
json_data = json.dumps(completion.model_dump(), indent=4)

方法2:修改序列化的默认处理函数

如果需要兼容非Pydantic对象,可以修改default参数的lambda函数,优先调用Pydantic的序列化方法:

json_data = json.dumps(
    completion,
    default=lambda o: o.model_dump() if hasattr(o, "model_dump") else o.__dict__,
    indent=4
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:48:11