Chuyển đến nội dung chính

Gemini Code Assist: Hướng dẫn kèm ví dụ

Tìm hiểu cách cài đặt và sử dụng Gemini Code Assist của Google trong Visual Studio Code, kèm ví dụ Python.
· 12 phút đọc

Khám phá cùng AI

Gần đây, các mô hình mã nguồn mở đang gia tăng, và khi nói đến chỉnh sửa mã, những cái tên như Cursor AI và GitHub Copilot cho phép người dùng dùng thử trợ lý mã bằng AI miễn phí, nhưng chúng ta nhanh chóng gặp tường phí khi dùng chúng để xây dựng bất kỳ dự án thực tế nào.

Gemini Code Assist, trợ lý mã AI của Google, vừa ra mắt gói miễn phí rất hào phóng. Nó có dạng tiện ích mở rộng cho Visual Studio Code và JetBrains. 

Trong hướng dẫn này, chúng ta sẽ học cách thiết lập trên Visual Studio Code và cách sử dụng với một số ví dụ thực tiễn.

Trợ lý mã AI là gì?

Trợ lý mã AI dùng trí tuệ nhân tạo để giúp nhà phát triển lập trình hiệu quả hơn bằng cách gợi ý đoạn mã, tự động hóa tác vụ lặp lại và cung cấp sửa lỗi theo thời gian thực trong các môi trường như Visual Studio Code. Nhờ đó, nhà phát triển dành ít thời gian cho việc thường nhật và nhiều thời gian hơn cho công việc phức tạp, sáng tạo.

Dù chatbot có thể hỗ trợ các tác vụ lập trình, chúng khá bất tiện vì cần chuyển qua lại giữa IDE và nền tảng AI, kéo theo nhiều thao tác sao chép và dán mã.

Trợ lý mã AI tích hợp trực tiếp vào môi trường lập trình. Nhờ đó, chúng nắm được ngữ cảnh mã của chúng ta và tránh việc phải cung cấp tường minh các đoạn mã khi đặt câu hỏi. Điều này cũng cho phép trợ lý mã chỉnh sửa trực tiếp mã nguồn, giúp tích hợp thay đổi nhanh hơn nhiều.

Cách cài đặt Gemini Code Assist?

Trong hướng dẫn này, chúng ta sẽ dùng Gemini Code Assist cùng với Visual Studio Code. Gemini Code Assist là một tiện ích mở rộng của Visual Studio, vì vậy có thể cài đặt như các tiện ích mở rộng khác:

  1. Nhấp vào tab tiện ích mở rộng ở bảng bên trái.
  2. Gõ "gemini code assist" vào ô tìm kiếm.
  3. Nhấp nút "Install".

Cài đặt Gemini Code Assist trên Visual Studio Code

Sau khi cài đặt, tab Gemini sẽ xuất hiện ở bảng bên trái. Để bắt đầu sử dụng trợ lý mã, nhấp vào tab có logo Gemini và đăng nhập tài khoản Google của bạn.

Kích hoạt Gemini Code Assist

Thử nghiệm Gemini Code Assist

Để kiểm thử Gemini Code Assist, tôi quyết định phân tích một bộ dữ liệu Spotify gần đây bằng Python. Bộ dữ liệu tôi dùng lấy từ Kaggle và có sẵn tại đây.

Để bắt đầu, hãy tạo một thư mục và giải nén tệp songs.csv vào đó. Sau đó mở thư mục trong Visual Studio Code. Kế hoạch là khởi đầu không có mã và để Gemini Code Assist viết mọi thứ cho chúng ta.

Bắt đầu

Lời nhắc đầu tiên tôi gửi là yêu cầu tạo một hàm Python tải dữ liệu vào DataFrame của pandas.

Lời nhắc đầu tiên cho Gemini Code Assist trên Visual Studio Code

Thông thường, trợ lý mã hoạt động bằng cách chỉnh sửa mã hiện có và hiển thị phần khác biệt (diff) với các thay đổi mới. Vì hiện chưa có mã trong trường hợp này, chúng ta có thể yêu cầu tạo tệp mới với đoạn mã được đề xuất bằng cách nhấp nút cuối cùng ở góc trên bên phải khối mã trong cửa sổ chat.

Tạo tệp mới từ một đoạn mã trong Visual Studio Code

Sau đó, chúng ta đổi tên tệp thành songs.py.

Chạy mã

Chúng ta có thể chạy mã bằng terminal tích hợp trong Visual Studio Code với lệnh:

python songs.py

Trong trường hợp này, ta gặp lỗi:

