Ragenta là SaaS RAG + agents đa tenant tôi đã xây ở NYB AI. Một workspace upload tài liệu của mình, đặt câu hỏi, và nhận câu trả lời chỉ đúng đoạn văn gốc mà nó lấy ra. Mọi lần gọi model đều trừ từ sổ credit, và mọi job ingestion phải sống sót nếu deploy rơi đúng lúc nó đang chạy.
Dưới đây là đường đi của một tài liệu, từ lúc upload đến khi thành trích dẫn [[n]] trong câu trả lời chat. Sáu stage id đúng là những id backend đang dùng; sơ đồ bên cạnh chạy theo thẻ bạn đang đọc.
Bốn quyết định tôi sẵn sàng bảo vệ khi review
- Trích dẫn được đóng băng phía server.
- Render là tra theo chỉ số, không bao giờ là khớp similarity có thể trôi sang sai đoạn. Vì sao không khớp lại lúc render: ít code hơn, nhưng similarity có thể rơi vào đoạn kế bên, và trích dẫn sai còn tệ hơn không có.
- State streaming nằm ở local, không nằm trong query cache.
- Mỗi token một lần
setQueryData thì mọi subscriber đều render lại. Stream ghi vào local state; cache được invalidate một lần lúc kết thúc và dữ liệu của server — kèm trích dẫn, model và chi phí — được lấy làm chuẩn. - Chỉ poll khi còn thứ đang chạy.
- Danh sách tài liệu dừng ngay khi mọi dòng đã
ready hoặc failed. Vì sao không poll theo chu kỳ cố định: một trang đang đứng yên sẽ gọi API liên tục mà chẳng để làm gì. - Từ chối xảy ra trước khi stream mở.
- Hết credit, model ngoài gói, thiếu knowledge base: một 4xx bình thường kèm thông báo, không bao giờ là error frame sau khi UI đã chuyển sang trạng thái "đang trả lời".
Đọc case study đầy đủ — kiến trúc, trình soạn agent flow, cả bảy quyết định →