AILapTrinh.comAI Lập Trình
Giao việc cho AI và câu lệnh mẫu

Câu lệnh mẫu nhờ AI viết hàm: chữ ký, ví dụ vào ra, ca biên và kiểm thử đi kèm

Mẫu câu lệnh nhờ AI viết một hàm mới bằng Python hoặc JavaScript: đưa chữ ký trước, ví dụ vào ra, ca biên, kiểu lỗi, và cách kiểm hàm nhận về.

Close-up of hands holding a pencil over a notebook with blank grid pages beside a laptop with dark blank screen, cafe table in Hue, iced coffee glass, soft window light

Muốn AI viết một hàm dùng được ngay, hãy đưa cho nó chữ ký hàm bạn muốn (tên, tham số, kiểu trả về), ba đến năm ví dụ vào ra có cả ca biên, và cách hàm phải phản ứng khi đầu vào sai. Ba thứ đó cố định "hình dạng" của hàm, để trợ lý chỉ còn phải lo phần ruột — đúng phần nó làm tốt nhất.

Bài này đưa mẫu câu lệnh viết hàm cho Python và JavaScript, giải thích vì sao viết chữ ký trước lại hiệu quả, cách chọn ca biên, và quy trình kiểm hàm nhận về. Các ví dụ là bài toán giả định thường gặp trong ứng dụng ở Việt Nam: chuẩn hoá họ tên, tách chuỗi địa chỉ, định dạng số tiền.

Viết chữ ký trước: cố định hình dạng, để AI lo phần ruột

Chữ ký hàm là dòng khai báo gồm tên hàm, các tham số và kiểu dữ liệu trả về. Khi bạn tự viết dòng này và đưa cho trợ lý, bạn đã quyết định thay nó ba điều dễ sai nhất: hàm tên gì để khớp quy ước dự án, nhận dữ liệu ở dạng nào, và trả ra cái gì cho nơi gọi. Phần còn lại là thuật toán bên trong.

Ví dụ với Python, bạn viết sẵn: def chuan_hoa_ho_ten(chuoi: str) -> str: kèm một dòng mô tả "bỏ khoảng trắng thừa, viết hoa chữ đầu mỗi tiếng, giữ nguyên dấu tiếng Việt". Với JavaScript, có thể viết dạng chú thích JSDoc mô tả tham số và giá trị trả về, hoặc chữ ký TypeScript nếu dự án dùng TypeScript.

Lợi ích thứ hai ít được nhắc: chữ ký do bạn viết là bằng chứng bạn đã nghĩ về hàm trước khi giao. Nếu bạn không viết được chữ ký, nghĩa là bạn chưa rõ hàm nhận gì trả gì, và trợ lý cũng sẽ phải đoán. Đó là lúc quay lại phân tích bài toán, chưa phải lúc giao việc.

Mẫu câu lệnh viết hàm, chép và điền

Mẫu dưới chia thành các dòng để dễ điền. Phần trong ngoặc vuông là chỗ bạn thay bằng nội dung của mình:

  • "Ngôn ngữ: [Python 3.11 / Node.js 20 / PHP 8.2]. Không dùng thư viện ngoài trừ [tên, nếu có]."
  • "Viết hàm có chữ ký đúng như sau, không đổi tên và tham số: [dòng chữ ký]."
  • "Mục đích: [một đến hai câu về việc hàm làm và lý do]."
  • "Ví dụ vào và ra: [ba đến năm cặp, mỗi cặp một dòng]."
  • "Đầu vào không hợp lệ thì: [ném lỗi loại gì / trả về giá trị gì]."
  • "Trả về: mã hàm có chú thích ngắn bằng tiếng Việt, và các ca kiểm thử ứng với từng ví dụ ở trên. Không giải thích dài."

Dòng "không đổi tên và tham số" cần thiết vì trợ lý đôi khi tự "cải tiến" tên hàm hoặc thêm tham số tuỳ chọn. Dòng yêu cầu kiểm thử ứng với từng ví dụ giúp bạn có ngay công cụ kiểm, và nếu trợ lý viết kiểm thử khác với ví dụ bạn đưa, đó là dấu hiệu nó đã hiểu sai.

