Ngăn xếp ứng dụng LLM The LLM application stack

Một ứng dụng LLM không phải là một lời gọi model.

An LLM application is not a model call.

Nó là sáu tầng nằm trên đường đi của request, cộng năm việc phải làm liên tục ở bên ngoài đường đó. Bạn xây từ dưới lên; request chạy từ trên xuống.

It is six layers sitting on the request path, plus five jobs you keep doing outside it. You build bottom-up; a request runs top-down.

Sơ đồ: request đi từ tầng 6 xuống tầng 1, control plane bao quanh Diagram: a request descends from layer 6 to layer 1, wrapped by the control plane 6 · Giao diện 5 · Điều phối 4 · Công cụ 3 · Ngữ cảnh 2 · Cổng vào 1 · Model & compute 6 · Interface 5 · Orchestration 4 · Tools 3 · Context 2 · Gateway 1 · Model & compute request Bảo mật Đánh giá Quan sát Cải tiến Con người Security Evaluation Observability Improvement Humans chạm mọi tầng, không nằm trên touches every layer, on no request path
Trước khi chọn bất cứ thứ gì Before choosing anything

Baseline: chưa cần tầng nào cả

The baseline: you may need none of this

Rất nhiều sản phẩm chạy tốt với đúng một thứ: một lời gọi API trực tiếp, prompt viết cứng trong code, không gateway, không retrieval, không agent loop, không tool. Sáu tầng bên dưới là câu trả lời cho những vấn đề cụ thể — chưa có vấn đề thì chưa cần câu trả lời.

Plenty of products run fine on exactly one thing: a direct API call, the prompt hard-coded, no gateway, no retrieval, no agent loop, no tools. The layers below are answers to specific problems — no problem yet, no answer needed.

Baseline đủ dùng khi

The baseline is enough when

  • Tri thức cần thiết vừa đủ để dán vào prompt (dưới ~20K token, ít đổi).
  • Một request = một lượt gọi, không bước nào phụ thuộc bước trước.
  • Model chỉ cần nói, không cần làm.
  • Dưới ~1000 request/ngày và bạn chịu được downtime của provider.
  • Chưa có yêu cầu tuân thủ nào bắt lưu vết từng lần chạy.
  • The knowledge fits in the prompt (under ~20K tokens, rarely changing).
  • One request = one call; no step depends on a previous step.
  • The model only has to say things, not do them.
  • Under ~1,000 requests/day and you can live with provider downtime.
  • No compliance rule forces a record of every run.

Thử cái rẻ trước

Try the cheap move first

  • Sai về dữ liệu nội bộ → dán tài liệu vào prompt, chưa dựng RAG.
  • Hoá đơn tăng → prompt caching và cắt lịch sử thừa, chưa fine-tune.
  • Provider sập một lần → retry sang khoá dự phòng, chưa dựng gateway.
  • Chất lượng thất thường → viết 30 ca test, chưa thêm agent loop.
  • Cần dữ liệu thời gian thực → gọi API sẵn ở code, chưa mở tool cho model.
  • Wrong on internal data → paste the docs in; don't build RAG yet.
  • Bill rising → prompt caching and trimming history; don't fine-tune yet.
  • One provider outage → retry on a backup key; don't build a gateway yet.
  • Hit-and-miss quality → write 30 test cases; don't add an agent loop yet.
  • Need live data → call the API in your code; don't open tools yet.

Nguyên tắc: thêm một tầng chỉ khi bạn chỉ được ra sự cố cụ thể mà tầng đó ngăn được. “Sau này chắc cần” chưa phải lý do.

The rule: add a layer only when you can point at a concrete incident it would have prevented. “We'll probably need it later” is not yet a reason.

Dùng hằng ngày The daily tool

Chọn cái nào trong 30 giây

Pick one in 30 seconds

Bắt đầu từ triệu chứng, không từ công nghệ.

Start from the symptom, not the technology.

Bạn đang có sự cố gì?

├─ "Model không biết thông tin của tôi"
│   ├─ Dữ liệu tĩnh, < 20K token ──────────► dán vào prompt — chưa cần tầng nào
│   ├─ Dữ liệu lớn, chỉ cần đọc ───────────► [3] NGỮ CẢNH — retrieval
│   └─ Dữ liệu đổi từng giây ──────────────► [4] CÔNG CỤ — gọi API lúc chạy
│
├─ "Model biết rồi nhưng không làm được gì"
│   ├─ Chỉ cần đọc/ghi vài hệ thống ───────► [4] CÔNG CỤ
│   └─ Việc nhiều bước, không đoán trước ──► [5] ĐIỀU PHỐI — agent loop
│
├─ "Chạy được rồi nhưng đắt / chậm / hay sập"
│   ├─ Đắt hoặc chậm ──────────────────────► [2] CỔNG VÀO — cache, model rẻ hơn
│   ├─ Sập khi provider sập ───────────────► [2] CỔNG VÀO — fallback
│   └─ Đắt ở quy mô lớn, workload ổn định ─► [1] MODEL — tự host model nhỏ
│
├─ "Chất lượng lúc tốt lúc tệ, không biết vì sao"
│   ├─ Không biết lần chạy hỏng ra sao ────► [9] QUAN SÁT — trace trước
│   ├─ Sửa chỗ này hỏng chỗ khác ──────────► [8] ĐÁNH GIÁ — eval + hồi quy
│   └─ Đã có eval, vẫn thiếu 5–10% ────────► [10] CẢI TIẾN — fine-tune
│
├─ "Người dùng thấy chậm dù hệ thống không chậm"
│   └───────────────────────────────────────► [6] GIAO DIỆN — streaming
│
└─ "Sợ nó làm sai chuyện không thể hoàn tác"
    ├─ Nội dung ngoài luồng vào prompt ────► [7] BẢO MẬT — cách ly + ACL
    └─ Hành động có hậu quả thật ──────────► [11] CON NGƯỜI — approval gate
What is actually going wrong?

├─ "The model doesn't know my information"
│   ├─ Static data, < 20K tokens ──────────► paste it in — no layer needed
│   ├─ Large data, read-only ──────────────► [3] CONTEXT — retrieval
│   └─ Data changes by the second ─────────► [4] TOOLS — call the API at run time
│
├─ "The model knows, but it can't do anything"
│   ├─ Read/write a few systems ───────────► [4] TOOLS
│   └─ Multi-step, steps not knowable ─────► [5] ORCHESTRATION — agent loop
│
├─ "It works, but it's expensive / slow / flaky"
│   ├─ Expensive or slow ──────────────────► [2] GATEWAY — cache, cheaper model
│   ├─ Dies when the provider dies ────────► [2] GATEWAY — fallback
│   └─ Costly at scale, stable workload ───► [1] MODEL — self-host a small model
│
├─ "Quality varies and I don't know why"
│   ├─ Can't see what a failed run did ────► [9] OBSERVABILITY — traces first
│   ├─ Fix one thing, break another ───────► [8] EVALUATION — evals + regression
│   └─ Evals in place, still 5–10% short ──► [10] IMPROVEMENT — fine-tuning
│
├─ "Users say it's slow, but the system isn't"
│   └───────────────────────────────────────► [6] INTERFACE — streaming
│
└─ "I'm afraid it will do something irreversible"
    ├─ Outside content enters the prompt ──► [7] SECURITY — isolation + ACLs
    └─ Actions with real consequences ─────► [11] HUMANS — approval gate
Trong đường request · hỏng là thấy ngay In the request path · breaks visibly

Sáu tầng trên đường đi của request

Six layers on the request path

01

Model & compute

Frontier + model nhỏsmall models, serving

Tầng sinh token. Hầu hết hệ thống nghiêm túc chạy nhiều model cùng lúc: model mạnh cho suy luận khó, model nhỏ cho phân loại và định tuyến.

The token-generation layer. Most serious systems run several models at once: a strong one for hard reasoning, small ones for classification and routing.

dùng cho
use for
Phân loại theo lô · suy luận nhiều bước · dữ liệu không được rời hạ tầng
Batch classification · multi-step reasoning · data that can't leave
được
gain
Model nhỏ chuyên biệt rẻ hơn 10–50 lần · prompt caching cắt 50–90% chi phí input
A specialized small model is 10–50× cheaper · prompt caching cuts 50–90% of input cost
mất
lose
Tự host là một sản phẩm hạ tầng đầy đủ · GPU tính tiền theo giờ, không theo request
Self-hosting is a full infra product · GPUs bill per hour, not per request

đánh đổitrade-off Chọn model nhỏ tự host là đổi chất lượng ở đuôi dài các ca khó cùng tốc độ ra tính năng, để lấy chi phí đơn vị ổn định và quyền kiểm soát dữ liệu. Self-hosting a small model trades quality on the long tail of hard cases and feature velocity for stable unit costs and control over your data.

Dấu hiệu: hoá đơn token hằng tháng vượt lương người sẽ vận hành cụm GPU.

Tell: the monthly token bill exceeds the salary of whoever would run the GPUs.

02

Cổng vào

Gateway

Auth, routing, cache, fallback

Reverse proxy đặt trước mọi lời gọi model: một chỗ duy nhất để chặn chi phí, đổi model và sống sót khi provider sập.

A reverse proxy in front of every model call: the one place to cap cost, swap models and survive provider outages.

dùng cho
use for
Nhiều nhóm chung ngân sách · đổi model không sửa code · câu hỏi lặp nhiều
Teams sharing a budget · model swaps without code · repetitive questions
được
gain
Cache cắt 20–40% chi phí · fallback biến downtime thành một cú tăng độ trễ
Caching cuts 20–40% of spend · fallback turns downtime into a latency spike
mất
lose
Thêm 5–50ms và một điểm chết đơn · semantic cache có thể trả sai rất trôi chảy
+5–50ms and a single point of failure · semantic cache can return fluent wrong answers

đánh đổitrade-off Chọn gateway là đổi một chặng mạng và một thành phần phải tự vận hành, để lấy khả năng đổi model, chặn chi phí và sống sót khi provider sập mà không sửa code. A gateway trades one network hop and one more component to operate for the ability to swap models, cap costs and survive outages without touching code.

Dấu hiệu: phải mở ba dashboard để trả lời “tháng này tốn bao nhiêu”.

Tell: you open three vendor dashboards to answer “what did we spend?”

03

Ngữ cảnh

Context

Retrieval, memory, context assembly

Quyết định cái gì được đưa vào prompt. Retrieval chỉ là một nửa — nửa còn lại là xếp thứ tự và cắt theo ngân sách token.

Decides what goes into the prompt. Retrieval is half of it — the other half is ordering and trimming to a token budget.

dùng cho
use for
Hỏi đáp trên tài liệu nội bộ · trả lời có trích dẫn · trợ lý nhớ bối cảnh người dùng
Q&A over internal docs · cited answers · assistants that remember the user
được
gain
Cắt phần lớn ảo giác · cập nhật tri thức bằng index lại, tính bằng phút
Removes most hallucination · knowledge updates by re-indexing, in minutes
mất
lose
Chất lượng bị chặn trên bởi khâu cắt chunk · retrieval hỏng im lặng, không báo lỗi
Quality capped by chunking · retrieval fails silently, with no error signal

đánh đổitrade-off Chọn nhồi thêm ngữ cảnh là đổi độ trễ, chi phí token và rủi ro nhiễu, để lấy câu trả lời bám vào dữ liệu thật thay vì trí nhớ của model. Adding context trades latency, token cost and the risk of distraction for answers grounded in real data instead of the model's memory.

Dấu hiệu: câu trả lời trôi chảy nhưng sai đúng những chi tiết cụ thể.

Tell: fluent answers that get the specific details wrong.

04

Công cụ

Tools

MCP, function calling, sandbox

Cho model làm thay vì chỉ nói. Bạn mô tả hàm bằng schema, model sinh tham số, runtime của bạn kiểm quyền rồi thực thi.

Lets the model act instead of only speak. You describe functions as schemas, the model produces arguments, your runtime checks permissions and executes.

dùng cho
use for
Dữ liệu thời gian thực · tính toán chính xác · thao tác có tác dụng phụ · sinh SQL
Real-time data · exact computation · side-effecting actions · SQL generation
được
gain
Bỏ hẳn một lớp ảo giác · mỗi lần gọi là một dòng audit có cấu trúc
Removes a whole class of hallucination · every call is a structured audit line
mất
lose
Bề mặt tấn công lớn nhất ngăn xếp · độ chính xác chọn tool tụt sau 15–20 tool
The stack's largest attack surface · selection accuracy falls past 15–20 tools

đánh đổitrade-off Cho model gọi tool là đổi bề mặt tấn công và tính bất định của hệ thống, để lấy khả năng đọc và ghi trạng thái thật thay vì chỉ mô tả nó. Letting the model call tools trades attack surface and determinism for the ability to read and write real state instead of merely describing it.

Dấu hiệu: câu trả lời đúng cần một con số chỉ hệ thống của bạn mới biết lúc này.

Tell: the right answer needs a number only your system knows right now.

05

Điều phối

Orchestration

Harness, agent loop, durable state

Quyết định chuỗi các lượt gọi model. Workflow là bạn viết các bước; agent là model tự quyết bước tiếp theo — hai công cụ cho hai loại bài toán.

Decides the sequence of model calls. A workflow is you writing the steps; an agent is the model deciding the next one — two tools, two kinds of problem.

dùng cho
use for
Điều tra nhiều bước · sửa code có vòng test · nghiên cứu tổng hợp
Multi-step investigation · code fixing with a test loop · research synthesis
được
gain
Xử lý được việc không liệt kê nổi các bước · durable state cứu tiến trình dài
Handles work whose steps can't be enumerated · durable state saves long runs
mất
lose
Chi phí không chặn trên nếu thiếu trần · 90% mỗi bước còn ~35% sau mười bước
Unbounded cost without caps · 90% per step leaves ~35% after ten steps

đánh đổitrade-off Chọn agent loop là đổi tính dự đoán được của một luồng cố định, để lấy khả năng xử lý những việc mà bạn không thể liệt kê hết các bước từ trước. An agent loop trades the predictability of a fixed flow for the ability to handle work whose steps you cannot enumerate in advance.

Dấu hiệu: vẽ được sơ đồ luồng đầy đủ trên giấy thì đừng dùng agent — viết workflow.

Tell: if you can draw the full flowchart, don't use an agent — write the workflow.

06

Giao diện

Interface

Streaming, artifact, approval gate

Nơi tính bất định của model được biến thành thứ người dùng kiểm soát được — bằng streaming, artifact và điểm dừng trước hậu quả thật.

Where model uncertainty becomes something people can control — through streaming, artifacts and a stop before real consequences.

dùng cho
use for
Câu trả lời dài · đầu ra người dùng sẽ sửa · hành động không hoàn tác
Long answers · output users will edit · irreversible actions
được
gain
TTFT dưới 500ms giữ người dùng ở lại · gate biến sai sót thành một cú bấm Huỷ
TTFT under 500ms keeps users · a gate turns a mistake into one Cancel click
mất
lose
Kiểm duyệt khó hơn khi chữ đã hiện · gate hỏi quá nhiều sẽ bị bấm quen tay
Moderation is harder once text is on screen · over-gating gets rubber-stamped

đánh đổitrade-off Chọn streaming kèm approval gate là đổi thời gian hoàn tất một tác vụ, để lấy cảm giác phản hồi tức thì và một điểm dừng để người dùng chặn được hành động sai. Streaming plus an approval gate trades time-to-completion for immediate perceived responsiveness and a point where users can block a wrong action.

Dấu hiệu: hành động nào không có nút Undo thì phải có gate trước khi chạy.

