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.pyvàtests/test_tax.pytrướ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àmsend_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".
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ì.