Chọn ca biên: những đầu vào hay làm hàm vỡ

Ví dụ vào ra chỉ có giá trị khi có ca biên. Bảng dưới gợi ý ca biên theo loại dữ liệu; chọn hai ba ca liên quan nhất cho hàm của bạn.

Loại dữ liệuCa biên nên đưaVì sao hay vỡ
ChuỗiChuỗi rỗng, chỉ có khoảng trắng, có dấu tiếng Việt tổ hợp, rất dàiChữ có dấu có thể được mã hoá theo hai cách nhìn giống hệt nhau nhưng so sánh khác nhau
SốSố không, số âm, số rất lớn, số thập phânLàm tròn và chia cho không là nguồn lỗi kinh điển
Danh sáchRỗng, một phần tử, phần tử trùng nhauVòng lặp và phép lấy phần tử đầu hay giả định có ít nhất một phần tử
Ngày giờNgày cuối tháng, ngày 29 tháng 2, nửa đêm, khác múi giờCộng tháng và so sánh ngày dễ lệch một ngày
TiềnSố lẻ đồng, số tiền rất lớn, giá trị khôngDùng số thực cho tiền gây sai số cộng dồn
Giá trị rỗngNone, null, undefined, thiếu khoá trong từ điểnHàm giả định dữ liệu luôn đủ

Riêng với tiếng Việt, ca biên chữ có dấu đáng đưa vào gần như mọi hàm xử lý chuỗi. Một hàm chuẩn hoá họ tên chạy đúng với "nguyễn văn an" nhưng có thể hỏng với chuỗi được dán từ một văn bản dùng kiểu mã hoá dấu khác. Yêu cầu trợ lý chuẩn hoá Unicode về dạng NFC trước khi xử lý là một dòng ràng buộc đáng thêm.

Ví dụ đầy đủ: hàm định dạng số tiền

Một yêu cầu hoàn chỉnh, bài toán giả định: "Python 3.11, không thư viện ngoài. Viết hàm có chữ ký def dinh_dang_tien(so_dong: int) -> str. Mục đích: hiển thị số tiền trên hoá đơn theo kiểu Việt Nam, dấu chấm ngăn hàng nghìn, thêm chữ đ ở cuối. Ví dụ: 0 ra 0 đ; 1500 ra 1.500 đ; 1250000 ra 1.250.000 đ; số âm 20000 ra -20.000 đ. Nếu đầu vào không phải số nguyên thì ném TypeError. Trả về mã hàm và bốn ca kiểm thử pytest ứng với bốn ví dụ."

Một lời giải hợp lý mà trợ lý có thể đưa ra dùng định dạng có sẵn của Python để chèn dấu phẩy hàng nghìn rồi thay bằng dấu chấm, ví dụ chuỗi f"{abs(so_dong):,}".replace(",", "."), rồi xử lý dấu âm riêng. Đó là cách ngắn và đúng với số nguyên. Điều đáng kiểm là nó có nhớ ca số âm không, và có kiểm kiểu bằng isinstance hay không; lưu ý trong Python, giá trị True cũng được coi là số nguyên khi kiểm bằng isinstance với int, nên nếu muốn chặn cả kiểu bool thì phải kiểm riêng.

Chi tiết cuối là loại chuyện trợ lý thường không tự nghĩ tới, và cũng là loại chuyện ví dụ vào ra của bạn không bao phủ. Nó chỉ lộ ra khi bạn đọc mã với câu hỏi "còn đầu vào lạ nào lọt qua được không". Đọc mã AI viết theo cách đó quan trọng hơn đọc xem nó có gọn không.

Tách phần tính toán khỏi phần đọc ghi

Hàm dễ giao cho AI nhất, và dễ kiểm nhất, là hàm thuần: nhận đầu vào qua tham số, trả kết quả qua giá trị trả về, không đọc cơ sở dữ liệu, không gọi mạng, không ghi tệp, không phụ thuộc giờ hệ thống. Với hàm thuần, ví dụ vào ra là toàn bộ đặc tả; bạn kiểm bằng vài dòng mà không cần dựng môi trường.

