Bỏ qua, đến nội dung chính
NNguyễn Văn NguyễnNhà sáng lập NG AI Platform
Đang xây dựng2026

NG Chat Backend

Xác thực, credit và lịch sử chat cho NG Assistant

Kiến trúc backend cho chatbot: cổng Go lo xác thực, giới hạn tốc độ và trừ credit; FastAPI chỉ lo trả lời và lưu lịch sử; Supabase Postgres chia schema theo dịch vụ. Khách chưa đăng ký vẫn chat được với hạn mức.

Vai trò
Nhà sáng lập – kiến trúc hệ thống, thiết kế cơ sở dữ liệu
Năm
2026
Trạng thái
Đang xây dựng

Mã nguồn thuộc tổ chức ngaiplatform trên GitHub (riêng tư).

NG Chat Backend

01Ý tưởng

Vấn đề

Chatbot phục vụ cả người đã đăng ký, khách trên web và người nhắn qua Facebook, Zalo, Telegram – cần một cách tính hạn mức công bằng, không bị lạm dụng, không trừ trùng.

Phát hiện

Mọi người chat đều là một 'account', dù có đăng ký hay không; đăng ký chỉ nâng gói, không làm mất lịch sử.

Giải pháp

Bảng accounts thống nhất ba loại người dùng, ví credit theo ngày cộng số dư, sổ cái chống trừ trùng theo request_id, hàm SQL trừ/hoàn credit an toàn khi chạy đồng thời.

Dành cho

  • Người dùng NG Assistant
  • Đội phát triển NG

Mục tiêu

  • Khách: 10 credit/ngày; đã đăng ký: 50; Pro: 1.000.
  • Mỗi dịch vụ chỉ thấy dữ liệu của mình.
  • Không trừ âm, không trừ trùng.

02Tính năng

  • 01

    Tài khoản thống nhất

    registered, guest (đăng nhập ẩn danh), channel (Facebook, Zalo, Telegram) trong một bảng.

  • 02

    Ví và sổ cái credit

    Hạn mức theo ngày Việt Nam + số dư mua thêm; giá theo loại tin: chữ 1, ảnh 3, video 10.

  • 03

    Phân quyền theo dịch vụ

    svc_gateway chỉ dùng schema core, svc_chat chỉ dùng schema chat; frontend không truy cập trực tiếp.

  • 04

    Lịch sử chat

    Hội thoại, tin nhắn, tệp đính kèm trong bucket riêng tư; tin mới tự đẩy hội thoại lên đầu.

03Thiết kế & quyết định

  1. Go cho cổng, Python cho AI

    Vì sao: Go nhẹ, chịu nhiều kết nối đồng thời cho xác thực và giới hạn; thư viện AI gần như đều ở Python.

  2. Một database, nhiều schema

    Vì sao: Lịch sử chat cần khóa ngoại tới tài khoản; chung database nhưng tách schema và tài khoản database cho từng dịch vụ.

  3. Tách theo môi trường, không theo dịch vụ

    Vì sao: Hai project Supabase: dev và prod; nhánh develop triển khai dev, nhánh main triển khai prod.

04Kiến trúc

  1. 01

    Kênh vào

    • Web/App (JWT Supabase), webhook Facebook/Zalo/Telegram
  2. 02

    Cổng Go

    • Xác thực, giới hạn tốc độ (Redis), trừ credit, cấp request_id
  3. 03

    FastAPI

    • Chỉ trả lời và lưu lịch sử – không ra internet
  4. 04

    Supabase

    • auth · core · chat · storage

05Công nghệ

Dịch vụ

  • Go
  • Python · FastAPI
  • Redis

Dữ liệu

  • Supabase Postgres
  • PL/pgSQL
  • Supabase Auth (anonymous, email, Google)
  • Supabase Storage

Hạ tầng

  • Google Cloud Run
  • Cloud SQL (so sánh)
  • Vercel
  • Cloudflare

06Nghiên cứu

  1. Node.js hay Go

    API nghiệp vụ hợp với TypeScript dùng chung kiểu với frontend; phần IoT và cổng nhiều kết nối hợp với Go; AI ở Python.

  2. Lưu dữ liệu cảm biến

    Cloud SQL không hỗ trợ TimescaleDB – dùng bảng chia partition theo thời gian, đẩy sang BigQuery khi cần phân tích lớn.

  3. Dữ liệu trong nước

    Nghị định 53/2022 và Luật 91/2025 có quy định về lưu và chuyển dữ liệu người dùng – cần tư vấn pháp lý; Supabase tự cài được trên cloud Việt Nam nếu bắt buộc.

07Kết quả

bảng trong 2 schema
11
hàm SQL nghiệp vụ
4
request đồng thời → đúng 10 lượt được trừ
30 → 10
lần trừ trùng khi gọi lại
0
  • Kiểm thử trên PostgreSQL thật: hạn mức ngày, sang ngày mới, hoàn credit, khách → đăng ký giữ lịch sử, phân quyền hai dịch vụ.

08Demo & hình ảnh

Video demo đang được chuẩn bị

09Bài học

Bài học

  • “Chống trừ trùng phải nằm trong database (request_id duy nhất, khóa dòng ví), không thể tin vào phía client.”
  • “Thiết kế dữ liệu đúng từ đầu tiết kiệm nhiều hơn mọi tối ưu sau này.”

Bước tiếp theo

  • Viết cổng Go và dịch vụ FastAPI.
  • Kênh Zalo OA và Telegram bot.
  • Thanh toán mua credit.