2 puan yazan GN⁺ 2025-06-29 | 1 yorum | WhatsApp'ta paylaş
  • SymbolicAI, klasik Python programlaması ile LLM’lerin türevlenebilir ve programlanabilir doğasını birleştiren sinirsel-sembolik bir framework; hedefi Python içinde doğal biçimde kullanılabilmek
  • Temel kavramlar, Symbol nesnesine dayalı primitive’ler ve LLM sonuçlarını doğrulayıp düzelten contracts; varsayılan davranış güvenlik ve hız için söz dizimsel modda başlar
  • Symbol, söz dizimsel modda normal Python değerleri gibi davranır; anlamsal modda bağlam ve anlamla ilgilenir ve semantic=True, .sem, .map() gibi anlamsal fonksiyon çağrılarıyla bu moda geçirilebilir
  • Contract sistemi, Design by Contract ilkesini LLM iş akışlarına uygulayarak girdi doğrulama, durum değişikliği, LLM üretimi, çıktı doğrulama ve hata durumunda alternatif yanıtı tek bir dekoratör tabanlı akışta ele alır
  • Kurulum pip install symbolicai ile başlar; gerçek kullanım için symconfig ve symai.config.json yapılandırması gerekir, sinirsel-sembolik engine ise symai paketinin kullanımı için zorunludur

SymbolicAI’nin hedeflediği model

  • SymbolicAI, normal Python kodunu LLM tabanlı anlamsal işlemeyle birlikte ele alan sinirsel-sembolik (neuro-symbolic) bir framework’tür
  • Modüler tasarımı sayesinde ihtiyaca göre genişletilebilir ve özelleştirilebilir
  • Kendi engine’inizi yazmayı, yerel engine barındırmayı, web araması ve görüntü üretimi gibi araç entegrasyonlarını destekler
  • Proje adı, Allen Newell ve Herbert Simon’ın temel çalışmalarına atıf yapmayı amaçlar

Symbol primitive’i

  • SymbolicAI’nin merkezinde Symbol nesnesi bulunur; küçük, birleştirilebilir işlemler Python’a özgü söz dizimi gibi kullanılabilir
  • Symbol iki farklı çalışma biçimine sahiptir
    • Syntactic: Verilen string, liste, integer gibi normal Python değerleri gibi davranır
    • Semantic: Sinirsel-sembolik engine’e bağlanarak anlam ve bağlamla ilgilenir
  • Varsayılan değer söz dizimsel moddur
    • ==, ~, & gibi Python operatörleri symai içinde overload edilmiştir
    • Her karşılaştırmada veya bit kaydırmada engine’i hemen çağırmak yavaşlamaya ve beklenmeyen yan etkilere yol açabilir
    • Anlamsal davranışı yalnızca gerekli noktalarda açarak güvenlik ve hız korunur

Anlamsal moda geçme yolları

  • Oluşturma sırasında semantic=True belirtilirse en baştan anlamsal Symbol olarak davranır
    • Örnekte Symbol("Cats are adorable", semantic=True), "feline" in S ifadesini True olarak işler
  • Gerektiğinde .sem projeksiyonu kullanılarak anlamsal davranışa geçilebilir; .syn ile yeniden söz dizimsel davranışa dönülebilir
    • Aynı "Cats are adorable" değeri için S.sem üzerinde "feline" in S.sem sonucu True, varsayılan S üzerinde ise False olur
  • .map() gibi nokta notasyonlu işlemler veya diğer anlamsal fonksiyon çağrıları Symbol’ü otomatik olarak anlamsal moda geçirir
    • Örnekte bir meyve listesine convert all fruits to vegetables uygulanınca yalnızca meyveler sebzeye dönüştürülür, cat ve dog korunur
  • .sem ve .syn projeksiyonları aynı temel nesneye farklı davranış katmanları giydirir; böylece tek bir Symbol üzerinde söz dizimsel ve anlamsal işlemler zincirlenebilir