Nhiều việc thực tế trộn hai phần: đọc đơn hàng từ cơ sở dữ liệu, tính tiền chiết khấu, rồi lưu lại. Khi giao cho trợ lý, tách thành hai yêu cầu. Yêu cầu thứ nhất là hàm thuần tinh_chiet_khau nhận danh sách mặt hàng và mã khuyến mãi, trả về số tiền giảm. Yêu cầu thứ hai là đoạn mã đọc dữ liệu, gọi hàm thuần đó, rồi ghi kết quả. Phần thứ hai ngắn và gần như không có logic, nên lỗi hầu hết nằm ở phần thứ nhất — nơi bạn đã có kiểm thử.

Với hàm cần thời gian hiện tại, như kiểm mã khuyến mãi còn hạn, hãy truyền ngày hiện tại vào như một tham số thay vì để hàm tự lấy giờ hệ thống. Nói rõ điều này trong yêu cầu; nếu không, trợ lý thường gọi thẳng hàm lấy giờ bên trong và kiểm thử của bạn sẽ chạy đúng hôm nay nhưng sai vào tuần sau.

Khi hàm mới phải gọi mã đã có trong dự án

Hàm hiếm khi đứng một mình. Hàm định dạng hoá đơn có thể cần gọi hàm lấy thông tin cửa hàng, hàm tính thuế có sẵn, hằng số tỉ lệ đặt trong tệp cấu hình. Nếu không được cho biết, trợ lý sẽ tự viết lại những phần đó — một bản sao thứ hai, lệch với bản gốc ngay khi ai đó sửa bản gốc.

Cách xử lý là đưa chữ ký của các hàm có sẵn kèm một dòng mô tả hành vi, không cần thân hàm: "Có sẵn và phải dùng lại: lay_cua_hang(id: int) -> dict trả về các khoá ten, dia_chi, ma_so_thue; tinh_thue(so_tien: int) -> int. Không tự viết lại hai hàm này." Câu cuối là ràng buộc then chốt.

Nếu dùng trợ lý trong trình soạn thảo hoặc tác tử đọc được kho mã, chỉ đích danh tệp chứa các hàm đó cũng có tác dụng tương tự. Sau khi nhận mã, tìm nhanh trong kết quả xem có hàm nào trùng chức năng với hàm có sẵn không; đó là dấu hiệu trợ lý đã bỏ qua ràng buộc.

Kiểm hàm nhận về theo năm bước

Dù trợ lý báo đã viết kiểm thử, quy trình kiểm vẫn nằm ở phía bạn:

  1. So chữ ký: tên hàm, tham số, kiểu trả về khớp đúng dòng bạn đã đưa.
  2. Chạy các ca kiểm thử kèm theo trên máy của bạn. Không tin câu "tất cả đều qua" trong câu trả lời; trợ lý chatbot không thật sự chạy mã của bạn trừ khi công cụ có môi trường chạy và bạn thấy kết quả chạy.
  3. Đối chiếu từng ca kiểm thử với ví dụ bạn đưa. Kiểm thử có kết quả mong đợi khác ví dụ nghĩa là trợ lý đã sửa kiểm thử cho khớp với mã sai.
  4. Tự thêm hai ca ngoài danh sách: một đầu vào lạ và một ca biên bạn chưa nghĩ tới lúc giao việc.
  5. Đọc thân hàm tìm lời gọi tới hàm hoặc thư viện bạn chưa biết; tra tài liệu chính thức để chắc nó tồn tại ở phiên bản bạn dùng.

Bước ba thường bị bỏ qua mà lại bắt được nhiều lỗi nhất. Khi bạn hỏi đi hỏi lại vì một ca không qua, trợ lý đôi khi sửa luôn kết quả mong đợi trong kiểm thử thay vì sửa hàm. Mọi thứ báo xanh, nhưng hàm vẫn sai.

Câu lệnh kém hay gặp và cách sửa nhanh

