Series 1 - Bài 1: CLI là môi trường lý tưởng để học Agent

CLI loại bỏ toàn bộ noise của UI/UX và infrastructure để lộ core agent mechanics. Bài này giải thích tại sao bắt đầu với CLI là chiến lược đúng để hiểu sâu agent design.

Nghe bài viết này dưới dạng podcast

Khi học agent design, môi trường bạn chọn để thực hành quyết định tốc độ và độ sâu bạn hiểu được cơ chế.

CLI không phải lựa chọn vì nó đơn giản. CLI là lựa chọn vì nó transparent — mọi thứ xảy ra đều visible, không có layer nào ẩn phía sau framework hay UI component.

Ba môi trường và accidental complexity của chúng

Khi build một agent, bạn có thể chọn nhiều môi trường khác nhau. Mỗi môi trường mang theo một lượng accidental complexity nhất định — tức là độ phức tạp không liên quan đến core mechanics mà bạn đang cố học.

 Accidental Complexity so sánh

 Web App:
   HTTP server setup
   Authentication
   Session management
   WebSocket streaming
   Frontend rendering
   CORS, CSP, cookies
   ──────────────────
   Core agent mechanics  ← chìm giữa đây

 API Service:
   REST/GraphQL layer
   Request validation
   Response serialization
   Rate limiting
   Deployment
   ──────────────────
   Core agent mechanics  ← vẫn bị che khuất

 CLI:
   readline input
   stdout output
   ──────────────────
   Core agent mechanics  ← lộ ra hoàn toàn

Với Web App hay API service, bạn phải setup và maintain nhiều thứ không liên quan trước khi chạm được vào phần thú vị. Với CLI, bạn có thể viết 50 dòng và đã có một working agent loop.

CLI expose đúng những gì cần học

1. Agentic Loop thuần túy

Không có event loop của framework, không có async middleware chain, không có request lifecycle. Bạn viết loop, bạn kiểm soát loop:

While user có task:
  Build context
  Gọi LLM
  Nếu LLM muốn dùng tool → thực thi → loop lại
  Nếu LLM trả lời xong → hiển thị → đợi input tiếp

Bạn thấy chính xác flow, không phải abstraction của flow.

2. Tool Execution trực tiếp

Khi LLM trả về tool_use block, bạn xử lý nó trực tiếp. Không có middleware, không có plugin system được xây sẵn. Bạn phải viết dispatcher, bạn phải handle errors, bạn phải trả result đúng format. Đây là cách học tool calling thực sự — bằng cách tự implement từng bước.

3. Context Management visible

Trong CLI, messages[] array của bạn hoàn toàn transparent. Bạn có thể in ra, debug, inspect bất cứ lúc nào. Bạn thấy context grow sau mỗi turn, thấy token count tăng, thấy tại sao cần phải manage budget.

4. SSE Streaming raw

CLI force bạn parse raw SSE stream từ Anthropic API. Đây là skill quan trọng vì nó giúp bạn hiểu streaming không phải magic — nó là chunked text với specific format mà bạn phải handle.

CLI không representative — và đó không phải vấn đề

Một phản đối hợp lý: CLI agent khác xa production web agent. Đúng. Nhưng đây là điểm quan trọng:

┌──────────────────────────────────────────────┐
│           Core mechanics                     │
│   (giống nhau giữa CLI và production)        │
│                                             │
│   Agentic loop       ✓ học được từ CLI      │
│   Tool calling       ✓ học được từ CLI      │
│   Context mgmt       ✓ học được từ CLI      │
│   Prompt engineering ✓ học được từ CLI      │
│   Error handling     ✓ học được từ CLI      │
└──────────────────────────────────────────────┘

┌──────────────────────────────────────────────┐
│           Production concerns               │
│   (thêm vào sau, không học từ CLI)          │
│                                             │
│   Multi-user isolation                      │
│   Authentication & authorization            │
│   Horizontal scaling                        │
│   WebSocket connection management           │
│   Distributed tracing                       │
└──────────────────────────────────────────────┘

Core mechanics không thay đổi khi bạn move từ CLI sang production. Những gì thay đổi là infrastructure xung quanh — và infrastructure dễ học hơn nhiều khi bạn đã hiểu mechanics.

Học production concerns trước core mechanics là thứ tự ngược. Bạn sẽ cargo-cult framework mà không hiểu tại sao.

Trade-off của CLI approach

CLI không phải lựa chọn hoàn hảo cho mọi trường hợp.

CLI phù hợp khi:

  • Mục tiêu là học cơ chế hoạt động của agent
  • Cần iterate nhanh trên design decisions
  • Build internal tool chỉ dùng cho developer
  • Proof of concept trước khi commit vào architecture lớn hơn

CLI không phù hợp khi:

  • End user không phải developer
  • Cần multi-user với isolation
  • Cần deployment và monitoring
  • Cần UI/UX phức tạp

Nhưng trong context của series này — học agent design để build enterprise system — CLI là điểm khởi đầu đúng.

Kết luận

  • CLI loại bỏ accidental complexity, để lộ core agent mechanics.
  • Agentic loop, tool calling, context management — tất cả đều học được từ CLI mà không cần framework.
  • Core mechanics giữa CLI và production agent là giống nhau — chỉ infrastructure xung quanh thay đổi.
  • Học mechanics trước, infrastructure sau — không phải ngược lại.
  • CLI là sandbox, không phải destination — mục tiêu là carry knowledge sang production system.

Chưa có bình luận

Để lại bình luận

Bình luận sẽ được phê duyệt trước khi hiển thị.

Nhận bài viết mới

Mình sẽ gửi email khi có bài mới. Không spam.