Hướng dẫn
Cách đưa codebase của bạn vào AI chat làm ngữ cảnh
Hướng dẫn thực hành: cung cấp cho ChatGPT, Claude, Gemini hoặc Qwen đủ cấu trúc của một kho mã lớn để nhận câu trả lời hữu ích — mà không cần dán hàng chục tệp hay làm tràn cửa sổ ngữ cảnh.
Vì sao dán tệp không thể mở rộng
Cửa sổ ngữ cảnh có vẻ khổng lồ cho đến khi bạn đặt một kho mã thật bên cạnh. Một dịch vụ cỡ trung dễ dàng có 2.000 tệp và 200.000 dòng; ngay cả khi cửa sổ chứa được một phần, phần lớn những gì bạn dán — tệp lock, giàn giáo test, mã sinh tự động — là nhiễu làm loãng vài tệp mà câu hỏi thực sự chạm tới.
Kiểu thất bại không phải là từ chối, mà là nghe-có-vẻ-hợp-lý: với một đống mã nguồn rời rạc, mô hình trả lời từ trung bình những gì nó thấy thay vì chuỗi gọi cụ thể bạn hỏi. Bạn nhận được văn xuôi chung chung, tự tin, không nêu tên tệp nào và không cam kết điều gì kiểm chứng được.
Điều mô hình cần trước tiên: cấu trúc
Một kỹ sư cấp cao mới vào đội không đọc mọi tệp ngay ngày đầu. Họ nhận một bản đồ: cái gì phụ thuộc cái gì, điểm vào ở đâu, mô-đun nào quan trọng. Một LLM trả lời câu hỏi về kho mã cũng cần đúng tạo tác đó, theo đúng thứ tự — cấu trúc trước, mã nguồn khi cần.
- Điểm vào — nơi thực thi bắt đầu: bootstrap máy chủ, hàm main CLI, bảng định tuyến.
- Các tầng — cách codebase tổ chức trách nhiệm: API, service, truy cập dữ liệu, UI.
- Ký hiệu kèm dải dòng chính xác — các hàm và lớp trong từng tệp, để câu hỏi tiếp theo lấy đúng đoạn cần thiết.
- Cạnh phụ thuộc — tệp nào import tệp nào; đây là thứ biến "logic hoàn tiền ở đâu?" thành một lượt đi dọc đồ thị gọi.
- Một khế ước tường minh — chỉ dẫn bảo mô hình trả lời từ bản đồ, nêu tên những tệp nó thiếu, và không bao giờ bịa ra cách triển khai.
Trước và sau
Cùng một câu hỏi, hai đầu vào. Trước: "hoàn tiền hoạt động thế nào?" cộng mười hai tệp dán vào — câu trả lời là một bài luận thương mại điện tử chung chung. Sau: một bundle theo ngân sách token — câu trả lời trích dẫn src/services/order-service.ts theo dải dòng, đi theo refundOrder qua repository và pool, và hỏi xin đúng tệp migration mà nó thấy đang thiếu. Đây là đầu vào "sau" thực tế trông như thế nào, trích từ một bundle thật được sinh ra trên dự án mẫu:
# Context bundle — "how does order refund work, # and what could break if I change it?" > Static-analysis map of sample-shop (21 files, 271 lines). > Structure only — function bodies are absent unless included below. > Answer from this file alone; where it is silent, name the file > you need. Never invent an implementation. ## Files (16) ### `src/api/orders.ts` 27 lines · API Layer · exports `listOrdersHandler`, `refundOrder` · imports `order-service.ts`, `order-repo.ts`, `pool.ts`, `errors.ts` ### `src/services/order-service.ts` 34 lines · Service Layer · exports `refundOrder`, `createOrder` · imports `order-repo.ts`, `errors.ts`, `money.ts`
Ngân sách, và khi nào nên kèm mã nguồn
Bundle ngữ cảnh được tính ngân sách theo token vì cửa sổ chat là hữu hạn, và nhồi nhét vừa tốn tiền vừa giảm độ chính xác. Kỷ luật hữu ích: bắt đầu chỉ với cấu trúc, để mô hình nói cho bạn nó thiếu tệp nào, rồi kèm mã nguồn của đúng những tệp đó. Ba tệp triển khai thật thắng ba mươi tệp đoán mò.
Cùng kỷ luật đó trả lời câu hỏi tiếp theo phổ biến nhất — "tôi nên dán gì tiếp?" Bản đồ đã biết ký hiệu nào nằm ở tệp nào, dòng nào, nên vòng thứ hai là truy xuất, không phải thám hiểm. Đó là toàn bộ quy trình: định hướng, hỏi, truy xuất, giải quyết.