Structured Query Language ya da kısaca SQL (çoğunlukla “sequel” olarak telaffuz edilir), bir veritabanı yönetim sistemi içinde verileri depolamak, almak, yönetmek ve işlemek için kullanılan bildirime dayalı bir programlama dilidir.
IBM araştırmacıları Raymond Boyce ve Donald Chamberlain tarafından 1970’lerin başında geliştirildi, ancak ticari olarak yalnızca 1979’da, günümüzde Oracle adını taşıyan Relational Software, Inc.’in kendi uygulamasını sunmasıyla kullanıma açıldı.
Günümüzde SQL, basitliği ve büyük veri setlerini verimli bir şekilde yönetip analiz etme yeteneği sayesinde yaygın olarak standart bir ilişkisel veritabanı yönetim sistemi (RDBMS) dili olarak kabul edilmektedir; bu da onu giderek daha fazla veriye dayanan dünyamızda vazgeçilmez kılar.
Ancak veriye dayalı dünya evriliyor.
Yapay zekâ hızla popülerlik kazanıyor ve büyük dil modelleri pek çok görev için son derece güçlü araçlar olarak öne çıkıyor. Tek sorun, bu dil modelleriyle etkileşimin zaman zaman yabancı bir dille konuşuyormuş gibi hissettirmesi. İşte LMQL burada devreye giriyor.
LMQL, ETH Zürich’teki SRI Lab tarafından geliştirildi ve geliştiricilerle dil modelleri arasında kişisel bir tercüman görevi görüyor. Başka bir deyişle, LMQL SQL’in gücünü dil modelleri alanına taşıyarak onlarla etkileşimi daha akıcı, daha verimli ve daha keyifli hale getiriyor.
Bu eğitimin geri kalanında şunları ele alacağız:
LMQL nedir?
Neden LMQL?
LMQL nasıl kurulur
LMQL’in pratik kullanım alanları
LMQL’in sınırlamaları
En iyi uygulamalar
LMQL nedir?
LMQL (Language Models Query Language), Büyük Dil Modelleri (LLM’ler) için yenilikçi bir programlama dilidir. Bildirime dayalı, SQL benzeri unsurları, buyurgan (imperatif) bir betik sözdizimiyle harmanlayarak LLM’lerden bilgi çıkarmak veya yanıt üretmek için daha yapılandırılmış ve sezgisel bir yol sunar.
Ayrıca LMQL, Python’un bir üst kümesidir; yani yeni özellikler getirerek Python’un yeteneklerini genişleten bir uzantı gibi davranır. Bu sayede geliştiriciler, metin ve kod içeren doğal dil istemleri oluşturabilir; sorguların esnekliğini ve ifade gücünü artırabilir.
Belgelere göre, “LMQL, geleneksel programlamayı kodunuz içinde LLM’leri çağırma yeteneğiyle iç içe geçirmenin yeni bir yolunu sunar. LLM etkileşimini, şablonlama dillerinin ötesine geçerek, program kodunuzun düzeyinde yerel olarak entegre eder.”
Bağlam olarak, büyük dil modelleri soru yanıtlama ve kod üretimi gibi çeşitli görevlerde olağanüstü performans sergilemiştir. Temelde LLM’ler, verilen girdilere dayanarak istatistiksel olasılıklar üzerinden mantıklı diziler üretmede yetkindir.
Bu yetenekten yararlanarak kullanıcılar, dil talimatları veya örneklerle LLM’leri yönlendirip çeşitli aşağı akış görevlerinin yürütülmesini tetikleyebilir. Gelişmiş istem teknikleri, kullanıcılar, dil modeli ve hesap makinesi gibi harici araçlar arasında etkileşimi bile mümkün kılar.
Zorluk, en güncel performansa ulaşmak veya LLM’leri belirli görevlere uyarlamaktır; bu genellikle karmaşık, göreve özel programların uygulanmasını gerektirir ve yine de doğaçlama etkileşimlere bağımlı olabilir.
Dil modeli istemleme, bu sorunları ele almak için ivme kazanan yeni bir disiplindir. LMQL, metin istemleme ile betiklemeyi sezgisel bir şekilde birleştirmek ve kullanıcıların dil modeli çıktısı üzerinde kısıtlamalar belirlemesini sağlamak gibi LMP ilkelerine bağlıdır.
Neden LMQL?
Yeni nesil dil modelleri kavramsal olarak örnekler veya talimatlarla kolayca yönlendirilebilir. Ancak onları tam potansiyelleriyle kullanmak ve yeni modeller çıktıkça güncel kalmak, iç işleyişlerinin ve sağlayıcıya özgü kütüphane ve uygulamaların derinlemesine anlaşılmasını gerektirir.
Örneğin, çözümlenmiş çıktıyı yasal kelime veya ifade listesiyle sınırlamak zor olabilir; çünkü dil modelleri token’larla çalışır. LLM’leri yerelde ya da bir API üzerinden kullansanız da, devasa ağlar oldukları için oldukça maliyetlidirler.
LMQL, önceden ayarlanmış davranışlardan ve kısıtlamaların getirdiği arama daraltmasından yararlanarak dil modeli (LM) çağrı sayısını azaltabilir.
LMQL’in bir başka nedeni de, pek çok istem tekniğinin dil modeli ile kullanıcı arasında (örneğin ChatGPT gibi sohbet botlarında gördüğümüz) karşılıklı yazışma veya harici kontrol mantığıyla aritmetik hesaplama yapmak için kullanılanlar gibi yüksek derecede uzmanlaşmış arayüzler gerektirebilmesidir.
Bu istemlerin uygulanması, modelin çözümleme (decoding) prosedürleriyle yoğun manuel çalışma ve etkileşim gerektirir; bu da ortaya çıkan uygulamaların genelleştirilebilirliğini sınırlar. Son olarak, bir LM yalnızca tek bir (alt kelime) token’ı aynı anda üretebildiğinden, tamamlamak için birden çok çağrı gerekebilir.
Mevcut LM’ler, üretim ortamında kullanıldıklarında hayati önem taşıyan çıktı kısıtlama işlevselliği sunmaz. Örneğin, olumsuz yorumları işaretleyecek bir duygu analizi uygulaması geliştirdiğinizi düşünün. Program, LLM’in “olumlu”, “olumsuz” veya “nötr” gibi bir yanıt vermesini beklerdi.
Ancak LLM çoğu zaman “Verilen müşteri yorumu için duygu olumludur” gibi bir şey söyleyebilir; bu da API’nizin işlemesi için zordur. Bu nedenle kısıtlamalar son derece faydalıdır.
LMQL ile, LML’lerin kullandığı token’lar yerine insanlar tarafından anlaşılabilir terimlerle çıktıyı kontrol edebilirsiniz.
LMQL’in Kurulumu
LMQL’i yerel olarak kurabilir veya web tabanlı Playground IDE üzerinden çevrimiçi kullanabilirsiniz. Transformers veya llama.cpp üzerinden self-host edilen modelleri kullanmak isterseniz LMQL’i yerel olarak kurmanız gerekir. İşte nasıl:
Kurulum ve Ortam Ayarı
LMQL’i yerelde kurmak oldukça basittir.
Tek yapmanız gereken, Python >= 3.10 ortamında aşağıdaki komutu çalıştırmaktır:
Bu komut, tarayıcı tabanlı bir Playground IDE başlatacaktır; eğer otomatik açılmazsa http://localhost:3000 adresine gidin.
Bu yöntemin Node.js kurulumu gerektirdiğini unutmayın.
2. Komut satırı arayüzü Playground’a alternatif olarak komut satırı aracını kullanabilirsiniz. Bu araç yerel .lmql dosyalarını çalıştırmak için kullanılabilir. Kullanmak için aşağıdaki komutu çalıştırmanız yeterlidir:
3. Python entegrasyonu Üst küme olduğundan, LMQL bir Python programının içinden doğrudan çalıştırılabilir. Yapmanız gereken tek şey lmql paketini içe aktarmaktır. Tüm sorgu kodu lmql.run aracılığıyla veya @lmql.query dekoratörüyle çalıştırılmalıdır.
Playground IDE’de veya komut satırı aracında yerel Transformer modellerini kullanırken, ilgili model için lmql serve-model komutunu çalıştırarak önce bir LMQL Inference API örneği başlatmanız gerekir.
LMQL Sözdizimini Anlama
Bir LMQL programı, bir sorgunun davranışını belirlemede hayati rol oynayan beş temel bölümden oluşur. Bu bileşenler şunlardır:
Sorgu
Çözücü (Decoder)
Model
Kısıtlamalar
Dağıtım (Distribution)
Şimdi her birine daha yakından bakalım.
Sorgu
Dil modeli ile kullanıcı arasındaki birincil iletişim aracı sorgu bloğudur.
İşte temel bir LMQL sorgusu:
# Source: https://lmql.ai/docs/"Say 'this is a test':[RESPONSE]" where len(TOKENS(RESPONSE))<25
—-- Model Output—--"""
Say 'this is a test': RESPONSE This is a test
"""Altyapı:
Sorgu bloğu, en üst düzeydeki her dizeyi dil modeline doğrudan bir sorgu olarak ele alır. Python f-string’lerine benzer şekilde bu sorgu dizeleri, iki özel kaçışlı alt alanı destekler.
Dil modelinin üreteceği ifadenin [varname] ile temsil edildiğine dikkat edin. Bu aynı zamanda bir “boşluk” (hole) olarak bilinir – where (koşul) ifadesine birazdan geleceğiz.
Geçerli kapsamdan bir değişkenin değerini almak için {varname} de kullanılabilir.
Örneğin:
# Source: https://lmql.ai/docs/language/overview.html# incelenecek değerlendirme
review ="""We had a great stay. Hiking in the mountains was fabulous and the food is really good."""# modele bilgi aktarmak için istem cümlelerini kullanın"Review: {review}"Altyapı:
Çözücü (Decoder)
Bir dil modelinin token dağılımından metin üretmek için kullanılan çeşitli çözümleme algoritmaları LMQL tarafından desteklenir. Bu, kullanılacak çözümleme algoritmasının bir sorgunun başında belirtilmesini sağlar.
Kullanılacak çözümleme algoritmasını belirtmenin iki yolu vardır:
1. Sorgunun parçası olarak – burada algoritma ve parametreleri, sorgunun bir parçası olarak belirtilir. LMQL belgelerine göre, “Yazdığınız somut program için çözücü seçiminizin önemli olduğu durumlarda bu özellikle yararlı olabilir.” Koddaki görünümü şöyledir:
# Source: https://lmql.ai/docs/language/decoding.html# tüm program için kiriş arama (beam search) ve genişlik 2 kullan
beam(n=2)# RESPONSE üretmek için beam search kullanır"This is a query with a specified decoder: [RESPONSE]"Altyapı:
2. Haricî olarak – burada çözümleme algoritması ve parametreleri, asıl programdan ayrı olarak haricî biçimde belirtilir. Bunun yalnızca LMQL’in bir Python bağlamında kullanıldığı durumlarda mümkün olduğunu unutmayın
# Source: https://lmql.ai/docs/language/decoding.htmlimport lmql@lmql.query(model="openai/text-davinci-003", decoder="sample", temperature=1.8)deftell_a_joke():'''lmql
"""A list good dad joke. A indicates the punchline:
Q:[JOKE]
A:[PUNCHLINE]""" where STOPS_AT(JOKE, "?") and STOPS_AT(PUNCHLINE, "\n")
'''
tell_a_joke()# uses the decoder specified in @lmql.query(...)
tell_a_joke(decoder="beam", n=2)# uses a beam search decoder with n=2Altyapı:
Model
Geliştiriciler LMQL’i “metin üretimi için yüksek seviyeli, ön uç bir dil” olarak tanımlar. Bu, belirli bir metin üretim modeline bağlı olmadığı anlamına gelir. Bunun yerine arka planda OpenAI model, llama.cppveHuggingFace Transformers gibi çeşitli metin üretim modelleri desteklenir.
Modelleri yüklemek oldukça basittir. Bir lmql.LMM nesnesi üreten lmql.model(...) işlevini kullanabilirsiniz.
Görünümü şöyledir:
# Source: https://lmql.ai/docs/models/
lmql.model("openai/gpt-3.5-turbo-instruct")# OpenAI API modeli
lmql.model("random", seed=123)# rastgele örnekleyen model
lmql.model("llama.cpp:<YOUR_WEIGHTS>.gguf")# llama.cpp modeli
lmql.model("local:gpt2")# `transformers` modelini süreç içinde yükle
lmql.model("local:gpt2", cuda=True, load_in_4bit=True)# ek argümanlarla süreç içinde `transformers` modeli yükle
lmql.model("gpt2")# `lmql serve-model` üzerinden barındırılan bir `transformers` modeline erişAltyapı:
lmql.LLM nesnesi oluşturulduktan sonra, modeli sorgu programına iki yöntemden biriyle iletebilirsiniz:
1. Modeli haricî olarak belirtme
# Source: https://lmql.ai/docs/models/import lmql
# varsayılan olarak 'chatgpt' kullanır@lmql.query(model="chatgpt")deftell_a_joke():'''lmql
"""A great good dad joke. A indicates the punchline
Q:[JOKE]
A:[PUNCHLINE]""" where STOPS_AT(JOKE, "?") and \
STOPS_AT(PUNCHLINE, "\n")
'''
tell_a_joke()# chatgpt kullanır
tell_a_joke(model=lmql.model("openai/text-davinci-003"))# text-davinci-003 kullanırAltyapı:
2. from yan tümcesiyle bir sorgu kullanma
# Source: https://lmql.ai/docs/models/
argmax
"This is a query with a specified 'from'-clause: [RESPONSE]"from"openai/text-ada-001"Altyapı:
Kısıtlamalar
LMQL’in başlıca cazibelerinden biri kısıtlama bileşenidir. LMQL, kullanıcıların dil modeli çıktısı üzerinde kısıtlamalar belirtmesine imkân tanır. Bu, betiklenmiş istemlemeyi, model çıktısının istenen noktada sona erdiğini garanti ederek kolaylaştırır ve çözümleme sırasında kullanıcıya model üzerinde kontrol sağlar.
Desteklenen kısıtlamalar şunlardır:
Durdurma İfadeleri
Sayı Türü Kısıtlamaları
Kümeye Göre Seçim
Karakter Uzunluğu
Token Uzunluğu
Regex Kısıtlamaları Önizleme
Kısıtlamaları Birleştirme
Özel
Daha fazla bilgi için LMQL belgelerindeki Kısıtlamalar sayfasına göz atın.
Dağıtım (Distribution)
Dağıtım talimatı LMQL’de kilit bir bileşendir. Üretilen sonuçların nasıl dağıtılacağını ve sunulacağını tanımlayarak çıktı biçimi ve yapısı üzerinde kontrol sağlar.
İşte çalışırken bir örnek:
# Source: https://lmql.ai/docs/language/overview.html
argmax
# incelenecek değerlendirme
review ="""We had a great stay. Hiking in the mountains was fabulous and the food is really good."""# modele bilgi aktarmak için istem cümlelerini kullanın"Review: {review}""Q: What is the underlying sentiment of this review and why?"# [ANALYSIS] gibi şablon değişkenleri metin üretmek için kullanılır"A:[ANALYSIS]" where not"\n"in ANALYSIS
# sınıflandırma üretmek için kısıtlı değişken kullanın"Based on this, the overall sentiment of the message can be considered to be[CLS]"
distribution
CLS in[" positive"," neutral"," negative"]----- Model Output ------
Review: We had a great stay. Hiking in the mountains was fabulous and the food is really good.
Q: What is the underlying sentiment of this review and why?
A: ANALYSIS The underlying sentiment of this review is positive because the reviewer had a great stay, enjoyed the hiking and found the food to be good.
Based on this, the overall sentiment of the message can be considered to be CLSAltyapı:
LMQL’in Sınırlamaları ve Topluluk Desteği
Tüm teknolojilerde olduğu gibi, LMQL’in de bazı sınırlamaları vardır. Örneğin:
LMQL kütüphanesi çok uzun zamandır ortada değil ve aşırı popüler değil. Sonuç olarak topluluk oldukça küçük ve takıldığınızda yardım alabileceğiniz haricî kaynaklar sınırlı.
Kütüphane belgeleri olması gerektiği kadar ayrıntılı değil.
OpenAI API ile ilgili sınırlamalar nedeniyle, en popüler ve en iyi performans gösteren modellere erişilemediğinden LMQL’i ChatGPT ile tam anlamıyla kullanmak mümkün değil.
Bunlar LMQL kullanmayı düşünen kullanıcılar için engel teşkil etse de, kütüphanenin hâlâ oldukça yeni olduğunu ve geliştirilmekte olduğunu belirtmek önemli – bu sınırlamalar ilerleyen sürümlerde çözülebilir.
Sonuç
LMQL, aynı zamanda Python’un bir üst kümesi olan SQL benzeri bir programlama dilidir. Bildirime dayalı unsurlarını buyurgan bir betik sözdizimiyle harmanlayarak LLM’lerden bilgi çıkarma veya yanıt üretme sürecini basitleştirir. Geliştiriciler, metin üretimini etkin biçimde kontrol etmek için LMQL’den yararlanabilir; bu da onu teknoloji sektöründeki çeşitli uygulamalar için son derece değerli bir araç hâline getirir.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Üretken yapay zekâyı sorumlu kullanmaya başlayın. Üretken yapay zekâ modellerinin nasıl geliştirildiğini ve gelecekte toplumu nasıl etkileyeceğini öğrenin.
OpenAI API ile yapay zekâ destekli uygulamalar geliştirmeye başlayın. ChatGPT gibi popüler yapay zeka uygulamalarının temelini oluşturan işlevselliği öğrenin.
Yapay zekanın temellerini keşfedin, yapay zekayı işinizde etkili bir şekilde kullanmayı öğrenin ve dinamik yapay zeka dünyasında yolunuzu bulmak için ChatGPT gibi modellere dalın.
Structured Query Language ya da kısaca SQL (çoğunlukla “sequel” olarak telaffuz edilir), bir veritabanı yönetim sistemi içinde verileri depolamak, almak, yönetmek ve işlemek için kullanılan bildirime dayalı bir programlama dilidir.
IBM araştırmacıları Raymond Boyce ve Donald Chamberlain tarafından 1970’lerin başında geliştirildi, ancak ticari olarak yalnızca 1979’da, günümüzde Oracle adını taşıyan Relational Software, Inc.’in kendi uygulamasını sunmasıyla kullanıma açıldı.
Günümüzde SQL, basitliği ve büyük veri setlerini verimli bir şekilde yönetip analiz etme yeteneği sayesinde yaygın olarak standart bir ilişkisel veritabanı yönetim sistemi (RDBMS) dili olarak kabul edilmektedir; bu da onu giderek daha fazla veriye dayanan dünyamızda vazgeçilmez kılar.
Ancak veriye dayalı dünya evriliyor.
Yapay zekâ hızla popülerlik kazanıyor ve büyük dil modelleri pek çok görev için son derece güçlü araçlar olarak öne çıkıyor. Tek sorun, bu dil modelleriyle etkileşimin zaman zaman yabancı bir dille konuşuyormuş gibi hissettirmesi. İşte LMQL burada devreye giriyor.
LMQL, ETH Zürich’teki SRI Lab tarafından geliştirildi ve geliştiricilerle dil modelleri arasında kişisel bir tercüman görevi görüyor. Başka bir deyişle, LMQL SQL’in gücünü dil modelleri alanına taşıyarak onlarla etkileşimi daha akıcı, daha verimli ve daha keyifli hale getiriyor.
Bu eğitimin geri kalanında şunları ele alacağız:
LMQL nedir?
LMQL (Language Models Query Language), Büyük Dil Modelleri (LLM’ler) için yenilikçi bir programlama dilidir. Bildirime dayalı, SQL benzeri unsurları, buyurgan (imperatif) bir betik sözdizimiyle harmanlayarak LLM’lerden bilgi çıkarmak veya yanıt üretmek için daha yapılandırılmış ve sezgisel bir yol sunar.
Ayrıca LMQL, Python’un bir üst kümesidir; yani yeni özellikler getirerek Python’un yeteneklerini genişleten bir uzantı gibi davranır. Bu sayede geliştiriciler, metin ve kod içeren doğal dil istemleri oluşturabilir; sorguların esnekliğini ve ifade gücünü artırabilir.
Belgelere göre, “LMQL, geleneksel programlamayı kodunuz içinde LLM’leri çağırma yeteneğiyle iç içe geçirmenin yeni bir yolunu sunar. LLM etkileşimini, şablonlama dillerinin ötesine geçerek, program kodunuzun düzeyinde yerel olarak entegre eder.”
Programlama dili, yaratıcıları tarafından Prompting is Programming: A Query Lnague for Large Language Models başlıklı bir araştırma makalesinde, “LMP” (Language Model Prompting) adını verdikleri olguyu mümkün kılmak için bir çözüm olarak sunuldu.
Bağlam olarak, büyük dil modelleri soru yanıtlama ve kod üretimi gibi çeşitli görevlerde olağanüstü performans sergilemiştir. Temelde LLM’ler, verilen girdilere dayanarak istatistiksel olasılıklar üzerinden mantıklı diziler üretmede yetkindir.
Bu yetenekten yararlanarak kullanıcılar, dil talimatları veya örneklerle LLM’leri yönlendirip çeşitli aşağı akış görevlerinin yürütülmesini tetikleyebilir. Gelişmiş istem teknikleri, kullanıcılar, dil modeli ve hesap makinesi gibi harici araçlar arasında etkileşimi bile mümkün kılar.
Zorluk, en güncel performansa ulaşmak veya LLM’leri belirli görevlere uyarlamaktır; bu genellikle karmaşık, göreve özel programların uygulanmasını gerektirir ve yine de doğaçlama etkileşimlere bağımlı olabilir.
Dil modeli istemleme, bu sorunları ele almak için ivme kazanan yeni bir disiplindir. LMQL, metin istemleme ile betiklemeyi sezgisel bir şekilde birleştirmek ve kullanıcıların dil modeli çıktısı üzerinde kısıtlamalar belirlemesini sağlamak gibi LMP ilkelerine bağlıdır.
Neden LMQL?
Yeni nesil dil modelleri kavramsal olarak örnekler veya talimatlarla kolayca yönlendirilebilir. Ancak onları tam potansiyelleriyle kullanmak ve yeni modeller çıktıkça güncel kalmak, iç işleyişlerinin ve sağlayıcıya özgü kütüphane ve uygulamaların derinlemesine anlaşılmasını gerektirir.
Örneğin, çözümlenmiş çıktıyı yasal kelime veya ifade listesiyle sınırlamak zor olabilir; çünkü dil modelleri token’larla çalışır. LLM’leri yerelde ya da bir API üzerinden kullansanız da, devasa ağlar oldukları için oldukça maliyetlidirler.
LMQL, önceden ayarlanmış davranışlardan ve kısıtlamaların getirdiği arama daraltmasından yararlanarak dil modeli (LM) çağrı sayısını azaltabilir.
LMQL’in bir başka nedeni de, pek çok istem tekniğinin dil modeli ile kullanıcı arasında (örneğin ChatGPT gibi sohbet botlarında gördüğümüz) karşılıklı yazışma veya harici kontrol mantığıyla aritmetik hesaplama yapmak için kullanılanlar gibi yüksek derecede uzmanlaşmış arayüzler gerektirebilmesidir.
Bu istemlerin uygulanması, modelin çözümleme (decoding) prosedürleriyle yoğun manuel çalışma ve etkileşim gerektirir; bu da ortaya çıkan uygulamaların genelleştirilebilirliğini sınırlar. Son olarak, bir LM yalnızca tek bir (alt kelime) token’ı aynı anda üretebildiğinden, tamamlamak için birden çok çağrı gerekebilir.
Mevcut LM’ler, üretim ortamında kullanıldıklarında hayati önem taşıyan çıktı kısıtlama işlevselliği sunmaz. Örneğin, olumsuz yorumları işaretleyecek bir duygu analizi uygulaması geliştirdiğinizi düşünün. Program, LLM’in “olumlu”, “olumsuz” veya “nötr” gibi bir yanıt vermesini beklerdi.
Ancak LLM çoğu zaman “Verilen müşteri yorumu için duygu olumludur” gibi bir şey söyleyebilir; bu da API’nizin işlemesi için zordur. Bu nedenle kısıtlamalar son derece faydalıdır.
LMQL ile, LML’lerin kullandığı token’lar yerine insanlar tarafından anlaşılabilir terimlerle çıktıyı kontrol edebilirsiniz.
LMQL’in Kurulumu
LMQL’i yerel olarak kurabilir veya web tabanlı Playground IDE üzerinden çevrimiçi kullanabilirsiniz. Transformers veya llama.cpp üzerinden self-host edilen modelleri kullanmak isterseniz LMQL’i yerel olarak kurmanız gerekir. İşte nasıl:
Kurulum ve Ortam Ayarı
LMQL’i yerelde kurmak oldukça basittir.
Tek yapmanız gereken, Python >= 3.10 ortamında aşağıdaki komutu çalıştırmaktır:
Modelleri yerel bir GPU üzerinde çalıştırmayı düşünüyorsanız, LMQL’i GPU destekli bir PyTorch >= 1.11 kurulumuna sahip bir ortamda kurmalısınız.
pip ile GPU bağımlılıklarıyla birlikte LMQL’i kurmak için çalıştırmanız gereken komut şöyledir:
Not: bağımlılıkları sanal bir ortamda kurmak iyi bir uygulamadır.
Kurulumdan sonra LMQL programlarını çalıştırmak için üç seçeneğiniz vardır:
1. Playground
Yerel bir Playground IDE örneği başlatabilirsiniz
Bu komut, tarayıcı tabanlı bir Playground IDE başlatacaktır; eğer otomatik açılmazsa http://localhost:3000 adresine gidin.
Bu yöntemin Node.js kurulumu gerektirdiğini unutmayın.
2. Komut satırı arayüzü
Playground’a alternatif olarak komut satırı aracını kullanabilirsiniz. Bu araç yerel .lmql dosyalarını çalıştırmak için kullanılabilir. Kullanmak için aşağıdaki komutu çalıştırmanız yeterlidir:
3. Python entegrasyonu
Üst küme olduğundan, LMQL bir Python programının içinden doğrudan çalıştırılabilir. Yapmanız gereken tek şey lmql paketini içe aktarmaktır. Tüm sorgu kodu lmql.run aracılığıyla veya
@lmql.querydekoratörüyle çalıştırılmalıdır.Playground IDE’de veya komut satırı aracında yerel Transformer modellerini kullanırken, ilgili model için
lmql serve-modelkomutunu çalıştırarak önce bir LMQL Inference API örneği başlatmanız gerekir.LMQL Sözdizimini Anlama
Bir LMQL programı, bir sorgunun davranışını belirlemede hayati rol oynayan beş temel bölümden oluşur. Bu bileşenler şunlardır:
Şimdi her birine daha yakından bakalım.
Sorgu
Dil modeli ile kullanıcı arasındaki birincil iletişim aracı sorgu bloğudur.
İşte temel bir LMQL sorgusu:
Sorgu bloğu, en üst düzeydeki her dizeyi dil modeline doğrudan bir sorgu olarak ele alır. Python f-string’lerine benzer şekilde bu sorgu dizeleri, iki özel kaçışlı alt alanı destekler.
Dil modelinin üreteceği ifadenin
[varname]ile temsil edildiğine dikkat edin. Bu aynı zamanda bir “boşluk” (hole) olarak bilinir – where (koşul) ifadesine birazdan geleceğiz.Geçerli kapsamdan bir değişkenin değerini almak için
{varname}de kullanılabilir.Örneğin:
Çözücü (Decoder)
Bir dil modelinin token dağılımından metin üretmek için kullanılan çeşitli çözümleme algoritmaları LMQL tarafından desteklenir. Bu, kullanılacak çözümleme algoritmasının bir sorgunun başında belirtilmesini sağlar.
Kullanılacak çözümleme algoritmasını belirtmenin iki yolu vardır:
1. Sorgunun parçası olarak – burada algoritma ve parametreleri, sorgunun bir parçası olarak belirtilir. LMQL belgelerine göre, “Yazdığınız somut program için çözücü seçiminizin önemli olduğu durumlarda bu özellikle yararlı olabilir.” Koddaki görünümü şöyledir:
2. Haricî olarak – burada çözümleme algoritması ve parametreleri, asıl programdan ayrı olarak haricî biçimde belirtilir. Bunun yalnızca LMQL’in bir Python bağlamında kullanıldığı durumlarda mümkün olduğunu unutmayın
Model
Geliştiriciler LMQL’i “metin üretimi için yüksek seviyeli, ön uç bir dil” olarak tanımlar. Bu, belirli bir metin üretim modeline bağlı olmadığı anlamına gelir. Bunun yerine arka planda
OpenAI model,llama.cppveHuggingFace Transformersgibi çeşitli metin üretim modelleri desteklenir.Modelleri yüklemek oldukça basittir. Bir lmql.LMM nesnesi üreten
lmql.model(...)işlevini kullanabilirsiniz.Görünümü şöyledir:
lmql.LLMnesnesi oluşturulduktan sonra, modeli sorgu programına iki yöntemden biriyle iletebilirsiniz:1. Modeli haricî olarak belirtme
2.
fromyan tümcesiyle bir sorgu kullanmaKısıtlamalar
LMQL’in başlıca cazibelerinden biri kısıtlama bileşenidir. LMQL, kullanıcıların dil modeli çıktısı üzerinde kısıtlamalar belirtmesine imkân tanır. Bu, betiklenmiş istemlemeyi, model çıktısının istenen noktada sona erdiğini garanti ederek kolaylaştırır ve çözümleme sırasında kullanıcıya model üzerinde kontrol sağlar.
Desteklenen kısıtlamalar şunlardır:
Daha fazla bilgi için LMQL belgelerindeki Kısıtlamalar sayfasına göz atın.
Dağıtım (Distribution)
Dağıtım talimatı LMQL’de kilit bir bileşendir. Üretilen sonuçların nasıl dağıtılacağını ve sunulacağını tanımlayarak çıktı biçimi ve yapısı üzerinde kontrol sağlar.
İşte çalışırken bir örnek:
LMQL’in Sınırlamaları ve Topluluk Desteği
Tüm teknolojilerde olduğu gibi, LMQL’in de bazı sınırlamaları vardır. Örneğin:
Bunlar LMQL kullanmayı düşünen kullanıcılar için engel teşkil etse de, kütüphanenin hâlâ oldukça yeni olduğunu ve geliştirilmekte olduğunu belirtmek önemli – bu sınırlamalar ilerleyen sürümlerde çözülebilir.
Sonuç
LMQL, aynı zamanda Python’un bir üst kümesi olan SQL benzeri bir programlama dilidir. Bildirime dayalı unsurlarını buyurgan bir betik sözdizimiyle harmanlayarak LLM’lerden bilgi çıkarma veya yanıt üretme sürecini basitleştirir. Geliştiriciler, metin üretimini etkin biçimde kontrol etmek için LMQL’den yararlanabilir; bu da onu teknoloji sektöründeki çeşitli uygulamalar için son derece değerli bir araç hâline getirir.
Öğrenmeye devam etmek için şunlara göz atın: