SymbolicAI: Góc nhìn thần kinh-ký hiệu về LLM
(github.com/ExtensityAI)- SymbolicAI là một framework lập trình thần kinh-ký hiệu kết hợp tự nhiên giữa lập trình Python và LLM
- Thông qua đối tượng Symbol là đơn vị cơ bản, nó hỗ trợ cả thao tác cú pháp (syntactic) và ngữ nghĩa (semantic)
- Tính năng Contracts áp dụng kiểm tra tính hợp lệ dữ liệu và logic tự động sửa lỗi vào dự đoán của LLM để đảm bảo độ tin cậy và độ vững chắc
- Có thể vận hành tích hợp với nhiều engine bên ngoài (OpenAI, Anthropic, huggingface, v.v.), tìm kiếm web, tạo ảnh và xử lý giọng nói
- Nổi bật với hệ thống quản lý cấu hình dựa trên mức độ ưu tiên và khả năng tùy biến mạnh mẽ
SymbolicAI: Tổng quan dự án và tầm quan trọng
- SymbolicAI là một thư viện thần kinh-ký hiệu (Neuro-Symbolic) hỗ trợ tự nhiên việc kết hợp giữa lập trình Python cổ điển và LLM (mô hình ngôn ngữ lớn) có thể lập trình, mang tính khác biệt
- Nhờ thiết kế mô-đun, có thể dễ dàng mở rộng, thay engine, và tích hợp công cụ
- Được kết nối với nhiều công cụ như engine local, tìm kiếm web, tạo ảnh, nên phù hợp cho cả mục đích thử nghiệm lẫn ứng dụng thực tiễn
Giới thiệu các khái niệm chính
Primitives
-
Primitives là các đơn vị cấu thành cơ bản, trong đó cốt lõi là đối tượng
Symbol -
Đối tượng
Symbolhỗ trợ cả chế độ cú pháp (syntactic) và ngữ nghĩa (semantic)- Cú pháp (syntactic): hoạt động như giá trị Python thông thường, triển khai các thao tác an toàn và nhanh như so sánh, phép toán, v.v.
- Ngữ nghĩa (semantic): kết nối với engine thần kinh-ký hiệu để hiểu ý nghĩa và ngữ cảnh, cho phép so sánh/thao tác ngữ nghĩa linh hoạt
-
Chế độ cú pháp là mặc định, và chỉ chuyển sang xử lý ngữ nghĩa khi cần hoạt động của engine
Cách chuyển giữa chế độ ngữ nghĩa/cú pháp
- Chỉ định tùy chọn semantic=True khi khởi tạo
- Chuyển đổi linh hoạt bằng các thuộc tính
.sem(semantic),.syn(syntactic) - Tự động chuyển sang chế độ ngữ nghĩa khi gọi hàm ngữ nghĩa (map, v.v.)
Ví dụ phép toán
==: ở chế độ cú pháp là so sánh literal, ở chế độ ngữ nghĩa là tương đương ngữ nghĩa (ví dụ: 'Hi' == 'Hello' là True)+,&,.startswith(),.choice(),.foreach(),.cluster(),.similarity()v.v.- Có thể thực hiện thao tác phức hợp dựa trên ngữ nghĩa và chaining logic
Contracts
- Áp dụng nguyên tắc Design by Contract để bù đắp tính bất định của LLM
- Chỉ định mô hình dữ liệu và quy tắc kiểm tra hợp lệ bằng decorator
- Hỗ trợ nhiều tính năng ổn định như tự động sửa lỗi, thử lại, tích lũy lịch sử cho đầu vào/đầu ra sai
- Tích hợp sẵn khả năng tương thích với mô hình dữ liệu Pydantic và kiểm tra field, tự động sinh prompt, xử lý lỗi, v.v.
Các đặc điểm chính của tính năng Contract
- pre_remedy/post_remedy: tự động sửa lỗi đầu vào/đầu ra
- accumulate_errors: nhập lịch sử lỗi
- remedy_retry_params: chỉ định tham số điều khiển thử lại (số lần thử, độ trễ, backoff, v.v.)
Có thể tham khảo ví dụ chi tiết và giải thích bổ sung trong tài liệu chính thức và trang DeepWiki
Engine bên ngoài và khả năng mở rộng tính năng
- Hiện hỗ trợ nhiều engine thần kinh-ký hiệu như OpenAI, Anthropic (API/local)
- Có thể chạy local các engine riêng như {huggingface, llama.cpp}
- Có thể tích hợp thêm các engine cho giọng nói, hình ảnh, tìm kiếm web (cần cài thêm các gói phụ thuộc riêng)
- Cung cấp tích hợp các tính năng ML/AI thực chiến như tìm kiếm, clustering, OCR, indexing
Hệ thống quản lý cấu hình (Configuration)
Quản lý file cấu hình dựa trên mức độ ưu tiên
-
Chế độ debug (thư mục dự án): dùng cho phát triển và kiểm thử
-
Thiết lập theo từng môi trường Python ({python_env}/.symai/)
-
Thiết lập global (~/.symai/): dùng làm mặc định/dự phòng
-
Tự động áp dụng mục có độ ưu tiên cao nhất từ ba vị trí này
Các file cấu hình chính
- symai.config.json: quản lý các tùy chọn chính của SymbolicAI
- symsh.config.json, symserver.config.json: cấu hình cho shell và server
Ví dụ file cấu hình
- Chỉ định tường minh API Key, tên model, loại engine, v.v.
- Tùy chọn SUPPORT_COMMUNITY để đồng ý thu thập dữ liệu (phục vụ nghiên cứu và cải thiện chất lượng)
- Có thể bật/tắt bằng biến môi trường cảnh báo người dùng (SYMAI_WARNINGS)
Thiết lập môi trường và kiểm thử
- Cần các gói bên ngoài như ffmpeg (giọng nói), chromedriver (web crawler), v.v.
- Chạy test bằng
pytest, có hỗ trợ kiểm tra coverage
Tài liệu tham khảo và hướng dẫn sử dụng
- DeepWiki và GitBook chính thức cung cấp nhiều tài liệu tham khảo cùng video tutorial phong phú
- Bài báo công bố trên Arxiv giải thích chi tiết lý thuyết và framework
- Áp dụng giấy phép BSD-3-Clause
Kết luận
- SymbolicAI là một framework rất phù hợp cho các dịch vụ tập trung vào độ tin cậy và nghiên cứu thử nghiệm dựa trên LLM, bằng cách kết hợp tính rõ ràng của hệ thống ký hiệu với sự linh hoạt của mạng nơ-ron
- Với thiết kế tập trung vào cấu hình, khả năng mở rộng và đảm bảo độ tin cậy, nó mang lại nhiều khả năng ứng dụng cho startup và người làm IT thực tiễn
Hỗ trợ nhà phát triển và cộng đồng
- Công khai tích cực các tài nguyên đóng góp, thông tin liên hệ và kênh hỗ trợ (email, website, Discord)
1 bình luận
Ý kiến Hacker News
Kiểu “bùa phép” này thật sự rất thú vị.
Một ví dụ tôi thấy khá hay là dùng semantic map lambda,
ví dụ khi có một danh sách Symbol là S, nếu gọi
S.map('chuyển mọi loại trái cây thành rau củ')thì chỉ các loại trái cây được đổi thành rau củ, còn những thứ khác vẫn giữ nguyênNgoài ra còn có thể nhận parameter theo ngữ cảnh để so sánh. Ví dụ xác định liệu
Hello, good morning!vàHi there, good day!có cùng nghĩa trong ngữ cảnh chào hỏi hay không, hoặc so sánhGood morning, sir.vớiHey, what’s up?theo mức độ lịch sựCũng có thể kết hợp logic theo nghĩa ngữ nghĩa giống như toán tử bit. Gộp các quy tắc và quan sát như các gạch đầu dòng bằng
&để rút ra kết luậnHàm
interpret()trông rất mạnhTôi tò mò không biết điều gì đã truyền cảm hứng cho OP làm dự án này, họ đã áp dụng nó vào những lĩnh vực nào, và trường hợp sử dụng họ thích nhất là gì
Xin giới thiệu Lotus, một thư viện dataframe cho Python
Có thể dễ dàng mở rộng tất cả các phép toán quan hệ cốt lõi theo hướng ngữ nghĩa
Mỗi lời gọi đều trở thành một điểm “mô hình”, nên sau này cũng dễ mở rộng sang phía machine learning
Có cảm giác cloud SQL như Snowflake cũng đang dần đi theo hướng này
Chúng tôi đã triển khai một hệ thống tương tự tại louie.ai. Thông qua AI notebook, dashboard và API, hệ thống xử lý dữ liệu theo kiểu hội thoại (Splunk, Databricks, graph db, v.v.) và tự động nhận diện symbolic + semantic operator dựa trên ngữ cảnh
Rất hữu ích trong công việc thực tế
Use case chính của tôi là:
dùng semantic map để lấy cảnh báo từ chỉ mục Splunk, gắn cờ những mục đáng ngờ và thêm phần mô tả,
rồi dùng semantic reduce để tóm tắt chúng và tạo luôn báo cáo bằng ngôn ngữ tự nhiên
Câu hỏi: tại sao cà rốt lại là kết quả của việc chuyển đổi táo sang rau củ?
Nếu trả lời thì sẽ rất dài
Dự án bắt đầu từ cuối năm 2022, nhưng gần đây chỉ là mô hình đã tốt hơn, còn những phần nền tảng thì đã có từ thời GPT-3 rồi
Gần đây cái mới thật sự độc đáo là DbC (Design by Contract)
Nó giải quyết mọi vấn đề tôi từng gặp với agent. Đặc biệt khi nối nhiều contract thành chuỗi thì guardrail được lan truyền một cách tự nhiên nên rất hiệu quả
Hầu như mọi công cụ tùy chỉnh tôi đều tự triển khai
Ví dụ web search của OpenAI khá tốt nhưng thiếu khả năng tùy biến, nên tôi đã phát triển và đang sử dụng deep research agent của riêng mình
Chuỗi ví dụ kết quả ngày đầu tiên
Tôi đang vận hành một công ty, và cũng đã xây dựng tự động hóa tạo tài liệu end-to-end bằng cách nối 3 contract
Xem demo PDF
Prompt đầu vào là,
“phân tích mẫu trong tệp, so sánh tổng thể về nhiều định dạng prompt khác nhau (XML, markdown, v.v.), xu hướng nịnh nọt, cách dùng công cụ, guardrail đạo đức, các điểm đặc thù về kiến trúc, rồi tạo báo cáo”
Tôi đã giới thiệu contract trong bài viết này vào tháng 3 năm 2025, và từ đó nó đã tiến hóa nhiều, nhưng tinh thần và động lực cơ bản vẫn như cũ
Khả năng dùng các toán tử như semantic
==,+giống như đang bón phân cho những ý tưởng mới mẻNó gợi lại sự hào hứng khi lần đầu tôi biết đến đại số khái niệm, giống như thời đầu word embedding với
King - Man + Woman = QueenTuy vậy, việc tích hợp giữa mạng nơ-ron và symbolic (logic) ở đây, cũng như phần lớn các hệ thống khác, vẫn còn nông hoặc tách biệt
Tham khảo
Đột phá thật sự sẽ chỉ đến khi có sự tích hợp sâu hơn nhiều ở mức nền tảng
Công ty chúng tôi, Onton, cũng đang nghiên cứu theo hướng đó
Mục tiêu là 1) biểu diễn được tích hợp hoàn toàn, không phải symbolic cũng không phải deep learning, 2) học liên tục ngay cả với dữ liệu ít nhiễu mà không quên, 3) độ tin cậy 100% cho toán học và phép toán symbolic, 4) không có hallucination
Hiện tại việc chắp vá nhiều hệ thống kiểu keo nóng vẫn hữu ích, nhưng có vẻ kiến trúc tích hợp sẽ lật lại toàn bộ cuộc chơi
Chia sẻ link notebook mã nguồn chính thức với phần giải thích và ví dụ rất ổn, cùng PDF bài báo chính thức
Báo lỗi trong mã (
valid_sizeschưa được định nghĩa trong “correctness contracts”)Cảm ơn tất cả mọi người đã chia sẻ ý kiến và ủng hộ về chủ đề này
Tôi không ngờ lại nhận được phản ứng như vậy, và luôn có thể trao đổi qua email/tweet
Thật sự rất vui khi được trò chuyện với mọi người
Có một điều hơi tiếc
Bản thân thuật ngữ “Symbolic AI” vốn đã có một định nghĩa riêng rõ ràng
Có lẽ sắp tới tôi sẽ đổi tên
Tôi cũng đã thêm chú thích giải thích lý do đặt tên trong bài báo, và đặt tên dự án như một sự tôn kính dành cho Newell và Simon, những người đã dẫn dắt nghiên cứu nền tảng
Tôi có một thắc mắc
Chính sách chi phí như thế nào
Có phải mỗi lần chạy một dòng có chứa phép toán ngôn ngữ tự nhiên thì đều sẽ tiếp tục phát sinh chi phí suy luận LLM không, nhất là khi dùng API bên ngoài
Ví dụ ngay cả khi hàm
symbolicliên tục được gọi trong vòng lặp thì cũng vậy sao?Đúng vậy
Ví dụ nếu dùng API OpenAI thì mỗi phép toán ngữ nghĩa sẽ tạo một lần gọi OpenAI và phát sinh chi phí
Nếu tự host LLM cục bộ bằng llama.cpp chẳng hạn, thì chỉ tốn chi phí hạ tầng host chứ không có chi phí suy luận riêng
Chắc chắn sẽ cần thứ gì đó như cache
Tôi không ngờ nó lại đột nhiên nổi tiếng như vậy nên cũng hơi bất ngờ
Đáng ra tôi phải đang ngủ rồi, nhưng hiện tại vẫn đang tiếp tục tham gia thảo luận bằng kinh nghiệm thiếu ngủ của mình
Giống như lập trình hàm (FP), mọi Symbol đều hoạt động như giá trị thuần
Các phép toán được kết hợp thành luồng sạch và có thể truy vết
Ở những bước mơ hồ thì mô hình sẽ can thiệp
Giống như phép toán IO trong FP, lời gọi mô hình sinh được xem là tác dụng phụ nằm trong phạm vi kiểm soát
Bình thường thì đồ thị suy luận mang tính quyết định, và chỉ ủy quyền cho mô hình khi cần
Demo thật sự rất ấn tượng
Ngay từ đầu nó đã được thiết kế theo hướng hàm
Ở mức low-level cũng hoàn toàn theo nguyên tắc hàm, và bên trong cũng được gọi là
functional.pyhaycore.pyDecorator cũng được dùng ở khắp nơi, nên rất hữu ích cho việc refactor/mở rộng/quản lý bug
Dạo này LLM thậm chí còn có thể tự viết hết code,
nên tôi tò mò cấu trúc như Symbol, vốn chứa ngữ cảnh và có thể thao tác dễ dàng bằng Python operator,
có ưu điểm gì so với việc con người tự viết code rồi kiểm tra từng phần
Ví dụ cũng có thể tự viết cú pháp kiểu đó để làm semantic transformation, nhưng chẳng phải chỉ cần prompt LLM tạo một chương trình chuyển danh sách trái cây thành rau củ là được sao
Tôi muốn hiểu sự khác biệt bản chất là gì
Nếu để LLM tạo ra một hệ thống formal, thì việc kiểm chứng sẽ dễ hơn nhiều so với một hệ thống tổng dụng hơn