Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 1 — Coding Agent là gì và vì sao vòng lặp là trái tim

Đã đọc 0/7 mục · còn khoảng 3 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Một coding agent không phải là một chatbot trả lời câu hỏi lập trình. Nó là một chương trình biết tự hành động trên máy của bạn: đọc file, sửa code, chạy test, đọc log lỗi rồi sửa tiếp — cho tới khi hoàn thành mục tiêu. Điểm khác biệt cốt lõi so với việc dán câu hỏi vào ChatGPT là: agent đóng vòng lặp (loop) giữa "suy nghĩ" (LLM) và "hành động" (tool).

Kiến trúc tối giản nhưng đầy đủ

Mọi coding agent nghiêm túc đều gồm 4 khối:

  • LLM — bộ não, nhận ngữ cảnh và quyết định bước tiếp theo.
  • Tools — tay chân: read_file, write_file, run_command, list_dir...
  • Vòng lặp điều phối (agent loop) — vòng while gọi LLM, thực thi tool LLM yêu cầu, đưa kết quả trở lại LLM.
  • Bộ nhớ hội thoại (message history) — danh sách message tích lũy để LLM "nhớ" đã làm gì.
Sai lầm phổ biến của người mới là nghĩ agent phức tạp. Thực tế, phần lõi có thể viết trong ~50 dòng.

Vòng lặp agent bằng pseudocode

messages = [system_prompt, user_task]
while True:
    reply = llm(messages, tools=TOOLS)
    messages.append(reply)
    if reply.tool_calls:
        for call in reply.tool_calls:
            result = run_tool(call.name, call.args)
            messages.append(tool_result(call.id, result))
        continue          # quay lại cho LLM đọc kết quả
    else:
        print(reply.text)  # LLM không gọi tool nữa => xong
        break

Hãy đọc kỹ dòng continue: đây chính là "trái tim". Khi LLM gọi tool, ta không dừng lại hỏi người dùng — ta chạy tool, nhét kết quả vào history rồi để LLM tự quyết bước kế. Đó là điều biến một lời gọi API đơn lẻ thành một tác nhân biết làm việc nhiều bước.

Ví dụ cụ thể: yêu cầu "Sửa lỗi hàm chia cho 0"

  • User: "File math.py bị crash khi chia cho 0, sửa giúp."
  • LLM gọi read_file("math.py") → agent đọc file, trả nội dung.
  • LLM thấy hàm divide(a, b) thiếu kiểm tra → gọi write_file với bản vá.
  • LLM gọi run_command("python -m pytest") → agent chạy test.
  • Test pass → LLM ngừng gọi tool, trả lời "Đã sửa và test xanh".
Toàn bộ chuỗi này xảy ra tự động trong vòng lặp, không cần bạn bấm nút giữa từng bước.

Khung tư duy: Perceive → Decide → Act → Observe (PDAO)

  • Perceive: agent thu thập ngữ cảnh (đọc file, list thư mục).
  • Decide: LLM chọn hành động tiếp theo.
  • Act: thực thi tool.
  • Observe: đưa kết quả (kể cả lỗi) trở lại LLM.
Mỗi vòng lặp là một chu kỳ PDAO. Agent giỏi = chu kỳ PDAO chặt, quan sát trung thực (không giấu lỗi), và có điều kiện dừng rõ ràng.

Checklist khởi động dự án

  • [ ] Đã chọn một LLM hỗ trợ tool/function calling (không phải model text thuần).
  • [ ] Đã định nghĩa tối thiểu 3 tool: đọc file, ghi file, chạy lệnh.
  • [ ] Có vòng while với điều kiện dừng (không tool call ⇒ dừng).
  • [ ] Có giới hạn số vòng lặp tối đa (chống loop vô hạn).
  • [ ] Ghi log mỗi bước để debug được.

Sai lầm thường gặp

  • Coi agent như một prompt khổng lồ. Nhồi hết mọi thứ vào một prompt rồi mong LLM tự làm là ảo tưởng. Sức mạnh nằm ở vòng lặp nhiều lượt, không ở prompt dài.
  • Quên đưa kết quả tool trở lại LLM. Nếu bạn chạy tool nhưng không append kết quả vào messages, LLM sẽ "mù" và lặp lại hành động cũ.
  • Không giới hạn số vòng lặp. Agent có thể kẹt vòng lặp vô tận khi gặp lỗi nó không hiểu, đốt token và tiền.
  • Dừng sai thời điểm. Dừng ngay sau lời gọi tool đầu tiên (thiếu continue) khiến agent chỉ làm được một bước rồi "đơ".
Ở bài sau, ta sẽ dựng môi trường và viết lời gọi LLM có tool đầu tiên.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi