Ana içeriğe geç

Yapılandırılmış Çıktı

Normalde bir yapay zekâ node'u serbest biçimli metinle yanıt verir. Yapılandırılmış çıktı, bunun yerine ona temiz, adlandırılmış alanlar döndürtür — name, email ve intent gibi — böylece sonraki node'lar her değeri kesin biçimde kullanabilir. Bir yapay zekâ node'una, üzerinde işlem yapabileceğiniz bir "formu doldurtmanın" güvenilir yoludur.

Ne işe yarar

Ayrıştırmak zorunda kalacağınız bir paragraf yerine, yapılandırılmış çıktı node'u tanımladığınız ayrı alanlar üretir. Yapılandırılmış çıktı, LLM node'undaki bir ayardır. Örneğin bir müşteri mesajı verildiğinde, bir LLM node'u şunu döndürebilir:

name → "Ali Yılmaz"
email → "ali@example.com"
intent → "refund_request"

Her alan, sonraki bir adımda okuyabileceğiniz kendi değişkeni olur — flow state'e yazın, bir Koşul içinde dallandırın ya da bir yanıtın içine yerleştirin.

Bir LLM node'unda tanımlanmış JSON Yapılandırılmış Çıktı alanları

Kurulumu

Bir LLM node'unda yapılandırılmış çıktıyı etkinleştirin ve alanlarınızı tanımlayın — her biri için bir ad ve bir tür (metin, sayı vb.). Node çalıştığında yapay zekâ tam olarak bu alanları döndürmeye yönlendirilir.

Alan adlarını kısa ve açıklayıcı tutun (name, orderId, sentiment). Değerlere referans vermek için bu adları kullanacaksınız.

Agent node'larında yapılandırılmış çıktı yoktur

Yapılandırılmış çıktı yalnızca LLM node'unda bulunur. Bir Agent node'u sabit bir şema değil, serbest metin ve varsa araç çağrıları üretir. Bir agent'tan yapılandırılmış veri almak için, onun ardından, agent'ın yanıtından ihtiyacınız olan alanları çıkaran yapılandırılmış çıktılı bir LLM node'u koyun.

Alanları okumak

Bulunduğunuz yere bağlı olarak yapılandırılmış bir alana referans vermenin iki yolu vardır.

Sonraki bir node'dan (node'lar arası) — kaynak node'un etiketini artı alan adını kullanın:

{{ Extract Info.name }}
{{ Extract Info.email }}

Aynı node'un içinden (kendine referans — örneğin o node'un kendi Update State'inde) — output kullanın:

{{ output.name }}
{{ output.email }}

İkisi de çalışma sırasında çözümlenir. Şema tanımlandıktan sonra palet ve {{ otomatik tamamlaması bu alanları sizin için otomatik olarak listeler.

Noktadan önceki label büyük/küçük harfe duyarlıdır

{{ Extract Info.name }}, node label'ı ile harfi harfine, büyük/küçük harf dahil eşleşir. {{ extract info.name }} hiçbir şeye çözümlenmez ve ham metin olduğu gibi gönderilir. Alan içermeyen label ({{ Extract Info }}) ise büyük/küçük harfe duyarsız eşleştirilir ve çalışmaya devam eder — noktalı biçimin daha katı kuralının gözden kaçmasının nedeni tam olarak budur. Label'ı elle yazmak yerine otomatik tamamlamaya ekletin.

{{output.x}} tuzağı

{{ output.<field> }}, "bu node'un kendi yapılandırılmış çıktısından bir alan" anlamına gelir. Bir node'un sonucuna aynı node'un içinden (örneğin Update State'inde) referans vermek içindir.

output yalnızca kendine aittir

{{ output.name }}, mevcut node'un yapılandırılmış çıktısına atıfta bulunur — daha önceki bir node'a değil. Farklı bir node'dan bir alan istiyorsanız, o node'un etiketini kullanmalısınız: {{ Extract Info.name }}. Aslında bir üst node'un alanını kastettiğiniz yerde çıplak bir {{ output.name }} kullanmak yanlış node'a (veya hiçbir şeye) çözümlenir; bir alan referansını node'lar arasında kopyalarken yapılması kolay bir hatadır.

Tuzaktan kaçınan güvenilir bir kalıp:

  1. Yapay zekâ node'una yapılandırılmış çıktı alanları verin (name, email).
  2. Aynı node'un Update State'inde, bunları {{ output.name }} ve {{ output.email }} kullanarak flow state'e kaydedin.
  3. Sonraki her node'da, kararlı değerleri state'ten okuyun: {{$flow.state.name}}.

Her şeyi flow state üzerinden yönlendirmek, sonraki node'ların output'a hiç bağlı olmaması demektir — belirsizliği olmayan $flow.state.* değerini okurlar.

Modele ulaşılamadığında

Yapılandırılmış çıktı sesli şekilde başarısız olur; bu bilinçli bir tercihtir.

Diğer tüm yapay zekâ node'ları, sağlayıcıya ulaşılamadığında yumuşak bir şekilde geriler: yeniden denemeler ve model yedeklemeleri tükendikten sonra node kısa bir özür cümlesiyle yanıt verir ve konuşma devam eder. Yapılandırılmış çıktısı olan bir node bunu yapmaz; bunun yerine yürütmeyi hatayla sonlandırır.

Nedeni, alternatifin neye benzeyeceğidir. Özür cümlesi düz metindir, oysa şemanız alan sözü vermiştir. Node başarı bildirirken room_condition: undefined döndürür, sonrasındaki koşul yanlış dalı seçer ve veritabanına yazan her node tamamlanmış görünen ama içi boş bir kayıt oluşturur. Bir kanıt belgesinde — denetim raporu, imzalı form, sonradan birinin dayanacağı bir kayıt — gerçek gibi görünen bir boşluk, birinin bakmak zorunda kalacağı bir hatadan çok daha kötüdür.

Yapılandırılmış çıktı node'unda bir yürütme hata verdiğinde:

  • Hata mesajı yalnızca "model başarısız oldu" demez; altta yatan nedeni (503, geçersiz anahtar, zaman aşımı) adıyla taşır. Yeniden denemeden önce okuyun.
  • Kısmi hiçbir şey yazılmamıştır. Temizlenecek yarım kayıt yoktur.
  • Yeniden denemek güvenlidir. Hata genellikle geçici bir sağlayıcı kesintisidir ve platform vazgeçmeden önce zaten birkaç modeli denemiştir.

Hata yerine özür cümlesini tercih ediyorsanız — çıktısı yalnızca bir insana gösterilen, saklanmayan ve dallanmada kullanılmayan bir node için — o node'dan yapılandırılmış çıktı alanlarını kaldırın ve metni kendiniz ayrıştırın.

İlgili