ModuleNotFoundError: No module named 'pandas'

Nguyên nhân là script songs.py đang cố dùng pandas nhưng chưa được cài đặt. Đây là cơ hội tốt để kiểm tra xem Gemini Code Assist có nhận biết đầu ra terminal trong Visual Studio Code hay không.

Tôi yêu cầu nó giải thích cách sửa lỗi trong terminal. Tiếc là nó đưa câu trả lời chung chung, cho thấy không có khả năng truy cập đầu ra terminal. Cách thay thế là sao chép và dán văn bản lỗi vào ô chat AI, hơi bất tiện. Nhưng làm vậy thì đúng là ta nhận được câu trả lời chính xác: cần chạy lệnh pip install pandas trong terminal.

Đây là một hạn chế đáng tiếc vì, với tư cách kỹ sư phần mềm, việc hỏi về lỗi nhìn thấy trong terminal là một trong những trường hợp dùng AI phổ biến nhất của tôi.

Sau khi cài pandas, chúng ta có thể chạy mã thành công.

Kết quả lần chạy mã đầu tiên

Đặt câu hỏi chung

Gemini Code Assist không chỉ giới hạn ở câu hỏi về mã. Chúng ta cũng có thể hỏi các câu hỏi chung hoặc liên quan dữ liệu. Hãy thử hình dung dữ liệu trong tệp songs.csv bằng cách yêu cầu liệt kê tất cả cột:

prompt for gemini code assist

Trong câu trả lời, nó tạo một hàm liệt kê các cột, nhưng cũng hiển thị trực tiếp danh sách trong câu trả lời:

Danh sách các cột trong tệp songs.csv

Thường thì khi dùng Gemini Code Assist, có vẻ nó hơi lúng túng trong việc phân biệt khi nào tôi hỏi một câu chung chỉ cần câu trả lời văn bản và khi nào tôi muốn nó viết mã. Đây là vấn đề nhỏ vì ta có thể bỏ qua phần mã, nhưng nó cũng khiến cửa sổ chat bị rối.

Yêu cầu chức năng mới

Từ câu trả lời trước, ta thấy có cột track_popularity. Hãy yêu cầu Gemini Code Assist triển khai một hàm mới lấy bài hát phổ biến nhất.

prompt for gemini code assist

Khi Gemini Code Assist viết mã trong câu trả lời, hàm đó sẽ không tự động được tích hợp vào mã của chúng ta. Để làm vậy, hãy nhấp nút mũi tên kép "Diff with Open File." Hãy đảm bảo trước khi nhấp, tệp mà thay đổi thuộc về đang được mở trong trình chỉnh sửa; nếu không, thay đổi sẽ được gộp vào sai tệp.

Cách xem diff trong gemini code assist

Sau khi nhấn nút, chúng ta sẽ thấy phần diff. Bên trái là trạng thái mã hiện tại và bên phải là trạng thái mới. Dòng bôi đỏ là dòng sẽ bị xóa hoặc thay đổi, còn dòng bôi vàng là phần bổ sung hoặc thay đổi.

Các diff trong gemini code assist

Chúng ta có thể nhìn vào thanh cuộn bên phải để định vị các thay đổi. Thường sẽ có nhiều vị trí trong tệp cần chỉnh sửa, và điều quan trọng là xem hết trước khi chấp nhận thay đổi.

Vị trí diff

Khi di chuột lên một thay đổi, ta sẽ thấy một mũi tên ở giữa:

diffs trong gemini code assist

Tôi thấy biểu tượng này không trực quan, nhưng nhấp vào mũi tên sẽ chỉ định rằng chúng ta không muốn đưa thay đổi cụ thể đó vào. Sau khi quyết định, chúng ta có thể tích hợp mã mới bằng cách nhấp nút "Accept” ở phía trên.

Tích hợp các thay đổi

Tự động hoàn thành

Từ nãy đến giờ, chúng ta tương tác với Gemini Code Assist qua ô chat AI. Đây đã là quy trình tốt hơn nhiều so với việc sao chép dán qua lại giữa nền tảng AI và trình soạn thảo mã vì mọi thứ được tích hợp trong cùng một cửa sổ và ta thấy phần diff, giúp dễ theo dõi thay đổi mới. Tuy nhiên, Code Assist không chỉ có vậy.

Khi chúng ta viết mã, trợ lý sẽ phân tích nội dung đang gõ và đưa ra gợi ý mã có thể chèn ngay bằng một phím bấm.

