- Messages API và streaming
- Các provider lớn đều theo mô hình danh sách message theo role, trả về qua server-sent events khi bật streaming. Cần hiểu các loại event (delta text, tool call, usage, stop reason) để xử lý đúng khi stream bị cắt giữa chừng hoặc dừng vì chạm max tokens.
- Structured output
- Dùng JSON Schema (thường sinh từ Zod) để provider ép output đúng cấu trúc bằng constrained decoding thay vì chỉ dặn trong prompt. Vẫn phải validate phía server, vì model có thể từ chối, bị cắt do max tokens, hoặc trả về giá trị đúng kiểu nhưng sai nghĩa.
- Tool calling
- Model không tự chạy tool: nó trả về tên tool và tham số, code của bạn thực thi rồi gửi kết quả lại trong message tiếp theo. Nắm parallel tool call, cách trả lỗi tool về cho model như một observation, và việc định nghĩa tool chiếm token trong mỗi request.
- Prompt caching
- Đặt phần cố định (system prompt, tài liệu, định nghĩa tool) ở đầu và phần thay đổi ở cuối để tận dụng cache prefix, giúp giảm mạnh chi phí input và độ trễ. Có provider cache tự động, có provider cần đánh dấu breakpoint rõ ràng, nên hãy đọc trường cached tokens trong usage để biết cache có trúng hay không.
- Ngân sách chi phí và độ trễ
- Output token thường đắt và chậm hơn input, nên giới hạn max output là cách tiết kiệm trực tiếp nhất. Dùng batch API cho việc chạy offline để được giảm giá, đặt timeout, retry với exponential backoff cho lỗi 429 và lỗi quá tải, và luôn tính chi phí theo request lẫn theo user.
- Chọn model: hosted, tier nhỏ hay open-weight
- Model frontier hosted cho chất lượng cao nhất, tier nhỏ hơn của cùng hãng rẻ và nhanh hơn nhiều cho tác vụ hẹp, còn open-weight cho quyền kiểm soát dữ liệu và chi phí ở quy mô lớn. Một lớp trừu tượng provider như AI SDK hoặc một AI gateway giúp đổi model mà không phải viết lại code, và chỉ nên chọn dựa trên eval của chính bạn.