- Bài toán: ba cách build trên Claude (Agent SDK, Claude API, Claude Code) nghe rất giống nhau, chọn sai là làm thừa hoặc kẹt lúc bàn giao.
- Giải pháp: phân biệt bằng một mental model — ai lo agent loop (harness) và ai lo hạ tầng (deployment) — rồi tra ma trận theo tình huống delivery.
- Kết quả: một khung chọn nhanh cho từng tình huống, cộng checklist đưa agent lên production.
Chọn nhanh: cần kiểm soát từng bước và nhúng AI vào sản phẩm của mình thì dùng Claude API; cần một agent tự đọc/sửa file, chạy lệnh ngay trên hạ tầng của mình (script, CI/CD, tự động hoá) thì dùng Claude Agent SDK; cần làm việc tương tác trong terminal thì dùng Claude Code; không muốn tự ôm hạ tầng agent thì để Managed Agents (Anthropic host). Phần dưới là ma trận theo từng tình huống delivery, cộng checklist khi đưa lên production.
TL;DR (Executive Summary)
- Bài toán: Agent SDK, Claude API và Claude Code nghe giống nhau đến mức dễ chọn theo cảm tính — và cái giá của chọn sai thường không hiện ra lúc code, mà lúc bàn giao hoặc lúc hoá đơn token về.
- Giải pháp: Đừng so theo "cái nào xịn hơn". So theo hai câu hỏi: ai viết agent loop (harness) và ai lo hạ tầng chạy nó (deployment). Hai trục đó phân loại sạch cả bốn lựa chọn.
- Kết quả: Một ma trận chọn theo tình huống thật (POC cho khách, tự động hoá nội bộ, sản phẩm giao khách, CI/CD, compliance) + checklist production.
Ba thứ này thực ra khác nhau ở đâu (góc delivery)
Tài liệu chính thức mô tả từng thứ rất rõ, nhưng khi đứng ở vai người phải chọn và bàn giao, tôi thấy chỉ cần hai câu hỏi là đủ tách bạch:
- Ai viết agent loop? — tức cái vòng lặp "Claude gọi tool → mình chạy tool → trả kết quả → Claude quyết bước tiếp", cộng phần quản lý context khi hội thoại dài. Gọi tắt là harness.
- Ai lo hạ tầng chạy nó? — process, máy, sandbox, nơi lưu trạng thái phiên. Gọi tắt là deployment.
Chiếu theo hai trục đó:
- Claude API (Messages API, kèm Tool Runner) — bạn định nghĩa tool, SDK (hoặc chính bạn) lo vòng lặp, và bạn tự host. Không có sẵn built-in tools, không có sandbox. Đây là mức "ít phép thuật nhất": bạn kiểm soát từng bước, đổi lại tự lắp mọi thứ.
- Claude Agent SDK — Claude Code được đóng gói thành thư viện (
claude_agent_sdkcho Python,@anthropic-ai/claude-agent-sdkcho TypeScript). Nó mang theo nguyên harness của Claude Code: agent loop, context management, và bộ built-in tools (Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch…), cộng hooks, subagents, permissions, sessions. Bạn chỉ đưa prompt + cấu hình, nhưng vẫn tự host (chạy trong process của bạn). - Claude Code — cùng harness đó, nhưng là CLI tương tác để gõ trong terminal. Cùng năng lực Agent SDK, khác ở giao diện.
- Managed Agents — Anthropic lo cả harness lẫn deployment: chạy agent loop trên hạ tầng của Anthropic và cấp một sandbox cho mỗi phiên. Bạn gửi event, nhận kết quả qua REST.
Điểm hay dịch sai nhất: Agent SDK không phải Tool Runner của Claude API. Tool Runner (client.beta.messages.tool_runner trong SDK anthropic / @anthropic-ai/sdk) chỉ là một helper mỏng tự chạy vòng lặp cho những tool bạn tự định nghĩa — không có built-in tool, không đụng filesystem. Agent SDK (claude-agent-sdk) là cả cỗ máy Claude Code. Hai package khác nhau, hai tầng khác nhau.
Bậc thang từ bạn kiểm soát nhiều → Anthropic lo nhiều:
| Lựa chọn | Bạn viết gì | Ai lo agent loop | Ai host |
|---|---|---|---|
| Claude API — manual loop | cả vòng lặp + tool | bạn | bạn |
| Claude API — Tool Runner | chỉ hàm tool | SDK (helper mỏng) | bạn |
| Claude Agent SDK | prompt + cấu hình | SDK (harness Claude Code) + built-in tools | bạn |
| Claude Code (CLI) | gõ lệnh tương tác | sản phẩm sẵn | bạn (máy bạn) |
| Managed Agents | agent config + kết quả tool | Anthropic | Anthropic (sandbox mỗi phiên) |
Càng xuống dưới, bạn càng giao nhiều phần (trước là agent loop, sau là cả hạ tầng) cho Anthropic — đổi kiểm soát lấy tiện lợi.
Trước khi chọn: việc này có thực sự cần agent không?
Câu hỏi bị bỏ qua nhiều nhất. Agent (nhiều bước, tự gọi tool, tự quyết) tốn token gấp bội và khó đoán hơn một request thẳng. Tôi chỉ đẩy một việc lên mức "agent" khi nó thoả cả bốn:
- Nhiều bước & khó đặc tả trước — kiểu "biến cái design doc này thành PR" chứ không phải "trích tiêu đề từ PDF".
- Đáng tiền — kết quả bù được chi phí và độ trễ cao hơn.
- Claude làm được — đúng loại việc mô hình mạnh.
- Sai còn cứu được — có test, review, rollback để bắt lỗi.
Thiếu một cái là tụt xuống mức đơn giản hơn: một request Claude API (phân loại, tóm tắt, trích xuất, hỏi–đáp) hoặc một workflow do bạn cầm nhịp. Đây là điều mấy bài "X là gì" hiếm khi nói, nhưng đứng ở vai delivery thì nó tiết kiệm nhất: không dựng agent cho việc một câu SQL giải quyết xong.
Ma trận quyết định theo tình huống delivery
Đây là phần tôi dùng thật khi chốt hướng cho một hạng mục. Trục chính là tình huống delivery, không phải tiêu chí kỹ thuật trừu tượng — vì cái quyết định cuối cùng thường là "ai vận hành nó sau khi mình rời đi", chứ không phải "cái nào nhiều tính năng hơn".
| Tình huống | Nên dùng | Vì sao (góc delivery) | Tiêu chí kỹ thuật |
|---|---|---|---|
| Dựng POC/demo nhanh để chốt scope với khách | Claude Code (CLI) | Tương tác tức thì, đổi hướng ngay trong buổi họp, không phải viết một dòng code hạ tầng nào | one-off, interactive |
| Nhúng AI thành một tính năng trong sản phẩm của mình, cần output đúng khuôn & kiểm soát chặt | Claude API (+ Tool Runner) | Chỉ mở đúng tool cần, không kéo theo cả bộ built-in filesystem tool; kiểm soát và test được từng bước | harness bạn giữ, tool tự định nghĩa |
| Tự động hoá tác vụ lặp cho team, chạy trên máy/CI của mình | Claude Agent SDK | Agent cần đọc/sửa file thật + chạy lệnh trên hạ tầng mình; harness có sẵn nên khỏi tự lắp vòng lặp | self-host, built-in tools |
| Pipeline CI/CD: review PR, sinh code, chạy migration | Claude Agent SDK (headless) | Chạy không tương tác; có hooks để chặn/ghi log hành động trước khi nó xảy ra | SDK, non-interactive + hooks |
| Sản phẩm agent giao khách tự vận hành, phiên chạy dài/bất đồng bộ, không muốn ôm sandbox | Managed Agents | Anthropic lo agent loop + sandbox từng phiên + versioning; mình khỏi vận hành hạ tầng đó | harness + deployment do Anthropic |
| Khách (đặc biệt khách Nhật) yêu cầu dữ liệu không rời hạ tầng | Claude Agent SDK self-host | Chạy trong process của mình, thao tác file trên hạ tầng của mình → dễ chứng minh data residency | self-host, kiểm soát egress |
Một cách đọc ma trận cho gọn: nội bộ, chạy trên hạ tầng mình → Agent SDK; nhúng vào sản phẩm, cần control → Claude API; tương tác nhanh → Claude Code; không muốn ôm hạ tầng → Managed Agents.
Vài chỗ dễ vấp mà chỉ thấy khi làm thật
- Agent SDK dùng một request đơn giản đến ngạc nhiên. Bản chất là
query(prompt, options)trả về một luồng message. Nhưng "đơn giản để chạy" không có nghĩa "đơn giản để cho lên production" — xem checklist dưới. - Auth: không dùng được đăng nhập claude.ai cho sản phẩm bên thứ ba. Agent SDK cho sản phẩm của bạn phải dùng API key (hoặc Bedrock/Vertex/Foundry). Nghĩa là mỗi khách/mỗi agent là một dòng chi phí token bạn phải theo dõi từ đầu, đừng để cuối dự án mới phát hiện.
- Trạng thái phiên của Agent SDK là file JSONL trên filesystem của bạn. Rất tiện để resume/fork, nhưng khi bàn giao phải trả lời được: ai backup, ai xoá, giữ bao lâu. Managed Agents thì trạng thái nằm ở event log do Anthropic host — đổi tiện lấy quyền kiểm soát.
- Ràng buộc thương hiệu. Sản phẩm build trên Agent SDK không được đặt tên/nhận diện là "Claude Code". Nghe nhỏ, nhưng là điều cần chốt với khách trước khi in lên UI.
Checklist đưa agent lên production
Chọn đúng công cụ mới là một nửa. Nửa còn lại — cũng là chỗ farm content không chạm tới — là đưa nó lên production mà không nổ chi phí hay mất kiểm soát. Với Agent SDK / Claude Code, tôi soi sáu điểm:
- Least-privilege cho tool. Khai báo
allowed_tools(Python) /allowedTools(TS) đúng những gì cần; chặn hẳn bằngdisallowed_tools. Một agent chỉ để đọc thì đừng bậtBashvàEdit. Đây là ranh giới an toàn, không phải chi tiết cấu hình. - Chặn chi phí token. Agent loop tốn gấp bội request thường. Đặt trần số vòng, chọn đúng tầng model cho đúng việc (đừng dùng model mạnh nhất cho mọi bước), tận dụng prompt caching cho phần context cố định.
- Human-in-the-loop cho hành động khó đảo ngược. Dùng hook
PreToolUseđể chặn/hỏi trước khi agent chạy lệnh xoá, push, gọi API bên ngoài. Cùngpermission_modeđể quyết mức tự động. - Observability. Hook
PostToolUseghi audit log mỗi lần sửa file/chạy lệnh. Khi có sự cố, "agent đã làm gì" phải tra được, không phải đoán. - Auth & billing tách theo khách. API key server-side, theo dõi chi phí per-khách ngay từ ngày đầu. Đây là dữ liệu bạn sẽ cần khi báo giá vòng sau.
- Kịch bản bàn giao. Ai vận hành sau khi mình rời đi? Session JSONL lưu ở đâu, model đổi giá thì ai chịu, ai giữ API key. Trả lời được mấy câu này trước khi ship thì agent mới thực sự "xong".
Kết
Agent SDK, Claude API và Claude Code không xếp hạng hơn–kém; chúng nằm trên một bậc thang: càng lên cao càng giao nhiều phần (agent loop, rồi hạ tầng) cho Anthropic, đổi kiểm soát lấy tiện lợi. Chọn đúng là chọn đúng nấc cho đúng tình huống — và luôn kèm câu hỏi "việc này có cần agent không" ở đầu, "ai vận hành nó sau bàn giao" ở cuối.
Muốn đi sâu từng mảnh: bức tranh tổng thể khi build trên nền tảng Claude nằm ở ghi chú khoá Claude Platform 101; cơ chế Messages API và tool use ở Building with the Claude API; Claude Code ở Claude Code 101; còn subagents (thứ Agent SDK tái dùng) ở Introduction to Subagents. Toàn bộ lộ trình gom ở /learn/claude.
Câu hỏi thường gặp
Claude Agent SDK khác Claude API (Messages API) ở đâu?
Với Claude API bạn tự viết vòng lặp tool và tự thực thi từng tool. Claude Agent SDK đóng gói sẵn agent loop và bộ built-in tools (Read, Write, Edit, Bash, Grep, WebSearch...) giống Claude Code; bạn chỉ đưa prompt và cấu hình. Đổi lại, bạn kiểm soát từng bước ít hơn.
Agent SDK có phải là Claude Code không?
Cùng một harness, khác giao diện. Claude Code là CLI để dùng tương tác trong terminal; Agent SDK là thư viện Python/TypeScript để nhúng chính harness đó vào ứng dụng, script hoặc pipeline CI/CD của bạn.
Khi nào KHÔNG nên dùng agent?
Khi việc chỉ một bước và mô tả được trọn vẹn từ trước (phân loại, tóm tắt, trích xuất, hỏi–đáp), một request Claude API là đủ. Agent chỉ đáng dùng khi việc nhiều bước, khó đặc tả hết và cần Claude tự quyết hành động.
Khách yêu cầu dữ liệu không rời hạ tầng thì chọn gì?
Claude Agent SDK chạy ngay trong process của bạn và thao tác file trên hạ tầng của bạn, nên hợp yêu cầu data residency hơn Managed Agents — vốn chạy trên sandbox do Anthropic host.