OpenAI — Yeni Özelliği: Yapılandırılmış Çıktılar ile Güvenilir AI Yanıtları

Tarık Kaan Koç
Nane & Limon
Published in
4 min readAug 8, 2024
Sam Altman

Merhaba Arkadaşlar!

Bugün, OpenAI’ın en yeni özelliklerinden biri olan Structured Outputs ile ilgili gelişmeyi sizlerle paylaşmak istiyorum. GPT-4o, Mayıs 2024'te tanıtıldı ve ardından GPT-4o mini Temmuz 2024'te piyasaya sürüldü. Bu modeller, AI çıktılarınızı belirli bir yapıya oturtmanıza yardımcı olmak için özel olarak tasarlandı. Ancak, 6 Ağustos 2024'te tanıtılan GPT-4o-2024–08–06 modeli ile Structured Outputs özelliği artık standart hale geliyor.

Bu özellik, AI modelinizin her zaman belirlediğiniz JSON Schema’ya uygun yanıtlar üretmesini sağlıyor. Artık modelin önemli anahtarları atlaması veya geçersiz değerler oluşturması, halüsinasyon görmesi gibi sorunlarla karşılaşmanıza gerek kalmıyor. Structured Outputs sayesinde yanıtlarınız her zaman doğru formatta ve eksiksiz oluyor.

Structured Outputs özelliğiyle elde edeceğiniz bazı avantajlar şöyle:

  • Reliable Type Safety: Yanlış formatlanmış yanıtlar için doğrulama veya yeniden deneme yapmanıza gerek kalmıyor.
  • Explicit Refusals: Güvenlik temelli model reddedilmeleri artık programatik olarak tespit edilebiliyor.
  • Simpler Prompting: Tutarlı formatlama sağlamak için güçlü ifadeler kullanmanıza gerek kalmıyor.

Geçmişte gpt-4–0613 modeli karmaşık JSON şemalarını takip etmede %40'ın altında bir başarı skoruna sahipken, yeni gpt-4o-2024–08–06 modeli Structured Outputs ile %100 başarı skoru elde etti.

Ayrıca, bu özellik sadece REST API üzerinden JSON Şeması desteği sağlamakla kalmıyor, aynı zamanda Python ve JavaScript için OpenAI SDK’larıyla Pydantic ve Zod kullanarak nesne şemalarını kolayca tanımlamanıza olanak tanıyor. Bu, kodda tanımlı bir şemaya uygun olarak yapılandırılmış metinden bilgi çıkarmayı çok daha basit hale getiriyor

score

Şimdi, Structured Outputs özelliğini nasıl kullanabileceğinizi basit bir örnekle açıklamak istiyorum.

Örneğin, aşağıda bir tarif asistanı oluşturmak için nasıl Structured Outputs özelliğini kullanabileceğinizi gösteren bir kod parçası hazırladım. Bu kod, Pydantic ile veri modellerini tanımlar ve OpenAI SDK’sını kullanarak bir tarif sorgusu yapar. Yanıtın RecipeResponse modeline uygun olup olmadığını kontrol eder ve verileri düzenli bir şekilde yazdırır:

Örnek Uygulama:

message output:

