1 of 22

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.

2 of 22

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.

3 of 22

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ệ.

PDF

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.

4 of 22

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

5 of 22

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

6 of 22

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.

7 of 22

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

8 of 22

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.

9 of 22

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

10 of 22

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

11 of 22

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.

12 of 22

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ó.

13 of 22

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

14 of 22

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

15 of 22

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

16 of 22

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

17 of 22

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.

18 of 22

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.

19 of 22

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

20 of 22

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.

21 of 22

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.

22 of 22

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.