Bài 8: Capstone - Production LLM System¶
Tổng quan¶
Capstone tích hợp toàn bộ Module III thành một pipeline production hoàn chỉnh cho hệ thống LLM đã xây ở Module I/II:
- Prompt được version hoá trong registry (Bài 1).
- Mọi thay đổi đi qua eval gate (Bài 2).
- CI/CD tự động lint → eval → build → deploy → smoke test → rollback (Bài 6).
- Deploy trên Compute Engine + Secret Manager (Bài 5), container hoá chuẩn (Bài 4).
- Cache 2 tầng + cost governance (Bài 3).
- Observability + guardrails + incident playbook (Bài 7).
- Có vòng feedback: log production → case mới trong golden set.
Định dạng buổi học
Live coding (architecture review & integration) + học viên hoàn thiện pipeline trên hệ thống của mình + phần take-home + Q&A.
1. Kiến trúc pipeline¶
graph LR
DEV[Sửa prompt / code / config] --> PR[Pull Request]
PR --> LINT[Prompt lint + unit test]
LINT --> EVAL{Eval gate<br/>subset, so baseline + slice}
EVAL -->|fail| DEV
EVAL -->|pass| MERGE[Merge main]
MERGE --> REG[Promote prompt version -> alias production]
MERGE --> BUILD[Build image tag=SHA -> Artifact Registry]
BUILD --> DEPLOY[Deploy: VM pull + systemd restart]
DEPLOY --> SMOKE[Smoke test: /health + câu hỏi thật]
SMOKE -->|fail| RB[Rollback: image tag / prompt alias / model config]
SMOKE -->|pass| PROD[Production<br/>cache 2 tầng + guardrails]
PROD --> OBS[Observability: trace sampled + cost dashboard + alert]
OBS -->|case sai / feedback âm| GOLDEN[(Golden Set +1 case)]
GOLDEN --> EVAL
OBS -->|cost / hallucination / jailbreak / outage| PLAYBOOK[Incident playbook]
Vì sao không có bước "train" trong đường chính¶
Hệ thống LLM ở Module I/II cải tiến qua prompt, RAG, eval - không qua cập nhật weights. Pipeline chính là:
prompt/dataset version → evaluate → register → deploy → monitor → (feedback về golden set)
Nếu dự án có fine-tuning
Đưa LoRA (M1, Bài 3) vào như nhánh phụ tách biệt: validate data → train → eval → register model, chạy thủ công/theo lịch, kết quả là một model config mới mà pipeline chính ở trên tiêu thụ (và vẫn phải qua eval gate).
2. Live coding: Architecture Review & Integration¶
Ghép các mảnh đã xây rời rạc qua 7 bài thành một hệ thống chạy được:
| Thành phần | Từ bài | Điểm tích hợp |
|---|---|---|
| Prompt registry | Bài 1 | Service load prompt qua registry().render(name, version="production") |
| Eval pipeline | Bài 2 | eval.run + eval.gate gọi được từ CLI và CI |
| Cache 2 tầng | Bài 3 | Bọc quanh lời gọi LLM; key chứa prompt_version |
| Container | Bài 4 | Image multi-stage, SSE endpoint, healthcheck |
| Deploy | Bài 5 | VM + systemd + nginx + Secret Manager |
| CI/CD | Bài 6 | ci.yml, eval-gate.yml, cd.yml + branch protection |
| Observability | Bài 7 | record_cost() + tracing sampled + dashboard + alert |
Rà soát các "đường nối" hay vỡ:
- Cache key có
prompt_versionkhông? (không thì rollback prompt vô nghĩa) - Eval gate có chạy khi PR đụng
src/rag/**, không chỉprompts/**? - Smoke test có gọi câu hỏi có đáp án biết trước, không chỉ
/health? - Secret đọc lúc runtime, không nằm trong image?
- Alert có người nhận thật (Slack/email), không chỉ log?
3. Pipeline hoàn chỉnh - checklist tích hợp¶
- Version: prompt trong registry, có ≥ 2 version + changelog; dataset golden set được version hoá
- Evaluate:
eval.run --subsetchạy < 3 phút;eval.gateso baseline + có gate riêng cho sliceinjection/out_of_scope - Register: promote prompt = đổi alias
production; rollback = trỏ alias về version cũ (không cần build) - Deploy: merge
main→ CI (lint + unit + eval) → CD (build tag=SHA → push → VM restart) → smoke test - Monitor: dashboard cost/feature + latency p95 + cache hit + hallucination rate + error/fallback; alert cost spike hoạt động
- Feedback loop: có script/quy trình lấy câu bị feedback âm từ log → thêm vào
golden setversion kế tiếp
4. Checklist Production-Ready¶
Đối chiếu trước khi coi hệ thống là "xong":
Bảo mật & cấu hình¶
- Không có API key nào ở dạng file trên VM hoặc trong image layer
- Secret đọc từ Secret Manager lúc runtime; xoay key =
versions add+ restart - Port app không truy cập được từ Internet; chỉ 80/443 mở; SSH giới hạn IP
Chất lượng & thay đổi¶
- Branch protection: không merge
mainkhi CI hoặc eval-gate đỏ - Eval theo slice - chứng minh bắt được regression vô hình
- Prompt lint chặn biến thiếu / version sai kiểu
Vận hành & phục hồi¶
- Có đường rollback cho cả 3 trục: image tag (code), prompt version alias, model config
- Smoke test tự chạy sau deploy; fail → tự rollback; đã diễn tập rollback thật
-
last-known-goodđược ghi lại sau mỗi smoke pass - Container tự restart khi crash (
systemd Restart=always) - Backup vector index định kỳ + đã thử khôi phục
Chi phí & giám sát¶
- Cost budget tháng + alert 50/80/100%
- Hard limit cost per user / ngày
- Dashboard production có người xem; alert có người nhận
- Runbook cho ≥ 2 loại incident (khuyến nghị đủ 4: cost / hallucination / jailbreak / outage)
- Fallback provider được cấu hình và đã diễn tập
5. Take-home¶
- Thêm 1 incident playbook vào runbook (chọn loại chưa viết ở Bài 7), gồm: tín hiệu phát hiện cụ thể (metric + ngưỡng), các bước khoanh vùng bằng dashboard hiện có, hành động giảm thiểu, mục "sau sự cố".
- Thực hiện một lần rollback thật: chọn prompt version alias hoặc image tag, rollback trên hệ thống đã deploy, ghi lại từng lệnh + thời gian từ lúc quyết định đến lúc dịch vụ ổn định.
- (Tùy chọn) Bổ sung vòng feedback: script lấy 10 câu bị thumbs-down gần nhất từ log, gán đáp án kỳ vọng, tạo
golden setversion mới, chạy lại eval để xem baseline có đổi.
6. Q&A Session¶
Chủ đề gợi ý:
- Khi nào một LLM app đáng self-host model thay vì gọi API (nhắc Bài 4).
- Eval gate chặn nhầm PR tốt (judge nhiễu) - cân bằng
drop_tolerancethế nào. - Chi phí thật của việc "làm production đúng chuẩn" cho team nhỏ - cắt gì được, cắt gì không.
- Prompt registry hosted vs git-based cho team có PM chỉnh prompt.
Tóm tắt¶
graph TB
subgraph "Vòng lặp chính - KHÔNG có train"
V[Version prompt/dataset] --> E[Evaluate - gate] --> R[Register - alias production] --> D[Deploy - CI/CD + smoke] --> M[Monitor - dashboard + alert]
M -->|feedback| V
end
M -.incident.-> PB[Playbook: cost / hallucination / jailbreak / outage]
FT[[Nhánh phụ: fine-tune LoRA<br/>validate -> train -> eval -> register model]] -.model config.-> D
| Trụ cột | Cốt lõi |
|---|---|
| Pipeline chính | version → evaluate → register → deploy → monitor → feedback; không có "train" ở đường chính |
| Tích hợp | Kiểm các "đường nối": cache key có prompt_version, eval-gate trigger đủ path, smoke test có đáp án biết trước |
| Production-ready | Secret runtime · rollback 3 trục · smoke + auto-rollback · cost budget + alert · runbook + fallback đã diễn tập |
| Feedback loop | Câu bị feedback âm → golden set version kế → baseline eval mới |