STROT: Trình biên dịch quyết định mã nguồn mở — dùng LLM một lần, chạy quyết định cục bộ mãi mãi

Phần mềm19 tháng 10, 2026·7 phút đọc

Dự án STROT giới thiệu cách tiếp cận mới: dùng LLM để "biên dịch" ý định của bạn thành một mô hình quyết định cục bộ chạy trên CPU với độ trễ khoảng 60 ms và chi phí biên bằng 0. Thay vì gọi LLM cho từng bản ghi, STROT tạo ra một artifact Python độc lập, có khả năng từ chối trả lời khi thiếu tự tin, đạt độ chính xác định tuyến 92,5% so với 74,8% của cách làm thông thường.

STROT: Trình biên dịch quyết định mã nguồn mở — dùng LLM một lần, chạy quyết định cục bộ mãi mãi

STROT: Biên dịch ý định một lần, ra quyết định cục bộ mãi mãi

Huy hiệu phiên bản PyPI của stroт-aiHuy hiệu phiên bản PyPI của stroт-ai

Một dự án mã nguồn mở mới trên GitHub mang tên STROT đang thu hút sự chú ý của cộng đồng phát triển khi đề xuất một mô hình vận hành khác biệt cho các ứng dụng AI: thay vì gọi mô hình ngôn ngữ lớn (LLM) cho từng yêu cầu, họ "biên dịch" ý định của người dùng thành một artifact Python chạy hoàn toàn cục bộ.

Triết lý cốt lõi rất gọn: "Agent chạy lúc biên dịch, không bao giờ chạy lúc thực thi." LLM chỉ được gọi một lần trong giai đoạn biên dịch, còn môi trường production chỉ là một mô hình quyết định nhỏ, độc lập, không sinh văn bản, mọi đầu ra đều có giới hạn.

Vấn đề mà STROT nhắm tới

Khi xây dựng hệ thống phân loại, chấm điểm hay định tuyến dữ liệu bằng LLM, các đội phát triển thường gặp ba vấn đề quen thuộc:

  • Chi phí biên tăng theo lưu lượng: mỗi bản ghi là một lần gọi API tốn tiền.
  • Độ trễ cao và không ổn định: phụ thuộc vào nhà cung cấp bên thứ ba.
  • Ảo giác (hallucination) cấu trúc: mô hình có thể sinh ra nhãn không tồn tại trong danh mục của bạn.

STROT giải quyết cả ba bằng cách biến bài toán sinh văn bản thành bài toán chọn và tính toán trên một tập hành động đã đăng ký trước, do đó về mặt cấu trúc không thể sinh ra kết quả nằm ngoài danh mục.

Cách hoạt động: biên dịch một lần, thực thi mãi mãi

Quy trình của STROT chia làm hai giai đoạn rõ ràng.

Giai đoạn biên dịch diễn ra một lần cho mỗi cặp ý định và schema. Hệ thống tổng hợp cấu trúc từ ý định, kiểm tra qua cổng vàng (golden gate) — tức là artifact phải trả lời đúng các mẫu bạn đã biết đáp án — sau đó LLM dạy nhãn cho một mẫu dữ liệu, và cuối cùng là hiệu chỉnh ngưỡng tự tin.

Giai đoạn thực thi diễn ra với mọi bản ghi, mãi mãi về sau. Mỗi bản ghi đi qua phép chiếu đã biên dịch, tới mô hình quyết định (mặc định là Julia-1 144M tham số, chạy trên CPU, khoảng 60 ms), rồi qua cổng tự tin để cho ra JSON có kiểu dữ liệu xác định — hoặc từ chối trả lời nếu không đủ tự tin.

Điểm đáng chú ý là artifact được định địa chỉ theo nội dung (content-addressed). Khi schema thay đổi, hệ thống chỉ biên dịch lại đúng một lần, không phải liên tục.

Hai bề mặt API

STROT cung cấp hai hàm chính, phục vụ hai kiểu bài toán khác nhau.

run() dùng để định tuyến từng bản ghi vào một hành động và thực thi handler đã biên dịch:

import strot
result = strot.run(
    tickets,
    query="Phân loại phiếu hỗ trợ vào đúng luồng xử lý.",
    action_registry={
        "billing_dispute":  "Hoàn tiền, sửa hoá đơn, bị trừ tiền hai lần",
        "technical_defect": "Treo, lỗi, hành vi hỏng",
    },
    llm="anthropic/claude-opus-4-8",   # chỉ dùng một lần khi biên dịch
)
for o in result.outcomes:
    print(o["action"], round(o["confidence"], 2))
# billing_dispute 0.97
# technical_defect 0.94

decide() dùng để trả lời các câu hỏi có kiểu (lựa chọn, điểm số, đúng/sai) cho từng bản ghi, kèm xác suất và độ tự tin.

Kết quả đo lường

