AILapTrinh.comAI Lập Trình
Hiểu trợ lý viết mã

Gợi ý mã tự động bằng AI hoạt động thế nào: vì sao lúc đúng ý, lúc gợi ý vô lý

Gợi ý mã tự động bằng AI lấy gì để đoán, vì sao có lúc chậm, lúc lặp lại mã cũ hay bịa tên biến, và cách viết mã để gợi ý trúng ý bạn hơn.

Close-up of hands typing on a mechanical keyboard at night, blurred laptop screen glow, iced coffee and a desk lamp on a home desk in Hanoi, shallow depth of field

Gợi ý mã tự động bằng AI hoạt động bằng cách gửi đoạn mã quanh con trỏ của bạn, cả phần phía trên lẫn phía dưới, cho một mô hình ngôn ngữ để nó đoán phần còn thiếu ở giữa. Kết quả hiện lên dạng chữ mờ ngay tại chỗ bạn đang gõ; bấm một phím là chấp nhận, gõ tiếp là bỏ qua. Toàn bộ vòng đó phải xong trong khoảng thời gian ngắn hơn nhịp gõ của bạn, nên công cụ phải chọn gửi rất ít và dùng mô hình đủ nhanh.

Chính những ràng buộc đó giải thích vì sao gợi ý có lúc trúng đến bất ngờ, có lúc lại đề nghị một tên biến chẳng hề có trong dự án. Hiểu cơ chế giúp bạn viết mã theo cách "dễ đoán" hơn cho AI, và biết lúc nào nên tắt gợi ý để tự nghĩ.

Điền vào giữa: vì sao gợi ý biết cả phần mã phía dưới

Mô hình ngôn ngữ gốc chỉ đoán chữ tiếp theo từ trái sang phải. Nhưng khi bạn viết mã, con trỏ thường nằm giữa tệp: phía trên có khai báo, phía dưới có những hàm đang gọi tới hàm bạn sắp viết. Để tận dụng cả hai phía, các mô hình dùng cho gợi ý mã thường được huấn luyện thêm theo kiểu điền vào giữa (fill-in-the-middle): đoạn mã được cắt làm ba phần, phần đầu và phần cuối đưa vào, mô hình học viết lại phần giữa. Kỹ thuật này được mô tả công khai trong các công bố nghiên cứu từ khoảng năm 2022 và nay phổ biến ở các mô hình chuyên cho mã.

Nhờ vậy, nếu phía dưới con trỏ đã có dòng gọi tinh_phi_van_chuyen(don, tinh_thanh), gợi ý cho phần khai báo hàm sẽ có đúng hai tham số đó. Nếu bạn xoá dòng gọi đi, gợi ý có thể đổi hẳn. Đây là lý do một mẹo đơn giản lại hiệu quả: viết dòng gọi hàm hoặc viết dòng chú thích mô tả trước, rồi quay lên viết thân hàm, AI có nhiều manh mối hơn để đoán đúng.

Khác gì với tự hoàn thành kiểu cũ của trình soạn thảo

Trước khi có AI, trình soạn thảo đã có tự hoàn thành: gõ tên đối tượng và dấu chấm là hiện danh sách phương thức. Hai thứ này hiện cạnh nhau nên dễ lẫn, nhưng nguồn gốc khác hẳn.

Tiêu chíTự hoàn thành kiểu cũGợi ý bằng AI
Lấy thông tin từ đâuPhân tích mã thật: khai báo, kiểu dữ liệu, thư viện đã càiMô hình đoán theo những gì đã học cộng gói ngữ cảnh được gửi
Độ dài gợi ýMột tên: một hàm, một biến, một từ khoáCó thể cả dòng, cả khối, cả hàm
Có bịa khôngGần như không, vì chỉ liệt kê thứ thật sự tồn tạiCó thể, khi ngữ cảnh thiếu hoặc mô hình nhầm thư viện
Cần mạng khôngKhông, chạy trên máyThường có, trừ khi dùng mô hình cục bộ

Hệ quả thực tế: khi hai loại gợi ý mâu thuẫn, danh sách của tự hoàn thành kiểu cũ đáng tin hơn về chuyện tên nào có thật. Nhiều người dùng chính danh sách đó để kiểm nhanh một tên hàm lạ trong gợi ý AI: gõ tên đối tượng và dấu chấm, xem tên đó có nằm trong danh sách hay không.

Gói ngữ cảnh nhỏ được chọn trong vài phần nhỏ của giây

Mỗi lần bạn dừng gõ một chút, phần mở rộng trong trình soạn thảo phải quyết định gửi gì. Nó không thể gửi cả dự án, vì vừa chậm vừa tốn. Cách làm phổ biến là lấy một khúc mã trên và dưới con trỏ, cộng thêm vài mẩu từ những tệp có khả năng liên quan: tệp đang mở ở thẻ bên cạnh, tệp được nhập (import) ở đầu tệp hiện tại, những đoạn có tên giống với chỗ bạn đang gõ. Mỗi công cụ có cách chọn riêng và thường không công bố chi tiết, nên điều bạn nắm được chỉ là nguyên tắc chung: thứ gì gần con trỏ và gần trong không gian làm việc thì dễ được gửi.