Tell: any action without an Undo button needs a gate before it runs.

Quanh đường request · hỏng thì sáu tháng sau mới biết Around the request path · breaks invisibly

Năm việc phải làm liên tục ở bên ngoài

Five jobs you keep doing outside it

Không cái nào làm sản phẩm nhanh hơn trong tuần đầu. Tất cả đều là lý do khiến một demo tốt không trở thành một sản phẩm tệ sau sáu tháng.

None of these make the product faster in week one. All of them are why a good demo doesn't become a bad product six months later.

Bảo mật

Security

Injection, ACL

Hai bài toán một tên: nội dung không tin cậy trở thành chỉ thị, và model chạm vào thứ người dùng thật không có quyền chạm.

Two problems under one name: untrusted content becoming instructions, and the model touching what the real user may not.

dùng cho
use for
Mọi hệ thống đọc nội dung bên ngoài · nhiều tenant chung index · agent có quyền ghi
Anything reading outside content · shared multi-tenant indexes · write-capable agents
được
gain
Lọc quyền trước retrieval chặn rò rỉ chéo tenant · sandbox không mạng chặn đường lấy cắp
Filtering before retrieval kills cross-tenant leaks · a network-less sandbox blocks exfiltration
mất
lose
Không có cách phòng nào đạt 100% · siết quá chặt làm hỏng ca dùng hợp lệ
No defense is 100% · over-tightening breaks legitimate use cases

đánh đổitrade-off Chọn siết ACL và cách ly nội dung không tin cậy là đổi một phần tiện lợi cùng số ca dùng được, để lấy khả năng chứng minh rằng một prompt độc không thể biến thành một hành động phá hoại. Strict ACLs and isolation trade some convenience and use-case coverage for the ability to prove a hostile prompt cannot become a destructive action.

Dấu hiệu: có bất kỳ đường nào để văn bản của người khác lọt vào context của bạn.

Tell: any path exists for someone else's text to reach your context.

Đánh giá

Evaluation

Eval, hồi quyEvals, regression

Biến câu hỏi “bản này tốt hơn hay tệ hơn” từ cảm tính thành số đo, với một bộ ca test lấy từ log thật và một cổng chặn trong CI.

Turns “is this version better?” from a feeling into a number, with a test set drawn from real logs and a gate in CI.

dùng cho
use for
Trước mỗi thay đổi prompt · khi hạ cấp model · theo dõi trôi chất lượng
Before every prompt change · when downgrading models · tracking drift
được
gain
Sửa prompt có bằng chứng · bắt được lỗi “sửa một chỗ hỏng ba chỗ”
Evidence-backed prompt changes · catches “fix one, break three”
mất
lose
1–2 tuần công để dựng · điểm tổng che giấu thất bại ở nhóm nhỏ
1–2 engineer-weeks to build · aggregate scores hide subgroup failures

đánh đổitrade-off Chọn eval là đổi tốc độ ship trong tháng đầu, để lấy quyền sửa prompt mà không phải cầu may ở mọi tháng sau đó. Evals trade shipping speed in the first month for the right to change prompts without praying, in every month after.

Dấu hiệu: không trả lời được “sửa prompt hôm qua có tốt lên không” bằng một con số.

Tell: you can't answer “did yesterday's prompt change help?” with a number.

Quan sát

Observability

Trace, chi phíTraces, cost

Khả năng dựng lại chính xác một lần chạy đã xảy ra: prompt cuối đã gửi, tài liệu nào lấy về, tool nào gọi, hết bao nhiêu tiền.

The ability to reconstruct a past run exactly: the final prompt sent, what was retrieved, which tools ran, what it cost.

dùng cho
use for
Điều tra khiếu nại chất lượng · truy nguồn tăng chi phí · gỡ lỗi agent
Investigating complaints · tracing cost spikes · debugging agents
được
gain
Điều tra sự cố từ hàng giờ xuống vài phút · nguyên liệu sẵn có cho eval
Incident investigation from hours to minutes · ready material for evals
mất
lose
Trace chứa PII, kèm nghĩa vụ che và xoá · dung lượng lưu trữ thật
Traces hold PII, with redaction and retention duties · real storage volume

đánh đổitrade-off Chọn trace đầy đủ là đổi chi phí lưu trữ và một nghĩa vụ che dữ liệu nhạy cảm, để lấy khả năng trả lời “vì sao lần chạy đó hỏng” sau khi nó đã hỏng. Full tracing trades storage cost and a redaction obligation for the ability to answer “why did that run fail” after it already failed.

Dấu hiệu: không dựng lại được prompt đã gửi cho một request cụ thể hôm qua.

Tell: you can't reconstruct the exact prompt sent for a specific request yesterday.

Cải tiến

Improvement

Fine-tune, RL

Thay đổi chính trọng số bằng dữ liệu của bạn. Fine-tune dạy hành vi và định dạng — không dạy sự kiện; muốn model biết dữ liệu mới thì đó là việc của tầng Ngữ cảnh.

Changing the weights with your data. Fine-tuning teaches behavior and format — not facts; new data is the Context layer's job.

dùng cho
use for
Định dạng đầu ra cứng · phong cách chuyên ngành · việc hẹp khối lượng lớn
Rigid output formats · specialized voice · narrow high-volume tasks
được
gain
Cắt được prompt hướng dẫn dài · model nhỏ đạt gần chất lượng model biên giới trên một việc
Cuts long instruction prompts · a small model nears frontier quality on one task
mất
lose
Khoá vào một model nền · quên tri thức chung ngoài tập huấn luyện
Locks you to a base model · forgets skills outside the training set

đánh đổitrade-off Chọn fine-tune là đổi tính linh hoạt và khả năng nhảy sang model mới, để lấy chất lượng ổn định hơn trên đúng một phân phối việc với prompt ngắn hơn. Fine-tuning trades flexibility and the ability to jump to a newer model for steadier quality on one task distribution with a shorter prompt.

Dấu hiệu: có trên 1000 ví dụ tốt và đang dùng prompt trên 2000 token cho một việc hẹp lặp lại.

Tell: 1,000+ good examples and a 2,000+ token prompt for one narrow repeated task.

Con người

Humans

HITL, audit

Đặt người vào những điểm cụ thể của luồng, và ghi lại đủ để về sau trả lời được ai đã chấp thuận việc gì, dựa trên thông tin gì.

Placing people at specific points in the flow, and recording enough to answer who approved what, on what information.

dùng cho
use for
Hành động không hoàn tác · lĩnh vực có quy định · giai đoạn đầu triển khai
Irreversible actions · regulated domains · the first weeks of rollout
được
gain
Chặn đúng loại sai sót đắt nhất · mỗi lần người sửa là một nhãn miễn phí
Blocks the most expensive error class · every correction is a free label
mất
lose
Người là nút thắt thông lượng · duyệt quen tay là thất bại thầm lặng
People cap throughput · rubber-stamping is a silent failure

đánh đổitrade-off Đặt người vào vòng lặp là đổi thông lượng và chi phí vận hành, để lấy một người chịu trách nhiệm được nêu tên cho mỗi hành động rủi ro. A human in the loop trades throughput and operating cost for one named accountable person behind every risky action.

Dấu hiệu: sai sót cần luật sư hoặc cần thông báo cho khách hàng để sửa.

Tell: fixing the mistake would need a lawyer or a customer notification.

Bảng đánh đổi

The trade-off table

Tầng 8 và 9 không tốn gì trên đường request nhưng bị bỏ qua nhiều nhất, vì cái giá của việc thiếu chúng đến muộn. Tầng 4 và 5 rẻ để bật, đắt nhất để vận hành.

Layers 8 and 9 cost nothing on the request path yet get skipped the most, because the price of missing them arrives late. Layers 4 and 5 are cheap to switch on and the most expensive to run.

TầngChi phí thêmĐộ trễ thêmKhó vận hànhRủi ro nếu bỏ quaThêm khi nào
LayerAdded costAdded latencyOps difficultyRisk of skippingWhen to add
01 Modellà chi phí gốclà độ trễ gốcThấp qua API, rất cao khi tự hostKhông có sản phẩmNgày đầu
02 Cổng vàoÂm — cache tiết kiệm+5–50msTrung bìnhKhông kiểm soát chi phí, sập theo providerKhi có nhiều nhóm dùng hoặc chi phí đáng kể
03 Ngữ cảnh+20–200% token input+100–500msTrung bình đến caoModel bịa về dữ liệu của bạnKhi tri thức không nhét vừa prompt
04 Công cụ×2 trở lên số lượt gọi+1 vòng mỗi toolCaoModel chỉ nói được, không làm đượcKhi cần dữ liệu thật hoặc tác dụng phụ
05 Điều phối×3–20 số lượt gọiGiây đến phútRất caoKhông xử lý nổi việc nhiều bướcKhi bước sau phụ thuộc bước trước
06 Giao diệnKhông đáng kểGiảm TTFT cảm nhậnTrung bìnhNgười dùng bỏ giữa chừng, sai sót không chặn đượcNgay khi có người dùng thật
Bảo mậtNhỏNhỏCaoRò rỉ dữ liệu, hành động phá hoạiTrước khi nội dung ngoài luồng vào context
Đánh giá0 trên đường request0Trung bìnhSửa gì cũng là đoán mòSau ~2 tuần lặp prompt
Quan sátNhỏ~0 nếu ghi bất đồng bộTrung bìnhKhông điều tra được sự cốTrước khi lên production
Cải tiếnÂm sau khi xongGiảmRất caoTrần chất lượng không hạ thêm đượcSau khi eval và retrieval đã cạn
Con ngườiCao — nhân côngPhút đến giờTrung bìnhSai sót không hoàn tác lọt ra ngoàiTrước hành động không hoàn tác đầu tiên
01 Modelit is the base costit is the base latencyLow on API, very high self-hostedNo product at allDay one
02 GatewayNegative — caching saves+5–50msMediumNo cost control, down with the providerWhen several teams use it or spend gets material
03 Context+20–200% input tokens+100–500msMedium to highThe model invents facts about your dataWhen knowledge no longer fits the prompt
04 Tools2× or more calls+1 round trip per toolHighThe model can talk but not actWhen you need live data or side effects
05 Orchestration3–20× callsSeconds to minutesVery highMulti-step work is out of reachWhen later steps depend on earlier results
06 InterfaceNegligibleLowers perceived TTFTMediumUsers abandon, mistakes can't be stoppedAs soon as there are real users
SecuritySmallSmallHighData leakage, destructive actionsBefore outside content enters the context
Evaluation0 on the request path0MediumEvery change is guessworkAfter ~2 weeks of prompt iteration
ObservabilitySmall~0 if written asyncMediumIncidents can't be investigatedBefore production
ImprovementNegative once doneLowerVery highQuality and cost ceilings stop movingAfter evals and retrieval are exhausted
HumansHigh — laborMinutes to hoursMediumIrreversible mistakes reach the outsideBefore the first irreversible action

Anti-patterns

Anti-patterns

Sai lầmVì sao saiSửa thế nào
MistakeWhy it's wrongThe fix
Dựng RAG cho 30 trang tài liệu30 trang nhét vừa context; bạn thêm hạ tầng để giải một vấn đề không tồn tạiDán thẳng vào prompt. Chỉ index khi thật sự vượt trần context
Gọi model mạnh nhất cho mọi việcPhân loại và trích xuất chạy tốt trên model rẻ hơn 20 lầnĐịnh tuyến theo độ khó ở gateway, đo bằng eval trước khi hạ cấp
Fine-tune để model “biết” tài liệu công tyFine-tune dạy hành vi, không dạy sự kiện; model sẽ bịa tự tin hơnDùng retrieval. Chỉ fine-tune cho định dạng và phong cách
Agent loop không đặt trầnMột vòng lặp hỏng chạy cả đêm và đốt hết ngân sách thángTrần số vòng, trần token, trần thời gian — ngay từ dòng code đầu
“Đừng làm X” trong system prompt như biện pháp an ninhInjection ghi đè được chỉ dẫn; đây là gợi ý, không phải kiểm soátKiểm soát ở runtime: quyền của tool, lọc ACL, phê duyệt
Chunk cố định 512 ký tựCắt giữa câu, giữa bảng, giữa hàm; mất ngữ cảnh không cứu đượcCắt theo cấu trúc tài liệu, giữ tiêu đề mục trong mỗi chunk
Semantic cache cho mọi loại câu hỏi“Có được hoàn tiền không” và “không được hoàn tiền phải không” gần nhau về vectorChỉ cache tri thức tĩnh; loại trừ phủ định, số liệu, dữ liệu riêng
Lên production trước khi có traceSự cố chất lượng đầu tiên sẽ không điều tra được, và nó đến trong tuần đầuTrace trước, tính năng sau — thứ tự không nên đảo
Approval gate cho mọi hành độngNgười duyệt bấm quen tay từ ngày thứ ba; gate mất tác dụngChỉ chặn hành động không hoàn tác được, theo dõi tỷ lệ từ chối
Eval bằng ca tự nghĩ raBạn tối ưu cho một phân phối câu hỏi không tồn tạiLấy ca từ log production; mỗi báo lỗi thành một ca vĩnh viễn
Building RAG for 30 pages30 pages fit in the context; you added infrastructure for a problem you don't havePaste it into the prompt. Index only once you truly exceed the context
Calling the strongest model for everythingClassification and extraction run fine on a model 20× cheaperRoute by difficulty at the gateway, measure with evals before downgrading
Fine-tuning so the model “knows” company docsFine-tuning teaches behavior, not facts; the model invents with more confidenceUse retrieval. Fine-tune only for format and voice
Agent loops with no capsOne broken loop runs all night and burns the monthly budgetCap steps, tokens and wall clock — from the first line of code
“Don't do X” in the system prompt as securityInjection overrides instructions; this is a suggestion, not a controlControl in the runtime: tool permissions, ACL filtering, approvals
Fixed 512-character chunksCuts mid-sentence, mid-table, mid-function; lost context is unrecoverableChunk along document structure, keep section headings in each chunk
Semantic caching for every question“Can I get a refund” and “can't I get a refund” sit close in vector spaceCache static knowledge only; exclude negations, figures, per-user data
Going to production before tracingThe first quality incident is uninvestigable, and it arrives in week oneTraces first, features second — don't reverse that order
Approval gates on every actionReviewers rubber-stamp by day three; the gate stops workingBlock only irreversible actions, monitor the rejection rate
Evals built from invented casesYou optimize for a question distribution that doesn't existDraw cases from production logs; every bug report becomes a permanent case

Ba câu cần nhớ

Three things to remember

Bạn xây từ tầng 1 lên, nhưng request chạy từ tầng 6 xuống — và mỗi tầng bạn thêm vào phải trả lời được một sự cố cụ thể đã xảy ra, không phải một sự cố tưởng tượng.

You build from layer 1 up, but a request runs from layer 6 down — and every layer you add must answer a specific incident that actually happened, not an imagined one.

Trong đường request thì hỏng là thấy ngay; quanh đường request thì sáu tháng sau mới biết, và lúc đó đã đắt hơn nhiều — nên trace và eval đi trước tính năng.

In the request path, breakage shows immediately; around it, breakage surfaces six months later and costs far more — so traces and evals come before features.

Hạn chế là khuyết tật bạn phải chịu; đánh đổi là cái giá bạn chọn trả — nếu không nói được mình đang trả cái gì để lấy cái gì, bạn chưa chọn, bạn mới chỉ làm theo.

A limit is a defect you tolerate; a trade-off is a price you choose to pay — if you can't say what you're giving up to get what, you haven't chosen, you've only followed along.