SymbolicAI: LLM'lere nöro-sembolik bir bakış
(github.com/ExtensityAI)- SymbolicAI, nöro-sembolik programlama çerçevesi olarak Python programlama ile LLM'leri doğal biçimde birleştirir
- Temel birim olan Symbol nesnesi üzerinden hem sözdizimsel (syntactic) hem de anlamsal (semantic) işlemleri destekler
- Contract'lar özelliği, LLM tahminlerine veri doğrulama ve otomatik düzeltme mantığı uygulayarak güvenilirlik ve dayanıklılık sağlar
- Çeşitli harici motorlarla (OpenAI, Anthropic, huggingface vb.), web araması, görsel üretimi ve ses işleme ile entegre çalışabilir
- Öncelik tabanlı yapılandırma yönetim sistemi ve güçlü özelleştirme yetenekleriyle öne çıkar
SymbolicAI: proje özeti ve önemi
- SymbolicAI, klasik Python programlama ile farklılaştırılmış, programlanabilir LLM'lerin (büyük dil modelleri) birleşimini doğal şekilde destekleyen bir nöro-sembolik (Neuro-Symbolic) kütüphanedir
- Modüler tasarımı sayesinde genişletme, motor değiştirme ve araç entegrasyonu kolayca yapılabilir
- Local motorlar, web araması, görsel üretimi gibi çeşitli araçlarla entegre olduğundan hem deneysel hem de pratik kullanım için uygundur
Temel kavramlara giriş
Primitives
-
Primitives, temel yapı taşlarıdır; bunların merkezinde
Symbolnesnesi yer alır -
Symbolnesnesi hem sözdizimsel (syntactic) hem de anlamsal (semantic) modu destekler- Sözdizimsel (syntactic): Normal Python değerleri gibi davranır; karşılaştırma, işlemler vb. için güvenli ve hızlı çalışma sağlar
- Anlamsal (semantic): Nöro-sembolik motora bağlanarak anlamı ve bağlamı kavrar, esnek anlamsal karşılaştırma/işlem yapabilir
-
Varsayılan mod sözdizimsel olandır; yalnızca motor çalışması gerektiğinde anlamsal işleme geçilebilir
Anlamsal/sözdizimsel modlar arasında geçiş
- Oluşturulurken
semantic=Trueseçeneğini belirtme .sem(semantic),.syn(syntactic) özellikleriyle serbestçe geçiş- Anlamsal fonksiyon çağrılarında (
mapvb.) otomatik olarak anlamsal moda dönüşüm
İşlem örnekleri
==: sözdizimsel modda birebir karşılaştırma, anlamsal modda anlamsal eşdeğerlik (ör. 'Hi' == 'Hello' True)+,&,.startswith(),.choice(),.foreach(),.cluster(),.similarity()vb.- Karmaşık anlam temelli işlemler ve mantıksal zincirleme mümkündür
Contracts
- LLM'lerin belirsizliğini telafi etmek için Design by Contract ilkesi benimsenmiştir
- Veri modeli ve doğrulama kuralları dekoratörlerle tanımlanır
- Hatalı giriş/çıkışlar için otomatik hata düzeltme, yeniden deneme, geçmiş biriktirme gibi çeşitli dayanıklılık özellikleri sunar
- Pydantic veri modelleriyle uyumluluk, alan doğrulaması, otomatik prompt üretimi ve hata işleme gibi yetenekler yerleşik olarak gelir
Contract özelliğinin başlıca özellikleri
- pre_remedy/post_remedy: giriş/çıkış hatalarını otomatik düzeltme
- accumulate_errors: hata geçmişini girdiye ekleme
- remedy_retry_params: yeniden deneme kontrol parametrelerini belirtme (deneme sayısı, gecikme, backoff vb.)
Ayrıntılı örnekler ve ek açıklamalar için resmi dokümantasyon ve DeepWiki sayfasına bakılabilir
Harici motorlar ve işlev genişletilebilirliği
- Şu anda OpenAI, Anthropic gibi çeşitli nöro-sembolik motorları destekler (API/local)
- {huggingface, llama.cpp} gibi kendi motorları local olarak çalıştırılabilir
- Ses, görsel, web araması gibi ek motorlarla entegrasyon mümkündür (ayrı bağımlılık paketlerinin kurulması gerekir)
- Arama, kümeleme, OCR, indeksleme gibi gerçek dünya ML/yapay zeka işlevlerini bütünleşik şekilde sunar
Yapılandırma (Configuration) yönetim sistemi
Öncelik tabanlı yapılandırma dosyası yönetimi
-
Debug modu (proje klasörü): geliştirme ve test için
-
Python ortamına özel ayarlar ({python_env}/.symai/)
-
Global ayarlar (~/.symai/): varsayılan/yedek amaçlı
-
Bu üç konumdaki yüksek öncelikli öğeler otomatik olarak uygulanır
Başlıca yapılandırma dosyaları
- symai.config.json: SymbolicAI'nin temel seçeneklerini yönetir
- symsh.config.json, symserver.config.json: shell ve sunucu ayarları
Yapılandırma dosyası örnekleri
- API key, model adı, motor türü vb. açıkça belirtilebilir
SUPPORT_COMMUNITYseçeneğiyle veri toplama onayı verilebilir (araştırma ve kalite iyileştirme amacıyla)- Kullanıcı uyarıları
SYMAI_WARNINGSortam değişkeniyle açılıp kapatılabilir
Ortam kurulumu ve test
ffmpeg(ses),chromedriver(web crawler) gibi harici paketler gerekir- Test çalıştırma için
pytestkullanılır, kapsam kontrolü de desteklenir
Referans materyalleri ve kullanım rehberi
- DeepWiki ve resmi GitBook üzerinde zengin referans materyalleri ve video eğitimleri sunulur
- Arxiv'de yayımlanan makalede teori ve çerçevenin ayrıntıları açıklanır
- BSD-3-Clause lisansı uygulanır
Sonuç
- SymbolicAI, sembolik sistemlerin açıklığını ve sinir ağlarının esnekliğini birleştirerek LLM tabanlı, güvenilirlik odaklı servisler ve deneysel araştırmalar için son derece uygun bir çerçeve sunar
- Yapılandırma, genişletilebilirlik ve güvenilirlik sağlamaya odaklanan tasarımıyla startup'lara ve IT profesyonellerine çeşitli uygulama olanakları sağlar
Geliştirici ve topluluk desteği
- Katkı kaynakları, iletişim bilgileri ve destek kanalları (e-posta, web sitesi, Discord) açık biçimde paylaşılır
1 yorum
Hacker News görüşleri
Bu tür bir vodoo büyüsü gerçekten çok ilginç.
Hoşuma giden örneklerden biri anlamsal
map lambdakullanımıydı,örneğin S adında bir
Symbollistesi varkenS.map('tüm meyveleri sebzeye dönüştür')çağrıldığında yalnızca meyveler sebzeye dönüşüyor, diğerleri olduğu gibi kalıyorAyrıca bağlama göre parametre alıp karşılaştırma da yapılabiliyor. Örneğin selamlama bağlamında
'Hello, good morning!'ile'Hi there, good day!'ifadelerinin aynı anlama gelip gelmediğini belirlemek ya da nezaket seviyesi açısından'Good morning, sir.'ile'Hey, what’s up?'ifadelerini karşılaştırmak mümkünBunun yanında bit operatörleri gibi anlamsal olarak mantıksal birleştirmeler de yapılabiliyor. Madde işaretleri gibi kurallar ve gözlemler
&ile birleştirilip sonuç çıkarılabiliyorinterpret()fonksiyonu güçlü görünüyorOP’ye bu projeye ilham veren şeylerin ne olduğunu, bunu hangi alanlarda gerçekten uyguladığını ve en sevdiği kullanım örneğinin hangisi olduğunu merak ediyorum
python dataframe kütüphanesi Lotus’u tavsiye ederim
Tüm temel ilişkisel işlemleri kolayca anlamsal olarak genişletip kullanmayı sağlıyor
Her çağrı bir "model" noktası haline geliyor, bu da sonradan makine öğrenmesi tarafına genişletmeyi kolaylaştırıyor
snowflakegibi bulut SQL sistemleri de giderek bu yöne gidiyor gibi hissettiriyorlouie.ai’de benzer bir sistem kurduk. AI notebook, dashboard ve API üzerinden (
splunk,databricks, graph db vb.) verilerle etkileşimli biçimde çalışıyor ve bağlama göre symbolic + semantic operator’ları otomatik olarak tespit ediyorGerçek iş ortamında gerçekten çok yardımcı oluyor
Benim başlıca kullanım senaryom şu:
semantic map ile
splunkindeksinden uyarıları alıp şüpheli olanlara işaret eklemek, açıklama alanı da doldurmak,sonra bunu semantic reduce ile özetleyip doğal dilde rapora dönüştürmek
Havuç neden elmanın sebzeye dönüştürülmüş hali diye soruyor
Yanıtlamaya kalkarsam çok uzun olacak bir konu
Proje 2022 sonlarında başladı ama son dönemde sadece modeller iyileşti; temel kısımların çoğu zaten GPT-3 döneminden beri vardı
Yakın zamanda ortaya çıkan DbC (Design by Contract) gerçekten çok özgün
Ajanlarla ilgili yaşadığım tüm sorunları çözüyor. Özellikle birden fazla contract zincirlenince guardrail’ler doğal biçimde yayılıyor ve çok etkili oluyor
Neredeyse tüm özel araçları kendim geliştirdim
Mesela OpenAI’nin web search aracı iyi ama özelleştirme açısından yetersiz, bu yüzden kendi deep research agent’ımı geliştirip kullanıyorum
İlk gün çıktısına örnek thread
Bir şirket işletiyorum ve 3 contract’ı zincirleyerek uçtan uca belge üretim otomasyonu da kurdum
Demo PDF incelenebilir
Girdi prompt’u şuydu:
“Dosyalardaki kalıpları analiz et, çeşitli prompt formatlarını (XML, markdown vb.), dalkavukluk eğilimini, araç kullanım biçimini, etik guardrail’leri, mimari özellikleri ve benzer unsurları genel olarak karşılaştıran bir rapor üret”
Contract kavramını 2025 Mart’ında bu yazıda tanıtmıştım; o zamandan beri çok gelişti ama temel niyet ve motivasyon aynı kaldı
Anlamsal
==,+gibi operatörleri kullanabilmek, yeni fikirleri besleyen bir gübre gibi geliyorWord embedding’in ilk çıktığı dönemde “King - Man + Woman = Queen” örneğiyle kavramsal cebir fikriyle ilk kez karşılaştığım zamanki heyecana benziyor
Yine de buradaki sinir ağı ve sembolik (logic) bütünleşmesi, çoğu sistemde olduğu gibi, hâlâ yüzeysel ya da birbirinden ayrık durumda
Referans
Gerçek devrim, ileride çok daha temel bir bütünleşme sağlandığında mümkün olacak
Biz de şirketimizde (Onton) bunun üzerine çalışıyoruz
Hedeflerimiz: 1) tamamen bütünleşik bir temsil (ne sadece sembolik ne de sadece derin öğrenme), 2) az gürültülü veriyle bile sürekli öğrenme (unutma yok), 3) matematiksel/sembolik işlemlerde %100 güvenilirlik, 4) sıfır halüsinasyon
Şu anda sıcak silikon tabancası misali farklı sistemleri birbirine yapıştırmak işe yarıyor ama birleşik mimariler oyunun kurallarını değiştirecek gibi görünüyor
Açıklamaların ve örneklerin iyi verildiği resmî kod notebook’u ile resmî makale PDF’i bağlantılarını paylaşıyor
Koddaki bir hatayı bildiriyor (
correctness contractsiçindevalid_sizestanımlı değil)Bu konuda görüş bildiren ve destek veren herkese teşekkürler
Böyle bir tepki beklemiyordum ve isteyen herkes e-posta ya da tweet ile ulaşabilir
Sizinle sohbet etmek gerçekten çok güzeldi
Bir rahatsızlığım var
“Symbolic AI” teriminin kendisi zaten açıkça tanımlanmış
Yakında ismi değiştirebilirim
Makalede de adlandırma gerekçesini dipnotta açıkladım; projeyi, bu temel araştırma alanına öncülük eden Newell ve Simon’a saygı göstergesi olarak böyle adlandırdım
Merak ettiğim bir şey var
Maliyet politikası nasıl
Doğal dil işlemleri içeren tek bir satır her çalıştırıldığında (özellikle dış API kullanılıyorsa) sürekli LLM çıkarım maliyeti mi oluşuyor
Örneğin
"symbolic"fonksiyonu bir döngü içinde sürekli çağrıldığında da durum böyle miEvet
Örneğin OpenAI API kullanıldığında, her anlamsal işlem için bir OpenAI çağrısı yapılıyor ve maliyet oluşuyor
llama.cppgibi bir araçla yerel LLM’i kendiniz host ederseniz yalnızca barındırma maliyeti olur, ayrıca çıkarım ücreti ödemezsinizKesinlikle cache benzeri bir şeye ihtiyaç olacaktır
Bunu hiç beklemiyordum ama bir anda çok popüler olmasına biraz şaşırdım
Normalde şu anda uyuyor olmam gerekirdi ama mevcut uykusuzluk XP’mi kullanarak sohbete katılmayı sürdürüyorum
Fonksiyonel programlamadaki (FP) gibi, tüm
Symbol’ler saf değerler gibi davranıyorİşlemler temiz ve izlenebilir bir akış halinde birleştiriliyor
Belirsiz aşamalarda model devreye giriyor
FP’deki IO işlemleri gibi, üretici model çağrıları da kapsam içindeki yan etkiler olarak ele alınıyor
Normal durumda reasoning grafiği deterministik; yalnızca gerektiğinde modele devrediliyor
Demo gerçekten etkileyici
En baştan beri fonksiyonel olacak şekilde tasarladım
Düşük seviyede bile her şey fonksiyonel ilkelere dayanıyor ve içeride de
functional.pyya dacore.pygibi adlar kullanılıyorRefactor, genişletme ve bug yönetimi açısından çok yardımcı olduğu için dekoratörler de her yere yayılmış durumda
Bu aralar LLM’ler tüm kodu da yazabiliyor,
bu yüzden
Symbolgibi bağlam taşıyan ve python operator’larıyla kolayca manipüle edilen bir yapının,insanların tek tek kontrol ederek kod yazmasına kıyasla hangi avantajı sağladığını merak ediyorum
Mesela anlamsal dönüşümü bu tür bir söz dizimiyle doğrudan yazmak mümkün ama, meyve listesini sebzeye dönüştüren programı üretmesini LLM’den istemek de mümkün değil mi
Temel farkın ne olduğunu anlamak istiyorum
LLM’nin biçimsel bir sistem üretmesini sağlarsanız, bunu doğrulamak genel amaçlı bir sisteme göre çok daha kolay olur