{
"ParsedChatCompletionMessage": [
"RecipeResponse"
],
"content": "{\"ingredients\":[\"500g lamb neck or shoulder, cut into chunks\",\"1 cup rice\",\"4 cups lamb broth or water\",\"4 cloves garlic, minced\",\"1 tablespoon red pepper paste (or to taste)\",\"1 teaspoon ground red pepper (pul biber)\",\"Salt to taste\",\"Freshly ground black pepper to taste\",\"1 teaspoon ground cumin\",\"Lemon wedges for serving\"],\"steps\":[{\"description\":\"Cook lamb chunks in a pressure cooker or pot until tender. This usually takes about 45 minutes in a pressure cooker or 1.5 to 2 hours in a regular pot.\",\"duration\":\"45 minutes to 2 hours\"},{\"description\":\"Remove the lamb from the broth and set it aside to cool slightly. Shred the meat, discarding any bones and excess fat.\",\"duration\":\"10 minutes\"},{\"description\":\"In a large pot, bring the lamb broth (or water) to a boil. Add the rice and cook until tender, about 20 minutes.\",\"duration\":\"20 minutes\"},{\"description\":\"Once the rice is cooked, add the shredded lamb back into the pot.\",\"duration\":\"5 minutes\"},{\"description\":\"In a small pan, sauté the minced garlic in a bit of the broth or oil for about 1 minute. Add the red pepper paste, ground red pepper, salt, black pepper, and cumin. Mix well.\",\"duration\":\"5 minutes\"},{\"description\":\"Add the garlic mixture to the soup pot and stir to combine all the ingredients. Let it simmer for an additional 10 minutes so the flavors meld together.\",\"duration\":\"10 minutes\"},{\"description\":\"Adjust the seasoning to your taste with additional salt or pepper if needed. Serve hot with lemon wedges on the side.\",\"duration\":\"5 minutes\"}],\"total_time\":\"Approx. 1.5 to 2 hours\"}",
"refusal": null,
"role": "assistant",
"function_call": null,
"tool_calls": [],
"parsed": {
"ingredients": [
"500g lamb neck or shoulder, cut into chunks",
"1 cup rice",
"4 cups lamb broth or water",
"4 cloves garlic, minced",
"1 tablespoon red pepper paste (or to taste)",
"1 teaspoon ground red pepper (pul biber)",
"Salt to taste",
"Freshly ground black pepper to taste",
"1 teaspoon ground cumin",
"Lemon wedges for serving"
],
"steps": [
{
"description": "Cook lamb chunks in a pressure cooker or pot until tender. This usually takes about 45 minutes in a pressure cooker or 1.5 to 2 hours in a regular pot.",
"duration": "45 minutes to 2 hours"
},
{
"description": "Remove the lamb from the broth and set it aside to cool slightly. Shred the meat, discarding any bones and excess fat.",
"duration": "10 minutes"
},
{
"description": "In a large pot, bring the lamb broth (or water) to a boil. Add the rice and cook until tender, about 20 minutes.",
"duration": "20 minutes"
},
{
"description": "Once the rice is cooked, add the shredded lamb back into the pot.",
"duration": "5 minutes"
},
{
"description": "In a small pan, sauté the minced garlic in a bit of the broth or oil for about 1 minute. Add the red pepper paste, ground red pepper, salt, black pepper, and cumin. Mix well.",
"duration": "5 minutes"
},
{
"description": "Add the garlic mixture to the soup pot and stir to combine all the ingredients. Let it simmer for an additional 10 minutes so the flavors meld together.",
"duration": "10 minutes"
},
{
"description": "Adjust the seasoning to your taste with additional salt or pepper if needed. Serve hot with lemon wedges on the side.",
"duration": "5 minutes"
}
],
"total_time": "Approx. 1.5 to 2 hours"
}
}

OpenAI’nin Structured Outputs özelliğiyle projelerinizi daha düzenli, güvenilir ve tutarlı hale getirebilir, AI çıktılarınızın kalitesini artırabilirsiniz. Bu örnekte, Structured Outputs kullanarak tarif verilerini net ve düzenli bir şekilde alabiliyoruz. Bu özellik sayesinde, verileriniz her zaman belirlediğiniz yapı ile uyumlu olur, bu da veri işleme ve entegrasyon süreçlerinizi daha verimli ve güvenilir hale getirir. Hemde daha tasarruflu..

Daha detaylı bilgi almak ve bu özelliği nasıl kullanacağınızı öğrenmek için Structured Outputs dökümantasyonuna göz atmanızı öneririm. Bu kaynak, özelliklerin kullanımını, ek kullanım senaryolarını ve sınırlamaları detaylı bir şekilde ele alıyor.

Sorularınız varsa veya bu özellik hakkında daha fazla bilgi almak isterseniz, Bana linkedin üzerinden ulaşabilirsiniz. 🦋

--

--