- 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
Hacker News yorumları
Bu tür voodoo gibi özellikler en ilgi çekici olanlar
Örneğin anlam tabanlı
mapile['apple', 'banana', 'cherry', 'cat', 'dog']üzerine “tüm meyveleri sebzeye çevir” uygulanınca['carrot', 'broccoli', 'spinach', 'cat', 'dog']gibi bir sonuç çıkıyor;equals()isecontext='greeting context'ya dacontext='politeness level'gibi bağlama göre farklı karşılaştırma sonuçları veriyorBit 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üzdeninterpret()güçlü görünüyorBunun ortaya çıkış nedeni, gerçek kullanım alanları ve şimdiye kadarki en sevdiğiniz kullanım örneği merak ediyorum
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
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 benziyorYine 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 sonraif v not in valid_sizes:geliyor; oysa valid_sizes tanımlı değil“Symbolic AI” zaten iyi tanımlanmış bir terim, bu yüzden biraz yazık olmuş: https://en.m.wikipedia.org/wiki/Symbolic_artificial_intellig...
İ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
Örneğin OpenAI kullanırsanız tüm anlam tabanlı işlemler OpenAI API çağrısına dönüşür
llama.cppile yerel bir LLM barındırırsanız model barındırma maliyeti dışında çıkarım ücreti yokturGünümüzde kodu LLM ürettiğine göre, bağlamı taşıyan ve Python operatörleriyle manipüle edilebilen
Symbolgibi 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
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
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
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
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,Operationgibi 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ımBenzer ş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