Một số ví dụ về sử dụng GitHub Copilot Chat¶
Khác với việc Copilot Code Completion chỉ tự động hoàn thành dòng code, Copilot Chat cung cấp một giao diện hội thoại để bạn có thể đặt câu hỏi, nhờ giải thích mã, gỡ lỗi, viết tài liệu, v.v. ngay trong ngữ cảnh dự án của mình.
Mục tiêu của Copilot Chat là giúp lập trình viên hiệu quả hơn và tự tin hơn khi phát triển phần mềm – như một đồng đội AI có thể trả lời câu hỏi, đề xuất mã, tìm lỗi và thậm chí tóm tắt thay đổi để tạo commit message. Với sự tích hợp chặt chẽ trong IDE, Copilot Chat hiểu bạn đang làm gì và sẵn sàng hỗ trợ nhiều nhiệm vụ: từ giải thích một đoạn code phức tạp, trả lời câu hỏi lập trình, tinh chỉnh cải tiến code, viết unit test, tìm và sửa lỗi, đến tự động tạo mô tả cho commit của bạn.
Dưới đây là tuyển tập một tình huống sử dụng Copilot Chat thông qua những ví dụ thực tiễn. Mỗi tình huống bao gồm mục tiêu cần đạt, câu lệnh (prompt) mẫu, cách cải thiện prompt để đạt hiệu quả cao hơn, và ví dụ minh họa. Hãy tưởng tượng Copilot Chat như một người bạn đồng hành: khi bạn cung cấp ngữ cảnh và yêu cầu rõ ràng, nó có thể đưa ra những gợi ý hữu ích, truyền cảm hứng và giúp tăng tốc quá trình phát triển.
Hiểu một đoạn mã (Explain Code)¶
Mô tả¶
Khi gặp một đoạn code phức tạp hoặc dự án legacy thiếu tài liệu, bạn có thể dùng Copilot Chat để giải thích code đó một cách rõ ràng. Mục tiêu là nhanh chóng hiểu được code làm gì, cách hoạt động ra sao, mà không phải tự dò từng dòng. Copilot Chat sẽ phân tích và mô tả lại logic, mục đích của hàm, cách nó xử lý dữ liệu, các trường hợp biên (edge cases) và thậm chí cảnh báo những vấn đề tiềm ẩn. Điều này đặc biệt hữu ích khi bạn tiếp quản code của người khác hoặc sử dụng một ngôn ngữ/framework chưa quen thuộc.
Câu lệnh mẫu¶
Bạn có thể đơn giản hỏi bằng ngôn ngữ tự nhiên, ví dụ: “Giải thích đoạn code này giúp mình”. Nếu bạn đang dùng VS Code hay IDE hỗ trợ, có thể bôi đen đoạn mã và sử dụng lệnh /explain. Ví dụ cụ thể hơn: “Hàm processData() này hoạt động như thế nào?” hoặc “Đoạn code trên thực hiện chức năng gì?”. Copilot sẽ trả lời bằng cách diễn giải code một cách tuần tự và dễ hiểu.
Gợi ý cải tiến prompt¶
Hãy cung cấp bối cảnh nếu cần – ví dụ, nêu rõ bạn muốn giải thích ở mức độ đơn giản hay chi tiết. Bạn cũng có thể yêu cầu giọng điệu giải thích: “Giải thích cho người mới học”, hoặc “Giải thích ngắn gọn từng bước”. Nếu code rất dài, nên khoanh vùng đoạn cụ thể hoặc chức năng cụ thể để Copilot tập trung. Việc đặt câu hỏi cụ thể (như “Đoạn code này có ý nghĩa gì trong toàn bộ chương trình?”) sẽ cho câu trả lời sát ý hơn.
Ví dụ minh họa¶
Giả sử ta có hàm Python sau và muốn hiểu rõ cách hoạt động của nó:
def factorial(n):
return 1 if n <= 1 else n * factorial(n-1)
Yêu cầu: “Giải thích hàm factorial ở trên.”
Phản hồi của Copilot: Hàm factorial tính giai thừa của một số n bằng phương pháp đệ quy. Cụ thể, nếu n <= 1 hàm trả về 1 (điều kiện dừng của đệ quy). Ngược lại, hàm trả về n * factorial(n-1), nghĩa là nhân n với kết quả giai thừa của (n-1). Cách làm này sẽ lần lượt nhân n * (n-1) * (n-2) * ... * 1. Ví dụ, factorial(5) sẽ tính 5 * 4 * 3 * 2 * 1 và trả về 120. (Copilot cũng có thể lưu ý rằng hàm chưa xử lý trường hợp n âm – với n < 0 hàm sẽ đệ quy vô hạn).
Trong câu trả lời trên, có thể thấy Copilot Chat đã giải thích mục đích của hàm, mô tả từng bước logic hoạt động, đưa ví dụ minh họa kết quả, và thậm chí lưu ý về trường hợp đặc biệt.
Tìm và sửa lỗi (Debugging)¶
Mô tả¶
Khi chương trình gặp lỗi hoặc bug, Copilot Chat có thể đóng vai trò như một "rubber duck" biết nói – bạn mô tả vấn đề hoặc đưa đoạn code lỗi, nó sẽ phân tích và đề xuất cách sửa. Copilot Chat có thể giúp xác định nguyên nhân gây lỗi dựa trên thông báo lỗi hoặc hành vi bất thường, sau đó gợi ý cách khắc phục.
Câu lệnh mẫu¶
Bạn có thể hỏi: “Tại sao đoạn code này bị lỗi NullPointerException?”, “Lỗi xảy ra ở dòng X nghĩa là gì?” hoặc “Sửa lỗi cho đoạn code trên”. Ngoài ra, các lệnh slash command như /fix rất hữu ích: chỉ cần bôi đen đoạn code nghi ngờ và gõ /fix, Copilot Chat sẽ đề xuất một phiên bản đã sửa lỗi.
Gợi ý cải tiến prompt¶
Khi debug, hãy cung cấp càng nhiều thông tin càng tốt. Bao gồm thông báo lỗi cụ thể, đoạn mã liên quan, và mô tả bạn mong đợi chương trình làm gì. Ví dụ: “Hàm X nhận đầu vào A nhưng đầu ra không đúng như mong đợi Y. Có bug gì không?”. Cách hỏi chi tiết như vậy giúp Copilot hiểu bối cảnh và phân tích chính xác hơn.
Ví dụ minh họa¶
Xem đoạn code JavaScript sau:
function printList(arr) {
for (let i = 0; i <= arr.length; i++) {
console.log(arr[i]);
}
}
Khi mảng arr có 3 phần tử, hàm trên sẽ in ra 3 giá trị và một undefined.
Yêu cầu: “Tại sao hàm printList lại in undefined ở cuối, và làm sao sửa lỗi này?”
Phản hồi của Copilot: Vòng lặp hiện tại chạy với điều kiện i <= arr.length, do đó khi i == arr.length sẽ truy cập arr[arr.length] – phần tử nằm ngoài mảng – dẫn đến giá trị undefined. Để khắc phục, chỉ cần sửa điều kiện vòng lặp thành < arr.length để duyệt đúng các chỉ số hợp lệ. Code đã sửa sẽ là:
function printList(arr) {
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
}
Copilot Chat đã giải thích nguyên nhân và đưa ra giải pháp cụ thể.
Viết test (Generate Unit Test / Integration Test)¶
Mô tả¶
Viết các test code thường rất tốn thời gian, và đây là nơi Copilot Chat tỏa sáng trong việc tự động sinh test cho code của bạn. Copilot Chat hiểu logic của code và có thể đề xuất nhiều hàm test bao quát các trường hợp thông thường lẫn trường hợp biên, giúp tăng độ phủ của test.
Câu lệnh mẫu¶
Cách nhanh nhất: trong VS Code, mở file code và dùng lệnh /tests – Copilot sẽ sinh ra test cho toàn bộ file hoặc đoạn code được chọn. Bạn cũng có thể yêu cầu tự nhiên: “Viết unit test cho hàm X bằng framework Y”. Ví dụ: “/tests sử dụng Jest cho hàm dưới đây”.
Gợi ý cải tiến prompt¶
Nên chỉ rõ loại test và công cụ test bạn muốn (ví dụ: unit test hay integration test, dùng pytest hay Jest). Bạn cũng có thể gợi ý các edge cases mà bạn đặc biệt quan tâm, ví dụ: “Thêm test cho trường hợp mảng rỗng và số âm”.
Ví dụ minh họa¶
Giả sử ta có hàm JavaScript đơn giản tính tổng các số trong mảng:
function sum(arr) {
return arr.reduce((a, b) => a + b, 0);
}
Yêu cầu: “Viết unit test cho hàm sum ở trên bằng Jest.”
Phản hồi của Copilot:
const { sum } = require('./yourModuleFile');
test('sum of an empty array is 0', () => {
expect(sum([])).toBe(0);
});
test('sum of positive numbers', () => {
expect(sum([1, 2, 3, 4])).toBe(10);
});
test('sum including negative numbers', () => {
expect(sum([5, -2, 1])).toBe(4);
});
Những test case trên kiểm tra trường hợp mảng rỗng, mảng toàn số dương và mảng có cả số âm.
Sinh code mới (Write a new function/component/module)¶
Mô tả¶
Bạn có thể nhờ Copilot viết mã mới từ đầu dựa trên mô tả yêu cầu. Điều này giống như bạn giao nhiệm vụ cho một lập trình viên khác: chỉ cần diễn đạt bằng lời, Copilot sẽ tạo ra hàm, lớp, hoặc thậm chí module hoàn chỉnh.
Câu lệnh mẫu¶
Bạn chỉ việc mô tả rõ yêu cầu kỹ thuật. Ví dụ: “Viết hàm kiểm tra số nguyên tố”, “Tạo component React hiển thị 'Hello World'”, hoặc “Viết hàm Python kiểm tra chuỗi palindrome”.
Gợi ý cải tiến prompt¶
Để Copilot tạo code sát với mong muốn, hãy cung cấp thêm chi tiết nếu có: Yêu cầu đầu vào/đầu ra của hàm, các điều kiện đặc biệt, hoặc phong cách bạn muốn. Ví dụ: “Tạo hàm sắp xếp mảng bằng thuật toán quicksort” sẽ cụ thể hơn là chỉ "hàm sắp xếp mảng".
Ví dụ minh họa¶
Yêu cầu: “Viết hàm Python is_prime(n) để kiểm tra số nguyên n có phải số nguyên tố không.”
Phản hồi của Copilot:
def is_prime(n):
"""Return True if n is a prime number, otherwise False."""
if n <= 1:
return False
# Chỉ cần kiểm tra tới căn bậc hai của n
import math
limit = int(math.sqrt(n)) + 1
for i in range(2, limit):
if n % i == 0:
return False
return True
Hàm trên đầu tiên loại các trường hợp n nhỏ hơn hoặc bằng 1, sau đó kiểm tra các ước số từ 2 đến √n.
Refactor / Tối ưu mã¶
Mô tả¶
Khi bạn muốn cải thiện chất lượng code – ví dụ làm cho code dễ đọc hơn, hiệu quả hơn hoặc tuân theo best practices – Copilot Chat là trợ thủ đắc lực. Bạn có thể đưa cho Copilot một đoạn code "chưa được đẹp", và nhờ nó đề xuất cách viết lại cho sạch sẽ, ngắn gọn hoặc nhanh hơn.
Câu lệnh mẫu¶
Một số prompt hữu ích: “Làm cho đoạn code này dễ đọc hơn”, “Refactor hàm X cho ngắn gọn và hiệu quả”, hoặc “Có cách nào tối ưu đoạn code trên không?”. Bạn cũng có thể yêu cầu cụ thể: “Chuyển đoạn code này thành cú pháp ES6”.
Gợi ý cải tiến prompt¶
Hãy chỉ rõ mục tiêu refactor của bạn là gì: tối ưu tốc độ, giảm mức sử dụng bộ nhớ, hay chỉ là clean code. Ví dụ: “Refactor hàm này cho ngắn hơn, giữ nguyên logic” sẽ khác với “Tối ưu hàm này cho trường hợp input rất lớn”.
Ví dụ minh họa¶
Ta có hàm JavaScript sau:
function doubleEvenNumbers(arr) {
const result = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] % 2 === 0) {
result.push(arr[i] * 2);
}
}
return result;
}
Yêu cầu: “Refactor hàm doubleEvenNumbers cho ngắn gọn hơn.”
Phản hồi của Copilot:
function doubleEvenNumbers(arr) {
return arr
.filter(x => x % 2 === 0)
.map(x => x * 2);
}
Phiên bản mới sử dụng .filter để lọc ra các số chẵn, sau đó .map để nhân đôi mỗi số đó.
Sinh tài liệu cho mã (Add comments / docstring)¶
Mô tả¶
Với Copilot Chat, bạn có thể tạo tài liệu cho mã một cách nhanh chóng. Chỉ cần yêu cầu, Copilot sẽ sinh ra các chú thích hoặc docstring mô tả hàm, module theo nội dung code. Điều này giúp người đọc hiểu code dễ hơn.
Câu lệnh mẫu¶
Bạn có thể dùng lệnh /doc trên đoạn code để Copilot tạo tài liệu. Hoặc hỏi tự nhiên: “Thêm comment giải thích đoạn code trên”, “Viết docstring cho hàm này”.
Gợi ý cải tiến prompt¶
Hãy chỉ rõ bạn muốn tài liệu ở mức độ nào. Ví dụ: “Thêm docstring mô tả các tham số và giá trị trả về”. Bạn cũng có thể yêu cầu ngôn ngữ tài liệu: tiếng Anh hoặc tiếng Việt.
Ví dụ minh họa¶
Giả sử chúng ta có hàm Python sau chưa có docstring:
def calculate_area(radius):
return 3.14 * radius * radius
Yêu cầu: “Thêm docstring cho hàm calculate_area trên.”
Phản hồi của Copilot:
def calculate_area(radius):
"""
Calculate the area of a circle given its radius.
Args:
radius (float): The radius of the circle.
Returns:
float: The area of the circle.
"""
return 3.14 * radius * radius
Docstring trên giải thích ngắn gọn mục đích, tham số và giá trị trả về của hàm.
Viết commit message từ diff¶
Mô tả¶
Copilot Chat có thể giúp tóm tắt sự thay đổi từ diff và đề xuất một commit message phù hợp. Lợi ích mang lại là bạn có những commit message rõ ràng, có ngữ cảnh, thay vì các thông điệp sơ sài.
Câu lệnh mẫu¶
Hiện GitHub đã tích hợp nút “Generate Commit Message” trong một số công cụ. Tuy nhiên, bạn cũng có thể dùng Copilot Chat trực tiếp: copy phần diff vào cửa sổ chat và yêu cầu “Tóm tắt giúp mình những thay đổi này thành commit message”.
Gợi ý cải tiến prompt¶
Hãy định hướng cho Copilot về phong cách commit message của dự án bạn. Ví dụ: “Viết commit message ở thì quá khứ, không quá 50 ký tự tiêu đề”, hoặc “Bắt đầu bằng tag 'Fix:' do chúng tôi dùng Conventional Commit”.
Ví dụ minh họa¶
Giả sử bạn có một thay đổi nhỏ trong code như sau (diff):
- function add(a, b) {
- return a + b;
- }
+ function add(a, b) {
+ if (a == null || b == null) {
+ return 0;
+ }
+ return a + b;
+ }
Yêu cầu: “Tạo giúp mình commit message cho thay đổi trên.”
Phản hồi của Copilot: “Add null checks in add() – Return 0 if either argument is null to handle missing inputs.”
Thông điệp trên bao quát cả nội dung thay đổi và lý do/ý nghĩa.
Viết câu lệnh CLI / SQL từ mô tả tự nhiên¶
Mô tả¶
Hãy mô tả bằng lời, Copilot Chat có thể biến mô tả tự nhiên thành câu lệnh CLI hoặc SQL phù hợp. Điều này giúp bạn tránh phải lật tài liệu tra cú pháp.
Câu lệnh mẫu¶
Ví dụ, bạn có thể hỏi: “Làm thế nào để nén tất cả các file .log trong thư mục hiện tại thành archive.zip?” hoặc “Câu lệnh SQL để lấy tất cả người dùng không đăng nhập trong 30 ngày?”.
Gợi ý cải tiến prompt¶
Càng cụ thể về môi trường thì lệnh càng chính xác. Hãy nêu rõ bạn dùng shell gì (bash, PowerShell) hoặc loại CSDL nào (MySQL, PostgreSQL). Ngoài ra, bạn có thể yêu cầu giải thích lệnh: “Lệnh trên có tác dụng gì?” để hiểu rõ trước khi chạy.
Ví dụ minh họa¶
CLI:
- Yêu cầu: “Mình muốn nén tất cả các file .log trong thư mục hiện tại thành file logs.zip.”
- Phản hồi của Copilot:
zip logs.zip *.log
SQL:
- Yêu cầu: “Viết câu truy vấn SQL lấy tất cả user chưa đăng nhập trong 30 ngày qua (bảng users, cột last_login).”
- Phản hồi của Copilot (MySQL):
SELECT * FROM users WHERE last_login < NOW() - INTERVAL 30 DAY;
Học framework mới / mẫu code học nhanh¶
Mô tả¶
Khi bạn bắt đầu với một framework hoặc thư viện mới, Copilot Chat có thể đóng vai trò người hướng dẫn bằng cách cung cấp các ví dụ mã mẫu và giải thích cơ bản. Điều này giúp rút ngắn đường cong học tập, cho phép bạn thử nghiệm nhanh và hiểu cách sử dụng cơ bản.
Câu lệnh mẫu¶
Bạn có thể hỏi bất kỳ điều gì bạn thắc mắc về framework. Ví dụ: “Làm thế nào để tạo một ứng dụng Express cơ bản?”, “Cách định nghĩa route trong Flask Python?”, “Viết một component React hiển thị một danh sách các sản phẩm từ props”.
Gợi ý cải tiến prompt¶
Hãy cụ thể về ngữ cảnh bạn muốn. Thay vì hỏi “Cách dùng Django” (quá chung chung), hãy hỏi “Tạo model đơn giản trong Django ORM như thế nào?”. Bạn cũng có thể yêu cầu giải thích kèm code.
Ví dụ minh họa¶
Yêu cầu: “Tạo một server Express đơn giản hiển thị 'Hello World' trên trình duyệt.”
Phản hồi của Copilot:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}/`);
});
Copilot có thể kèm lời giải thích: ví dụ express() để tạo ứng dụng, định nghĩa một route GET tại / trả về chuỗi "Hello World", và lắng nghe trên cổng 3000.
Đọc tài liệu thư viện từ URL hoặc cú pháp (Ask Docs)¶
Mô tả¶
Bạn đang tìm hiểu một hàm trong thư viện hoặc gặp một đoạn tài liệu khó hiểu? Copilot Chat có thể giúp bạn giải đáp thắc mắc về tài liệu hoặc API. Mô hình AI của nó đã được huấn luyện trên rất nhiều tài liệu mã nguồn mở và documentation, nên thường có sẵn kiến thức về các hàm phổ biến.
Câu lệnh mẫu¶
Nếu bạn muốn biết về một hàm thư viện, hãy hỏi: “Hàm pandas.DataFrame.tail hoạt động thế nào?”, “Tham số verify của hàm requests.get nghĩa là gì?”. Trong trường hợp bạn có link tài liệu, bạn có thể mở link, copy đoạn liên quan và đưa vào Copilot Chat, sau đó yêu cầu: “Tóm tắt nội dung tài liệu trên”.
Gợi ý cải tiến prompt¶
Khi hỏi về hàm/thư viện, hãy chắc chắn nhắc đến tên thư viện đầy đủ. Nếu Copilot trả lời chưa đúng, hãy thử cung cấp thêm chi tiết. Bạn cũng có thể yêu cầu Copilot so sánh hai hàm tương tự, ví dụ: “So sánh hàm merge và concat trong pandas”.
Ví dụ minh họa¶
Yêu cầu: “Hàm datetime.strptime trong Python dùng để làm gì và sử dụng như thế nào?”
Phản hồi của Copilot: datetime.strptime là một phương thức cho phép chuyển đổi chuỗi (string) thành đối tượng datetime dựa theo một định dạng cho trước.
- Cú pháp:
datetime.strptime(date_string, format) - Ví dụ:
python from datetime import datetime date_str = "2023-12-31" dt = datetime.strptime(date_str, "%Y-%m-%d") print(dt)
Copilot đã cung cấp một câu trả lời khá đầy đủ: nêu công dụng, cách sử dụng, và ví dụ mã minh họa.
Trên đây là các tình huống tiêu biểu cho thấy sức mạnh và sự tiện lợi của GitHub Copilot Chat. Điều quan trọng là hãy giao tiếp rõ ràng với Copilot: mô tả kỹ vấn đề, yêu cầu cụ thể, và biết cách tương tác qua lại để có kết quả tốt nhất. Copilot Chat không thay thế bạn, mà đóng vai trò như một người bạn đồng hành, giúp bạn tăng tốc và gợi ý ý tưởng.