Câu kém phổ biến nhất là chỉ có tên việc: "viết hàm kiểm tra email hợp lệ". Trợ lý sẽ trả về một biểu thức chính quy dài, có thể quá chặt (chặn địa chỉ hợp lệ có dấu cộng) hoặc quá lỏng, kèm lời giải thích về chuẩn email mà bạn không cần. Sửa bằng cách thêm mục đích và ví dụ: kiểm sơ bộ ở form đăng ký, việc xác thực thật sẽ bằng thư gửi mã, nên chỉ cần chặn lỗi gõ rõ ràng; đưa ba địa chỉ phải qua và ba địa chỉ phải bị chặn.

Câu kém thứ hai là đưa ví dụ mà không có ca biên: toàn bộ ví dụ đều là trường hợp đẹp, nên trợ lý viết hàm khớp đúng trường hợp đẹp. Câu kém thứ ba là quên nói ngôn ngữ và phiên bản, dẫn tới cú pháp chỉ có ở bản mới mà máy chủ của bạn chưa hỗ trợ — một chuyện hay gặp với dự án chạy PHP hoặc Node.js đời cũ.

Cả ba lỗi đều sửa được trong vài giây nếu bạn có thói quen dùng mẫu. Đó là lý do nhiều người lưu mẫu viết hàm thành một đoạn văn bản dán nhanh, chỉ thay phần trong ngoặc vuông.

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

Nên nhờ AI viết nhiều hàm một lúc hay từng hàm một?

Từng hàm một, trừ khi các hàm rất nhỏ và liên quan chặt với nhau. Mỗi hàm có chữ ký, ví dụ và kiểm thử riêng; gộp nhiều hàm làm câu trả lời dài và bạn dễ đọc lướt. Khi các hàm gọi nhau, viết hàm ở tầng dưới trước, kiểm xong mới viết hàm gọi nó.

Có cần chỉ định kiểu dữ liệu trong Python hay JavaScript không?

Không bắt buộc về cú pháp, nhưng nên có trong yêu cầu. Gợi ý kiểu trong Python hoặc chú thích JSDoc giúp trợ lý hiểu ý bạn rõ hơn và giúp công cụ kiểm tra tĩnh bắt lỗi sớm. Nếu dự án không dùng gợi ý kiểu, có thể yêu cầu trợ lý bỏ chúng khỏi mã cuối.

AI viết hàm dài và phức tạp hơn cần thiết thì làm gì?

Yêu cầu viết lại ngắn nhất có thể mà vẫn qua mọi ca kiểm thử, ưu tiên dùng thư viện chuẩn. Hàm phức tạp thường do trợ lý cố xử lý những trường hợp bạn không yêu cầu. Khi đã có kiểm thử, rút gọn trở nên an toàn vì bạn biết ngay nếu hành vi bị đổi.

Có nên đưa luôn mã sai mình đã tự viết cho AI xem không?

Nên, nếu bạn đã có bản nháp. Bản nháp cho trợ lý thấy hướng bạn chọn và quy ước của bạn. Ghi rõ chỗ nào bạn nghĩ là sai, và hỏi nó sửa trên nền bản nháp thay vì viết lại từ đầu, để bạn hiểu được mình đã sai ở đâu.

Ví dụ vào ra có thể lấy từ dữ liệu thật của khách không?

Không nên dán dữ liệu thật. Tạo dữ liệu giả có cùng hình dạng: cùng độ dài, cùng kiểu ký tự, cùng loại lỗi hay gặp, nhưng tên, số điện thoại, địa chỉ đều bịa. Hàm viết đúng cho dữ liệu giả cùng hình dạng sẽ đúng cho dữ liệu thật.

Hàm AI viết có vấn đề về giấy phép không?

Với hàm ngắn, phổ biến như định dạng tiền, khả năng trùng nguyên văn một mã có giấy phép hạn chế là thấp, nhưng không bằng không. Nếu công ty bạn có quy định về mã do AI sinh ra, làm theo quy định đó. Phần giấy phép mã nguồn mở có bài riêng ở danh mục an toàn mã nguồn của trang.

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