Sunulan işlem örnekleri

  • SymbolicAI çeşitli primitive’leri destekler; dokümantasyon primitives bölümündedir
  • ==, söz dizimsel modda literal eşleşmeyi denetler; anlamsal modda "Hi" ve "Hello" gibi bulanık/kavramsal eşdeğerliği ele alır
  • +, söz dizimsel modda sayı/string/liste toplamasıdır; anlamsal modda anlamlı kombinasyon, karıştırma ve kavram birleştirme gerçekleştirir
  • &, söz dizimsel modda bit düzeyinde/mantıksal AND’dir; anlamsal modda mantıksal birleştirme, çıkarım ve bağlam birleştirmeyi ele alır
  • Yalnızca anlamsal özellikler arasında .choice(cases, default), .foreach(condition, apply), .cluster(**clustering_kwargs?), .similarity(other, metric?, normalize?) gibi fonksiyonlar bulunur
    • .cluster() verileri anlamsal olarak gruplar ve sklearn’ün DBSCAN’ini kullanır
    • .similarity() embedding’ler arasındaki benzerliği hesaplar

LLM çıktısını contracts ile ele alma biçimi

  • SymbolicAI, LLM’lerin halüsinasyon görebildiği ama kodun bunu yapamayacağı probleminden hareketle Design by Contract ilkesini LLM dünyasına uygular
  • Contract’ler yalnızca sonradan yapılan testlere dayanmaz; veri modelini ve doğrulama kısıtlarını dekoratöre bağlayarak doğruluğu tasarım aşamasında ele alır
  • Örnek koddaki contract dekoratörü şu seçenekleri kullanır
    • pre_remedy=True: Hatalı girdiyi otomatik düzeltmeyi dener
    • post_remedy=True: Hatalı LLM çıktısını otomatik düzeltmeyi dener
    • accumulate_errors=True: Her yeniden denemede hata geçmişini aktarır
    • verbose=True: Terminalde ilerlemeyi gösterir
    • remedy_retry_params: tries=3, delay=0.4, max_delay=4.0, jitter=0.15, backoff=1.8, graceful=False kullanır
  • Contract uygulanmış Expression sınıfının üst düzey akışı şöyledir
    • prompt: LLM’in ne yapması gerektiğini tanımlayan statik açıklamadır ve zorunludur
    • pre: Girdiyi denetler ve isteğe bağlıdır
    • act: Durumu değiştirir ve isteğe bağlıdır
    • LLM: SymbolicAI engine’i beklenen yanıtı üretir
    • post: Yanıtın anlamsal kuralları karşılayıp karşılamadığını kontrol eder ve isteğe bağlıdır
    • forward: Zorunludur; contract başarılı olursa tipi doğrulanmış LLM nesnesini döndürür, başarısız olursa graceful fallback yanıtı döndürür
  • Contract dokümantasyonu DeepWiki’deki contract validation system ve features/contracts sayfalarındadır

Kurulum ve isteğe bağlı özellikler

  • Temel kurulum pip ile yapılır
pip install symbolicai
  • Depoyu klonlayıp uv >= 0.9.17 ile Python sanal ortamı da oluşturulabilir
git clone git@github.com:ExtensityAI/symbolicai.git
cd symbolicai
uv sync --python x.xx
source ./.venv/bin/activate
  • SymbolicAI metin, ses ve görüntü işlemek için çeşitli engine’ler kullanır; web’den bilgi aramak için arama engine’i erişimini de içerir
  • İsteğe bağlı bağımlılıklar özellik bazında extra olarak kurulabilir
    • bitsandbytes, hf, lean, llama_cpp, ocr, qdrant, scrape, search, serpapi, services, solver, whisper, wolframalpha
  • Tüm isteğe bağlı bağımlılıklar tek seferde kurulabilir
pip install "symbolicai[all]"
  • uv sync --frozen, sağlanan lock dosyasına sabitlenmiş bağımlılıkları kurar
  • Bazı isteğe bağlı bağımlılıklar ek kurulum adımları gerektirebilir; bazıları ise şu anda yalnızca deneysel olarak desteklendiğinden beklendiği gibi çalışmayabilir

