SAYBACK · CHAT CONTEXT ASSISTANT
BETA · MIỄN PHÍ KHI DÙNG THỬ
Trợ lý AI tra cứu lịch sử chat — luôn dẫn nguồn về đúng tin nhắn gốc.
Sayback lập chỉ mục toàn bộ tin nhắn và tệp đính kèm của doanh nghiệp — kể cả lịch sử Telegram — rồi trả lời bằng tiếng Việt tự nhiên.
01
PURPOSE
Mọi câu trả lời đã nằm đâu đó trong lịch sử chat. Sayback lấy nó ra trong vài giây.
Hợp nhất
Telegram, chat nội bộ và tệp đính kèm về một chỗ tra cứu duy nhất.
Ngữ nghĩa
Hỏi bằng tiếng Việt tự nhiên, không cần nhớ đúng từ khoá đã dùng.
Có nguồn
Mỗi câu trả lời kèm trích dẫn bấm được, nhảy về đúng tin nhắn gốc.
02
PROBLEM
Công việc diễn ra trong chat, nhưng chat là nơi tệ nhất để tìm lại thông tin
Dữ liệu rải rác
Một quyết định được chốt ở nhóm Telegram, xác nhận qua Zalo, file chốt nằm trong email. Không ai dựng lại được toàn cảnh.
Ctrl+F “giá gỗ sồi” → 0 kết quả
Tìm kiếm khớp chữ, không khớp ý
Khách viết “gỗ tự nhiên loại 1”, bạn tìm “gỗ sồi”. Keyword search bỏ qua; tiếng Việt không dấu càng tệ.
XLSX
DOCX
JPG
Tệp đính kèm là hố đen
Báo giá, hợp đồng, bảng tính đã gửi rồi — nhưng nội dung bên trong không nằm trong bất kỳ ô tìm kiếm nào.
CASE
VÍ DỤ MINH HOẠ
Chiều thứ Sáu, khách hỏi lại: “Bên em báo màu gỗ nào rồi nhỉ?”
HÔM NAY
16:02
Mở 8 nhóm Telegram, cuộn tay tìm đoạn hội thoại tháng trước
16:19
Tìm thấy bảng báo giá PDF, nhưng không rõ đã sửa lần cuối chưa
16:31
Nhắn hỏi lại đồng nghiệp, rồi hỏi lại chính khách hàng
~30 phút, kết thúc bằng một câu hỏi lại khách
VỚI SAYBACK
“Mình đã báo màu gỗ nào cho anh Tuấn bên Hòa Phát?”
Ngày 12/08 bạn báo màu óc chó sẫm , kèm bảng giá v3. Ngày 19/08 anh Tuấn đổi sang màu sồi tự nhiên.
Nhóm Hòa Phát · 12/08
bang-gia-v3.pdf
Nhóm Hòa Phát · 19/08
Vài giây, và bấm được vào từng nguồn để tự kiểm tra
03
CUSTOMER
Doanh nghiệp nhỏ và vừa lấy Telegram, Zalo làm kênh làm việc chính
CHÂN DUNG NGƯỜI DÙNG
Trưởng nhóm sale / CS, 8–15 nhóm khách đang mở
Giữ toàn bộ ngữ cảnh khách hàng trong đầu và trong lịch sử chat. Không dùng CRM vì nhập liệu tay quá tốn công. Mỗi lần bàn giao hoặc nghỉ phép là một lần mất ngữ cảnh.
Không có phòng IT
Ngân sách theo tháng
Dùng ngay, không đào tạo
NGƯỜI DÙNG HẰNG NGÀY
Sale, chăm sóc khách hàng, điều phối đơn
NGƯỜI QUYẾT ĐỊNH MUA
Chủ doanh nghiệp hoặc trưởng phòng kinh doanh
ĐIỀU KIỆN TIÊN QUYẾT
Dữ liệu không rời khỏi phạm vi quyền của từng người — bán được hay không nằm ở đây
04
SOLUTION
Một lớp tra cứu đặt lên chat đang có — không bắt ai đổi công cụ
1
Kết nối
Đăng nhập Telegram một lần, chọn nhóm cần đồng bộ. Worker lấy lịch sử theo batch 100 tin, có checkpoint để chạy lại an toàn.
2
Lập chỉ mục ngữ nghĩa
Tin nhắn được gom theo nhịp hội thoại rồi nhúng thành vector 1024 chiều. Nội dung PDF, XLSX, ảnh cũng được đọc và đánh chỉ mục.
3
Hỏi và kiểm chứng
Hỏi bằng tiếng Việt, bằng chữ hoặc bằng giọng nói. Câu trả lời kèm trích dẫn bấm được — nhảy thẳng về tin nhắn gốc.
05
PRODUCT / DEMO
Bản chạy thật · React 18 + FastAPI
Hỏi ở một khung chat, trả lời kèm nguồn bấm được
AI Text Workspace — trả lời có references, bấm để nhảy về tin nhắn gốc
Trích dẫn mở ra đúng đoạn hội thoại, giữ nguyên phân quyền
07
BUSINESS MODEL
Thu theo chỗ ngồi, chi phí biến đổi giữ ở mức thấp
Beta
Miễn phí
1 kết nối Telegram, giới hạn số tin lập chỉ mục. Mục tiêu: lấy phản hồi và dữ liệu đánh giá.
Team
/ chỗ / tháng
Không giới hạn nhóm, tìm kiếm tệp đính kèm, trợ lý giọng nói, lịch sử đủ 12 tháng.
Business
Theo hợp đồng
Tách phạm vi dữ liệu theo tổ chức, nhật ký truy cập, hỗ trợ triển khai riêng.
CẤU TRÚC CHI PHÍ
Nhúng vector bằng mô hình 0.6B — rẻ hơn nhiều so với embedding thương mại.
Model chính có fallback tự động, tránh phụ thuộc một nhà cung cấp.
Chỉ mục chạy một lần cho mỗi đoạn hội thoại; truy vấn về sau gần như miễn phí.
Mức giá cụ thể là đề xuất, sẽ chốt sau vòng phỏng vấn khách hàng beta.
08
TRACTION
Hệ thống đã chạy thật, không phải bản mô phỏng
30+
migration đã áp dụng trên Neon
1024
chiều vector, chỉ mục HNSW đang chạy
4
sprint, bàn giao đúng lịch 13/09
điền số
người dùng beta đang hoạt động
ĐÃ LÊN PRODUCTION
Import Telegram có checkpoint · tìm kiếm ngữ nghĩa kèm trích dẫn · RAG cho tệp đính kèm · trợ lý giọng nói · phân quyền 3 lớp · bộ test tự động
Trang quản trị: theo dõi job import, hoạt động AI, độ trễ theo giai đoạn
09
COMPETITION · MOAT
Điểm khác biệt: mỗi câu trả lời chỉ được về đúng tin nhắn gốc
TIÊU CHÍ
SAYBACK
TÌM KIẾM SẴN CÓ TRONG APP CHAT
DÁN LỊCH SỬ VÀO CHATBOT
Trích dẫn về tin nhắn gốc
Bấm được, mở đúng đoạn
Có, nhưng phải tự tìm
Không có
Hiểu câu hỏi tự nhiên
Vector + từ khoá
Chỉ khớp chữ
Tốt, nhưng không có dữ liệu
Nội dung tệp đính kèm
Đã lập chỉ mục
Chỉ tên tệp
Tải và dán tay
Giữ phân quyền dữ liệu
Chặn ở 3 lớp, mặc định từ chối
Theo từng app
Rủi ro rò dữ liệu
Công sức của người dùng
Kết nối một lần
Cuộn tay
Dán lại mỗi lần hỏi
10
TEAM
Bốn thành viên toàn thời gian, phủ đủ AI, backend và bảo mật
TEAM LEAD
Đoàn Vũ Hoàng
Fullstack tích hợp, product owner, phụ trách demo.
BACKEND · DEVSEC
Phạm Công Đăng
FastAPI, PostgreSQL, xác thực và phân quyền, DevOps.
AI ENGINEER
Phạm Tuấn Anh
LangGraph, pipeline dữ liệu, đánh giá chất lượng truy hồi.
QA · TESTER
Đàm Vinh Quang
Kiểm thử, RAG và OCR, kiểm tra rò rỉ dữ liệu.
11
ROADMAP
Từ bản chạy được đến sản phẩm nhiều nguồn dữ liệu
ĐÃ XONG
Sprint 1–4 · 08–09/2026
Chat 1-1 và nhóm, tệp đính kèm, import Telegram, RAG kèm trích dẫn, trợ lý giọng nói, phân quyền 3 lớp.
QUÝ 4 · 2026
Chốt chất lượng truy hồi
Đạt Hit@5 ≥ 80% và độ chính xác trích dẫn ≥ 90% trên bộ 50 truy vấn vàng. Đóng nốt lỗi lọc phân quyền trên kết quả vector.
QUÝ 1 · 2027
Thêm nguồn dữ liệu
Zalo và email vào cùng một chỉ mục. Tách phạm vi dữ liệu theo tổ chức để bán được gói Business.
QUÝ 2 · 2027
Tự động hoá theo ngữ cảnh
Nhắc việc và tóm tắt chủ động theo từng nhóm khách, dựa trên bộ nhớ hội thoại đã có.
12
NEXT STEPS
Chúng tôi cần ba thứ để đi tiếp
01
10 doanh nghiệp dùng thử
SME có đội sale dùng Telegram, cho phép chúng tôi đo chất lượng truy hồi trên dữ liệu thật.
02
Cố vấn go-to-market
Người từng bán SaaS cho SME Việt Nam, giúp chốt mức giá và kênh phân phối.
03
Kinh phí hạ tầng 6 tháng
Chi phí cơ sở dữ liệu, lưu trữ tệp và suy luận mô hình để chạy pilot không giới hạn.
Phụ lục kỹ thuật ở các slide tiếp theo
A
PHỤ LỤC
Kiến trúc và các quyết định kỹ thuật
A1 · Kiến trúc tổng thể 3 tầng
A5 · Mô hình dữ liệu và pgvector
A2 · LangGraph ReAct và luồng RAG
A6 · Pipeline import Telegram
A3 · Chunking và worker nhúng vector
A7 · Trợ lý giọng nói Luna
A4 · MCP read-only và phân quyền 3 lớp
A8 · Tech stack và DevOps
A1
KIẾN TRÚC TỔNG THỂ
Ba tầng, một nguồn chân lý dữ liệu
CLIENT
ChatPage
AI Chat Workspace
Luna Voice Workspace
Admin
React 18 · Vite · TS
↓ HTTPS REST · WebSocket PCM
API GATEWAY
auth
conversation
attachment
ai
ai_voice
telegram
FastAPI · Python 3.12
TẦNG AI & RAG
LangGraph ReAct
MCP read-only
Gemini Live bridge
Agent memory
Index worker chạy ngầm trong lifespan của FastAPI, lặp mỗi 300 giây.
LƯU TRỮ
PostgreSQL trên Neon — chat, AI, vector, hàng đợi index
Cloudinary — tệp đính kèm, chế độ authenticated
A2
LANGGRAPH REACT · LUỒNG RAG
Một vòng ReAct có chặn trên, để chi phí và độ trễ không trôi
1 Câu hỏi + 10 tin nhắn AI gần nhất + danh tính người dùng
2 call_model — quyết định trả lời hay gọi công cụ
tối đa 2 vòng gọi công cụ
3 execute_tools — MCP read-only trên phạm vi đã xác thực
4 Trả lời + references : message_id, conversation_id, người gửi, thời điểm, đoạn xem trước
5 Ghi cặp tin nhắn vào ai_messages kèm metadata
CÁC CHẶN TRÊN ĐÃ ĐẶT
Vòng gọi tool
2
Tin nhắn ngữ cảnh
10
Ký tự kết quả tool
12.000
Chunk trả về mỗi lượt
5
MÔ HÌNH
Primary: OpenAI gpt-5.6-luna Fallback tự động: SiliconFlow DeepSeek-V4-Flash
A3
CHUNKING & WORKER NHÚNG VECTOR
Cắt đoạn theo nhịp hội thoại, không theo số ký tự
48h
cửa sổ thời gian tối đa
12h
khoảng im lặng cắt đoạn
10
tin nhắn mỗi đoạn
300
từ mỗi đoạn
1
tin gối đầu giữa hai đoạn
HÀNG ĐỢI
Quét documents ở trạng thái pending hoặc failed, khoá bằng FOR UPDATE SKIP LOCKED.
NHÚNG VECTOR
SiliconFlow Qwen3-Embedding-0.6B , vector 1024 chiều, gọi theo lô và tái dùng HTTP client.
GHI DỮ LIỆU
Ghi chunks và bảng nối chunk_messages trong cùng một transaction rồi mới đánh dấu indexed.
VÌ SAO QUAN TRỌNG
Bảng nối là thứ cho phép trích dẫn quay về đúng tin nhắn gốc, thay vì chỉ trả về một đoạn văn bản.
A4
MCP READ-ONLY · PHÂN QUYỀN 3 LỚP
Mô hình mặc định từ chối: mô hình ngôn ngữ không tự mở rộng phạm vi
BỐN CÔNG CỤ ĐỌC, CHẠY IN-PROCESS
search_messages
theo người gửi hoặc khoảng thời gian
semantic_search
tìm trên vector rồi hydrate về tin nhắn gốc
count_messages
chỉ trả về con số, không trả nội dung
current_time_gmt7
mốc thời gian cho câu hỏi tương đối
BA LỚP CHẶN
Lớp 1 · Route dependencies
Giải mã JWT, kiểm tra thành viên hội thoại và quyền tải tệp đính kèm.
Lớp 2 · Cô lập phạm vi ở service
Phiên AI gắn cố định với một hội thoại nguồn; phạm vi do backend truyền, trình duyệt và mô hình không sửa được.
Lớp 3 · View và transaction ở database
Mọi câu lệnh join qua v_user_scope và mốc history_visible_from , chạy trong SET TRANSACTION READ ONLY.
Mục tiêu kiểm thử: 0 trường hợp rò rỉ dữ liệu trong bộ test phân quyền.
A5
MÔ HÌNH DỮ LIỆU · PGVECTOR
Một PostgreSQL duy nhất giữ cả chat, hội thoại AI và vector
NHÓM CHAT
users
conversations
conversation_members
messages
attachments
friend_requests
conversation_members giữ mốc history_visible_from — người mới vào nhóm không đọc được quá khứ.
NHÓM AI
ai_conversations
ai_messages
agent_memories
Mỗi lượt hỏi đáp lưu kèm metadata JSONB chứa references, phục vụ kiểm tra lại sau này.
NHÓM VECTOR
documents
chunks · vector(1024) · tsvector
chunk_messages
Extension pgvector với chỉ mục HNSW idx_chunk_vec cho tìm kiếm cosine; cột tsv phục vụ tìm theo từ khoá.
ĐƯỜNG TRÍCH DẪN
câu hỏi → chunks (cosine) → chunk_messages → messages → users
A6
PIPELINE IMPORT TELEGRAM
Import lịch sử dài mà không mất dấu, chạy lại được từ giữa
01
Kết nối Telegram, session mã hoá lưu trong DB
→
02
Tạo import job cho từng hội thoại
→
03
Worker lấy lịch sử theo batch 100 tin
→
04
Checkpoint last_offset_id
→
05
Lưu message và attachment
→
06
Lập chỉ mục ngữ nghĩa
CÔ LẬP THEO TÀI KHOẢN
Mỗi tài khoản có một sync scope riêng. Hai người cùng đăng nhập một Telegram account vẫn không thấy dữ liệu của nhau.
TĂNG TỐC GIẢI MÃ
Dùng cryptg cho MTProto, nhúng vector theo lô, tái dùng HTTP client giữa các batch.
BENCHMARK AN TOÀN
Mọi đo đạc chạy trên một Neon branch riêng, không bao giờ dùng cơ sở dữ liệu production.
A7
TRỢ LÝ GIỌNG NÓI LUNA
Giọng nói dùng chung bộ công cụ với agent văn bản
Mở WebSocket tới /api/v1/ai/…/voice
Frame đầu tiên là {"type":"auth","token":…} — chưa xác thực thì không có phiên
Khởi tạo phiên Gemini Live với prompt Luna và bộ công cụ MCP
Người dùng nói → stream PCM hai chiều, kèm transcript
Khi cần dữ liệu: gọi tool in-process, phát sự kiện tool_status về client
Kết thúc lượt: lưu cặp hội thoại vào ai_messages
VÌ SAO DÙNG LẠI BỘ CÔNG CỤ
Một tầng tool duy nhất nghĩa là một chỗ duy nhất để kiểm soát phân quyền. Thêm kênh mới không nhân thêm bề mặt rủi ro.
MÔ HÌNH
gemini-3.1-flash-live-preview
TRẠNG THÁI
Đang chạy trên bản beta. Giọng nói phù hợp lúc đang lái xe hoặc ở xưởng — đúng bối cảnh của khách hàng mục tiêu.
A8
TECH STACK · DEVOPS
Stack chọn để một đội bốn người vận hành được
TẦNG
CÔNG NGHỆ
Frontend
React 18 · Vite · TypeScript · CSS Modules
Backend
FastAPI · Uvicorn · Python 3.12 · Pydantic Settings
Agent
LangGraph · LangChain · MCP in-process
Mô hình
OpenAI · SiliconFlow · Gemini Live
Dữ liệu
PostgreSQL trên Neon · pgvector HNSW
Tệp
Cloudinary, chế độ authenticated
Vận hành
Docker multi-stage · GitHub Actions · pytest · ruff
CHỈ SỐ MỤC TIÊU
Hit@5
≥ 80%
Độ chính xác trích dẫn
≥ 90%
P95 latency tìm kiếm
≤ 3s
Rò rỉ dữ liệu
0
Đo trên bộ 50 truy vấn vàng trong eval/golden_dataset.json.