Cột track_popularity trong bộ dữ liệu lưu độ phổ biến của một bản nhạc. Hãy viết một hàm hiển thị độ phổ biến các bài hát của một nghệ sĩ cho trước, được sắp xếp theo ngày phát hành. Ta có thể dùng track_album_release_date để sắp xếp.

Khi chúng ta viết hàm, Gemini Code Assist sẽ gợi ý tự động hoàn thành. Khi bắt đầu viết chữ ký hàm, Gemini Code Assist sẽ đoán ý định từ tên hàm:

Ví dụ tự động hoàn thành trong gemini code assist

Để chèn gợi ý, chỉ cần nhấn phím Tab trên bàn phím. Tiếp theo, chúng ta muốn tạo một bản sao DataFrame chỉ chứa các bài hát của nghệ sĩ đã cho:

Ví dụ tự động hoàn thành trong gemini code assist

Đôi khi gợi ý mã không đúng ý. Lúc đó, ta vẫn cần viết tay hoặc, nếu đủ gần, chấp nhận rồi chỉnh sửa. Trong ví dụ này, bước tiếp theo là chuyển track_album_release_date sang định dạng ngày. Tuy nhiên, vì lý do nào đó, Gemini Code Assist chỉ muốn lấy năm phát hành, nên tôi đã tự viết dòng này.

Tự động hoàn thành chưa đúng trong gemini code assist

Tiếp theo, tôi muốn sắp xếp các bài hát theo ngày:

Ví dụ tự động hoàn thành trong gemini code assist

Cuối cùng, tôi trả về các điểm số độ phổ biến:

Ví dụ tự động hoàn thành trong gemini code assist

Nhắm vào đoạn mã cụ thể

Chúng ta có thể nhắm vào đoạn mã cụ thể bằng cách chọn nó trong trình soạn thảo. Khi mã được chọn, một vài gợi ý lời nhắc tự động sẽ xuất hiện, như "Explain this" hoặc "Generate unit tests."

Gợi ý lời nhắc cho đoạn mã được chọn trong gemini code assist

Khả năng chọn một đoạn mã và hỏi nó làm gì hoặc hoạt động thế nào rất hữu ích khi bắt đầu với một codebase mới. Tôi thấy đây thường là bước khó nhất khi làm việc trên một sản phẩm mới với codebase sẵn có.

Chúng ta cũng có thể yêu cầu nó chỉnh sửa mã bằng lời nhắc tùy biến. Ví dụ, có thể yêu cầu cải thiện hàm analyze_artist_popularity_over_time() mà ta vừa tạo:

lời nhắc tùy biến trong gemini code assist

Trong trường hợp này, nó cải thiện hàm bằng cách thêm một số kiểm tra để ngăn lỗi.

Giới hạn của gói miễn phí 

Gói miễn phí của Gemini Code Assist cho cá nhân có một số hạn chế so với các gói Standard và Enterprise:

  • Tùy biến và tích hợp hạn chế: Gói miễn phí không cho phép bạn kết nối kho mã nguồn riêng tư để nhận gợi ý mã tùy biến, tính năng này có trong gói Enterprise.
  • Quyền truy cập tính năng: Một số tính năng nâng cao trong Gemini for Firebase và Apigee, cũng như tự động hóa hỗ trợ AI nâng cao trong Application Integration, chỉ có ở các gói Standard và Enterprise.
  • Bảo mật và tuân thủ: Gói miễn phí thiếu tính năng bảo mật cấp doanh nghiệp và công cụ quản trị, cũng như bồi thường tài sản trí tuệ (IP indemnification), vốn có trong các gói Standard và Enterprise.
  • Giới hạn vận hành: Gói miễn phí cung cấp giới hạn hàng ngày là 6.000 yêu cầu liên quan mã và 240 yêu cầu chat, có thể đủ cho cá nhân nhưng sẽ hạn chế cho các dự án nhóm lớn.
  • Tính năng và hỗ trợ doanh nghiệp: Các tính năng bối cảnh doanh nghiệp cho tạo API và phân tích chất lượng ứng dụng nâng cao không có trong gói miễn phí.

Để biết thêm chi tiết, hãy xem trang web của Gemini Code Assist.

Ấn tượng của tôi về Gemini Code Assist

Tôi thấy Gemini Code Assist hoạt động khá tốt tổng thể. Theo trải nghiệm của tôi, nó thể hiện tương tự các đối thủ chính là Cursor và Copilot. Rất ấn tượng đối với một công cụ miễn phí. Gói miễn phí hỗ trợ tối đa 6.000 yêu cầu liên quan mã và 240 yêu cầu chat mỗi ngày. Điều này nên là quá đủ cho hầu hết lập trình viên.

