"""
================================================================================
JSON格式化输出示例
================================================================================
功能说明:
本脚本演示如何使用OpenAI 兼容接口,通过结构化输出功能
从自然语言描述中提取产品信息(名称、价格、描述)并格式化为 JSON。
================================================================================
"""
from pydantic import BaseModel
from openai import OpenAI
from textwrap import dedent
import json
# ============================================================================
# 初始化客户端
# ============================================================================
client = OpenAI(
api_key="sk-**********************************",
base_url="https://ai.hcrzx.com/v1/"
)
# ============================================================================
# 数据模型定义
# ============================================================================
class ProductInfo(BaseModel):
product_name: str
price: str
description: str
# ============================================================================
# 提示词(强制输出 JSON)
# ============================================================================
product_prompt = '''
你是一个数据提取助手。
请从用户输入的产品信息中,严格按照下面的 JSON 格式返回结果,
**只返回 JSON,不要返回任何其他文字、解释、说明**。
输出格式:
{
"product_name": "产品名称",
"price": "字符串,不知道填0",
"description": "产品详细描述"
}
'''
# ============================================================================
# 核心函数
# ============================================================================
def get_product_info(question: str) -> ProductInfo:
"""获取产品信息,兼容所有 API"""
# 标准 API 调用,不使用 beta.parse()
completion = client.beta.chat.completions.parse(
model="qwen3.6-plus",
messages=[
{"role": "system", "content": dedent(product_prompt)},
{"role": "user", "content": question},
],
response_format=ProductInfo
)
# 获取返回的 JSON 字符串
json_str = completion.choices[0].message.parsed
return json_str
def transform2JSON(parsed_result: ProductInfo) -> str:
product_inform = {
"product_name": parsed_result.product_name,
"price": parsed_result.price,
"description": parsed_result.description
}
return json.dumps(product_inform, ensure_ascii=False, indent=4)
# ============================================================================
# 主程序
# ============================================================================
if __name__ == "__main__":
question = "iphone 16"
result = get_product_info(question)
json_result = transform2JSON(result)
print(json_result)