8 điểm bởi GN⁺ 2025-08-24 | 2 bình luận | Chia sẻ qua WhatsApp
  • Claude Code là một AI agent/quy trình làm việc cực kỳ xuất sắc về mặt khả năng sử dụng
  • Nhờ sự đơn giản về kiến trúcvòng lặp điều khiển rõ ràng, nó mang lại trải nghiệm dễ gỡ lỗi và bảo trì
  • Bằng cách giảm thiểu việc áp dụng RAG và tích cực tận dụng prompt tinh chỉnh cùng các tệp ngữ cảnh, nó tối đa hóa thế mạnh của LLM
  • Duy trì độ rõ ràng và tính nhất quán trong công việc thông qua nhiều công cụ (tool)hướng dẫn rõ ràng
  • Thay vì theo đuổi sự phức tạp, nó có ưu điểm là có thể giúp bạn tự triển khai một LLM agent tương tự bằng cấu trúc dễ hiểu và thiết kế prompt

Tổng quan

  • Claude Code (sau đây gọi là CC) mang lại trải nghiệm hài lòng nhất trong số các AI agent/quy trình làm việc lập trình hiện có
  • Điểm mạnh của CC nằm ở chỉnh sửa mã đúng mục tiêu, giảm bớt gián đoạn không cần thiết, và mang đến UX dễ chịu nhờ vẫn giữ quyền kiểm soát cho người dùng
  • Mô hình Claude 4 và cơ chế Interleaved Thinking đặc trưng đóng vai trò cốt lõi, nhưng ngay cả khi so với các công cụ khác cùng dùng mô hình tương tự như Cursor hay Github Copilot, nó vẫn gây ít phiền toái hơn
  • Bài viết này mổ xẻ nguyên lý triển khai của CC và cung cấp hướng dẫn thực chiến để xây dựng LLM agent riêng có thể đem lại trải nghiệm tương tự

Đức tính cốt lõi của Claude Code: sự đơn giản

  • Bài học lớn nhất là “hãy giữ mọi thứ đơn giản (Keep Things Simple, Dummy)
  • Với LLM agent, nếu đưa vào các cấu trúc phức tạp như multi-agent, RAG phức tạp, hệ thống kiểm chứng..., việc gỡ lỗi và cải tiến sẽ trở nên cực kỳ khó khăn
  • CC áp dụng một vòng lặp chính duy nhất, bộ công cụ đơn giản, cấu trúc có thể nắm bắt ngay, và đặt toàn bộ logic cốt lõi trong một tệp để loại bỏ boilerplate và độ phức tạp không cần thiết

Vì sao sự đơn giản lại quan trọng

  • Thay vì kiến trúc multi-agent, nó xử lý phần lớn công việc trong một luồng chính
    • Các phần như tóm tắt lịch sử hay hợp nhất thông điệp phục vụ UX chỉ được áp dụng ở dạng bổ trợ
    • Khi cần xử lý việc phức tạp, nó tự sao chép chính mình để tách thành sub-agent (không có phân nhánh đệ quy, chỉ cho phép một cấp)
  • Tích cực sử dụng danh sách việc cần làm (todo list)
    • Các vấn đề phức tạp được chia nhỏ và xử lý ở sub-agent, nhưng kết quả được hợp nhất trở lại vào lịch sử thông điệp chính
    • Những cấu trúc đa tầng quá trừu tượng như multi-agent hay điều hướng đồ thị ngược lại có nguy cơ làm giảm độ ổn định và khả năng mở rộng của hệ thống

Tích cực tận dụng mô hình gọn nhẹ

  • Sử dụng các mô hình LLM gọn nhẹ như claude-3-5-haiku cho phần lớn yêu cầu
    • Xử lý hiệu quả nhiều tác vụ như đọc tệp lớn, phân tích trang web, tóm tắt lịch sử git
    • Khi dùng mô hình gọn nhẹ, chi phí có thể giảm tới 70–80%
    Quảng cáo
  • Khuyến nghị sử dụng tổ hợp mô hình được tối ưu hóa cho mọi lệnh gọi chức năng chính

Thiết kế prompt tinh vi

  • Prompt hệ thống của CC có quy mô rất lớn (khoảng 2800 tokens) và gồm nhiều phần khác nhau (tone & style, quản lý công việc, chính sách dùng công cụ, thông tin OS/thư mục...)
    • Luôn bao gồm toàn bộ các tệp ngữ cảnh như claude.md để tối đa hóa độ phong phú của ngữ cảnh
    • Prompt hệ thống hướng dẫn rất chi tiết về các quy tắc mang tính chính sách, ví dụ minh họa, điểm cần lưu ý, thời điểm dùng công cụ...

Kết hợp đồng thời XML và Markdown

  • Trong prompt, XML tag và cấu trúc Markdown được dùng cùng lúc
    • Truyền đạt thông tin chi tiết và điều kiện phân nhánh bằng các thẻ như <system-reminder>, <good-example>, <bad-example>
    • Phân chia section rõ ràng bằng markdown heading

Tầm quan trọng của tệp ngữ cảnh

  • Chỉ riêng việc có hay không có claude.md cũng tạo ra khác biệt hiệu năng rất lớn cho CC
    • Đây là yếu tố thiết yếu để truyền đạt các quy tắc bổ sung khó suy ra từ codebase (loại trừ thư mục/thư viện, chính sách ưu tiên...)
    • MinusX cũng đang hệ thống hóa sở thích của nhóm/người dùng bằng minusx.md
Quảng cáo

Giảm thiểu RAG, tận dụng tìm kiếm bằng LLM

  • Thay vì RAG (Retrieval Augmented Generation), CC ưu tiên cấu trúc dựa trên tìm kiếm mã trực tiếp bằng các lệnh như ripgrep, jq, find, giống như một lập trình viên thực thụ
    • Đây là phương án thay thế cho các khả năng thất bại ẩn xuất phát từ cấu hình RAG phức tạp (ví dụ: hàm tương đồng, re-ranker, chunking)
    • Vì LLM trực tiếp khám phá và hiểu ngữ cảnh mã thật, số lượng thành phần chuyển động được giảm xuống, đồng thời còn có thể kỳ vọng hiệu quả tốt hơn trong huấn luyện RL

Thiết kế công cụ (tool) và cấu trúc phân tầng

  • CC hỗ trợ đầy đủ các công cụ mức thấp (Bash, Read, Write), mức trung bình (Edit, Grep, Glob), và mức cao (Task, WebFetch, v.v.)
    • Các công cụ cần thiết được tách riêng dựa trên tần suất sử dụng, độ chính xác...
    • Mô tả, ví dụ, thời điểm sử dụng của từng tool được nêu rõ trong prompt hệ thống
  • Công việc phức tạp được quản lý nhất quán thông qua Task hoặc các tool cấp cao

Quản lý Todo tường minh để tránh mất ngữ cảnh

  • Để giải quyết vấn đề điển hình của LLM agent chạy dài hạn (mất ngữ cảnh, lạc hướng), CC quản lý trạng thái bằng danh sách Todo được duy trì trực tiếp
    • Thay vì hệ thống multi-agent, mô hình tự chủ cập nhật Todo để vừa giữ được định hướng công việc vừa đảm bảo tính linh hoạt
Quảng cáo

Kiểm soát tone, style và mức độ thân thiện của agent

  • Tone, style, mức độ chủ động... được quản lý ở các section riêng
    • Thiết kế trải nghiệm người dùng nhất quán với các quy tắc như hạn chế giải thích không cần thiết, chỉ cho phép emoji khi được yêu cầu rõ ràng
  • Dùng các từ nhấn mạnh mạnh như “IMPORTANT”, “NEVER”, “ALWAYS” để truyền đạt điểm cần chú ý

Thiết kế thuật toán phán đoán và luồng xử lý

  • Các thuật toán chính mà LLM phải tuân theo được mô tả rõ ràng và minh họa bằng ví dụ
    • So với việc chỉ liệt kê Do/Don't, lưu đồ và checklist theo từng bước hiệu quả hơn trong việc giữ ổn định thuật toán
    • Cũng tính đến khả năng xung đột giữa nhiều chỉ dẫn và ví dụ, nên phạm vi vai trò và chính sách được nêu rõ một cách có cấu trúc

