Tác tử 🇷🇺 04.08.2026 05:01

Nhà phát triển xây dựng framework dựa trên FSM để khiến chatbot LLM tuân theo kịch bản một cách đáng tin cậy và tiết kiệm chi phí

Một nhà phát triển mô tả việc xây dựng một thư viện mã nguồn mở tùy chỉnh buộc các chatbot dựa trên LLM tuân thủ nghiêm ngặt một kịch bản đối thoại được xác định trước bằng cách kết hợp máy trạng thái hữu hạn (FSM) với mô hình ngôn ngữ, thay vì phụ thuộc vào các kiến trúc agent đa lời gọi đắt đỏ. Dự án có tên là tg-statemachine-bot, chia các cuộc trò chuyện thành các giai đoạn được xác định trong các tệp YAML, chỉ cung cấp cho mô hình các hướng dẫn liên quan đến giai đoạn hiện tại để giữ cho ngữ cảnh nhỏ và hành vi có thể dự đoán được.
Tác giả, trong quá trình xây dựng một chatbot phục vụ mục đích kinh doanh, phát hiện ra rằng các mô hình ngôn ngữ lớn (LLM - Large Language Model) gặp khó khăn trong việc tuân thủ ổn định các script (kịch bản) dài và chi tiết, vì cửa sổ ngữ cảnh (context window) rộng khiến chúng dễ đánh mất cấu trúc khi phải xử lý các chỉ dẫn dài. Đồng thời, các giải pháp dựa trên agent hiện có nhằm chia nhỏ nhiệm vụ thành từng bước lại làm tăng số lượt gọi mô hình, kéo theo chi phí cho mỗi đoạn hội thoại tăng lên. Để giải quyết vấn đề này một cách tiết kiệm, tác giả đã xây dựng một thư viện mã nguồn mở, trong đó một máy trạng thái hữu hạn (FSM - Finite State Machine) đóng vai trò điều khiển toàn bộ đồ thị hội thoại và quyết định chỉ dẫn của giai đoạn nào sẽ được truyền cho LLM tại mỗi thời điểm, nhờ đó mô hình chỉ nhìn thấy các chỉ dẫn liên quan đến giai đoạn hiện tại thay vì toàn bộ script. Kiến trúc hệ thống gồm ba module: module FSM theo dõi đồ thị hội thoại và trạng thái người dùng, module vars_memory lưu trữ các biến hội thoại cùng lịch sử thay đổi của chúng, và module conversation_core điều phối các lượt gọi tới LLM. Ở mỗi lượt hội thoại, mô hình buộc phải phản hồi theo một hợp đồng cố định gồm bốn trường thông tin — tin nhắn gửi tới người dùng, tín hiệu chuyển trạng thái, kết quả giai đoạn có cấu trúc, và bản tóm tắt giai đoạn — và nếu mô hình vi phạm hợp đồng này (như JSON không hợp lệ, tín hiệu chuyển trạng thái không tồn tại, hoặc thiếu kết quả), hệ thống sẽ tự động gửi một yêu cầu chỉnh sửa tiếp theo. Tính liên tục của hội thoại qua các lần chuyển giai đoạn được duy trì nhờ cơ chế liên kết previous_response_id của Responses API từ OpenAI, đồng thời cơ chế này còn giúp giảm chi phí thông qua mức giá đọc cache (cache-read) rẻ hơn. Toàn bộ script hội thoại được mô tả trong một file YAML, còn các chỉ dẫn chi tiết cho từng giai đoạn được lưu trong các file riêng biệt, cho phép engine nền tái sử dụng được ở nhiều lĩnh vực chatbot khác nhau mà không cần chỉnh sửa. Để quản lý độ phức tạp khi chỉnh sửa YAML bằng tay, tác giả đã viết một script chuyển đổi file YAML thành sơ đồ draw.io giúp việc rà soát trở nên dễ dàng hơn cho con người, cùng với một công cụ xem log (log viewer) để kiểm tra các đoạn hội thoại thử nghiệm dưới dạng giao diện giống chat, có thể mở rộng để xem log hệ thống, kể cả cập nhật theo thời gian thực khi debug (gỡ lỗi) cục bộ. Để minh họa, repository đi kèm một ví dụ về 'analyst bot' (bot phân tích) giúp các nhà phát triển độc lập xác định phạm vi yêu cầu dự án. Tác giả cho biết bot này chỉ cần khoảng 1,03 lượt gọi LLM cho mỗi tin nhắn của người dùng, trong khi vẫn tuân thủ ổn định script và thu thập được thông tin có cấu trúc, mặc dù phần prompt engineering (kỹ thuật thiết kế prompt) của bot demo này vẫn chưa được tinh chỉnh hoàn thiện.
Nguồn: Habr — хаб NLP — bản gốc
Bài viết liên quan trước đây ↓
Tin mới