2 poin oleh GN⁺ 2025-06-29 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2025-06-29
Opini Hacker News
  • Fitur yang terasa seperti voodoo semacam ini yang paling menarik
    Misalnya, jika map berbasis makna diterapkan ke ['apple', 'banana', 'cherry', 'cat', 'dog'] dengan perintah “ubah semua buah menjadi sayuran”, hasilnya menjadi semacam ['carrot', 'broccoli', 'spinach', 'cat', 'dog'], dan equals() dapat memberi hasil perbandingan berbeda sesuai konteks, seperti context='greeting context' atau context='politeness level'
    Operator bit juga dipakai seperti kombinasi logika semantik, sehingga horn_rule & observation mengarah ke inferensi; karena itu interpret() terlihat kuat
    Saya penasaran apa yang melatarbelakangi pembuatannya, penerapan nyatanya, dan kasus penggunaan yang sejauh ini paling disukai

    • Lotus juga bisa menarik: https://github.com/lotus-data/lotus
      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”
    • Saya penasaran kenapa ketika apple dijadikan sayuran hasilnya carrot
    • Sepertinya ini akan jadi jawaban yang sangat panjang
      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'], muncul if v not in valid_sizes:, padahal valid_sizes tidak didefinisikan

    • Itu sisa refactoring, dan sekarang sudah diperbaiki
  • “Symbolic AI” sudah merupakan istilah yang terdefinisi dengan baik, jadi agak disayangkan: https://en.m.wikipedia.org/wiki/Symbolic_artificial_intellig...

    • Saya mengerti poin itu
      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

    • Benar
      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 model
    • Sepertinya ini membutuhkan cache dalam bentuk apa pun
  • Karena sekarang kode dibuat oleh LLM, penasaran apa manfaat struktur sintaks tertentu seperti Symbol yang memuat konteks dan bisa dimanipulasi dengan operator Python dibanding kode Python biasa yang dibuat manusia dengan menginstruksikan kondisi pemeriksaan dan penyeimbang
    Misalnya, 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

    • Mungkin untuk menekan halusinasi
      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

    • Jawaban singkatnya, bisa dibilang ya untuk semuanya
      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
    • Tetap saja, yang penting apakah itu bisa dijelaskan, atau hanya black box seperti sulap
  • 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

    • Jelas memungkinkan
      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/unari
      Dengan cara serupa, Anda bisa membuat model untuk operator, membuat kontrak menyelesaikan satu operator pada satu waktu, lalu menerapkan operator tersebut