Cách chỉ dẫn trợ lý AI dành cho người ngại đánh chữ

Mình là người gõ chữ chậm nên khi lập trình, mình rất cần tính năng autocomplete, để khỏi phải gõ nhiều và gõ nhầm. Khi áp dụng AI vào công việc, có một hạn chế lớn là khung nhập prompt của các phần mềm agent không có tính năng autocomplete. Nghĩa là khi mình muốn trợ lý sửa hàm này hàm kia, mình phải gõ đầy đủ tên hàm tên biến, hoặc copy chúng từ bên ngoài vào, thay vì chỉ cần gõ 2-3 chữ đầu rồi bấm Tab như cách làm việc thuần tuý trên code editor. Vì vậy mình vẫn luôn tìm cách để có thể lôi được code editor vào quy trình làm việc với agent AI, tận dụng lợi thế của code editor và đã tìm được phương án tạm ổn.

Trước khi bàn đến phương pháp này thì cũng xin hé lộ là nhu cầu autocomplete cũng đã được giải quyết phần nào với một số agent ở chế độ dòng lệnh. Ví dụ trên Crush, Crush cho phép gọi text editor bên ngoài để nhập prompt (với phím tắt Ctrl + o):

Crush-using-external-editor

Khi đó mình chỉ cần cấu hình chọn code editor là Helix để tận dụng tính năng autocomplete một từ đã nhập trước đó để đỡ công gõ. Trong trường hợp này thì Helix bị tách ra khỏi ngữ cảnh source code của dự án nên nó chỉ gợi ý được từ đã nhập chứ không gợi ý được hàm biến trong source code.

Ngoài Crush thì Toad, Kimi CLI (bản Python) cũng cho phép gọi editor bên ngoài để viết prompt.

Còn cách thật sự mình muốn trình bày trong bài này, đó là viết chỉ dẫn ngay trong source code!

Khi yêu cầu trợ lý AI làm tính năng hơi bự bự tí, mà nó liên quan đến việc sửa đổi code ở nhiều nơi, nhiều file, thì mình thấy rằng, hướng dẫn trợ lý nhảy đến file nào, dòng nào, hàm nào thì cũng mất công. Thế là, thay vì diễn tả trong khung nhập prompt, thì mình sẽ viết comment TODO ở ngay nơi nào cần sửa trong source code. Ví dụ:

LLM prompt from source code - 1

Trong khối comment TODO này, thay vì một lời ghi nhớ ngắn gọn thông thường, mình sẽ viết chi tiết một chút để trợ lý AI hiểu điều mong muốn và cách làm. Khi viết trong comment thì cũng chỉ tận dụng được tính năng từ đã nhập thôi, không có tính năng autocomplete với các toán tử (như đối với dấu chấm "." để truy cập vào field), nhưng vẫn hơn cách không dùng editor ở chỗ tận dụng được tính năng nhảy cóc, chọn từ nhanh của editor để sao chép tên hàm, tên biến gần đó. Nếu tính năng cần làm liên quan đến thay đổi nhiều chỗ trong source code thì mình cũng tạo thêm các khối comment TODO ở những chỗ đó.

Cơ sở của phương pháp này là, sau khi viết xong comment TODO, nếu ta dùng lệnh git diff, ta sẽ thấy được một bức tranh toàn cảnh về những nơi cần thay đổi source code, biết được file nào, dòng nào và chỉ dẫn tương ứng thế nào luôn.

git-diff-view-todo

Dựa vào đó, câu prompt ta nhập vào agent chỉ cần là: "Hãy chạy git diff để xem các yêu cầu TODO rồi thi hành đi".

tell-agent-to-view-diff

Vậy đó, sau khi nhìn vào đầu ra của git diff, trợ lý AI có thể đọc được yêu cầu, nhận đủ ngữ cảnh, bắt đầu suy nghĩ và phun ra được danh sách các đầu việc cần làm và code:

AI-agent-suggested-code

Công việc hoàn tất

AI-agent-finished

Trong hình thì trợ lý AI mất 17 phút để làm là tại vì có mấy lần nó dừng lại để xin phép ghi file, xin phép chạy lệnh nhưng mình mải làm việc khác không để ý để cho phép.

Đó là cách chỉ dẫn để sửa code, còn chỉ dẫn review thì sao, với một người lười gõ? Cách làm là mình viết sẵn một file .agents/REVIEW.md trong thư mục dự án, với nội dung như sau:

Check for:

- Potential wrong logic.
- Missed code path.
- Code convention violation (rules in .github/instructions/ folder).

Sau đó trong ô nhập prompt thì mình chỉ cần ra lệnh: "Review uncommitted changes per @.agents/REVIEW.md" (chỗ "@" thì tận dụng tính năng autocomplete đường dẫn file của agent thôi).

Short-review-prompt

Chỉ câu prompt ngắn này thôi nhưng trợ lý AI làm được việc ra trò, cũng bắt được lỗi này lỗi kia.

Short-review-result

Về file mình dề cập trong bài viết thì, mình quy ước các file dành cho trợ lý AI đọc (như skills) sẽ nằm trong thư mục con ".agents" của dự án. Không đặt theo tên agent (như .crush, .kimi) vì các lập trình viên sẽ có sở thích khác nhau về agent, nên chọn tên .agents cho trung tính. Tên file REVIEW.md vì mình thấy Goose sẽ tự động tìm file tên này khi gọi lệnh goose review.

Trước khi kết bài thì có lưu ý nhỏ, Helix v25.7 chưa có tính năng autocomplete từ đã nhập, mà phiên bản mới thì chưa phát hành. Để dùng được tính năng này thì mình biên dịch Helix từ mã nguồn trong Git.

Có thể bạn thắc mắc, mình hay nhận mình là người gõ phím nhưng trong bài mình toàn dùng Terminal và chế độ dòng lệnh. Agent thì dùng agent dòng lệnh, code editor cũng là Helix. Ấy là tại vì trong môi trường dòng lệnh cũng có autocomplete mạnh mẽ lắm, nên mình cũng đâu cần gõ nhiều đâu. Ngay cả để chọn một khối source code để chép, dán thì mình cũng dùng phím tắt "m a ..." của Helix chứ cũng không phải dùng chuột để quét, chọn, giữ, rê đâu, mỏi vai lắm.

Nếu bạn định giới thiệu mình dùng các bộ skill này nọ trên mạng thì, mình cũng đã thử rồi, nhưng không vừa ý vì các bộ skill đó viết dài dòng quá, mình có cảm giác là chúng được viết rườm rà, đủ mục này mục kia để "hù doạ" người đọc thôi. Những skill dài dòng như vậy tốn nhiều token và khiến trợ lý AI làm đi làm lại một số việc trùng lặp, vừa tốn thời gian, tốn CPU (gọi tool nhiều lần) rồi cuối cùng lại đốt token hơn nữa. Mình thích lời văn súc tích ngắn gọn nên là... bỏ, tìm cách khác.