Từ đó có một hệ quả thực tế. Khi bạn đang viết hàm dùng lớp DonHang mà tệp định nghĩa lớp đó không mở, gợi ý dễ bịa ra thuộc tính như don.tong_tien trong khi thuộc tính thật là don.thanh_tien. Mở tệp định nghĩa ở một thẻ bên cạnh thường đủ để gợi ý chuyển sang tên đúng. Không phải phép màu, chỉ là bạn vừa đưa đúng mảnh ghép vào gói ngữ cảnh.

Cũng vì gói ngữ cảnh nhỏ, gợi ý dòng gần như không bao giờ hiểu kiến trúc tổng thể. Nó không biết dự án quy định mọi truy vấn cơ sở dữ liệu phải đi qua một lớp riêng, hay mọi chuỗi hiển thị phải qua hàm dịch. Những quy ước này chỉ được giữ nếu mã quanh con trỏ đã làm đúng như vậy, để AI bắt chước theo.

Vì sao gợi ý có lúc nhanh, lúc chậm, lúc im lặng

Người dùng hay phàn nàn rằng gợi ý "lúc có lúc không". Phần lớn trường hợp có lý do kỹ thuật dễ hiểu, và nhiều cái bạn chỉnh được.

Hiện tượngLý do thường gặpBạn làm được gì
Gợi ý hiện chậm, gõ xong mới thấyMạng chậm hoặc máy chủ đông, mỗi gợi ý cần một vòng gửi và nhậnKiểm kết nối, thử lại lúc khác; nếu thường xuyên, xem tuỳ chọn độ trễ hoặc mô hình nhanh hơn trong cài đặt
Không có gợi ý nào ở một số tệpCông cụ tắt gợi ý với loại tệp đó hoặc tệp nằm trong danh sách loại trừXem phần cài đặt theo ngôn ngữ và danh sách thư mục bị loại
Gợi ý dừng giữa chừng một khốiCông cụ giới hạn độ dài mỗi gợi ý để giữ tốc độChấp nhận phần đầu rồi gõ tiếp, gợi ý mới sẽ nối theo
Gợi ý lặp lại đoạn mã ngay phía trênMô hình thấy khuôn lặp trong ngữ cảnh và đoán rằng nó lặp tiếpViết chú thích nói rõ điểm khác của đoạn mới trước khi gõ
Gợi ý dùng thư viện dự án không cóMô hình theo thói quen phổ biến, không biết tệp khai báo phụ thuộcMở tệp khai báo phụ thuộc hoặc viết sẵn dòng nhập thư viện đúng

Các tuỳ chọn cụ thể nằm ở đâu thì tuỳ công cụ và đổi theo phiên bản, nên khi cần hãy xem tài liệu chính thức của công cụ bạn đang dùng. Nguyên lý ở cột giữa thì gần như giống nhau ở mọi nơi.

Viết mã sao cho gợi ý đoán trúng hơn

Đặt tên rõ nghĩa. Tên hàm loc_don_chua_thanh_toan nói với mô hình gần hết những gì nó cần. Tên xuly2 thì không nói gì, và gợi ý sẽ là một đoạn chung chung.

Viết chú thích ý định ngay trên chỗ cần mã. Một dòng như "bỏ qua đơn đã huỷ, cộng phí giao hàng theo tỉnh, làm tròn tới nghìn đồng" thường cho gợi ý sát hơn nhiều so với để trống. Chú thích này còn giữ lại cho người đọc sau.

Viết khai báo kiểu khi ngôn ngữ cho phép. Gợi ý kiểu dữ liệu trong Python, kiểu trong TypeScript, kiểu tham số trong PHP cho mô hình biết chính xác dữ liệu là gì. Đây là manh mối rẻ mà hiệu quả cao.

Viết mẫu đầu tiên bằng tay. Khi có năm đoạn xử lý giống nhau, tự viết đoạn đầu cẩn thận, đúng quy ước dự án. Bốn đoạn sau gợi ý thường bắt chước đúng khuôn đó.

Giữ tệp ngắn và một việc. Tệp ba nghìn dòng trộn đủ thứ làm gói ngữ cảnh quanh con trỏ chứa nhiều thứ không liên quan. Tệp nhỏ, mỗi tệp một trách nhiệm, vừa dễ đọc cho người vừa dễ đoán cho AI.

Khi nào nên tắt gợi ý hoặc giảm bớt

Gợi ý dòng hữu ích nhất khi bạn đã biết mình định viết gì và chỉ muốn gõ nhanh hơn. Ngược lại, khi bạn còn đang nghĩ thuật toán, chữ mờ hiện liên tục dưới con trỏ có thể kéo bạn theo hướng của AI trước khi bạn kịp nghĩ hướng của mình. Nhiều lập trình viên có kinh nghiệm tắt gợi ý khi viết phần lõi khó, như xử lý tiền, phân quyền hay đồng bộ dữ liệu, rồi bật lại khi viết phần lặp khuôn.