Mẫu thiết kế và mẹo áp dụng thực chiến

  • Những quan điểm mạnh mẽ và cấu trúc này hoàn toàn có thể được lấy làm chuẩn tham chiếu ngay khi thiết kế agent riêng
    • Thay vì lạm dụng framework khiến mọi thứ rối rắm, điều quan trọng là thiết kế cấu trúc đơn giản nhưng hiệu quả
  • Trên thực tế, MinusX cũng đang áp dụng nhiều nguyên tắc này và có kế hoạch mở rộng dần

Kết luận

  • Bài học lớn nhất từ Claude Code: “Sự đơn giản là sức mạnh lớn nhất”
  • Độ rõ ràng về cấu trúc, thiết kế prompt có ý nghĩa, và tổ hợp công cụ gọn nhẹ là nền tảng tạo nên một LLM agent mạnh mẽ
  • Khi phát triển LLM agent của riêng mình, rất đáng để tham khảo tích cực triết lý thiết kế và các hướng dẫn của CC

2 bình luận

 
kaydash 2025-08-25

Tuyệt quá, hạnh phúc ghê, đỉnh nhất luôn, ngọt ngào quá, muốn tiếp tục mãi

 
GN⁺ 2025-08-24
Ý kiến trên Hacker News
  • Tôi tin rằng sự đơn giản kiểu KISS luôn chiến thắng, và thấy bài viết này rất hữu ích vì đã hệ thống lại điều đó rất tốt

  • Hơi tiếc vì Claude Code không phải mã nguồn mở, nhưng cũng có giới thiệu một số công cụ giúp hiểu rõ hơn cách nó hoạt động; nếu thực sự muốn biết nó vận hành ra sao thì nên thử Claude Trace
    https://github.com/badlogic/lemmy/tree/main/apps/claude-trace
    Công cụ này tạo ra một tệp JSON hiển thị mọi công cụ và prompt đã dùng trong phiên, cùng một tệp HTML được định dạng dễ xem

  • Có ý kiến cho rằng bài này hữu ích vì cho thấy một tổ chức lấy LLM làm trung tâm tiếp cận vấn đề ra sao trong thời điểm các hệ thống đa tác tử đang được chú ý; bản thân người đó cũng đang thử nhiều góc nhìn thiết kế khác nhau trong công việc hằng ngày nên thấy khá đồng cảm
    Các insight chính là
    (1) Prompt dài cũng không sao, và nhất định phải đưa vào phần mô tả cơ bản như mục đích của công cụ hay cách nó hỗ trợ
    (2) Gọi tool chỉ là phần rất sơ khai nên cần phản ánh nhiều ngữ cảnh hơn nữa, chẳng hạn khi nào nên dùng và khi nào không nên dùng
    (3) Quản lý trạng thái hệ thống dưới dạng message là ổn; từng nghĩ đến các cách cầu kỳ hơn như lưu dataframe hay parse biến, nhưng nếu context window đủ dài thì chỉ dùng message cũng đã đủ

    • Prompt dài thì đúng là có lợi, nhưng chỉ khi mô hình được tối ưu để xử lý tốt việc đó; người này đã thử đổi sang các mô hình khác trong Claude Code nhưng gần như không có mô hình local nào làm tốt cả prompt dài lẫn sử dụng tool như quảng cáo
      Cũng đã thử các mô hình như OpenAI, Google Gemini, nhưng cảm giác không tốt bằng các mô hình của Anthropic và còn chậm hơn; prompt càng dài thì càng hay quên tool hoặc trả kết quả sai định dạng
    • (Tác giả bài blog) cho rằng chỉ cần tận dụng tốt các tính năng cơ bản là đã có thể đạt hiệu năng tốt trong gần 99% tình huống; quan trọng là giữ loop đơn giản và cung cấp những tool rõ ràng, kể cả khi chức năng có chồng lấp cũng không sao
      Rõ ràng và đơn giản là ưu tiên cao nhất
  • Có người hỏi Google Gemini, đặc biệt là bản Pro, so với Claude ra sao; họ thích nhiều sản phẩm của Google nhưng lo về việc Google hay khai tử sản phẩm, cách kiểm soát doanh nghiệp như với Chrome, và cả vấn đề kiểm duyệt

    • Gemini đặc biệt xuất sắc khi có thể nạp toàn bộ các file đã merge của cả repository để trò chuyện; mức độ hiểu toàn bộ codebase thật sự rất ấn tượng, và còn hỗ trợ thiết kế kiến trúc rất tốt, điểm này Claude kém hơn khá nhiều
      Chiến lược riêng của người này là dùng Gemini để tạo tóm tắt dự án và kế hoạch thiết kế cấp cao, sau đó dùng gpt5 để tinh chỉnh và thiết kế workflow chi tiết hơn, ví dụ tài liệu XML, rồi chuyển lại cho Claude; chỉ vậy thôi cũng gần như tránh được cảnh Claude loay hoay mất phương hướng
    • Gemini Pro không tệ cho việc lập trình, nhưng theo trải nghiệm thì Claude vượt trội hơn hẳn trong các tác vụ liên quan terminal như CLI; phần lớn các CLI cũng dùng Claude nhiều hơn
      https://www.tbench.ai/leaderboard
    • Với web UI dạng chat thì khá thích Gemini 2.5 Pro, còn ở công cụ dòng lệnh thì Gemini code vô dụng và Claude code thì phần lớn là chậm
    • Gemini giỏi hơn trong việc debug các vấn đề khó phải lần theo nhiều lời gọi hàm; còn Claude thì luôn ổn định, dễ đoán và làm theo chỉ dẫn tốt, đặc biệt giỏi quản lý danh sách việc cần làm
    • Trước đây khá thích, nhưng gần đây lại có cảm giác nó trở nên ngốc hơn một chút, không biết có phải chỉ mình cảm thấy vậy không
  • Có người cho rằng bản thân model nền tảng rất mạnh với công việc lập trình thực tế nên người dùng mới đánh giá cao như vậy, khác với các bài toán benchmark thông thường; chỉ cần dùng GitHub Copilot cũng thấy Claude vượt trội rõ rệt so với các model của OpenAI hay Google, khoảng cách lớn đến mức các model khác gần như trở nên vô dụng trong thực tế

    • Anthropic có thể tối ưu model và prompt nội bộ trong quá trình huấn luyện tăng cường, nên lời khuyên trong bài kiểu “cứ dùng nguyên cách cũ” có lẽ phù hợp với model của Anthropic hơn; mô hình thuê bao cũng tạo động lực mạnh để tối ưu hiệu quả của loop
    • Không thể chỉ giải thích bằng khác biệt ở model nền tảng; khi dùng opus và cline cùng trong VS Code so với dùng Claude Code, khó mà định lượng chênh lệch năng suất một cách cụ thể, nhưng dùng CC thì làm được nhiều việc hơn hẳn
    • Cũng có người thấy nhiều lời khen nên kỳ vọng cao và dùng Claude Code suốt một tháng, nhưng cuối cùng lại chỉ thấy thất vọng; trải nghiệm còn kém hơn sidebar của Cursor, và họ tự hỏi không biết mình dùng sai chỗ nào, vì trên hai codebase khác nhau nó liên tục tạo ra những lỗi code ngớ ngẩn
  • Có người đang dùng Claude Code để debug vấn đề liên quan Elastic trên Security Onion, nhưng cứ vài phút là nó bắt đầu tuôn ra những đoạn JS khó hiểu rồi báo lỗi “Error: kill EPERM”
    Nhìn log thì có vẻ nó giết tiến trình Node.js nên có thể khiến chính Claude cũng chết theo, hoặc như thể không giải được bài toán nên tự thoát luôn
    Dù sao thì nếu tiến trình còn sống được lâu hơn một chút, có lẽ nó đã giúp thêm được nhiều hơn

    • Claude và localstack có vài chỗ không hợp nhau, nhưng với Rust thì lại làm khá ổn
      Người này nghĩ rằng trong tương lai, các ngôn ngữ, nền tảng và kiến trúc mà LLM hiểu rõ nhất sẽ dần chiếm ưu thế; ví dụ nếu LLM xử lý nodejs tốt hơn gấp 10 lần thì ngay từ đầu chọn nodejs thay vì Elixir hay Go cũng là điều hợp lý, và cả lập trình viên junior cũng có thể làm việc như mid-level hoặc senior nhờ LLM hỗ trợ
    • Lỗi đó đôi khi xuất hiện vì bị timeout khi dùng sudo để chạy tiến trình với quyền superuser
    • Cũng có trường hợp chỉ cần nâng cấp bản cài đặt hoặc xóa bộ cài cũ rồi cài lại là giải quyết được; có người đã sửa bằng cách này
    • Có người từng chuyển sang LLM khác để xem rốt cuộc đã xảy ra chuyện gì, dù đây không phải lời khuyên chính thức
    • Có người nói họ chưa từng có kết quả tốt khi kết hợp Elasticsearch với LLM; phần lớn đầu ra chỉ là những “ảo giác” vô căn cứ, có lẽ vì trên Internet không có nhiều ví dụ chuẩn chỉnh
  • Có người nói họ đã xây toàn bộ MVP đầu tiên của startup bằng Claude Code và hiện đã có cả khách hàng trả tiền; tất nhiên vẫn có nỗi lo nền tảng rằng chỉ cần xảy ra một sự cố SEV là mọi thứ có thể sụp đổ rất nhanh, nhưng họ vẫn tiếp tục tích cực dùng Claude cho việc vá lỗ hổng bảo mật, phát triển hướng kiểm thử và thiết kế kiến trúc phần mềm theo lộ trình dài hạn
    Họ hy vọng những câu chuyện như vậy sẽ ngày càng trở nên phổ biến

    • Có người xin chia sẻ link sản phẩm vì tò mò muốn xem các trường hợp dùng thực tế
    • Có câu hỏi đùa rằng “vá lỗ hổng bảo mật” có nghĩa là ngay từ đầu Claude đã viết code và cũng tạo ra luôn các lỗ hổng đó phải không
    • Có người đề nghị giải thích cụ thể bằng ví dụ rằng Claude đã hỗ trợ thế nào trong các phần như phát triển hướng kiểm thử hay thiết kế phần mềm
    • Có người đùa rằng họ đã bảo Claude Code chuyển tiền hằng tháng vào tài khoản ngân hàng và nó thực sự làm được
    • Cũng có phản hồi mong người đó công khai cụ thể đã xây cái gì bằng Claude Code
  • Có ý kiến rằng nếu luận điểm “Keep things simple” là đúng thì cách làm này lại có vẻ hơi phức tạp
    Người đó từ trước đến nay vẫn làm được khá nhiều việc chỉ bằng cách đơn giản là mỗi lần đưa ra một prompt hỏi đúng thứ mình cần
    Họ chưa thật sự tin những cấu trúc phức tạp được bàn tới mang lại thêm giá trị gì so với một prompt được viết cẩn thận
    Ví dụ với kiểu câu hỏi như "cách tạo vòng lặp while trong một ngôn ngữ mới học" thì một câu prompt ngắn có khi lại hiệu quả hơn
    Luồng điều khiển còn khiến họ thấy mơ hồ hơn, và cũng nghi ngờ liệu LLM có thực sự tận dụng tốt phần appendix như tool hay system prompt hay không; nếu yêu cầu quá phức tạp thì có thể một phần sẽ bị bỏ qua hoặc chỉ tốn token
    Với họ, cách lập trình bằng cách ném từng prompt riêng lẻ theo từng mảnh thấy tự nhiên hơn nhiều
    Họ muốn xem thử các ví dụ hay prompt từ những người dùng cách khác
    Cũng tò mò trong thực tế mọi người xây cả một chương trình với LLM như thế nào, và muốn tìm các ví dụ chia nhỏ theo từng prompt để tham khảo

    • Có người nói họ cũng dùng y hệt như vậy nên rất muốn xem câu trả lời của những người khác
  • Nhân tiện, ở cuối bài có link minusx.com nhưng chứng chỉ bảo mật của trang đã hết hạn từ 553 ngày trước, nên trang không còn hợp lệ và cần cẩn thận khi truy cập