Product Management
Đăng nhập
ESC

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

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

Bài 4 — Chọn lọc và nạp đúng code: retrieval cho coding agent

Đã đọc 0/9 mục · còn khoảng 4 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.

Vấn đề: agent cần thấy đúng code, không phải nhiều code

Sau khi có file chỉ dẫn bền, bước tiếp theo là nạp đúng code liên quan vào context cho từng tác vụ. Đây là retrieval. Làm tốt: agent sửa đúng chỗ, đúng phong cách. Làm ẩu (nạp cả repo hoặc nạp thiếu): agent bịa hoặc lạc.

Ba chiến lược retrieval

  • Grep/search theo ký hiệu — agent tìm định nghĩa hàm/biến liên quan rồi chỉ đọc đoạn đó.
  • Đọc theo đồ thị phụ thuộc — mở file cần sửa + các file nó import trực tiếp + nơi gọi nó.
  • Chỉ điểm thủ công — bạn nói thẳng: "Đọc services/tax.py và tests/test_tax.py trước khi sửa."

Ví dụ cụ thể

Tác vụ: "Sửa lỗi tính giảm giá sai khi mua > 10 sản phẩm."

Cách kém: dán cả thư mục services/ (20 file, 40K token). Agent loãng, đọc nhầm hàm.

Cách tốt:

1. grep "discount" src/  -> tìm ra tính ở services/pricing.py:apply_discount
2. Đọc apply_discount + hàm gọi nó (checkout_service)
3. Đọc test hiện có tests/test_pricing.py
4. Sửa, chạy pytest tests/test_pricing.py

Agent chỉ thấy ~3 file liên quan trực tiếp — tín hiệu cao, sửa đúng, verify được ngay.

Kỹ thuật "đọc trước khi ghi"

Luôn buộc agent đọc code hiện có trước khi sửa. Đây là cách mạnh nhất chống bịa: khi agent thấy apply_discount đã tồn tại và nhận Decimal, nó sẽ không tự tạo hàm mới nhận float.

Quy tắc vàng: KHÔNG viết code chạm tới một module
nếu chưa đọc code hiện tại của module đó.

Các bước nạp context cho một tác vụ sửa lỗi

  • Xác định triệu chứng và từ khóa (tên hàm, thông báo lỗi).
  • Cho agent grep để định vị chính xác nơi liên quan.
  • Đọc: file gốc + nơi gọi + test liên quan.
  • Yêu cầu agent tóm tắt hiểu biết trước khi sửa ("bug nằm ở đâu, vì sao").
  • Sửa tối thiểu, chạy test đúng phạm vi.
  • Dọn các file không còn liên quan khỏi context.

Khung quyết định "đọc file này không?"

File có bị tác vụ này sửa/ảnh hưởng? -> ĐỌC
File định nghĩa hàm/kiểu ta đang dùng? -> ĐỌC
File là test của phần đang sửa?      -> ĐỌC
File chỉ "cho biết thêm"?             -> BỎ QUA (nhiễu)

Checklist retrieval

  • [ ] Đã grep định vị chính xác trước khi đọc cả file
  • [ ] Đã đọc code hiện có trước khi sửa
  • [ ] Đã nạp test liên quan
  • [ ] Không nạp file thừa "cho chắc"
  • [ ] Agent đã xác nhận hiểu đúng vấn đề trước khi ghi

Retrieval cho tính năng mới (chưa có code để sửa)

Khi thêm tính năng hoàn toàn mới, bạn không có "file cần sửa", nhưng vẫn cần retrieval — lần này là để học phong cách và mẫu hiện có. Cách làm:

  • Grep một tính năng tương tự đã tồn tại (ví dụ đã có send_reset_email, sắp làm send_welcome_email).
  • Đọc tính năng mẫu đó từ đầu đến cuối: nó đặt file ở đâu, gọi service nào, viết test ra sao.
  • Yêu cầu agent làm tính năng mới "theo đúng khuôn của mẫu này".
Bằng cách này, code mới hòa vào dự án như thể do chính team viết, thay vì một hòn đảo lạc lõng với phong cách riêng. "Học từ mẫu" là dạng retrieval giá trị nhất khi không có gì để sửa trực tiếp.

Sai lầm thường gặp

  • Nạp cả thư mục/repo — nhiễu cao, tốn token, agent bám chi tiết sai.
  • Sửa mà không đọc code cũ — nguồn số 1 của việc agent bịa API/hàm không tồn tại.
  • Quên nạp test — agent sửa xong không có cách kiểm chứng, dễ báo "xong" khi vẫn sai.
  • Đọc file rồi để rác trong context — sau khi xong tác vụ con, nên bỏ file cũ để nhường chỗ.
  • Tin vào tên file — tên gợi ý một chuyện, code làm chuyện khác; luôn đọc để chắc.
  • Làm tính năng mới mà không tham chiếu mẫu — dễ tạo code lạc phong cách, khó bảo trì.
Retrieval đúng là lá chắn đầu tiên chống ảo giác. Bài sau: cấu trúc prompt cho tác vụ code.

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