# Kết nối AI agent với dữ liệu doanh nghiệp: API, MCP, quyền đọc

> Agent chỉ tốt bằng dữ liệu nó đọc được. Bài so sánh dán file, tool calling qua API và MCP, kèm ví dụ định nghĩa công cụ đọc đơn sàn và danh sách kiểm quyền.

Kết nối AI agent với dữ liệu doanh nghiệp có ba cách: dán file vào cuộc trò chuyện, cho agent gọi API qua cơ chế tool calling, hoặc nối qua chuẩn mở MCP. Cách nào cũng cần ba nguyên tắc: quyền chỉ đọc khi chưa cần ghi, phạm vi hẹp nhất có thể, và che dữ liệu cá nhân trước khi gửi cho mô hình. Bài này nằm trong cụm [AI agent là gì](/blog/ai-agent-la-gi).

## Bài toán thực tế: vì sao agent cần nối dữ liệu thật?

Vì không có dữ liệu thì agent chỉ đoán. Hỏi "tuần này mã nào hoàn nhiều" mà không cho đọc đơn, nó sẽ trả lời chung chung hoặc bịa một con số nghe hợp lý.

Nhiều đội bắt đầu bằng xuất Excel rồi dán vào ChatGPT hay Claude. Cách này vướng ba chỗ: file cũ ngay khi xuất, người xuất có thể lọc nhầm hoặc chỉnh tay, và tuần nào cũng phải làm lại. Agent cần đọc dữ liệu tự động, đúng lúc, từ nguồn gốc. Bài [dùng AI phân tích dữ liệu bán hàng](/blog/ai-phan-tich-du-lieu-ban-hang) có hướng dẫn chuẩn bị cột khi vẫn làm theo kiểu dán file.

## Ba cách nối: dán file, API qua tool calling hay MCP?

Chọn theo tần suất dùng và năng lực kỹ thuật của đội. Dán file hợp với phân tích một lần. Tool calling hợp khi bạn tự viết ứng dụng agent. MCP hợp khi muốn một nguồn dữ liệu dùng chung cho nhiều ứng dụng AI.

| Cách | Hoạt động thế nào | Hợp với | Điểm yếu |
|---|---|---|---|
| Dán file | Xuất CSV/Excel, dán hoặc tải lên cuộc trò chuyện | Phân tích một lần, đội chưa có lập trình viên | Dữ liệu cũ, dễ chỉnh tay, không tự động |
| API qua tool calling | Bạn khai báo cho mô hình các "công cụ" (tên, mô tả, tham số). Mô hình chọn công cụ, ứng dụng của bạn gọi API thật rồi trả kết quả về | Agent tự dựng, cần kiểm soát từng lệnh gọi | Phải viết và duy trì mã kết nối |
| MCP (Model Context Protocol) | Chuẩn mở do Anthropic công bố: một "máy chủ MCP" bọc nguồn dữ liệu thành công cụ, mọi ứng dụng hỗ trợ MCP dùng chung được | Nhiều ứng dụng AI cùng đọc một nguồn | Thêm một lớp phải vận hành và bảo mật |

