在信息抽取场景,您可以通过提示词来指引大模型生成标准格式的 JSON 字符串。但大模型输出内容具有不确定性,返回的内容可能不符合 JSON 格式(比如输出的内容多了```json```
,或“以下为JSON字符串”等内容),这会影响到后续的解析步骤。开启结构化输出功能可以确保大模型输出标准格式的 JSON 字符串。
结构化输出功能支持以下模型: qwen-max 系列 qwen-max、qwen-max-0125、qwen-max-0919、qwen-max-latest qwen-plus 系列 qwen-plus、qwen-plus-2025-01-25、qwen-plus-0112、qwen-plus-1220、qwen-plus-1127、qwen-plus-1125、qwen-plus-0919、qwen-plus-latest qwen-turbo 系列 qwen-turbo、qwen-turbo-1101、qwen-turbo-0919、qwen-turbo-latest qwen-开源系列 qwen2.5系列的文本模型(除了math与coder模型) 您需要已获取API Key并配置API Key到环境变量。如果通过 OpenAI SDK 或 DashScope SDK 进行调用,需要安装SDK。 您的请求需要满足两个条件: 设置参数 您需要设置请求参数 提示词指引 您需要在提示词中指引模型输出 JSON 字符串,否则会报错: OpenAI兼容 DashScope Python Node.js curl 在获取大模型输出的 JSON 字符串后,您可以直接使用 JSON 工具进行解析。 Python Node.js 运行以上代码可以将 JSON 字符串转换为 JSON 对象。 A:当前通义千问 API 支持根据您输入的提示词生成合法的 JSON 字符串,无法根据您提供的 JSON Schema 来生成。 如果模型调用失败并返回报错信息,请参见错误信息进行解决。支持的模型
开始使用
前提条件
使用方法
response_format
为{"type": "json_object"}
。'messages' must contain the word 'json' in some form, to use 'response_format' of type 'json_object'.
建议您在提示词中说明每个属性的数据类型,并提供样例给大模型参考。
示例代码
# 步骤 1:发出请求from openai import OpenAIimport osimport json# 预定义示例响应(用于few-shot提示)example1_response = json.dumps(
{ "info": {"name": "张三", "age": "25岁", "email": "zhangsan@example.com"}, "hobby": ["唱歌"]
},
ensure_ascii=False)
example2_response = json.dumps(
{ "info": {"name": "李四", "age": "30岁", "email": "lisi@example.com"}, "hobby": ["跳舞", "游泳"]
},
ensure_ascii=False)
example3_response = json.dumps(
{ "info": {"name": "王五", "age": "40岁", "email": "wangwu@example.com"}, "hobby": ["Rap", "篮球"]
},
ensure_ascii=False)
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-plus",
messages=[
{ "role": "system", "content": f"""提取name、age、email和hobby(数组类型),输出包含info层和hobby数组的JSON。
示例:
Q:我叫张三,今年25岁,邮箱是zhangsan@example.com,爱好是唱歌
A:{example1_response}
Q:我叫李四,今年30岁,邮箱是lisi@example.com,平时喜欢跳舞和游泳
A:{example2_response}
Q:我的邮箱是wangwu@example.com,今年40岁,名字是王五,会Rap和打篮球
A:{example3_response}"""
},
{ "role": "user", "content": "大家好,我叫刘五,今年34岁,邮箱是liuwu@example.com,平时喜欢打篮球和旅游",
},
],
response_format={"type": "json_object"},
)
json_string = completion.choices[0].message.contentprint(json_string)
返回结果
{"info": {"name": "刘五", "age": "34岁", "email": "liuwu@example.com"}, "hobby": ["打篮球", "旅游"]}
解析 JSON 字符串
# 步骤 2:解析 JSON 字符串。请将以下代码添加到步骤 1 之后import json
json_object = json.loads(json_string)print(json_object)
{'info': {'name': '刘五', 'age': '34岁', 'email': 'liuwu@example.com'}, 'hobby': ['打篮球', '旅游']}
常见问题
Q: 通义千问 API 是否支持根据我提供的 JSON Schema 生成数据?
您可以在提示词中明确描述所需 JSON 的键值结构和数据类型,并提供标准数据样例,这会帮助大模型达到类似效果。
错误码