DSPy
DSPy, türlendirilmiş imzalardan ve modüllerden LLM işlem hatları oluşturan, ardından istemlerini bir metriğe göre optimize eden açık kaynaklı bir çerçevedir.
DSPy, büyük dil modelleri (LLM) üzerinde uygulama geliştirmek için elle yazılmış istemler yerine kod kullanan açık kaynaklı bir Python çerçevesidir. Geliştirici, her adımın ne alıp ne döndüreceğini tanımlar, adımları bir programda birleştirir ve bir dizi örnek üzerindeki bir ölçütü en üst düzeye çıkarmak için DSPy iyileştiricisinin istemleri veya modelin ağırlıklarını yazıp ayarlamasına izin verir. Adı, Bildirimsel Kendini Geliştiren Python ifadesinin kısaltmasıdır. Proje, kendisini dil modellerini istemlerle yönlendirmekten ziyade programlamak için bir çerçeve olarak tanımlar. Stanford'dan Omar Khattab ve çalışma arkadaşları, DSPy'yi Ekim 2023 tarihli DSPy: Bildirimsel Dil Modeli Çağrılarını Kendini Geliştiren İşlem Hatlarına Derleme makalesinde tanıttı. Birkaç satır DSPy kodu, derlemeden birkaç dakika sonra GPT-3.5 ve Llama-2-13B-chat ile standart az örnekli istemlerden sırasıyla %25'in ve %65'in üzerinde; uzmanlarca yazılmış örnekleri kullanan işlem hatlarından ise %46'ya ve %40'a varan oranda daha iyi sonuç veren işlem hatları oluşturdu.
İmzalar, Modüller ve İyileştiriciler#
- İmzalar: Bir adımın girdileri ile çıktılarını türleriyle birlikte bildiren tanımlardır; satır içinde
"question -> answer"olarak veya görevi belirten belge dizgesine sahip bir sınıf olarak yazılır. Bir adımın ne yaptığını belirtir, istemin ifadesini DSPy'ye bırakırlar. - Modüller: Bir imzanın nasıl çalıştırılacağını belirleyen stratejilerdir.
dspy.Predictmodeli bir kez çağırır;dspy.ChainOfThought, düşünce zinciri isteminde olduğu gibi yanıttan önce bir akıl yürütme alanı ekler;dspy.ReActise ReAct istemi tarzında araç kullanan bir döngü çalıştırır. Modüller, PyTorch katmanları gibi birleştirilerek arama sorgusu yazan, paragrafları getiren ve bu paragraflara dayanarak yanıt veren getirmeyle zenginleştirilmiş üretim (RAG) işlem hattı gibi çok adımlı programlar oluşturur. - Bağdaştırıcılar: Bir imzayı model için sohbet mesajlarına dönüştürür ve yanıtını türü belirtilmiş alanlara ayrıştırır.
- İyileştiriciler: Bir programı bir ölçüte göre geliştiren algoritmalardır.
BootstrapFewShot, programı eğitim örneklerinde çalıştırır ve ölçütü karşılayan izleri örnek olarak tutar;MIPROv2, önerilen talimatları ve örnek kümelerini araştırır;BootstrapFinetuneise ince ayar yoluyla programı model ağırlıklarına damıtır.
İyileştirme döngüsü, parametrelerin istemler olduğu bir model eğitimini andırır:
2025'te geliştirilen GEPA iyileştiricisi, dspy.GEPA olarak kullanılabilir. Programın yürütme izlerini ve metinsel geri bildirimleri okur, bir LLM'den neyin yanlış gittiği üzerine düşünmesini ister ve talimatları buna göre geliştirir. Altı görevde pekiştirmeli öğrenme yöntemi GRPO karşısında ortalama %6, en fazla %20 daha iyi sonuç verirken 35 kata kadar daha az deneme kullandı ve MIPROv2'yi %10'dan fazla geride bıraktı.
İmzadan İsteme#
DSPy istemi imzadan oluşturur; böylece aynı program yeniden yazılmak yerine yeni bir model için yeniden optimize edilebilir. Burada girdi, Ultralytics YOLO26 algılamalarının özetidir: Results.verbose(), kısa bir metinde sınıf başına sayımları içeren bir tahmin modunun sonucunu döndürür. İmza bu sonucu metin olarak alabilir; böylece bir iyileştirici, gerçek nesne algılama çıktısı üzerinde akıl yürütme adımını ayarlar. Mesajları biçimlendirmek için model veya API anahtarı gerekmez:
import dspy
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg")
class SceneQA(dspy.Signature):
"""Answer a question about a photo from the objects a detector found in it."""
detections: str = dspy.InputField()
question: str = dspy.InputField()
answer: str = dspy.OutputField()
# The adapter turns the signature and inputs into the chat messages the model will receive
inputs = {"detections": results[0].verbose(), "question": "How many people are in the photo?"}
messages = dspy.ChatAdapter().format(SceneQA, demos=[], inputs=inputs)
for message in messages:
print(f"--- {message['role']} ---\n{message['content']}")Sistem mesajında girdi ve çıktı alanları, DSPy'nin yanıtı ayrıştırmak için kullandığı [[ ## field ## ]] belirteçleri ve amaç olarak belge dizgesi yer alır; kullanıcı mesajı ise algılayıcının sayımlarını taşır. Bir iyileştirici, amacı yeniden yazarak ve mesajlara örnekler ekleyerek bu programı geliştirir; Python kodunu değiştirmez.
DSPy ve İlişkili Terimler#
- İstem mühendisliği: İstemleri elle yazıp gözden geçirme işidir. DSPy bu işi, bir ölçüt ve örnekler içeren bir iyileştirme problemine dönüştürür.
- LangChain: LLM uygulamalarını birleştirmeye yönelik entegrasyonlar, araçlar ve aracı döngülerinden oluşan bir çerçevedir; istemleri geliştirici yönetir.
- Hiperparametre ayarı: Eğitim ayarlarını bir doğrulama ölçütüne göre araştırır; DSPy'nin istemleri araştırma biçimine en yakın benzetmedir.
- Bileşik yapay zekâ sistemleri: Birden fazla model çağrısı, erişim modeli ve araçtan oluşturulan uygulamalardır. DSPy, bu tür işlem hatlarını uçtan uca optimize etmek ve her adımın istemini nihai ölçüte göre ayarlamak için tasarlanmıştır.