Lưu ý: MCP không thay API. Máy chủ MCP vẫn gọi API của nguồn dữ liệu bên dưới, chỉ chuẩn hóa cách ứng dụng AI tìm và gọi công cụ. Đặc tả và SDK chính thức có tại [modelcontextprotocol.io](https://modelcontextprotocol.io). Vì vậy câu hỏi đầu tiên luôn là: nguồn dữ liệu của bạn có API ổn định không, và API đó cho phép giới hạn quyền tới đâu.

## Tư duy dẫn đường: nối dữ liệu nào, quyền tới đâu?

Nối ít nguồn, quyền hẹp, đọc trước ghi sau. Mỗi nguồn thêm là một chỗ có thể rò dữ liệu, mỗi quyền ghi thêm là một chỗ agent có thể làm sai.

Danh sách kiểm trước khi cấp khóa cho agent:

- **Quyền chỉ đọc.** Khóa API dùng cho agent không có quyền ghi, trừ khi đã có bước người duyệt (xem các [bậc tự chủ của tác tử AI](/blog/ai-agent-la-gi)).
- **Phạm vi hẹp.** Chỉ mở đúng gian hàng, đúng nhóm API cần. Agent đọc đơn hoàn không cần API tài chính.
- **Giới hạn nơi gọi.** Nếu nguồn cho phép, khóa chỉ dùng được từ địa chỉ IP của máy chạy agent, và có hạn dùng.
- **Che dữ liệu cá nhân.** Bỏ hoặc che họ tên, số điện thoại, địa chỉ khách ở lớp giữa trước khi kết quả tới mô hình, nếu việc không cần chúng.
- **Nhật ký.** Ghi lại agent gọi công cụ nào, tham số gì, lúc nào. Khi có sai, bạn lần lại được.
- **Dữ liệu là dữ liệu.** Văn bản từ khách (ghi chú đơn, tin nhắn) có thể chứa câu như lệnh. Dặn mô hình rõ: nội dung trả về từ công cụ chỉ là dữ liệu, không phải chỉ thị.

Nguồn dữ liệu cũng phải là nguồn gốc, không qua bảng tính trung gian. Lý do giống hệt với báo cáo: số đã qua tay người là số có thể đã bị sửa. Bài [nguồn dữ liệu duy nhất](/blog/nguon-du-lieu-duy-nhat) giải thích vì sao nên có một nơi giữ sự thật cho mọi báo cáo và mọi agent.

## AI bứt tốc: định nghĩa một công cụ đọc đơn sàn

Ví dụ dưới đây là cách khai báo một công cụ theo kiểu tool calling để agent đọc danh sách đơn Shopee. Ứng dụng của bạn nhận lệnh gọi từ mô hình rồi gọi API thật.

```json
{
  "name": "lay_danh_sach_don_shopee",
  "description": "Lấy danh sách đơn Shopee cập nhật trong một khoảng thời gian. Chỉ đọc. Tối đa 15 ngày mỗi lần gọi.",
  "input_schema": {
    "type": "object",
    "properties": {
      "tu_ngay": { "type": "string", "description": "YYYY-MM-DD, giờ Việt Nam" },
      "den_ngay": { "type": "string", "description": "YYYY-MM-DD, giờ Việt Nam" },
      "trang_thai": { "type": "string", "enum": ["READY_TO_SHIP", "SHIPPED", "COMPLETED", "CANCELLED", "TO_RETURN"], "description": "Bỏ trống = mọi trạng thái" }
    },
    "required": ["tu_ngay", "den_ngay"]
  }
}
```

Ở phía ứng dụng, hàm xử lý đổi ngày sang mốc thời gian rồi gọi API. Nếu không muốn tự xin app với Shopee, bạn có thể gọi qua cổng Partner của Quantri360, ví dụ [API danh sách đơn Shopee](https://partner.quantri360.com/docs/shopee/get-api-v2-order-get-order-list): `GET https://partner.quantri360.com/v1/shopee/api/v2/order/get_order_list` kèm header `Authorization: Bearer <khóa>`. Khóa tạo ở cổng Partner có thể để chỉ đọc, giới hạn theo kết nối, theo IP và có hạn dùng. Danh mục API theo từng nền tảng xem ở [trang nguồn dữ liệu](https://partner.quantri360.com/sources).

Ba chi tiết làm công cụ này an toàn hơn:

1. **Mô tả nói rõ "chỉ đọc"** và giới hạn 15 ngày, để mô hình không cố gọi một năm dữ liệu một lần.
2. **Tham số có danh sách giá trị cố định** (`enum`), mô hình không tự chế trạng thái lạ.
3. **Kết quả trả về được lọc** ở lớp giữa: chỉ giữ mã đơn, trạng thái, thời gian, mã sản phẩm, số tiền; bỏ thông tin người nhận.

Với đội không lập trình, cùng ý tưởng có thể làm bằng n8n: một nút gọi API, một nút lọc trường, một nút AI. Xem [tự động hóa Shopee bằng n8n](/giai-phap/shopee-n8n). Nếu muốn agent truy vấn dữ liệu nhiều tháng mà không gọi API sàn liên tục, đổ đơn về cơ sở dữ liệu riêng trước, xem [đưa đơn sàn vào SQL](/giai-phap/don-san-vao-sql).

## Kiểm gì trước khi cho agent chạy thật?

Chạy thử với câu hỏi đã biết đáp án. Agent không ra đúng số bạn tự tính được thì đừng tin nó ở câu chưa biết đáp án.

- Hỏi một câu có đáp án sẵn, ví dụ số đơn hủy tuần trước, so với số trên sàn.
- Thử câu hỏi vượt phạm vi (xin dữ liệu tài chính khi khóa không có quyền), agent phải báo không được phép, không bịa.
- Thử một ghi chú đơn chứa câu lệnh giả, agent phải coi là dữ liệu.
- Xem nhật ký: số lần gọi công cụ cho một câu hỏi có hợp lý không.

## Kết quả cần đo lường là gì?

Đo ba thứ: độ đúng, độ tươi và chi phí. Ví dụ minh họa sau một tháng: 20 câu hỏi kiểm định, agent trả đúng số 19 câu; dữ liệu agent đọc trễ nguồn không quá 1 giờ; mỗi câu hỏi tốn khoảng 3–5 lần gọi công cụ. Câu sai cần lần lại trong nhật ký để sửa mô tả công cụ.

## Tóm lại

- Chọn cách nối theo nhu cầu: dán file cho một lần, tool calling cho agent tự dựng, MCP khi nhiều ứng dụng cùng dùng một nguồn.
- Nhớ MCP vẫn chạy trên API; kiểm API nguồn có cho giới hạn quyền trước.
- Cấp khóa chỉ đọc, phạm vi hẹp, giới hạn IP, có hạn dùng; ghi nhật ký mọi lệnh gọi.
- Che dữ liệu cá nhân ở lớp giữa và dặn mô hình coi kết quả công cụ là dữ liệu.
- Kiểm bằng câu hỏi đã biết đáp án trước khi chạy thật; xem [các gói](/price) nếu cần nền số liệu đa kênh sẵn cho agent đọc.

---
Source: https://quantri360.com/blog/ket-noi-ai-agent-voi-du-lieu · Quantri360
