Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yapılandırılmış çıkışlar, modelin çıkarım API'si çağrınızın bir parçası olarak sağladığınız JSON Şeması tanımını izlemesini sağlar. Bu, geçerli JSON oluşturulacağını garanti eden ancak sağlanan şemaya sıkı sıkıya bağlı kalınamadığı eski JSON modu özelliğinin aksinedir. Yapılandırılmış çıkışlar işlev çağrısı, yapılandırılmış verileri ayıklama ve karmaşık çok adımlı iş akışları oluşturma için önerilir.
Başlarken
Python'da nesne şemalarını tanımlamak için kullanabilirsiniz Pydantic .
OpenAI ve Pydantic kitaplıklarının hangi sürümüne bağlı olarak daha yeni bir sürüme yükseltmeniz gerekebilir. Bu örnekler openai 1.42.0 ve pydantic 2.8.2 karşısında test edilmiştir.
pip install openai pydantic azure-identity --upgrade
Kimlik doğrulaması için Microsoft Entra ID kullanmaya yeni başlarsanız bkz. Microsoft Foundry Modellerinde Azure OpenAI'yi Microsoft Entra ID kimlik doğrulamasıyla yapılandırma.
from pydantic import BaseModel
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://ai.azure.com/.default"
)
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=token_provider,
)
class CalendarEvent(BaseModel):
name: str
date: str
participants: list[str]
completion = client.beta.chat.completions.parse(
model="MODEL_DEPLOYMENT_NAME", # replace with the model deployment name of your gpt-4o 2024-08-06 deployment
messages=[
{"role": "system", "content": "Extract the event information."},
{"role": "user", "content": "Alice and Bob are going to a science fair on Friday."},
],
response_format=CalendarEvent,
)
event = completion.choices[0].message.parsed
print(event)
print(completion.model_dump_json(indent=2))
Çıktı
name='Science Fair' date='Friday' participants=['Alice', 'Bob']
{
"id": "chatcmpl-A1EUP2fAmL4SeB1lVMinwM7I2vcqG",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"logprobs": null,
"message": {
"content": "{\n \"name\": \"Science Fair\",\n \"date\": \"Friday\",\n \"participants\": [\"Alice\", \"Bob\"]\n}",
"refusal": null,
"role": "assistant",
"function_call": null,
"tool_calls": [],
"parsed": {
"name": "Science Fair",
"date": "Friday",
"participants": [
"Alice",
"Bob"
]
}
}
}
],
"created": 1724857389,
"model": "gpt-4o-2024-08-06",
"object": "chat.completion",
"service_tier": null,
"system_fingerprint": "fp_1c2eaec9fe",
"usage": {
"completion_tokens": 27,
"prompt_tokens": 32,
"total_tokens": 59
}
}
Yapılandırılmış çıkışlarla fonksiyon çağrısı
İşlev çağrısı için yapılandırılmış çıktılar, strict: true sağlanarak tek bir parametreyle etkinleştirilebilir.
Uyarı
Yapılandırılmış çıkışlar paralel işlev çağrılarıyla desteklenmez. Yapılandırılmış çıkışlar kullanılırken parallel_tool_calls, false olarak ayarlayın.
import openai
from pydantic import BaseModel
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://ai.azure.com/.default"
)
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=token_provider,
)
class GetDeliveryDate(BaseModel):
order_id: str
tools = [openai.pydantic_function_tool(GetDeliveryDate)]
messages = []
messages.append({"role": "system", "content": "You are a helpful customer support assistant. Use the supplied tools to assist the user."})
messages.append({"role": "user", "content": "Hi, can you tell me the delivery date for my order #12345?"})
response = client.chat.completions.create(
model="MODEL_DEPLOYMENT_NAME", # replace with the model deployment name of your gpt-4o 2024-08-06 deployment
messages=messages,
tools=tools
)
print(response.choices[0].message.tool_calls[0].function)
print(response.model_dump_json(indent=2))
Başlarken
Aşağıdaki paketleri projenize ekleyin:
- OpenAI: Standart OpenAI .NET kitaplığı.
- Azure. Identity: Azure SDK kitaplıklarında Microsoft Entra ID belirteç kimlik doğrulaması desteği sağlar.
dotnet add package OpenAI
dotnet add package Azure.Identity
Kimlik doğrulaması için Microsoft Entra ID kullanmaya yeniyseniz bkz. Microsoft Foundry Modellerinde Azure OpenAI'yi Microsoft Entra ID kimlik doğrulamasıyla yapılandırma.
using Azure.Identity;
using OpenAI;
using OpenAI.Chat;
using System.ClientModel.Primitives;
using System.Text.Json;
#pragma warning disable OPENAI001
BearerTokenPolicy tokenPolicy = new(
new DefaultAzureCredential(),
"https://ai.azure.com/.default");
ChatClient client = new(
model: "gpt-4.1",
authenticationPolicy: tokenPolicy,
options: new OpenAIClientOptions()
{
Endpoint = new Uri("https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1")
}
);
ChatCompletionOptions options = new()
{
ResponseFormat = ChatResponseFormat.CreateJsonSchemaFormat(
jsonSchemaFormatName: "math_reasoning",
jsonSchema: BinaryData.FromBytes("""
{
"type": "object",
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"explanation": { "type": "string" },
"output": { "type": "string" }
},
"required": ["explanation", "output"],
"additionalProperties": false
}
},
"final_answer": { "type": "string" }
},
"required": ["steps", "final_answer"],
"additionalProperties": false
}
"""u8.ToArray()),
jsonSchemaIsStrict: true)
};
// Create a list of ChatMessage objects
ChatCompletion completion = client.CompleteChat(
[
new UserChatMessage("How can I solve 8x + 7 = -23?")
],
options);
using JsonDocument structuredJson = JsonDocument.Parse(completion.Content[0].Text);
Console.WriteLine($"Final answer: {structuredJson.RootElement.GetProperty("final_answer")}");
Console.WriteLine("Reasoning steps:");
foreach (JsonElement stepElement in structuredJson.RootElement.GetProperty("steps").EnumerateArray())
{
Console.WriteLine($" - Explanation: {stepElement.GetProperty("explanation")}");
Console.WriteLine($" Output: {stepElement.GetProperty("output")}");
}
Başlarken
response_format, json_schema ayarlanmış ve strict: true ile ayarlanır.
curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/chat/completions \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_MODEL_DEPLOYMENT_NAME",
"messages": [
{"role": "system", "content": "Extract the event information."},
{"role": "user", "content": "Alice and Bob are going to a science fair on Friday."}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "CalendarEventResponse",
"strict": true,
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"date": {
"type": "string"
},
"participants": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name",
"date",
"participants"
],
"additionalProperties": false
}
}
}
}'
Çıktı:
{
"id": "chatcmpl-A1HKsHAe2hH9MEooYslRn9UmEwsag",
"object": "chat.completion",
"created": 1724868330,
"model": "gpt-4o-2024-08-06",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "{\n \"name\": \"Science Fair\",\n \"date\": \"Friday\",\n \"participants\": [\"Alice\", \"Bob\"]\n}"
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 33,
"completion_tokens": 27,
"total_tokens": 60
},
"system_fingerprint": "fp_1c2eaec9fe"
}
Yapılandırılmış çıkışlarla fonksiyon çağrısı
curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/chat/completions \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_MODEL_DEPLOYMENT_NAME",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant. The current date is August 6, 2024. You help users query for the data they are looking for by calling the query function."
},
{
"role": "user",
"content": "look up all my orders in may of last year that were fulfilled but not delivered on time"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "query",
"description": "Execute a query.",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"table_name": {
"type": "string",
"enum": ["orders"]
},
"columns": {
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"status",
"expected_delivery_date",
"delivered_at",
"shipped_at",
"ordered_at",
"canceled_at"
]
}
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"column": {
"type": "string"
},
"operator": {
"type": "string",
"enum": ["=", ">", "<", ">=", "<=", "!="]
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "object",
"properties": {
"column_name": {
"type": "string"
}
},
"required": ["column_name"],
"additionalProperties": false
}
]
}
},
"required": ["column", "operator", "value"],
"additionalProperties": false
}
},
"order_by": {
"type": "string",
"enum": ["asc", "desc"]
}
},
"required": ["table_name", "columns", "conditions", "order_by"],
"additionalProperties": false
}
}
}
]
}'
JSON Şeması desteği ve sınırlamaları
Azure OpenAI yapılandırılmış çıkışları, OpenAI ile aynı JSON Schema alt kümesini destekler.
Desteklenen türler
- Dize
- Sayı
- Boolean
- Tamsayı
- Nesne
- Dizi
- enum
- herhangiBiri
Uyarı
Kök nesneler anyOf türünde olamaz.
Tüm alanlar zorunlu olmalıdır
Tüm alanlar veya işlev parametreleri gerektiği gibi eklenmelidir. Aşağıdaki örnekte, location ve unit her ikisi de "required": ["location", "unit"] altında belirtilmiştir.
{
"name": "get_weather",
"description": "Fetches the weather in the given location",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The location to get the weather for"
},
"unit": {
"type": "string",
"description": "The unit to return the temperature in",
"enum": ["F", "C"]
}
},
"additionalProperties": false,
"required": ["location", "unit"]
}
}
Gerekirse, null ile bir birleşim türü kullanarak isteğe bağlı bir parametreyi taklit etmek mümkündür. Bu örnekte, bu işlem "type": ["string", "null"], satırı ile gerçekleştirilir.
{
"name": "get_weather",
"description": "Fetches the weather in the given location",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The location to get the weather for"
},
"unit": {
"type": ["string", "null"],
"description": "The unit to return the temperature in",
"enum": ["F", "C"]
}
},
"additionalProperties": false,
"required": [
"location", "unit"
]
}
}
İç içe yerleştirme derinliği
Bir şemanın toplam 100 nesne özelliği olabilir ve en fazla beş iç içe yerleştirme düzeyi olabilir
additionalProperties: false her zaman nesnelerde ayarlanmalıdır
Bu özellik, bir nesnenin JSON Şemasında tanımlanmamış başka anahtar değer çiftlerine sahip olup olmadığını denetler. Yapılandırılmış çıkışları kullanmak için bu değeri false olarak ayarlamanız gerekir.
Anahtar sıralama
Yapılandırılmış çıkışlar, sağlanan şemayla aynı şekilde sıralanır. Çıkış sırasını değiştirmek için çıkarım isteğinizin bir parçası olarak gönderdiğiniz şemanın sırasını değiştirin.
Desteklenmeyen türe özgü anahtar sözcükler
| Türü | Desteklenmeyen Anahtar Sözcük |
|---|---|
| Dize | minimum uzunluk maksimumUzunluk pattern format |
| Sayı | minimum maksimum multipleOf |
| Objects | desenÖzellikleri değerlendirilmemişÖzellikler propertyNames minÖzellikler maksimumÖzellikler |
| Diziler | değerlendirilmemiş öğeler içerir minİçerir maksimum içerir minItems maksimum öğe sayısı benzersiz öğeler |
anyOf kullanan iç içe şemalar genel JSON Şeması alt kümesine uymalıdır
Örnek desteklenen anyOf şema:
{
"type": "object",
"properties": {
"item": {
"anyOf": [
{
"type": "object",
"description": "The user object to insert into the database",
"properties": {
"name": {
"type": "string",
"description": "The name of the user"
},
"age": {
"type": "number",
"description": "The age of the user"
}
},
"additionalProperties": false,
"required": [
"name",
"age"
]
},
{
"type": "object",
"description": "The address object to insert into the database",
"properties": {
"number": {
"type": "string",
"description": "The number of the address. Eg. for 123 main st, this would be 123"
},
"street": {
"type": "string",
"description": "The street name. Eg. for 123 main st, this would be main st"
},
"city": {
"type": "string",
"description": "The city of the address"
}
},
"additionalProperties": false,
"required": [
"number",
"street",
"city"
]
}
]
}
},
"additionalProperties": false,
"required": [
"item"
]
}
Tanımlar desteklenir
Desteklenen örnek:
{
"type": "object",
"properties": {
"steps": {
"type": "array",
"items": {
"$ref": "#/$defs/step"
}
},
"final_answer": {
"type": "string"
}
},
"$defs": {
"step": {
"type": "object",
"properties": {
"explanation": {
"type": "string"
},
"output": {
"type": "string"
}
},
"required": [
"explanation",
"output"
],
"additionalProperties": false
}
},
"required": [
"steps",
"final_answer"
],
"additionalProperties": false
}
Özyinelemeli şemalar desteklenir
Kök özyineleme için # kullanma örneği:
{
"name": "ui",
"description": "Dynamically generated UI",
"strict": true,
"schema": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "The type of the UI component",
"enum": ["div", "button", "header", "section", "field", "form"]
},
"label": {
"type": "string",
"description": "The label of the UI component, used for buttons or form fields"
},
"children": {
"type": "array",
"description": "Nested UI components",
"items": {
"$ref": "#"
}
},
"attributes": {
"type": "array",
"description": "Arbitrary attributes for the UI component, suitable for any element",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name of the attribute, for example onClick or className"
},
"value": {
"type": "string",
"description": "The value of the attribute"
}
},
"additionalProperties": false,
"required": ["name", "value"]
}
}
},
"required": ["type", "label", "children", "attributes"],
"additionalProperties": false
}
}
Açık özyineleme örneği:
{
"type": "object",
"properties": {
"linked_list": {
"$ref": "#/$defs/linked_list_node"
}
},
"$defs": {
"linked_list_node": {
"type": "object",
"properties": {
"value": {
"type": "number"
},
"next": {
"anyOf": [
{
"$ref": "#/$defs/linked_list_node"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false,
"required": [
"next",
"value"
]
}
},
"additionalProperties": false,
"required": [
"linked_list"
]
}
Uyarı
Şu anda yapılandırılmış çıktı aşağıdakilerle desteklenmiyor:
- Kendi veri senaryolarınızı getirin .
- Yardımcılar veya Dökümhane Temsilcileri Hizmeti.
-
gpt-4o-audio-previewvegpt-4o-mini-audio-previewsürümü:2024-12-17.
Desteklenen modeller
-
gpt-5.1-codexSürüm:2025-11-13 -
gpt-5.1-codex miniSürüm:2025-11-13 -
gpt-5.1Sürüm:2025-11-13 -
gpt-5.1-chatSürüm:2025-11-13 -
gpt-5-proSürüm2025-10-06 -
gpt-5-codexSürüm2025-09-11 -
gpt-5Sürüm2025-08-07 -
gpt-5-miniSürüm2025-08-07 -
gpt-5-nanoSürüm2025-08-07 -
codex-miniSürüm2025-05-16 -
o3-proSürüm2025-06-10 -
o3-miniSürüm2025-01-31 -
o1Sürüm:2024-12-17 -
gpt-4o-miniSürüm:2024-07-18 -
gpt-4oSürüm:2024-08-06 -
gpt-4oSürüm:2024-11-20 -
gpt-4.1Sürüm2025-04-14 -
gpt-4.1-nanoSürüm2025-04-14 -
gpt-4.1-miniSürüm:2025-04-14 -
o4-miniSürüm:2025-04-16 -
o3Sürüm:2025-04-16
API desteği
Yapılandırılmış çıkışlar için destek ilk olarak API sürümüne 2024-08-01-previeweklendi. En son önizleme API'lerinde ve en son GA API'sinde kullanılabilir: v1.