Menu

Tree of Thought Prompting: Nasıl Çalışır, Örnekler

Tree of thought prompting, modelin birkaç kısmi çözümü denemesini, her birini değerlendirmesini ve sadece umut vadeden dalları tutmasını sağlar. Orijinal yöntemin nasıl çalıştığını, deneyebileceğin tek promptluk bir sürümü ve o sürümün nerede yetersiz kaldığını anlatıyoruz.

Bu sayfadaki her istemi düzenleyebilir, sonra ChatGPT, Claude ya da başka bir yapay zekâ uygulamasında açabilirsin.

Tree of thought (düşünce ağacı) prompting, bir dil modelini bir problem üzerinde senin kâğıt üzerinde çalışabileceğin gibi çalıştırır: birkaç olası sonraki adımı yaz, hangilerinin umut vadettiğine karar ver, onlarla devam et ve bir dal hiçbir yere varmıyorsa onu bırak. Fikir Yao ve arkadaşlarının 2023 tarihli "Tree of Thoughts: Deliberate Problem Solving with Large Language Models" makalesinden geliyor. Tek bir akıl yürütme çizgisini izleyen chain of thought prompting tekniğini birçok çizgi üzerinde bir aramaya genişletir.

Bu sayfa orijinal yöntemin nasıl çalıştığını anlatıyor, ChatGPT, Claude ya da Gemini'de deneyebileceğin tek promptluk bir sürüm veriyor ve tek prompt yetmediğinde döngüyü kodda gösteriyor.

Tree of thoughts nasıl çalışır

Makale yöntemi dört karara ayırır.

  1. Neyin düşünce sayıldığı. Düşünce, modelin iyi üretebileceği kadar küçük ve değerlendirilebilecek kadar büyük tek bir ara adımdır. Bir matematik bulmacasında bir denklemdir; bir yazı görevinde kısa bir plandır.
  2. Düşüncelerin nasıl üretildiği. Model mevcut kısmi çözümden birkaç aday sonraki adım önerir; ya bağımsız örnekleyerek ya da hepsini tek bir yanıtta listeleyerek.
  3. Nasıl değerlendirildikleri. Modelden her kısmi çözümü puanlaması istenir. Makale iki tarz kullandı: her durumu kendi başına puanlamak (örneğin "kesin", "muhtemel" ya da "imkânsız" diye) ya da modele birkaç durum gösterip en iyisine oy vermesini istemek.
  4. Nasıl arama yapıldığı. Bir program her seviyede en iyi birkaç durumu tutar (genişlik öncelikli arama) ya da tek bir dalı derinlemesine izler ve değerlendirme umutsuz dediğinde geri döner (derinlik öncelikli arama).

Makaledeki 24 Oyunu görevini ele al: 4, 9, 10 ve 13 sayılarını dört temel işlemle her birini bir kez kullanarak 24'e ulaş. Bir chain of thought ilk denklemine bağlanır ve onunla yaşamak zorunda kalır. Bir tree of thoughts ilk adım olarak 13 - 9 = 4, 10 - 4 = 6 ve 4 + 9 = 13 denemelerini yapabilir, modele kalan sayılardan hangilerinin hâlâ 24'e ulaşabileceğini sorar, çıkmaz sokağı bırakır (10, 13 ve 13 ile 24 yapılamaz) ve (10 - 4) * (13 - 9) = 24 ile biter.

Makale ne gösterdi

Yazarlar, her biri planlama ya da arama gerektirdiği için GPT-4'ün chain of thought ile bile zorlandığı üç görev seçti: 24 Oyunu, sabit bitiş cümleleri olan bir yaratıcı yazı görevi ve 5x5 mini bulmacalar. GPT-4 ile ağaç araması, chain of thought prompting'e ya da birkaç zincir örnekleyip çoğunluk cevabını almaya göre çok daha fazla 24 Oyunu bulmacası çözdü ve diğer iki görevde de daha iyi sonuç verdi.

Bedeli çağrılardır. Her aday adım ve her değerlendirme ayrı bir istektir, bu yüzden chain of thought'un bir çağrıya mal olduğu yerde çözülen tek bir problem düzinelerce model çağrısı alabilir. Bu takas zor problemler için mantıklıdır, basit olanlar için hiç değildir.

Tek bir promptta tree of thought

Fikri tek bir mesajla yaklaşık olarak uygulayabilirsin: birkaç farklı yaklaşım, verdiğin bilgilere göre her biri için bir hüküm ve sadece hayatta kalanın geliştirilmesini iste. Aşağıdaki sekmeler aynı problemi iki şekilde gönderiyor.