Một tính năng thú vị khác mà chúng ta chưa đề cập là tích hợp GitHub. Gemini Code Assist cho GitHub hỗ trợ rà soát pull request để tìm lỗi và vấn đề về phong cách, đồng thời tự động đề xuất thay đổi và bản vá mã. Điều này cho phép nhà phát triển tập trung hơn vào việc viết mã. Nếu cần trợ giúp, người dùng có thể hỏi Gemini bằng cách để lại bình luận trong pull request của họ.

Một vấn đề tôi gặp là nó có vẻ hơi chật vật với các yêu cầu trước đó. Tôi thường yêu cầu một số thay đổi rồi quyết định đi hướng khác. Tuy nhiên, ở các vòng sau, nó vẫn muốn tích hợp những thay đổi ấy. Một ví dụ là hàm chúng ta viết để hiển thị độ phổ biến của một bản nhạc theo thời gian. Ban đầu, tôi muốn vẽ biểu đồ dữ liệu này rồi đổi ý. Tuy vậy, mã để vẽ dữ liệu đó vẫn cứ được thêm vào các yêu cầu không liên quan sau này, hơi khó chịu.

Nguy cơ của trợ lý mã

Gần đây, tôi thấy nhiều lập trình viên bày tỏ lo ngại, như trong chủ đề Reddit này, về việc dùng trợ lý mã như Cursor hay Copilot đang dần khiến họ quên cách viết mã.

Không nghi ngờ gì, các công cụ này mang lại mức tăng năng suất đáng kinh ngạc và không dùng chúng sẽ đặt chúng ta vào thế bất lợi so với đồng nghiệp. Tuy nhiên, tôi nghĩ mọi thứ đều cần sự cân bằng, và với công cụ AI cho lập trình, rất dễ rơi vào bẫy chấp nhận mù quáng đoạn mã được đưa ra. Tối thiểu, chúng ta nên dành thời gian đọc và hiểu thứ nó tạo ra.

Sử dụng tự động hoàn thành mã cũng có vẻ là phương án trung dung tốt hơn vì ít nhất ta cần bắt đầu viết gì đó để duy trì “trí nhớ cơ bắp” và tránh phụ thuộc quá nhiều vào công cụ AI. Tự động hoàn thành cũng thường cung cấp các đoạn mã nhỏ, dễ tiếp nhận hơn.

Kết luận

Các công cụ AI không ngừng phát triển, chi phí giảm và khả năng tiếp cận mở rộng. Gemini Code Assist là ví dụ điển hình khi cung cấp miễn phí một công cụ trợ lý mã bằng AI mạnh mẽ.

Sáng kiến này từ Google hạ thấp rào cản gia nhập cho nhà phát triển, cho phép hầu như bất kỳ ai cũng có thể sử dụng hỗ trợ AI mạnh mẽ trong công việc lập trình. Đặc biệt đáng khen là Gemini Code Assist cung cấp các tính năng ngang bằng, thậm chí cạnh tranh với các dịch vụ trả phí như Cursor và Copilot. Với tối đa 6.000 yêu cầu liên quan mã và 240 yêu cầu chat mỗi ngày, nó mang lại hỗ trợ dư dả cho nhà phát triển cá nhân hoặc các dự án nhỏ.

François Aubry

Tác giả

François Aubry

Kỹ sư full-stack & nhà sáng lập tại CheapGPT. Giảng dạy luôn là niềm đam mê của tôi. Từ những ngày còn là sinh viên, tôi đã háo hức tìm kiếm cơ hội kèm cặp và hỗ trợ các bạn học khác. Niềm đam mê đó đã thôi thúc tôi theo học tiến sĩ, nơi tôi cũng đảm nhiệm vai trò trợ giảng để hỗ trợ con đường học thuật của mình. Trong những năm ấy, tôi tìm thấy sự mãn nguyện lớn lao trong môi trường lớp học truyền thống, xây dựng kết nối và thúc đẩy việc học tập. Tuy nhiên, với sự ra đời của các nền tảng học trực tuyến, tôi nhận ra tiềm năng thay đổi của giáo dục số. Thực tế, tôi đã trực tiếp tham gia phát triển một nền tảng như vậy tại trường đại học của chúng tôi. Tôi tận tâm kết hợp các nguyên tắc giảng dạy truyền thống với những phương pháp số đổi mới. Đam mê của tôi là tạo ra các khóa học không chỉ hấp dẫn và giàu thông tin mà còn dễ tiếp cận với người học trong thời đại số này.

Chủ đề

Liên quan