Nhóm phát triển công bố số liệu trên mô hình thật (SupersonicLabs/Julia-1, 144M, CPU) và container Docker sạch:

  • Độ chính xác định tuyến có căn cứ (398 bản ghi): 92,5% khi biên dịch so với 74,8% cách làm thông thường — tức +18 điểm phần trăm trên cùng một mô hình.
  • Văn bản ngữ nghĩa (AG News, nhãn chưa từng thấy): 86,7% so với 72,7% (+14 điểm phần trăm).
  • Quyết định có kiểu so với ví dụ mẫu của API quyết định trả phí hàng đầu: gần như tương đương (điểm cảm xúc 1,79 so với 1,8).
  • Độ trễ / chi phí biên / số lần gọi LLM mỗi bản ghi: khoảng 60 ms · 0 USD · 0 lần.

Đáng chú ý, nhóm tác giả công bố cả các trường hợp thua trong thư mục benchmarks/, một cách làm minh bạch đáng ghi nhận.

Huy hiệu giấy phép MITHuy hiệu giấy phép MIT

Những điểm khác biệt

Theo mô tả của dự án, STROT khác biệt ở các điểm sau:

  • Biên dịch một lần, quyết định mãi mãi — bộ nhớ đệm artifact theo nội dung; schema thay đổi chỉ kích hoạt đúng một lần biên dịch lại.
  • Thăng cấp bản ghi vàng — artifact phải vượt qua các đáp án bạn đã biết trước khi được phép phục vụ.
  • Bảo đảm được hiệu chỉnh — kết hợp temperature scaling và split conformal prediction: các quyết định được đưa ra sai không vượt quá ngưỡng α trên tổng số bản ghi (theo biên), phần còn lại sẽ từ chối trả lời.
  • Đo lường thay vì phỏng đoán — trình biên dịch chấm điểm các nhãn và có thể huấn luyện một đầu phân loại tinh gọn, chỉ giữ lại những gì vượt baseline trên dữ liệu kiểm thử.
  • 0% ảo giác cấu trúc — đầu ra là phép chọn và tính toán trên registry của bạn, không có gì được sinh ra lúc thực thi.
  • Độc lập với mô hình — mô hình quyết định là một "khe cắm" (nlu=): mặc định là Julia-1 cục bộ, hoặc API trả phí, hoặc bất kỳ chuyên gia thay thế nào.

Cài đặt và triển khai

Cài đặt cơ bản chỉ cần thư viện chuẩn của Python:

pip install strot-ai            # lõi: chỉ stdlib
pip install strot-ai[local]     # + mô hình quyết định cục bộ (torch/transformers)
pip install strot-ai[hosted]    # + openai, cho runtime quyết định trả phí
pip install strot-ai[anthropic] # + anthropic, cho bộ tổng hợp

Để đóng gói mô hình cục bộ vào image cho môi trường production chạy offline, tài liệu hướng dẫn dùng lệnh prefetch_nlu và biến môi trường STROT_NLU_CHECKPOINT. Dự án cũng lưu ý một chi tiết dễ nhầm: không được pip install julia — đó là gói không liên quan.

Ý nghĩa với cộng đồng phát triển Việt Nam

Huy hiệu bài kiểm tra đạtHuy hiệu bài kiểm tra đạt

Với các đội ngũ ở Việt Nam thường xuyên phải cân nhắc giữa chi phí gọi API nước ngoài và yêu cầu về độ trễ, hướng tiếp cận của STROT khá hấp dẫn: sau khi biên dịch, toàn bộ hệ thống có thể chạy offline trên máy chủ nội bộ, không phát sinh chi phí biên và không phụ thuộc kết nối ra ngoài. Điều này đặc biệt phù hợp với các bài toán định tuyến phiếu hỗ trợ, phân loại khiếu nại, hay chấm điểm nội dung trong những hệ thống có yêu cầu tuân thủ dữ liệu.

Dù vậy, cần lưu ý rằng mô hình quyết định mặc định chỉ có 144M tham số, nên với các bài toán đòi hỏi suy luận ngôn ngữ phức tạp, khả năng của nó sẽ có giới hạn. Cơ chế từ chối trả lời khi thiếu tự tin chính là điểm bù trừ cho hạn chế này — hệ thống thà không quyết còn hơn đoán bừa, và người dùng có thể xử lý thủ công phần bản ghi đó.

Giấy phép và nguồn gốc

STROT phát hành dưới giấy phép MIT. Mô hình quyết định mặc định là SupersonicLabs/Julia-1 theo giấy phép Apache-2.0. Dự án cho biết có triển khai các ý tưởng từ bài báo khoa học STROT (arXiv:2505.01636).

Bạn có thể tìm hiểu kiến trúc, vòng đời biên dịch, cách hiệu chỉnh, triển khai và tham chiếu API đầy đủ trong tệp DEVELOPERS.md của kho mã nguồn.

Với những ai đang tìm cách đưa AI vào hệ thống vận hành thực tế mà vẫn kiểm soát được chi phí, độ trễ và tính dự đoán được của đầu ra, STROT là một hướng thử nghiệm đáng để theo dõi.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