Web uygulamamız Avrupa'daki kullanıcılar için hızlı ama Avustralya'daki kullanıcılar için yüklenmesi yaklaşık 12 saniye sürüyor. Sunucu Frankfurt'ta. Sayfa yüklenirken tarayıcı art arda 40 küçük API isteği yapıyor. Sebep ne ve ne yapmalıyız?
Try it
Example replyReplies vary between models and runs.

Asıl sebep Avustralya ile Frankfurt'taki sunucunuz arasındaki fiziksel mesafe. Her istek Avrupa'ya gidip gelmek zorunda ve her sayfa yüklemesinde 40 istek olduğu için bu gecikme birikiyor.

Standart çözüm bir CDN (içerik dağıtım ağı). CDN sitenizin kopyalarını dünyanın dört bir yanındaki sunucularda tutar, böylece Avustralyalı kullanıcılar Frankfurt yerine yakındaki bir konumdan indirir. Çoğu sağlayıcı, kodunuzu değiştirmeden mevcut bir sitenin önüne CDN koymanıza izin verir.

Yükleme süresini daha da azaltmak için görselleri sıkıştırabilir ve tarayıcı önbelleğini etkinleştirebilirsiniz.

Doğrudan yanıt saçma değil; 40 isteği bile sayıyor, ama uyan ilk açıklamayı ("mesafe") alıp onunla devam etti. Dallanan yanıt her açıklamayı prompttaki ayrıntılarla karşılaştırdı; "art arda" ifadesinin "Avustralya"dan daha önemli olduğunu ve CDN'in API çağrılarına dokunmayacağını böyle fark etti.

Tekrar kullanılabilir bir şablon

Aynı yapı tasarım kararları ve planlar için de işe yarar. Problemi ve önem verdiğin kriterleri doldur; yanıt varsayılan değerlerle doldurulmuş hâli gösteriyor.

Dallan, değerlendir, seç
Fill in
Problem: Üç kişilik ekibimizin küçük bir Node.js API'sini nasıl deploy edeceğine karar vermesi gerekiyor. Kriterler: aylık maliyet, kurulum süresi, süregelen bakım Gerçekten birbirinden farklı 3 yaklaşım öner. Her birini her kritere göre kısa bir satırda değerlendir ve bir hüküm ver: tut ya da bırak. Sonra sadece en iyi yaklaşımı beş somut ilk adıma dönüştür. İki yaklaşım berabere kalırsa aralarında karar vermeyi hangi bilginin sağlayacağını söyle.
Try it
Example replyReplies vary between models and runs.

Platform as a service (yönetilen bir uygulama barındırma hizmeti) Maliyet: orta, trafikle artar. Kurulum: bir Git deposundan bir saatten kısa. Bakım: düşük, işletim sistemini sağlayıcı yamalar. Tut.

Kendi sanal sunucunuz Maliyet: en düşük. Kurulum: sunucu, TLS ve bir süreç yöneticisi için bir gün. Bakım: yüksek, güncellemeler ve yeniden başlatmalar size ait. Üç kişilik bir ekip için bırak.

Serverless fonksiyonlar Maliyet: küçük ölçekte çok düşük. Kurulum: orta, mevcut bir sunucu uygulamasının yeniden yapılandırılması gerekebilir. Bakım: düşük, ama soğuk başlatmalar gecikme ekler. İkinci seçenek olarak tut.

En iyisi: platform as a service. İlk adımlar:

  1. Bir başlatma scripti ekle ve portu bir ortam değişkeninden oku.
  2. Gizli bilgileri sağlayıcının ortam ayarlarına taşı.
  3. Depoyu bağla ve main dalını deploy et.
  4. Bir sağlık kontrolü endpoint'i ekle.
  5. Bir harcama uyarısı ayarla.

Tek promptun yetersiz kaldığı yerler

Tek promptluk sürüm yöntemin kelimelerini korur ama mekanizmasının çoğunu kaybeder.

  • Gerçek geri dönüş yok. Model bütün dalları ve hükümleri tek geçişte yazar. Seçilen dalın 3. adımı başarısız olursa hiçbir şey onu 1. adıma geri göndermez.
  • Hakem yazarın kendisi. Bir fikri öneren yanıt onu puanlayan yanıtla aynıdır, bu yüzden zaten aklındaki dalı kayırmaya eğilimlidir. Makalede değerlendirme, adaylar oluştuktan sonra yapılan ayrı bir çağrıdır.
  • Dallar bağımsız değil. Tek bir yanıtta listelenen fikirler birbirini etkiler ve çoğu zaman tek bir temanın varyasyonlarına dönüşür. Şablonun yaptığı gibi "gerçekten farklı" yaklaşımlar istemek buna karşı iter ama onu ortadan kaldırmaz.
  • Akıl yürütme modelleri zaten dallanıyor. Cevap vermeden önce düşünen modeller yaklaşımları kendi içlerinde dener ve atar. Onlar için prompt doğruluğa daha az katkı yapar; kalan değeri, reddedilen seçenekleri görmen ve akıl yürütmeye itiraz edebilmendir.