Yapılandırma yönetimi ve zorunlu engine

  • SymbolicAI öncelik tabanlı bir yapılandırma yönetim sistemi kullanır
  • Yapılandırmalar üç konumdan öncelik sırasına göre yüklenir
    • Geçerli çalışma dizinindeki debug modu: en yüksek önceliğe sahiptir ve yalnızca symai.config.json için geçerlidir
    • Python ortamının ortama özgü yapılandırması: {python_env}/.symai/ içinde bulunur ve proje bazlı yapılandırmalar için uygundur
    • Ev dizinindeki global yapılandırma: ~/.symai/ içinde bulunur ve varsayılan fallback görevi görür
  • Yönetilen yapılandırma dosyaları üç tanedir
    • symai.config.json: SymbolicAI ana yapılandırması
    • symsh.config.json: Shell yapılandırması
    • symserver.config.json: Sunucu yapılandırması
  • symconfig, yapılandırma konumunu, etkin yapılandırma yolunu ve hassas bilgileri kırpılmış mevcut yapılandırmayı gösterir; ilk paket önbelleklemesini ve yapılandırma dosyalarının başlatılmasını başlatır
  • symai paketini kullanmak için sinirsel-sembolik engine zorunludur
  • Proje yolundaki symai.config.json içinde engine özellikleri belirtilirse ortam değişkenlerinin yerini alır
    • Örnek yapılandırmada NEUROSYMBOLIC_ENGINE_MODEL değeri olarak claude-sonnet-4-6, embedding modeli olarak text-embedding-3-small, TTS modeli olarak tts-1, OCR modeli olarak mistral-ocr-latest, indeksleme engine’i olarak qdrant vb. yer alır
  • Varsayılan olarak kullanıcı uyarıları açıktır; SYMAI_WARNINGS=0 ortam değişkeniyle devre dışı bırakılabilir

Testler, dokümantasyon ve lisans

  • Test çalıştırma örnekleri şöyledir
pytest tests
pytest -m mandatory
pytest --cov=symbolicai tests
  • Testlerden önce yapılandırmanın doğru yapılmış olması gerekir
  • Sonraki adım olarak SymbolicAI DeepWiki sayfası, makale, video eğitimleri incelenebilir
  • Atıf bilgisi, Symbolicai: A framework for logic-based approaches combining generative models and solvers başlıklı 2024 arXiv preprint’ine işaret eder
  • Proje lisansı BSD-3-Clause License’tır

