重要
此功能以公共预览版提供,在基础模型 API 按令牌付费和预配的吞吐量终结点上都受支持。
本文介绍 Azure Databricks 上的结构化输出,以及如何将它们用作生成 AI 应用程序工作流的一部分。 结构化输出与 OpenAI 兼容,仅在作为基础模型 API 的一部分的模型服务期间可用。
什么是结构化输出?
结构化输出提供了一种方法,以 JSON 对象的形式从输入数据生成结构化数据。 可以选择生成符合特定 JSON 架构的文本、非结构化 JSON 对象和 JSON 对象。 使用基础模型 API 按令牌付费和预配的吞吐量终结点提供的聊天模型支持结构化输出。
Databricks 建议对以下方案使用结构化输出:
- 从大量文档中提取数据。 例如,将产品评审反馈识别和分类为负面、积极或中性。
- 需要输出的批处理推理任务采用指定格式。
- 数据处理,例如将非结构化数据转换为结构化数据。
使用结构化输出
在聊天请求中使用你的结构化输出 response_format
。 请参阅 基础模型 REST API 参考。
下面是将数据提取到特定 JSON 架构的示例。
import os
import json
from openai import OpenAI
DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')
client = OpenAI(
api_key=DATABRICKS_TOKEN,
base_url=DATABRICKS_BASE_URL
)
response_format = {
"type": "json_schema",
"json_schema": {
"name": "research_paper_extraction",
"schema": {
"type": "object",
"properties": {
"title": { "type": "string" },
"authors": {
"type": "array",
"items": { "type": "string" }
},
"abstract": { "type": "string" },
"keywords": {
"type": "array",
"items": { "type": "string" }
}
},
},
"strict": True
}
}
messages = [{
"role": "system",
"content": "You are an expert at structured data extraction. You will be given unstructured text from a research paper and should convert it into the given structure."
},
{
"role": "user",
"content": "..."
}]
response = client.chat.completions.create(
model="databricks-meta-llama-3-3-70b-instruct",
messages=messages,
response_format=response_format
)
print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))
下面是一个 JSON 提取示例,但手头前不知道 JSON 架构。
import os
import json
from openai import OpenAI
DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')
client = OpenAI(
api_key=DATABRICKS_TOKEN,
base_url=DATABRICKS_BASE_URL
)
response_format = {
"type": "json_object",
}
messages = [
{
"role": "user",
"content": "Extract the name, size, price, and color from this product description as a JSON object:\n<description>\nThe SmartHome Mini is a compact smart home assistant available in black or white for only $49.99. It's 5 inches wide.\n</description>"
}]
response = client.chat.completions.create(
model="databricks-meta-llama-3-3-70b-instruct",
messages=messages,
response_format=response_format
)
print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))
JSON 架构
基础模型 API 广泛支持 OpenAI 接受的结构化输出。 但是,将更简单的 JSON 架构用于 JSON 架构定义会导致生成更高质量的 JSON。 为了提高生成质量,基础模型 API 仅支持 JSON 架构规范的子集。
不支持以下函数调用定义键:
- 使用
pattern
的正则表达式。 - 使用以下方法进行复杂的嵌套或架构组合和验证:
anyOf
、oneOf
、allOf
、prefixItems
或$ref
。 - 类型列表,但
[type, “null”]
的特殊情况除外,其中列表中的一种类型是有效的 JSON 类型,另一种类型是"null"
令牌使用情况
提示注入和其他技术用于提高结构化输出的质量。 这样做会影响模型消耗的输入和输出令牌数量,进而导致计费问题。
限制
- JSON 架构中指定的最大键数为
64
。 - 基础模型 API 不强制执行对象和数组的长度或大小约束。
- 这包括
maxProperties
、minProperties
和maxLength
等关键字。
- 这包括
- 大量嵌套的 JSON 架构会导致质量较低的生成。 如果可能,请尝试平展 JSON 架构以获得更好的结果。