# Vercel AI SDK: model khách hàng chọn có thể đổi, tool bạn viết thì ở lại

> Khi khách hàng chưa chốt nhà cung cấp model, tầng mã nằm giữa ứng dụng và LLM thường quyết định demo của bạn sống được bao lâu.

Bản gốc: https://fdetimes.net/vi/cong-cu/vercel-ai-sdk-typescript-cho-fde/

Người dùng ứng dụng LLM có thể phải nhìn spinner 5, 10, thậm chí tới 40 giây. Tài liệu chính thức của Vercel AI SDK nêu đúng chi tiết ấy khi giải thích vì sao streaming là cần thiết. Với FDE, vài chục giây đó thường đủ để một buổi demo trước khách hàng trùng xuống.

AI SDK là bộ công cụ TypeScript do Vercel làm ra để dựng ứng dụng AI và agent; repo vercel/ai giới thiệu đây là thư viện miễn phí, mã nguồn mở, đến từ đội ngũ tạo ra Next.js. Bài công bố AI SDK 5 ngày 31/7/2025 của Lars Grammel, Nico Albanese và Josh Singh cho biết thư viện có hơn 2 triệu lượt tải mỗi tuần.

Với người làm FDE, điều đáng giá hơn con số ấy là một hoàn cảnh rất quen: khách hàng muốn thấy sản phẩm chạy được ngay tuần này, trong khi họ chưa quyết dùng model của ai. AI SDK được thiết kế cho đúng tình huống đó.

## Một API chung cho mọi nhà cung cấp

README mô tả AI SDK là bộ công cụ "provider-agnostic", tức không gắn với một nhà cung cấp model nào. Phần lõi, AI SDK Core, gom bốn việc vào một API: sinh văn bản, sinh object có cấu trúc, gọi tool và dựng agent. Theo trang Providers and Models, giao diện thống nhất này cho phép đổi nhà cung cấp mà vẫn giữ nguyên cách gọi.

Bài công bố AI SDK 5 nói cụ thể hơn: chuyển sang nhà cung cấp khác chỉ cần sửa một dòng. Theo README, request mặc định đi qua Vercel AI Gateway, nên bạn có thể truyền model dưới dạng một chuỗi đơn giản. Nếu muốn gọi thẳng nhà cung cấp, có các package riêng như @ai-sdk/openai, @ai-sdk/anthropic và @ai-sdk/google.

Ở phía giao diện, README liệt kê React, Svelte, Vue, Angular và Next.js là các framework được hỗ trợ. Nhờ vậy, một FDE vừa dựng backend agent vừa làm màn hình chat có thể viết cả hai đầu bằng một ngôn ngữ.

## Thử dựng một agent tra cứu đơn hàng

Thử hình dung bạn đang làm cho một công ty logistics. Họ muốn nhân viên chăm sóc khách hàng gõ "đơn 4471 đang ở đâu?" và nhận câu trả lời dựa trên dữ liệu thật, không phải câu trả lời do model tự bịa.

Tài liệu định nghĩa tool là một object mà model có thể gọi để làm một việc cụ thể. Khi model quyết định cần tool, nó phát ra một tool call; nếu tool có hàm execute, SDK tự chạy hàm đó. Phác thảo dưới đây chỉ minh hoạ cấu trúc của agent, tên hàm và tham số chính xác bạn hãy đối chiếu với tài liệu trên ai-sdk.dev.

```ts
// Phác thảo cấu trúc, không phải mã chạy được nguyên văn
const traCuuDon = {
description: 'Tra vị trí hiện tại của một đơn hàng theo mã đơn',
execute: async ({ maDon }) => goiApiNoiBo(maDon), // API của khách hàng
};

const ketQua = await chayAgent({
model: '/', // dòng duy nhất cần sửa khi đổi model
tools: { tra_cuu_don: traCuuDon },
stopWhen: /* điều kiện dừng, ví dụ sau một số bước */,
prompt: 'Đơn 4471 đang ở đâu?',
});
```

Bài học đầu tiên nằm ở dòng description: model dựa vào đó để chọn tool, nên mô tả mơ hồ sẽ khiến nó gọi sai hoặc không gọi. Bài học thứ hai nằm ở execute, nơi agent chạm vào hệ thống thật của khách hàng; hãy xử lý cả trường hợp mã đơn không tồn tại, thay vì để model tự đoán.