Kodda gerçek bir ağaç araması

Tam yöntem programındaki bir döngüdür: aday adımlar üret, her kısmi çözümü ayrı bir çağrıda puanla, en iyi birkaçını tut, tekrarla. Bu, OpenAI Python SDK'sı ile yazılmış minimal bir genişlik öncelikli sürüm; aynı yapı her sağlayıcıyla çalışır.

from openai import OpenAI

client = OpenAI()
MODEL = "your-model-id"  # e.g. from your provider's model list

def ask(prompt, temperature=0.7):
    response = client.chat.completions.create(
        model=MODEL,
        messages=[{"role": "user", "content": prompt}],
        temperature=temperature,
    )
    return response.choices[0].message.content.strip()

def propose(problem, path, k=3):
    steps = "\n".join(path) or "(none yet)"
    prompt = f"Problem: {problem}\nSteps so far:\n{steps}\nPropose the next step only."
    return [ask(prompt) for _ in range(k)]

def score(problem, path):
    steps = "\n".join(path)
    prompt = (f"Problem: {problem}\nPartial solution:\n{steps}\n"
              "How likely is this to lead to a correct solution? Reply with a number from 1 to 10 only.")
    try:
        return float(ask(prompt, temperature=0))
    except ValueError:
        return 0.0

def tree_of_thought(problem, depth=3, keep=2):
    frontier = [[]]
    for _ in range(depth):
        candidates = [path + [step] for path in frontier for step in propose(problem, path)]
        candidates.sort(key=lambda p: score(problem, p), reverse=True)
        frontier = candidates[:keep]
    return frontier[0]

depth=3, keep=2 ve durum başına üç öneriyle tek bir çalıştırma yaklaşık otuz çağrı yapar. Birçok görev için self-consistency prompting (birkaç tam cevap, çoğunluk oyu) ya da prompt zincirleme ile sabit bir adım dizisi, faydanın çoğunu daha az çağrıyla sağlar. Görev arama gerektirdiğinde ağaca başvur: birçok olası ilk hamle ve bir çıkmaz sokağı erkenden anlamanın bir yolu olduğunda.

Sıkça Sorulan Sorular

Tree of thought prompting nedir?

Tree of thought (düşünce ağacı) prompting, modelin birkaç olası sonraki adım önerdiği, her birinin ne kadar umut vadettiğini puanladığı ve sadece en iyi dallarla devam ettiği, bir dal başarısız olduğunda da geri döndüğü bir problem çözme yoludur. Yao ve arkadaşlarının 2023 tarihli "Tree of Thoughts: Deliberate Problem Solving with Large Language Models" makalesinden gelir. Makalede dallanma ve puanlama, modeli birçok kez çağıran bir program tarafından yürütülür.

Tree of thoughts ile chain of thought arasındaki fark nedir?

Chain of thought baştan sona tek bir akıl yürütme çizgisini izler, bu yüzden erken bir hata cevaba kadar taşınır. Tree of thoughts aynı anda birkaç kısmi çözümü canlı tutar, onları değerlendirir ve zayıf olanları bırakır, böylece kötü bir ilk adımdan toparlanabilir. Bedeli çok daha fazla model çağrısıdır.

Tree of thoughts'u ChatGPT ya da Claude'da kullanabilir miyim?

Bir yaklaşık hâlini kullanabilirsin: modelden birkaç yaklaşım listelemesini, her birini senin kriterlerine göre değerlendirmesini, zayıfları atmasını ve en iyisini geliştirmesini isteyen tek bir prompt. Her sohbet uygulamasında çalışır. Tam yöntem değildir, çünkü her şey tek bir yanıtta olur ve model fikirlerini onları yazdığı aynı geçişte puanlar.

Tree of thought prompting akıl yürütme modelleriyle hâlâ işe yarıyor mu?

Eskisi kadar değil. Cevap vermeden önce düşünen modeller yaklaşımları zaten kendi içlerinde dener ve atar, bu yüzden onlardan dallanmalarını istemek daha az şey katar. Tek promptluk sürüm, seçenekleri ve neden reddedildiklerini görüp yargıyı kendin kontrol etmek istediğinde hâlâ işe yarar.

Tree of thought prompting ne zaman kullanılmalı?

İlk fikrin çoğu zaman yanlış olduğu, birkaç makul yaklaşımı olan problemlerde kullan: planlama, tasarım kararları, belirtilerden bir sorunu teşhis etmek ve arama gerektiren bulmacalar. Tek ve bariz bir yolu olan bir soru için düz chain of thought daha ucuzdur ve aynı derecede iyidir.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA