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

Tabnine: Hướng dẫn kèm dự án demo

Tìm hiểu cách xây dựng trình chỉnh sửa ảnh bằng AI với Tabnine và mô hình Nano Banana của Google.
· 12 phút đọc

Khám phá cùng AI

Viết code có thể trở nên nhàm chán khi bạn mắc kẹt với những đoạn lặp khuôn mẫu hoặc các chi tiết cú pháp nhỏ. Sự cản trở đó càng tăng khi bạn đang thử nghiệm các mô hình AI mới và chỉ muốn tập trung vào việc xây dựng. Tabnine giúp giảm chậm trễ đó với tính năng hoàn thành mã bằng AI ngay trong trình soạn thảo của bạn.

Trong bài viết này, tôi sẽ giải thích từng bước cách sử dụng Tabnine trong Visual Studio Code (VS Code) để tạo một trình chỉnh sửa ảnh bằng AI sử dụng mô hình tạo ảnh mới nhất của Google, Nano Banana. Kết thúc bài viết, chúng ta sẽ có một ứng dụng Python hoạt động cho phép người dùng tạo và chỉnh sửa hình ảnh bằng prompt.

Nếu bạn muốn cập nhật các mô hình tạo ảnh mới nhất của Google, tôi khuyến nghị đọc hướng dẫn Nano Banana 2 của chúng tôi.

Ảnh chụp màn hình ứng dụng chúng ta xây dựng trong bài hướng dẫn bằng Tabnine.

Tabnine là gì?

Tabnine là một trợ lý viết mã dùng AI tương tự GitHub Copilot và Cursor. Nó hoạt động trên hầu hết các trình soạn thảo phổ biến như VS Code, PyCharm, Jupyter, v.v.

Một số tính năng chính của Tabnine bao gồm:

- Tích hợp Jira: Tabnine có thể kết nối với Jira, một nền tảng phổ biến để quản lý dự án kỹ thuật phần mềm. Điều này giúp quản lý công việc dễ dàng hơn và cho phép Tabnine theo dõi các tác vụ trong pipeline.

- Lệnh tùy chỉnh: Tabnine đi kèm nhiều lệnh như "Explain code" hoặc "Fix code." Nó cũng cho phép người dùng định nghĩa các lệnh tùy chỉnh dựa trên prompt.

- Hành vi tùy chỉnh: Tabnine cho phép bạn cấu hình một prompt để định hướng cách mô hình AI trả lời. Ví dụ, nếu bạn có bộ hướng dẫn viết mã rõ ràng, bạn có thể cung cấp chúng để đảm bảo nó tạo mã theo các hướng dẫn đó.

- Tự động hoàn thành thông minh: Gợi ý cả dòng hoặc khối mã, không chỉ tên biến.

- Nhận biết ngữ cảnh: Tabnine thích ứng với cấu trúc dự án và phong cách viết mã của bạn.

- Hỗ trợ nhiều mô hình AI: Tabnine hỗ trợ các mô hình AI phổ biến nhất, giúp bạn dễ dàng chọn mô hình muốn dùng.

- Học theo nhóm: Trong gói doanh nghiệp, nó có thể học từ codebase riêng tư của nhóm bạn để đưa ra gợi ý phù hợp với mẫu hình của công ty.

Thiết lập Tabnine

Để bắt đầu, chúng ta cần tạo tài khoản Tabnine và đăng ký một trong các gói của họ. Họ cung cấp dùng thử 14 ngày, bạn có thể trải nghiệm miễn phí. Sau thời gian dùng thử, Tabnine có giá 9 đô mỗi tháng.

Sau khi tạo tài khoản Tabnine, mở VS Code. Nếu bạn chưa có VS Code, hãy cài đặt từ đây. Mở tab tiện ích mở rộng và gõ "tabnine" để tìm tiện ích chính thức.

Danh sách tiện ích Tabnine trong marketplace của VS Code hiển thị kết quả tìm kiếm và tùy chọn cài đặt.

Khi tiện ích được cài đặt, chúng ta sẽ được nhắc đăng nhập. Sau đó có thể truy cập Tabnine trên thanh menu bên trái (tùy chọn cuối cùng trong ảnh chụp màn hình này).

Thanh bên của Visual Studio Code hiển thị biểu tượng trình khám phá tệp, tìm kiếm, kiểm soát mã nguồn, gỡ lỗi, tiện ích mở rộng và Tabnine.

Khám phá giao diện Tabnine

Trước khi xây dựng trình chỉnh sửa ảnh AI, hãy nhanh chóng điểm qua các thành phần chính của Tabnine.

Khi mở Tabnine, chúng ta sẽ thấy giao diện chat AI:

Giao diện Tabnine trong Visual Studio Code hiển thị các tùy chọn hỗ trợ liên quan đến mã, tiện ích mở rộng và snippet, với Gemini 2.5 Pro được chọn trong menu.

Ở trên cùng có bộ chọn mô hình. Tại đây, chúng ta có thể chọn mô hình muốn dùng. Trong hướng dẫn này, tôi sẽ dùng mặc định là Gemini 2.5 Pro.

Giao diện chọn mô hình AI trong Tabnine, hiển thị các tùy chọn như Claude 3.5 Sonnet, Claude 3.7 Sonnet, Claude 4 Sonnet, Gemini 2.0 Flash, Gemini 2.5 Pro, GPT-4o và Tabnine Protected, làm nổi bật tối ưu hiệu năng và tính năng riêng tư.

Ở dưới cùng, chúng ta có thể định nghĩa ngữ cảnh. Đây là thứ xác định những gì chúng ta muốn mô hình AI nhìn thấy khi trả lời.

Giao diện chat AI của Tabnine trong VS Code với các tùy chọn lệnh, đoạn mã, tệp hiện tại và thiết lập phạm vi workspace.

Mặc định, ngữ cảnh bao gồm tệp hiện tại và workspace (dự án). Chúng ta có thể thêm những thứ khác như Terminal, rất hữu ích để cho mô hình biết về lỗi khi gặp phải. Ta cũng có thể cung cấp một đoạn mã cụ thể bằng cách dùng ký tự "@" rồi gõ tên hàm muốn thêm vào ngữ cảnh.

Trong menu hamburger, chúng ta có thể cấu hình Tabnine:

Giao diện cài đặt Tabnine hiển thị các tùy chọn tích hợp, độ dài phản hồi, hành vi tùy chỉnh, lệnh tùy chỉnh, hoàn thành chat và cải tiến sản phẩm.

Hai cài đặt đáng chú ý là hành vi tùy chỉnh và lệnh tùy chỉnh. Ở phần hành vi tùy chỉnh, ta có thể đặt một prompt để định hướng mô hình khi tạo mã. Điều này hữu ích khi ta muốn mã tuân theo các hướng dẫn cụ thể.

Giao diện cài đặt hành vi chat tùy chỉnh của Tabnine trong VS Code, hiển thị ô nhập văn bản để định nghĩa hướng dẫn tùy biến phản hồi AI, bao gồm ví dụ prompt hướng dẫn từng bước bằng tiếng Đức.

Phần lệnh cho phép định nghĩa các lệnh tùy chỉnh có thể thực thi bằng /<command-name> trong giao diện chat. Một lệnh về bản chất là một prompt để thực hiện hành động cụ thể. Đây là cách tốt để tiết kiệm thời gian và tránh phải lặp đi lặp lại cùng một prompt.

Giao diện Tabnine để định nghĩa lệnh tùy chỉnh mới, gồm các trường nhập tên lệnh, mô tả và mẫu prompt, với tùy chọn lưu hoặc hủy.

Vibe-coding một trình chỉnh sửa ảnh AI với Tabnine

Trong phần này, tôi sẽ hướng dẫn bạn xây dựng một ứng dụng Python sử dụng Nano Banana, mô hình tạo ảnh mới nhất của Google, để chỉnh sửa hình ảnh. Người dùng có thể dùng prompt để tạo ảnh hoặc kết hợp và chỉnh sửa ảnh hiện có bằng prompt.

Mục tiêu của tôi là xem liệu có thể vibe-code ứng dụng này hay không, nghĩa là xây dựng hoàn toàn từ đầu bằng các prompt.

Toàn bộ mã được tạo trong bài hướng dẫn có thể tìm thấy tại kho GitHub này.

Tạo giao diện cơ bản

Để bắt đầu, tôi muốn tạo giao diện cơ bản nơi người dùng có thể chọn ảnh từ máy tính và nhập prompt. Tôi tạo một thư mục mới và mở VS Code trong thư mục đó. Tôi chưa tạo tệp nào. Đây là prompt đầu tiên của tôi:

Prompt thiết kế giao diện người dùng trong Tabnine, đề xuất tạo giao diện để chọn ảnh từ máy tính.

Sau đó tôi mới nhận ra mình quên đề cập đang xây dựng ứng dụng Python. Bằng cách nào đó, tôi đã may mắn khi mô hình AI cũng cho rằng đó là điều tôi muốn. Nó phản hồi prompt của tôi bằng cách giải thích các lệnh sẽ chạy và mã sẽ viết.

Để áp dụng thay đổi, chúng ta cần thực hiện từng thay đổi một hoặc nhấp nút "Apply All" ở cuối màn hình. Lưu ý một số thay đổi liên quan đến việc chạy lệnh. Trong các trường hợp này, lệnh sẽ cài đặt các gói Python cần thiết và tạo tệp cùng thư mục để chứa mã.

Đây là giao diện khi tôi chạy script đã được tạo:

Giao diện chỉnh sửa ảnh AI với ô nhập văn bản hiển thị đường dẫn tới ảnh và nút "Select Images" ở dưới cùng.

Ở trên cùng là danh sách tất cả ảnh đã chọn và một nút để mở hộp thoại chọn tệp. Người dùng có thể chọn một hoặc nhiều tệp, và các tệp đã chọn sẽ được liệt kê. Tuy nhiên, khi chọn tệp mới, danh sách cũ bị ghi đè, nên tôi yêu cầu nó thêm tệp mới vào danh sách thay vì xóa các tệp cũ.

Tiếp theo, tôi muốn cải thiện giao diện để hiển thị ảnh thu nhỏ thay vì đường dẫn của chúng:

Prompt giao diện trong môi trường lập trình đề xuất hiển thị ảnh thu nhỏ thay vì đường dẫn, với giải pháp mã dùng thư viện Pillow để xử lý ảnh.

Kết quả như sau:

Giao diện của trình chỉnh sửa ảnh AI trên nền tối hiển thị ảnh thu nhỏ và nút "Select Images" ở dưới cùng, được thiết kế để người dùng tương tác chọn tệp.

Một tính năng quan trọng khác là khả năng xóa ảnh dễ dàng:

Prompt giao diện trong Tabnine với lệnh bật tính năng xóa ảnh khỏi lựa chọn.

Với prompt này, nó sửa mã để khi chúng ta nhấp chuột phải vào ảnh thu nhỏ, một menu bật lên xuất hiện cho phép xóa ảnh. Tôi muốn nó hoạt động theo cách này, nên tôi yêu cầu thay đổi đó:

Văn bản prompt trong giao diện lập trình AI để tạo menu bật lên khi nhấp chuột phải với tùy chọn xóa.

Khi tôi thử ứng dụng sau thay đổi này, tính năng xóa ảnh không hoạt động nữa. Tôi nghi ngờ là do tôi dùng máy Mac, nhưng tôi không nói điều đó. Tôi muốn xem liệu nó có tự nhận ra không.

Giao diện chat hiển thị người dùng báo lỗi chức năng nhấp chuột phải không hoạt động, sau đó là phản hồi cho biết đây là vấn đề đa nền tảng phổ biến với tkinter.

Nó hoạt động rất tốt, và tôi có thể nhấp chuột phải vào ảnh để xóa:

Bước cuối cùng trong giao diện cơ bản là thêm ô văn bản cho prompt.

Prompt giao diện từ trợ lý lập trình AI đề xuất thêm ô nhập văn bản nhiều dòng có nhãn "Prompt" bên dưới phần xem trước ảnh.

Với điều này, giao diện cơ bản đã hoàn tất. Chúng ta có thể chọn ảnh và nhập prompt. Tuy nhiên, chúng ta vẫn chưa tạo ảnh được. Đó là phần sẽ triển khai ở mục tiếp theo.

Tích hợp Nano Banana

Để giữ mã có tổ chức, tôi yêu cầu tạo một script Python mới với một hàm sử dụng API generative AI của Google với mô hình ảnh mới nhất của họ để tạo ảnh.

Prompt tạo script Python để tạo ảnh dùng mô hình Nano Banana của Google, với quản lý khóa API qua tệp .env.

Nó đã tạo script mới và tệp .env. Tệp này dùng để lưu khóa API cần thiết để kết nối tới Google API. Nếu bạn làm theo, bạn cần tạo khóa API tại đây và đặt vào tệp .env.

Sau đó, tôi yêu cầu thêm một nút mới vào giao diện để gọi hàm tạo ảnh. Nó đã thêm nút, nhưng khi tôi bấm vào thì gặp lỗi. Vì vậy, tôi đảm bảo thêm terminal vào ngữ cảnh trước khi yêu cầu sửa lỗi.

Giao diện Tabnine trong Visual Studio Code hiển thị phạm vi đã chọn: Tệp hiện tại, Workspace và Terminal, với tùy chọn thêm hoặc đặt lại phạm vi.

Thông báo lỗi hiển thị trong giao diện Tabnine khi chạy script.

Nó đã cập nhật một số tệp, nhưng lỗi vẫn còn. Tôi cố gắng nhờ nó sửa, nhưng không hiệu quả. Nó bắt đầu nói mô hình AI không tồn tại và muốn đổi hướng mã theo cách mà tôi biết là không đúng.

Để vượt qua điều này, tôi phải sửa mã thủ công. Tôi vào trang chính thức của Gemini và sao chép, điều chỉnh mã ví dụ từ đó.

Đây là một trong những lý do tôi nghĩ điều quan trọng là phải có kiến thức nền tảng về lập trình, ngay cả khi vibe coding. Thường thì ta sẽ gặp thứ mà mô hình AI không sửa được, và biết lập trình là quan trọng để hiểu rằng những gì mô hình nói là không đúng và ta có thể tự sửa. Những công cụ kiểu này nên dùng để tăng tốc quy trình, không phải thay thế hoàn toàn.

Tuy vậy, ngay cả khi phải tự viết đoạn mã này, Tabnine vẫn hữu ích nhờ khả năng tự động hoàn thành. Ví dụ, khi tôi muốn chuyển đổi các đường dẫn ảnh đã chọn thành ảnh để cung cấp cho mô hình, tôi chỉ cần bắt đầu gõ điều mình muốn và nhận được đoạn mã chính xác:

Đoạn mã minh họa tính năng tự động hoàn thành của Tabnine.

Chúng ta cũng thấy phía trên tên hàm, Tabnine cung cấp các công cụ để chỉnh sửa, kiểm thử, sửa lỗi, giải thích và viết tài liệu cho hàm. Ví dụ, tôi dùng chức năng viết tài liệu để chú thích mã, và nó hiển thị phần khác biệt với những thay đổi dự định thực hiện, tôi có thể chấp nhận hoặc từ chối:

Kết quả cuối cùng

Ứng dụng giờ đã hoạt động và sẵn sàng sử dụng. Hãy thử tạo một mô hình nhân vật cho một người cụ thể với phụ kiện lấy từ các ảnh khác:

Đây là kết quả:

Kiểm thử với Tabnine

Viết kiểm thử tự động là rất quan trọng khi làm việc trên một dự án. Một trong các tính năng của Tabnine là giúp chúng ta viết các kiểm thử này.

Tính năng này có trong tab "Test" hoặc bằng cách nhấp vào tùy chọn "Test" phía trên định nghĩa một hàm. Khi làm vậy, Tabnine sẽ tạo kế hoạch kiểm thử cho hàm đó.

Giao diện Tabnine trong VS Code hiển thị việc tạo kế hoạch kiểm thử mới với các tùy chọn xem lại tệp kiểm thử hiện có hoặc tạo tệp mới, cùng các tính năng chỉnh sửa mã Python.

Một kế hoạch kiểm thử gồm các kịch bản với hành vi mong đợi của hàm. Dưới đây là một số kịch bản Tabnine xác định cho hàm của chúng ta:

Giao diện kế hoạch kiểm thử hiển thị đường dẫn mô-đun và tệp kiểm thử đã chọn, với các trường hợp kiểm thử đề xuất cho bộ tạo ảnh AI.

Để tạo kiểm thử cho một kịch bản cụ thể, chúng ta chỉ cần nhấp vào nó. Nó sẽ tạo hàm kiểm thử cho kịch bản đó, sau đó ta có thể tích hợp vào bộ kiểm thử của mình.

Khi tôi áp dụng các thay đổi này, tệp kiểm thử chỉ chứa hàm kiểm thử và không có gì khác. Nó thiếu các import và lớp kiểm thử bao quanh. Tôi phải quay lại tab "Chat" để yêu cầu hoàn thiện phần kiểm thử. Sau đó, tôi gặp lỗi vì tên tệp nó tạo không đúng. Như trước đó, tôi nói rằng có lỗi xảy ra và nó đã sửa. Giờ thì kiểm thử chạy thành công.

Khi tôi thêm các kiểm thử khác sau đó, mọi thứ đều hoạt động tốt.

Ảnh chụp màn hình hiển thị đầu ra terminal với việc chạy unittest Python. Nó hiển thị lỗi: "An error occurred during Gemini API call: Prompt cannot be empty." Bài kiểm thử chạy một test trong 0.001 giây, cho kết quả "OK" dù có lỗi prompt.

Kết luận

Tabnine thể hiện tiềm năng như một công cụ mạnh mẽ cho phát triển nhanh nhờ tích hợp dễ dàng với các trình soạn thảo mã phổ biến. Khả năng lập trình hỗ trợ bởi AI của nó giúp tăng tốc quy trình, cho phép nhà phát triển tập trung vào đổi mới thay vì các tác vụ lặp lại.

Tuy nhiên, nỗ lực xây dựng ứng dụng hoàn toàn bằng vibe-coding của tôi đã nhấn mạnh tầm quan trọng của nền tảng kiến thức lập trình vững chắc. Phụ thuộc mù quáng vào mã do AI tạo ra mà không xác minh sự phù hợp có thể dẫn đến rắc rối, khiến nhà phát triển dễ mắc lỗi mà họ có thể không hiểu hết.

Phần lớn thời gian Tabnine hoạt động hiệu quả, nhưng thường có cảm giác mô hình AI nền tảng mới là nhân tố chính, tương tự các công cụ khác như GitHub Copilot. Dù Tabnine thực sự hữu ích, trải nghiệm này nhấn mạnh giá trị không thể thay thế của kiến thức lập trình truyền thống để đảm bảo phát triển các ứng dụng phần mềm phức tạp một cách hiệu quả và bền vững.

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