Bài học thứ ba là vòng lặp. Một agent có thể gọi tool, đọc kết quả, rồi gọi tiếp mãi không dừng. AI SDK 5 bổ sung hai cơ chế kiểm soát vòng lặp là stopWhen và prepareStep; lời khuyên thực tế là luôn đặt một điều kiện dừng qua stopWhen trước khi cho agent chạm vào dữ liệu thật.

Sau cùng, bạn bật streaming để câu trả lời hiện ra dần thay vì xuất hiện một lần sau vài chục giây. Nếu tuần sau khách hàng đổi nhà cung cấp vì giá hoặc vì chính sách dữ liệu, bạn chỉ sửa dòng khai báo model. Tool, vòng lặp và giao diện đều giữ nguyên.

**Điểm mấu chốt:** Đổi model chỉ mất một dòng code, còn kiểm chứng chất lượng sau khi đổi vẫn là việc của bạn.

## Thư viện này không giải quyết được gì?

Cùng một API không có nghĩa là các model trả lời giống nhau. Bạn sửa một dòng là đổi được nhà cung cấp, nhưng mỗi model chọn tool theo cách khác và viết câu trả lời theo phong cách khác. Vì thế, mỗi lần đổi model, hãy chạy lại bộ câu hỏi kiểm thử trước khi báo khách hàng rằng mọi thứ vẫn ổn.

Đường đi của dữ liệu là câu hỏi thứ hai bạn nên đặt ra sớm. Request mặc định đi qua Vercel AI Gateway, nên với khách hàng trong ngành tài chính hay y tế, hãy hỏi ngay từ đầu họ có chấp nhận một lớp trung gian hay không. Nếu không, các package gọi thẳng nhà cung cấp là hướng đi an toàn hơn.

Cuối cùng là ngôn ngữ. Đây là bộ công cụ TypeScript, nên nếu đội kỹ thuật của khách hàng làm hoàn toàn bằng Python, thêm một stack mới có thể tốn công bảo trì hơn lợi ích nó mang lại. Hãy hỏi rõ đội nào sẽ giữ đoạn mã này sau khi bạn rời đi rồi mới đề xuất.

## Nên học gì trước?

Thứ tự hợp lý là tool trước, vòng lặp sau, streaming cuối cùng. Phần tool là nơi agent chạm vào hệ thống thật của khách hàng, nên cũng là nơi dễ phát sinh lỗi nhất. Khi đã viết được hàm execute đáng tin cậy, stopWhen và prepareStep sẽ dễ hiểu hơn nhiều.

Với CV, một dòng ghi "dùng AI SDK" không nói lên nhiều. Hãy mô tả kết quả, chẳng hạn: "dựng agent không phụ thuộc nhà cung cấp, chuyển giữa hai model mà không phải viết lại logic tool, giới hạn vòng lặp bằng stopWhen".

Khi đọc mô tả công việc FDE, hãy để ý các cụm như "multi-model", "streaming UI" hay "TypeScript agents", vì đó là những chỗ kỹ năng này được dùng trực tiếp.

Chọn model thường chỉ là quyết định tạm thời của khách hàng, còn tool và vòng lặp kiểm soát bạn viết cho họ sẽ được dùng lâu hơn nhiều.

**Thử ngay tuần này:**

- Viết một agent nhỏ có một tool tra cứu dữ liệu giả, có hàm execute, và dùng stopWhen để giới hạn số bước của vòng lặp.
- Chạy cùng một prompt trên hai nhà cung cấp, chẳng hạn @ai-sdk/openai và @ai-sdk/anthropic, rồi ghi lại khác biệt về chất lượng và độ trễ.
- Đọc trang Providers and Models trên ai-sdk.dev, sau đó lập danh sách câu hỏi về nhà cung cấp và đường đi của dữ liệu để mang tới buổi họp kỹ thuật kế tiếp với khách hàng.

## Nguồn

- [AI SDK by Vercel](https://ai-sdk.dev/docs/introduction)

- [vercel/ai (GitHub)](https://github.com/vercel/ai)

- [Providers and Models](https://ai-sdk.dev/docs/foundations/providers-and-models)

- [Streaming](https://ai-sdk.dev/docs/foundations/streaming)

- [Tools](https://ai-sdk.dev/docs/foundations/tools)

- [AI SDK 5](https://vercel.com/blog/ai-sdk-5)
