LLM Yanıtlarını JSON veya Tablo Formatında Almanın Yolu

müfettiş

Moderatör
Katılım
20 Ocak 2024
Mesajlar
325
Tepkime puanı
1
Puanları
18

Yapay zeka dünyasında, bir LLM ile sohbet etmek işin sadece başlangıcıdır. Eğer bu modelleri bir yazılıma entegre etmek, veri analizi yapmak veya otomatize edilmiş süreçlerde kullanmak istiyorsanız, modelin "sohbet" etmesini değil, veri üretmesini istersiniz. Serbest metin yanıtları insanlar için harikadır, ancak makineler için tam bir kabustur.

1. Neden Yapılandırılmış Veriye İhtiyaç Duyarız?​

Geleneksel programlama dilleri (Python, JavaScript, Go vb.), verilerin belirli bir düzende olmasını bekler. Bir LLM'e "Bana Avrupa'daki 5 ülkeyi ve başkentlerini söyle" dediğinizde, size şu yanıtı verebilir:

"Tabii ki! İşte Avrupa'dan bazı örnekler: Fransa'nın başkenti Paris, Almanya'nınki Berlin..."
Bu yanıt bir insan için anlaşılırdır ancak bir veritabanına kaydedilemez. Bunun yerine şu formatta bir çıktı almanız gerekir:

Kod:
[
  {"ülke": "Fransa", "başkent": "Paris"},
  {"ülke": "Almanya", "başkent": "Berlin"}
]

Bu yapı sayesinde veriyi doğrudan bir API yanıtı olarak dönebilir veya bir Excel dosyasına aktarabilirsiniz.

2. LLM'den JSON Almanın Temel Teknikleri​

Bir LLM'den JSON formatında çıktı almanın birkaç farklı seviyesi vardır. Basit istemlerden (prompt), gelişmiş API özelliklerine kadar bu yöntemleri inceleyelim.

A. İstem Mühendisliği (Prompt Engineering)​

En temel yöntem, modele ne istediğinizi açıkça söylemektir. Ancak burada "JSON formatında yaz" demek genellikle yetmez.
  • Şema Tanımlama: Modele hangi anahtarları (keys) kullanması gerektiğini söyleyin.
  • Örnek Verme (Few-Shot Prompting): Modele bir veya iki örnek gösterin.
  • Sınırlama: "Sadece JSON döndür, açıklama yapma" gibi kesin komutlar ekleyin.

B. JSON Modu (JSON Mode)​

OpenAI (GPT-4o) ve Google (Gemini 1.5 Pro) gibi modern modeller, sistem düzeyinde bir "JSON Mode" sunar. Bu mod aktif edildiğinde, modelin çıktısının geçerli bir JSON olacağı garanti edilir. Ancak yine de istem içerisinde "JSON" kelimesinin geçmesi ve bir şema belirtilmesi önerilir.

C. Function Calling (Fonksiyon Çağırma)​

Bu, en profesyonel ve güvenilir yöntemdir. Modeli doğrudan bir yanıt vermeye zorlamak yerine, modele bir "fonksiyon" tanımlarsınız. Model, yanıtı bu fonksiyonun argümanlarıymış gibi yapılandırır. Bu sayede veri tipi (string, integer, boolean) kontrolleri de yapılmış olur.

3. Tablo Formatında Veri Alma Stratejileri​

Tablo formatı, özellikle raporlama ve veri analizi süreçlerinde kritiktir. LLM'ler iki tür tablo çıktısı verebilir:

Markdown Tabloları​

Eğer yanıtı bir sohbet arayüzünde (ChatGPT, Claude gibi) görmek istiyorsanız, Markdown formatı en iyisidir.
Örnek İstem:
"Aşağıdaki verileri Markdown tablo formatında sun: Ülke, Nüfus, Para Birimi."

CSV ve TSV Formatları​

Veriyi doğrudan Excel veya Google Sheets'e yapıştıracaksanız, CSV (Virgülle Ayrılmış Değerler) formatını istemelisiniz. LLM'e "Verileri CSV formatında, sütun ayırıcı olarak virgül kullanarak sağla" komutunu vermek, kopyala-yapıştır kolaylığı sağlar.

4. Karşılaşılan Zorluklar ve "Hallucination" (Halüsinasyon) Problemi​

LLM'lerden yapılandırılmış veri alırken en büyük düşmanınız modelin yaratıcılığıdır.
  • Eksik Parantezler: Model bazen çok uzun JSON yanıtlarında son süslü parantezi } kapatmayı unutabilir.
  • Yorum Satırları: Bazı modeller JSON içine "İşte istediğiniz veriler:" gibi metinler ekleyebilir, bu da kodun hata vermesine neden olur.
  • Şemadan Sapma: Belirlediğiniz anahtar isimlerini (örn: dogum_tarihi) kafasına göre değiştirebilir (tarih_dogum).

Çözüm: Programatik Doğrulama (Validation)​

LLM'den gelen yanıtı doğrudan kullanmak yerine bir doğrulama katmanından geçirmelisiniz. Python'daki Pydantic kütüphanesi bu iş için biçilmiş kaftandır. Gelen veriyi bir sınıfa (class) aktarır, eksik veya hatalı tip varsa hata fırlatır.

5. İleri Seviye Araçlar: LangChain ve Instructor​

Eğer bu süreci otomatize etmek istiyorsanız, tekerleği yeniden icat etmenize gerek yok.
  1. Instructor (Python/JS): Pydantic tabanlıdır ve LLM yanıtlarını doğrudan Python nesnelerine dönüştürür. Hatalı JSON geldiğinde modeli otomatik olarak uyarır ve düzeltmesini ister (Self-healing).
  2. LangChain Output Parsers: Çıktıyı belirli bir yapıya zorlamak için hazır şablonlar sunar.
  3. Outlines: Modelin olasılık dağılımına müdahale ederek, sadece şemaya uygun karakterler üretmesini sağlayan çok güçlü bir kütüphanedir.

6. Adım Adım Uygulama Rehberi​

Bir projede LLM'den veri almak için şu iş akışını izleyin:
  1. Şemanızı Belirleyin: Hangi verilere ihtiyacınız var? (Ad, Soyad, Email vb.)
  2. Modeli Seçin: Karmaşık yapılar için GPT-4o veya Gemini 1.5 Pro, basit listeler için daha hızlı ve ucuz modelleri seçin.
  3. System Prompt Hazırlayın: "Sen bir veri çıkarma asistanısın. Sadece JSON formatında yanıt verirsin."
  4. Hata Yönetimi Ekleyin: Eğer gelen veri json.loads() aşamasında hata veriyorsa, hatayı modele geri gönderip "Bunu düzelt" diyen bir döngü kurun.

7. Özet Tablo: Hangi Format Ne Zaman Kullanılmalı?​

İhtiyaçÖnerilen FormatAvantajı
Yazılım EntegrasyonuJSONMakineler tarafından kolay okunur.
Veri Analizi / ExcelCSVDoğrudan tablolama araçlarına aktarılır.
İnsan OkumasıMarkdown TabloGörsel olarak estetiktir.
Karmaşık İlişkili VeriNested JSONAlt nesneleri (liste içinde liste) destekler.
 
Geri
Üst