Người mới học lập trình càng nên cân nhắc. Nếu bạn đang học cách viết vòng lặp, việc AI điền sẵn cả vòng lặp làm bạn mất đúng phần luyện tập cần thiết. Cách cân bằng là tắt gợi ý trong các bài tập, chỉ dùng khung trò chuyện để hỏi khi bí, và yêu cầu nó giải thích chứ không đưa đáp án.

Một trường hợp nữa là tệp chứa thông tin nhạy cảm. Gợi ý dòng gửi đoạn mã quanh con trỏ lên máy chủ của hãng mỗi khi bạn gõ. Nếu bạn đang sửa tệp cấu hình có mật khẩu thật, hoặc tệp chứa dữ liệu mẫu là dữ liệu khách hàng thật, hãy dùng tính năng loại trừ thư mục hoặc tạm tắt gợi ý. Tốt hơn nữa là không để thông tin thật trong những tệp đó ngay từ đầu.

Thói quen đọc gợi ý trước khi bấm chấp nhận

Vì phím chấp nhận quá tiện, lỗi từ gợi ý dòng thường không phải do AI sai nhiều mà do người dùng bấm quá nhanh. Một vài điều nên liếc qua mỗi lần:

  • Tên hàm, tên thuộc tính trong gợi ý có thật trong dự án hoặc thư viện không. Trình soạn thảo gạch đỏ hoặc không gợi ý định nghĩa khi bạn trỏ chuột vào là dấu hiệu bị bịa.
  • Điều kiện so sánh: lớn hơn hay lớn hơn hoặc bằng, đúng hay sai đảo ngược. Đây là chỗ gợi ý sai mà nhìn rất giống đúng.
  • Chỉ số mảng và biên vòng lặp, đặc biệt chỗ bắt đầu từ 0 hay 1, kết thúc trước hay sau phần tử cuối.
  • Giá trị cứng được điền sẵn như địa chỉ máy chủ, số ngày, mức phí. AI hay điền một con số "hợp lý" mà không phải con số của bạn.
  • Khối xử lý lỗi bị nuốt im lặng, kiểu bắt mọi ngoại lệ rồi bỏ qua. Gợi ý loại này làm chương trình chạy êm nhưng che lỗi thật.

Nếu thấy mình chấp nhận gợi ý mà không đọc, có thể cài đặt để gợi ý chỉ hiện khi bạn gọi bằng phím tắt. Nhịp chậm lại một chút nhưng mã đi vào dự án là mã bạn đã nhìn.

Câu hỏi thường gặp

Gợi ý mã tự động có gửi mã của mình lên mạng không?

Với phần lớn công cụ dùng mô hình trên máy chủ, có: đoạn mã quanh con trỏ và một số mẩu từ tệp liên quan được gửi đi mỗi lần cần gợi ý. Việc hãng lưu hay dùng dữ liệu đó thế nào phụ thuộc điều khoản và gói tài khoản, cần đọc kỹ.

Vì sao gợi ý trên máy đồng nghiệp khác máy mình dù cùng công cụ?

Vì gói ngữ cảnh khác nhau: tệp đang mở, vị trí con trỏ, phần mã vừa gõ đều khác. Ngoài ra mô hình có yếu tố ngẫu nhiên khi chọn chữ, và hai máy có thể đang dùng phiên bản công cụ hoặc mô hình khác nhau.

Gợi ý dòng và trò chuyện có dùng cùng một mô hình không?

Không nhất thiết. Gợi ý dòng cần trả lời rất nhanh nên nhiều công cụ dùng mô hình nhỏ, chuyên cho mã. Khung trò chuyện có thể dùng mô hình lớn hơn, chậm hơn nhưng suy nghĩ kỹ hơn. Tuỳ công cụ mà bạn chọn được hay không.

Có nên chấp nhận cả khối mã dài do gợi ý đưa ra?

Được, nếu bạn đọc hết và hiểu. Khối càng dài, khả năng có một dòng sai càng cao. Nhiều người chấp nhận từng phần, đọc xong phần đầu mới nhận tiếp, để không phải rà lại cả khối sau đó.

Gợi ý có học theo phong cách viết mã của mình không?

Mô hình không tự học thêm từ bạn. Nó chỉ bắt chước phong cách có sẵn trong đoạn mã đang được gửi kèm. Vì vậy dự án có quy ước nhất quán thì gợi ý cũng nhất quán theo.

Gợi ý tự động có hiểu chú thích tiếng Việt không?

Phần lớn mô hình hiện nay đọc được chú thích tiếng Việt và dùng nó làm manh mối. Chú thích ngắn, rõ, nêu cả đơn vị và điều kiện thường cho kết quả tốt hơn chú thích dài lan man.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.

hoặc
Gọi ngay 0926 138 138