1 yorum

 
GN⁺ 2025-06-29
Hacker News yorumları
  • Bu tür voodoo gibi özellikler en ilgi çekici olanlar
    Örneğin anlam tabanlı map ile ['apple', 'banana', 'cherry', 'cat', 'dog'] üzerine “tüm meyveleri sebzeye çevir” uygulanınca ['carrot', 'broccoli', 'spinach', 'cat', 'dog'] gibi bir sonuç çıkıyor; equals() ise context='greeting context' ya da context='politeness level' gibi bağlama göre farklı karşılaştırma sonuçları veriyor
    Bit operatörleri de anlamsal mantıksal bağlaçlar gibi kullanılıyor; horn_rule & observationın çıkarıma götürmesi gibi, bu yüzden interpret() güçlü görünüyor
    Bunun ortaya çıkış nedeni, gerçek kullanım alanları ve şimdiye kadarki en sevdiğiniz kullanım örneği merak ediyorum

    • Lotus da ilginizi çekebilir: https://github.com/lotus-data/lotus
      Temel ilişkisel operatörleri, Python veri çerçevesi kütüphanesine genişletme olarak anlam tabanlı sürümlere dönüştürüyor; her çağrı da daha sonra öğrenme tabanlı yaklaşımlar gibi daha karmaşık işler için bir “model” noktası hâline geliyor
      Snowflake gibi bulut SQL tarafı da bu yöne gidiyor gibi görünüyor; louie.ai’de de yapay zeka not defteri/dashboard/API (MCP vb.) üzerinden Splunk, Databricks, grafik veritabanları gibi verilere konuşarak bağlama uygun sembolik+anlamsal operatörleri çıkaran benzer bir yöntem kullandık ve pratikte epey faydalı oldu
      Başlıca %80’lik kullanım senaryosu, “Splunk index xyz’den tüm uyarıları al ve şüpheli öğeleri gösteren bir sütun ile nedenini açıklayan bir sütun ekle” gibi anlam tabanlı map ile güçlendirilmiş bir veri çerçevesi oluşturmak, ardından “bulduklarını özetle” gibi anlam tabanlı reduce ile doğal dilde açıklama almak
    • Apple sebzeye dönüştürülünce neden carrot oluyor, merak ediyorum
    • Çok uzun bir yanıt olacak gibi
      2022’nin sonunda projeye başladığım zamandan bu yana çok büyük değişiklik olmadı; yalnızca modeller daha iyi hâle geldi, ham operatörlerin önemli bir kısmı GPT-3 döneminden beri zaten vardı
      Son dönemde daha önemli olan DbC katkısı; çünkü sözleşmeleri birbirine bağlayabiliyor ve guardrail’ler iyi yayılıyor, bu da ajanlarla ilgili önüme gelen neredeyse her sorunu çözmesi açısından benzersiz
      Perplexity, OpenAI web araması yüzünden daha az işe yarar hâle geldi; OpenAI web araması da doğrudan özelleştirdiğim kadar yeterli olmadığından kendi derin araştırma ajanımı yaptım: https://x.com/futurisold/status/1931751644233945216
      Şirkette de 3 sözleşmeyi bağlayarak uçtan uca belge üretimi yaptık; çıktı örneği burada: https://drive.google.com/file/d/1Va7ALq_N-fTYeumKhH4jSxsTrWD...
      Girdi, başlıca yapay zeka sağlayıcılarının sistem prompt’larını karşılaştırmalı analiz ederek XML/Markdown/JSON gibi biçimleri, aşırı övgü/manipülasyon talimatlarını, araç kullanımı kısıtlarını, etik guardrail’leri ve hizalama tasarımı farklarını bulup teknik rapor olarak sentezleme isteğiydi; üretilen talimatlar ise OpenAI, Google, Anthropic, xAI vb. sistem prompt yapıları ile dilsel çerçevelerini ve operasyonel kısıtlarını karşılaştıran somut sorulara genişledi
      Sözleşmeler mart ayındaki yazıda tanıtıldı ve o zamandan beri çok gelişti, ama temeli ve motivasyonu aynı: https://futurisold.github.io/2025-03-01-dbc/
  • Makale ve örnek notebook’u birlikte linklemek anlamaya yardımcı olabilir
    https://github.com/ExtensityAI/symbolicai/blob/main/examples...
    https://arxiv.org/pdf/2402.00854

  • Harika
    ==, + gibi operatörleri sözdizimi değil de anlam tabanlı operatörler olarak kullanabilmek yeni fikirler için gübre olabilir; kelime gömmeleri ilk çıktığında “King - Man + Woman = Queen” gibi gevşek bir kavram cebirinin oluştuğu hissine benziyor
    Yine de buradaki sinirsel+sembolik entegrasyon, çoğu sistemde olduğu gibi oldukça sığ ve arada güvenlik duvarı olan bir yapı gibi görünüyor; sınıflandırma olarak Type 3 / Neuro;Symbolic’e daha yakın: https://harshakokel.com/posts/neurosymbolic-systems
    Asıl sihrin daha temel bir entegrasyona gidildiğinde ortaya çıkacağını düşünüyorum; bizim şirkette de (https://onton.com) ne saf sembolik ne de yoğun kayan noktalı matris olan birleşik bir temsil, az miktarda gürültülü veriden artımlı öğrenirken catastrophic forgetting’den kaçınma yeteneği, matematiksel/sembolik işlemlerde kesin güvenilirlik ve halüsinasyon olmaması şartlarını taşıyan LLM sonrası sistemler üzerine düşünüyoruz
    Mevcut sistemleri tutkal tabancasıyla birleştirir gibi birbirine eklemek de faydalı, ama birleşik bir mimarinin her şeyi değiştireceğini düşünüyorum

  • Doğruluk sözleşmesi bölümünde bir bug var
    valid_opts = ['A', 'B', 'C'] satırından sonra if v not in valid_sizes: geliyor; oysa valid_sizes tanımlı değil

    • Refactoring’den kalmıştı, şimdi düzelttim
  • “Symbolic AI” zaten iyi tanımlanmış bir terim, bu yüzden biraz yazık olmuş: https://en.m.wikipedia.org/wiki/Symbolic_artificial_intellig...

    • Bunu anlıyorum
      İsmi değiştirebiliriz; makalede isim seçimiyle ilgili bir dipnot var
      Bu projeye ilham veren Newell ve Simon’ın temel çalışmalarına kredi verme niyetindeydik
  • Maliyet yapısını merak ediyorum
    Doğal dil hesaplaması içeren bir satırı her çalıştırdığımda LLM çıkarım maliyeti mi ödüyorum, harici API kullanırsam gerçekten her seferinde ücret mi yansıyor, bilmek istiyorum
    Örneğin bir döngünün içinde “symbolic” fonksiyonu çağrılırsa ne oluyor, merak ediyorum

    • Doğru
      Örneğin OpenAI kullanırsanız tüm anlam tabanlı işlemler OpenAI API çağrısına dönüşür
      llama.cpp ile yerel bir LLM barındırırsanız model barındırma maliyeti dışında çıkarım ücreti yoktur
    • Bunun bir şekilde önbelleğe ihtiyaç duyacağını düşünüyorum
  • Günümüzde kodu LLM ürettiğine göre, bağlamı taşıyan ve Python operatörleriyle manipüle edilebilen Symbol gibi belirli bir sözdizimsel yapının, bir insanın denetim ve denge koşullarını tarif ederek oluşturduğu sıradan Python koduna göre nasıl bir fayda sağladığını merak ediyorum
    Örneğin meyveyi sebzeye çeviren bir gramer kullanmak yerine, bir meyve listesi alıp içeride LLM çağırarak karşılık gelen sebzeleri döndüren bir program yazması için LLM’e prompt da verilebilir
    Aradaki farkı anlamak istiyorum

    • Halüsinasyonu bastırmak olabilir diye düşünüyorum
      LLM’e biçimsel bir sistem kurdurursanız, bunu doğrulamak genel amaçlı bir programa göre çok daha kolay olur
  • Evrimleşebilen sinirsel-sembolik yapay zekayı da düşünüp düşünmediğinizi merak ediyorum
    https://deepwiki.com/dubprime/mythral/3.2-genome-system
    Ya da duygu hissetme tarafı nasıl?
    https://deepwiki.com/search/how-do-emotives-work_193cb616-54...
    Marvin Minsky’nin Society of Mind’ını okuyup okumadığınızı da merak ediyorum

    • Kısa cevap: hepsi için evet denebilir
      Zihin teorisinden duygulara uzanan deneyler de yaptık; ancak şu anda modellerin henüz o seviyeye yeterince ulaşmadığını düşündüğüm için, harcanan emeğe göre getirisi azaldığından durdurmuş durumdayız
      Kolayca yeniden canlandırılabilir ama Minsky favorim değil; o kuşaktan Newell/Simon tarafına daha çok yakınım
    • Yine de bunun açıklanabilir olup olmadığı, yoksa sihirli bir kara kutu mu olduğu önemli
  • LLM’in belgeleri inceleyip GitHub’daki PySR’ye (github.com/MilesCranmer/PySR) konacak ilkel operatörleri, yani operatörleri üretmesini sağlayan sembolik regresyon ile biraz uğraştım
    Her şeyi birbirine bağlamak zor olduğu için çok ilerleyemedim, ama böyle bir araç olursa tekrar denemeyi düşünebilirim

    • Kesinlikle mümkün
      Sözleşmeler kullanmanızı öneririm
      Bozuk ontoloji grafiklerini yinelemeli olarak “birbirine ekleyen” sözleşmelerde buna benzer bir yaklaşım kullanmıştım
      İlham verebilecek bir veri modeli olarak Merge, Bridge, Prune, Operation gibi yapılar koyup, her biri için birleştirilecek küme indekslerini ve üst-alt sınıf ilişkilerini, budanacak sınıf listesini tanımladıktan sonra doğrulayıcıyla ikili/tekli işlem koşullarını zorunlu kılmıştım
      Benzer şekilde operatörler için bir model oluşturup, sözleşmenin tek seferde bir operatörü çözmesini sağlayabilir, ardından o operatörü uygulayacak şekilde kurgulayabilirsiniz