2 điểm bởi GN⁺ 2025-06-29 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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ểnLLM (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 Symbol hỗ trợ cả chế độ cú pháp (syntactic)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

 
GN⁺ 2025-06-29
Ý 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ên
    Ngoà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!Hi there, good day! có cùng nghĩa trong ngữ cảnh chào hỏi hay không, hoặc so sánh Good morning, sir. với Hey, 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ận
    Hàm interpret() trông rất mạnh
    Tô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 = Queen
    Tuy 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_sizes chưa được định nghĩa trong “correctness contracts”)

    • Cảm ơn phản hồi. Đây là dấu vết còn sót lại trong quá trình refactor. Giờ tôi đã sửa rồi
  • 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

    • Tôi đã nghe ý kiến đó khá nhiều rồi
      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 symbolic liê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

    • Gần như đú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.py hay core.py
      Decorator 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ì

    • Tôi nghĩ nó có tác dụng ngăn hallucination
      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