- SymbolicAI adalah kerangka kerja neuro-simbolik yang menggabungkan pemrograman Python klasik dengan sifat LLM yang dapat diprogram dan dapat didiferensiasikan, dengan tujuan agar dapat digunakan secara alami di dalam Python
- Konsep intinya adalah primitive berbasis objek
Symbol dan contracts yang memverifikasi serta memperbaiki hasil LLM; perilaku default dimulai dalam mode sintaktis demi keamanan dan kecepatan
- Dalam mode sintaktis,
Symbol berperilaku seperti nilai Python biasa; dalam mode semantik, ia menangani konteks dan makna, dan dapat dialihkan lewat pemanggilan fungsi semantik seperti semantic=True, .sem, dan .map()
- Sistem contract menerapkan prinsip Design by Contract ke workflow LLM, menangani validasi input, perubahan state, generasi oleh LLM, validasi output, hingga respons pengganti saat gagal dalam satu alur berbasis decorator
- Instalasi dimulai dengan
pip install symbolicai; penggunaan nyata memerlukan konfigurasi symconfig dan symai.config.json, dan mesin neuro-simbolik wajib untuk memakai paket symai
Model yang dituju SymbolicAI
- SymbolicAI adalah kerangka kerja neuro-simbolik (neuro-symbolic) yang menangani kode Python biasa bersama pemrosesan semantik berbasis LLM
- Desain modularnya memungkinkan perluasan dan kustomisasi sesuai kebutuhan
- Mendukung integrasi tool seperti menulis engine sendiri, hosting engine lokal, pencarian web, dan pembuatan gambar
- Nama proyek ini dimaksudkan sebagai kredit untuk karya dasar Allen Newell dan Herbert Simon
Primitive Symbol
- Di pusat SymbolicAI terdapat objek
Symbol, yang memungkinkan operasi kecil dan dapat dikomposisikan digunakan seperti sintaks native Python
Symbol memiliki dua cara kerja
- Syntactic: Berperilaku seperti nilai Python biasa yang diberikan, misalnya string, list, atau integer
- Semantic: Terhubung ke engine neuro-simbolik untuk menangani makna dan konteks
- Default-nya adalah mode sintaktis
- Operator Python seperti
==, ~, dan & di-overload di symai
- Jika engine langsung dipanggil pada setiap perbandingan atau bit shift, eksekusi bisa menjadi lambat dan menimbulkan efek samping tak terduga
- Keamanan dan kecepatan dijaga dengan mengaktifkan perilaku semantik hanya pada titik yang diperlukan
Cara beralih ke mode semantik
- Jika
semantic=True ditentukan saat pembuatan, objek sejak awal berperilaku sebagai Symbol semantik
- Dalam contoh,
Symbol("Cats are adorable", semantic=True) memproses "feline" in S sebagai True
- Saat diperlukan, proyeksi
.sem dapat digunakan untuk beralih ke perilaku semantik, dan .syn dapat digunakan untuk kembali ke perilaku sintaktis
- Untuk nilai
"Cats are adorable" yang sama, "feline" in S.sem bernilai True pada S.sem, sedangkan pada S default bernilai False
- Operasi notasi titik seperti
.map() atau pemanggilan fungsi semantik lain secara otomatis mengalihkan Symbol ke mode semantik
- Dalam contoh, ketika
convert all fruits to vegetables diterapkan ke daftar buah, hanya buah yang diubah menjadi sayuran, sementara cat dan dog tetap dipertahankan
- Proyeksi
.sem dan .syn bekerja dengan menambahkan lapisan perilaku berbeda di atas objek dasar yang sama, sehingga operasi sintaktis dan semantik dapat dirangkai di atas satu Symbol
Contoh operasi yang disediakan
- SymbolicAI mendukung beragam primitive, dengan dokumentasi di primitives
- Dalam mode sintaktis,
== memeriksa kecocokan literal; dalam mode semantik, ia menangani kesetaraan fuzzy dan konseptual seperti antara "Hi" dan "Hello"
- Dalam mode sintaktis,
+ adalah penjumlahan angka, string, atau list; dalam mode semantik, ia melakukan kombinasi bermakna, pencampuran, dan penggabungan konsep
- Dalam mode sintaktis,
& adalah AND bit atau logika; dalam mode semantik, ia menangani penggabungan logika, inferensi, dan konteks
- Fitur khusus semantik mencakup
.choice(cases, default), .foreach(condition, apply), .cluster(**clustering_kwargs?), .similarity(other, metric?, normalize?), dan lainnya
.cluster() mengelompokkan data secara semantik dan menggunakan DBSCAN dari sklearn
.similarity() menghitung kemiripan antar-embedding
Cara menangani output LLM dengan contract
- Berangkat dari kesadaran bahwa LLM dapat berhalusinasi tetapi kode tidak boleh demikian, SymbolicAI menerapkan prinsip Design by Contract ke dunia LLM
- Contract tidak hanya bergantung pada pengujian setelahnya, tetapi mengikat model data dan batasan validasi ke decorator untuk menangani kebenaran sejak tahap desain
- Decorator contract pada kode contoh menggunakan opsi berikut
pre_remedy=True: Mencoba memperbaiki input yang salah secara otomatis
post_remedy=True: Mencoba memperbaiki output LLM yang salah secara otomatis
accumulate_errors=True: Meneruskan riwayat error pada setiap percobaan ulang
verbose=True: Menampilkan progres di terminal
remedy_retry_params: Menggunakan tries=3, delay=0.4, max_delay=4.0, jitter=0.15, backoff=1.8, graceful=False
- Alur tingkat tinggi kelas
Expression yang diberi contract adalah sebagai berikut
prompt: Deskripsi statis yang mendefinisikan apa yang harus dilakukan LLM, dan wajib ada
pre: Memeriksa input dan bersifat opsional
act: Mengubah state dan bersifat opsional
- LLM: Engine SymbolicAI menghasilkan jawaban yang diharapkan
post: Memeriksa apakah jawaban memenuhi aturan semantik dan bersifat opsional
forward: Wajib; saat contract berhasil, mengembalikan objek LLM yang telah divalidasi tipenya, dan saat gagal mengembalikan jawaban fallback graceful
- Dokumentasi contract tersedia di contract validation system di DeepWiki dan features/contracts
Instalasi dan fitur opsional
- Instalasi dasar dilakukan dengan pip
pip install symbolicai
- Anda juga dapat meng-clone repository dan menyusun virtual environment Python dengan uv
>= 0.9.17
git clone git@github.com:ExtensityAI/symbolicai.git
cd symbolicai
uv sync --python x.xx
source ./.venv/bin/activate
- SymbolicAI menggunakan beberapa engine untuk memproses teks, suara, dan gambar, serta mencakup akses ke search engine untuk pencarian informasi web
- Dependensi opsional dapat diinstal sebagai extra per fitur
bitsandbytes, hf, lean, llama_cpp, ocr, qdrant, scrape, search, serpapi, services, solver, whisper, wolframalpha
- Semua dependensi opsional dapat diinstal sekaligus
pip install "symbolicai[all]"
uv sync --frozen menginstal dependensi yang dikunci pada file lock yang disediakan
- Sebagian dependensi opsional mungkin memerlukan langkah instalasi tambahan, dan sebagian saat ini hanya didukung secara eksperimental sehingga mungkin tidak berjalan sesuai harapan
Manajemen konfigurasi dan engine wajib
- SymbolicAI menggunakan sistem manajemen konfigurasi berbasis prioritas
- Konfigurasi dimuat dari tiga lokasi dalam urutan prioritas
- Mode debug pada direktori kerja saat ini: prioritas tertinggi dan hanya berlaku untuk
symai.config.json
- Konfigurasi per-environment pada environment Python: berada di
{python_env}/.symai/ dan cocok untuk konfigurasi per proyek
- Konfigurasi global pada direktori home: berada di
~/.symai/ dan berfungsi sebagai fallback default
- Ada tiga file konfigurasi yang dikelola
symai.config.json: Konfigurasi utama SymbolicAI
symsh.config.json: Konfigurasi shell
symserver.config.json: Konfigurasi server
symconfig menampilkan lokasi konfigurasi, path konfigurasi aktif, serta konfigurasi saat ini dengan informasi sensitif dipangkas, dan memulai caching paket awal serta inisialisasi file konfigurasi
- Untuk menggunakan paket
symai, engine neuro-simbolik wajib ada
- Jika atribut engine ditentukan di
symai.config.json pada path proyek, itu akan menggantikan environment variable
- Contoh konfigurasi mencakup
NEUROSYMBOLIC_ENGINE_MODEL bernilai claude-sonnet-4-6, model embedding text-embedding-3-small, model TTS tts-1, model OCR mistral-ocr-latest, engine indexing qdrant, dan lainnya
- Secara default, peringatan pengguna diaktifkan, dan dapat dinonaktifkan dengan environment variable
SYMAI_WARNINGS=0
Pengujian, dokumentasi, dan lisensi
- Contoh menjalankan pengujian adalah sebagai berikut
pytest tests
pytest -m mandatory
pytest --cov=symbolicai tests
- Sebelum pengujian, konfigurasi harus sudah disusun dengan benar
- Sebagai langkah berikutnya, Anda dapat merujuk ke halaman SymbolicAI DeepWiki, paper, dan tutorial video
- Informasi sitasi merujuk pada preprint arXiv 2024 berjudul
Symbolicai: A framework for logic-based approaches combining generative models and solvers
- Lisensi proyek ini adalah BSD-3-Clause License
1 komentar
Opini Hacker News
Fitur yang terasa seperti voodoo semacam ini yang paling menarik
Misalnya, jika
mapberbasis makna diterapkan ke['apple', 'banana', 'cherry', 'cat', 'dog']dengan perintah “ubah semua buah menjadi sayuran”, hasilnya menjadi semacam['carrot', 'broccoli', 'spinach', 'cat', 'dog'], danequals()dapat memberi hasil perbandingan berbeda sesuai konteks, seperticontext='greeting context'ataucontext='politeness level'Operator bit juga dipakai seperti kombinasi logika semantik, sehingga
horn_rule & observationmengarah ke inferensi; karena ituinterpret()terlihat kuatSaya penasaran apa yang melatarbelakangi pembuatannya, penerapan nyatanya, dan kasus penggunaan yang sejauh ini paling disukai
Intinya adalah membuat versi berbasis makna dari operator relasional utama sebagai ekstensi pustaka dataframe Python, dan setiap pemanggilan menjadi titik “model” untuk pekerjaan yang lebih kompleks nantinya, seperti pendekatan berbasis pembelajaran
Sisi cloud SQL seperti Snowflake juga tampaknya bergerak ke arah ini, dan di louie.ai kami juga memakai pendekatan serupa: saat pengguna berbicara dengan data seperti Splunk, Databricks, atau graph DB melalui notebook/dashboard/API AI (MCP, dll.), sistem menentukan operator simbolik+semantik yang sesuai konteks; dalam praktiknya ini cukup berguna
Kasus penggunaan utama 80%-nya adalah membuat dataframe yang diperkaya dengan map berbasis makna, misalnya “ambil semua alert dari indeks Splunk xyz lalu tambahkan kolom yang menandai item mencurigakan dan kolom yang menjelaskan alasannya”, kemudian memperoleh penjelasan bahasa alami dengan reduce berbasis makna, seperti “rangkum apa yang ditemukan”
Tidak banyak yang berubah secara besar sejak proyek ini dimulai pada akhir 2022; modelnya saja yang menjadi lebih baik, dan sejak era GPT-3 sebagian besar operasi primitifnya sudah ada
Yang belakangan lebih penting adalah kontribusi DbC: kontrak bisa dirangkai, guardrail menyebar dengan baik, dan secara unik ini menyelesaikan hampir semua masalah terkait agen yang saya lemparkan kepadanya
Perplexity menjadi kurang berguna karena web search OpenAI, dan web search OpenAI pun tidak cukup memadai dibanding kustomisasi sendiri, jadi saya membuat agen deep research sendiri: https://x.com/futurisold/status/1931751644233945216
Di perusahaan, kami juga merangkai 3 kontrak untuk membuat pembuatan dokumen end-to-end, dan contoh keluarannya ada di sini: https://drive.google.com/file/d/1Va7ALq_N-fTYeumKhH4jSxsTrWD...
Inputnya adalah permintaan untuk menganalisis perbandingan system prompt dari penyedia AI utama, menemukan format seperti XML/Markdown/JSON, instruksi yang bersifat menjilat atau manipulatif, batasan penggunaan alat, guardrail etis, dan perbedaan desain alignment, lalu menyusunnya menjadi laporan teknis; instruksi yang dihasilkan kemudian diperluas menjadi pertanyaan-pertanyaan spesifik yang membandingkan struktur system prompt dan kerangka linguistik serta batasan operasional dari OpenAI, Google, Anthropic, xAI, dan lainnya
Kontrak diperkenalkan dalam tulisan bulan Maret, dan sejak itu sudah banyak berkembang, tetapi dasar dan motivasinya tetap sama: https://futurisold.github.io/2025-03-01-dbc/
Menautkan paper dan notebook contoh bersama-sama sepertinya akan membantu pemahaman
https://github.com/ExtensityAI/symbolicai/blob/main/examples...
https://arxiv.org/pdf/2402.00854
Keren
Jika operator seperti
==dan+bisa dipakai sebagai operator berbasis makna, bukan sekadar sintaks, itu terasa seperti pupuk untuk ide-ide baru; mirip ketika word embedding pertama muncul dan melahirkan aljabar konsep yang longgar seperti “King - Man + Woman = Queen”Namun integrasi neural+simbolik di sini, seperti kebanyakan sistem, tampaknya cukup dangkal dan ber-firewall, dan secara klasifikasi lebih dekat ke Type 3 / Neuro;Symbolic: https://harshakokel.com/posts/neurosymbolic-systems
Keajaiban sebenarnya tampaknya akan muncul saat bergerak ke integrasi yang lebih mendasar, dan di perusahaan kami (https://onton.com) kami juga sedang memikirkan sistem pasca-LLM dengan representasi terpadu yang bukan simbolik murni maupun matriks floating-point padat, kemampuan belajar bertahap dari sedikit data yang berisik sambil menghindari catastrophic forgetting, keandalan kuat untuk matematika dan operasi simbolik, serta tanpa halusinasi
Menyambung sistem yang ada seperti memakai lem tembak juga berguna, tetapi arsitektur terpadu sepertinya akan mengubah segalanya
Ada bug di bagian kontrak akurasi
Setelah
valid_opts = ['A', 'B', 'C'], munculif v not in valid_sizes:, padahal valid_sizes tidak didefinisikan“Symbolic AI” sudah merupakan istilah yang terdefinisi dengan baik, jadi agak disayangkan: https://en.m.wikipedia.org/wiki/Symbolic_artificial_intellig...
Namanya mungkin bisa diubah, dan di paper ada catatan kaki tentang pilihan nama tersebut
Maksudnya adalah memberi kredit pada karya dasar Newell dan Simon yang menginspirasi proyek ini
Penasaran dengan struktur biayanya
Ingin tahu apakah setiap kali menjalankan baris yang berisi komputasi bahasa alami kita membayar biaya inferensi LLM, dan apakah jika memakai API eksternal benar-benar dikenai biaya setiap kali
Misalnya, penasaran apa yang terjadi jika memanggil fungsi “symbolic” di dalam loop
Misalnya jika memakai OpenAI, semua operasi berbasis makna menjadi panggilan API OpenAI
Jika meng-host LLM lokal dengan
llama.cpp, tidak ada biaya inferensi selain biaya hosting modelKarena sekarang kode dibuat oleh LLM, penasaran apa manfaat struktur sintaks tertentu seperti
Symbolyang memuat konteks dan bisa dimanipulasi dengan operator Python dibanding kode Python biasa yang dibuat manusia dengan menginstruksikan kondisi pemeriksaan dan penyeimbangMisalnya, alih-alih memakai tata bahasa yang mengubah buah menjadi sayuran, kita juga bisa mem-prompt LLM untuk membuat program yang menerima daftar buah lalu memanggil LLM di dalamnya untuk mengembalikan sayuran yang sesuai
Ingin memahami perbedaannya
Jika LLM diminta membuat sistem formal, itu bisa diverifikasi jauh lebih mudah daripada program serbaguna
Penasaran apakah sudah mempertimbangkan AI neuro-simbolik yang dapat berevolusi
https://deepwiki.com/dubprime/mythral/3.2-genome-system
Atau bagaimana dengan yang merasakan emosi?
https://deepwiki.com/search/how-do-emotives-work_193cb616-54...
Penasaran juga apakah sudah membaca Society of Mind karya Marvin Minsky
Pernah juga bereksperimen dari theory of mind hingga emosi, tetapi sekarang merasa modelnya belum cukup mencapai level itu, jadi karena imbal hasil dibanding usaha menurun, eksperimen itu sedang dihentikan
Bisa dengan mudah dihidupkan lagi, tetapi Minsky bukan favorit saya; dari generasi itu saya lebih tertarik pada Newell/Simon
Pernah sedikit mencoba regresi simbolik, yakni membuat LLM meninjau dokumen lalu menghasilkan operator primitif—operator yang akan dimasukkan ke PySR di GitHub (github.com/MilesCranmer/PySR)
Tidak sampai jauh karena sulit menyambungkan semuanya, tetapi dengan alat seperti ini mungkin bisa mencobanya lagi
Saya merekomendasikan memakai kontrak
Saya pernah memakai pendekatan serupa untuk kontrak yang secara iteratif “menyambung” graf ontologi yang rusak
Sebagai model data yang bisa memberi inspirasi, ada struktur seperti
Merge,Bridge,Prune,Operation; masing-masing mendefinisikan indeks klaster yang akan digabung, relasi kelas induk-anak, dan daftar kelas yang akan dipangkas, lalu validator memaksakan kondisi operasi biner/unariDengan cara serupa, Anda bisa membuat model untuk operator, membuat kontrak menyelesaikan satu operator pada satu waktu, lalu menerapkan operator tersebut