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

如何从字符串重新实例化OpenAI ChatCompletion对象

解决OpenAI ChatCompletion对象持久化与重新实例化问题

直接使用str(responseObj)将ChatCompletion对象转成字符串存入数据库的方式不可行——这个字符串只是对象的可读性描述(比如ChatCompletion(id=...)),仅包含部分关键信息,并非完整的结构化数据,无法直接用来重建原对象。

正确的做法是利用OpenAI SDK基于Pydantic构建的特性,使用结构化序列化/反序列化方法:

1. 序列化(存入数据库)

不要用str(),而是将对象转成标准JSON字符串存储:

from openai import OpenAI
import json

client = OpenAI()
# 调用API获取ChatCompletion对象
response_obj = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Hello"}]
)

# 将对象转成字典,再序列化为JSON字符串
response_json = json.dumps(response_obj.model_dump())

# 将response_json存入数据库即可

2. 反序列化(重新实例化对象)

从数据库取出JSON字符串后,通过Pydantic的验证方法重建对象:

import json
from openai.types.chat.chat_completion import ChatCompletion

# 从数据库取出存储的JSON字符串
retrieved_json = "..."  # 替换为实际从数据库获取的内容

# 解析JSON为字典,再验证并重建ChatCompletion对象
retrieved_dict = json.loads(retrieved_json)
reconstructed_obj = ChatCompletion.model_validate(retrieved_dict)

# 此时reconstructed_obj与原response_obj结构、内容完全一致

关键说明

OpenAI的所有返回模型类(包括ChatCompletion)都继承自Pydantic模型,model_dump()可以完整导出对象的所有字段为字典,model_validate()则能将符合结构的字典重新校验并实例化为原对象类型,这是官方推荐的可靠序列化方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:32:37