GPT-5.6 Sol vs Claude Opus 4.8: Nhờ AI viết công cụ nhập CSV dùng lại được, kiểm thử thực tế

Mỗi tuần xuất một bảng sản phẩm từ Excel ra CSV rồi nạp vào cơ sở dữ liệu hoặc một API phía sau — nghe thì đơn giản, nhưng phần khó nằm ở chỗ không được để dữ liệu sai lọt vào, không được ghi đè file nguồn khi quá trình nhập thất bại, và cũng không được giữ lại file JSON lần trước như thể lần này đã thành công. Nếu bạn phải làm việc này đều đặn, một kịch bản dùng một lần sẽ không đủ; bạn cần một công cụ nhỏ, có thể lưu lại, chạy lặp lại và không âm thầm phá hỏng gì cả.
Tôi đã giao cho GPT-5.6 Sol và Claude Opus 4.8 đúng cùng một bài toán: viết một công cụ Node.js chuyển CSV sản phẩm thành JSON. Phiên bản đầu tiên của cả hai mô hình đều mắc đúng một lỗi nghiêm trọng là ghi đè chính file CSV nguồn khi đầu vào và đầu ra trỏ cùng một đường dẫn, mặc dù yêu cầu ban đầu đã cấm điều đó. Sau một vòng phản hồi, cả hai bản sửa đổi đều hoạt động đúng trên 23 tình huống đầu vào cục bộ mà tôi đã chuẩn bị. Bài viết này không phải để trao giải mô hình nào tốt hơn, mà để chỉ ra phần việc nào bạn có thể giao cho mô hình và phần nào bạn vẫn phải tự kiểm tra.
Yêu cầu đưa cho GPT-5.6 Sol và Claude Opus 4.8 trước khi viết công cụ nhập CSV
Dữ liệu đầu vào trông đơn giản — SKU, tên sản phẩm, giá và tồn kho. Mỗi dòng CSV là một sản phẩm, giá được viết bằng hai chữ số thập phân, tồn kho 0 có nghĩa là hết hàng chứ không phải thiếu dữ liệu.
sku,name,price,stock
A01,Mug,12.30,7
A02,Canvas Bag,0.29,0
Phía dưới, products.json cần phải đưa giá về số nguyên "cent" để các API sau này không phải xử lý số thực. 12.30 phải thành 1230, 0.29 phải thành 29. Tồn kho 0 phải giữ nguyên.
[
{ "sku": "A01", "name": "Mug", "priceCents": 1230, "stock": 7 },
{ "sku": "A02", "name": "Canvas Bag", "priceCents": 29, "stock": 0 }
]
Dữ liệu thực tế lộn xộn hơn nhiều. Tên sản phẩm có thể chứa dấu phẩy như "Mug, Blue", hoặc có xuống dòng nằm trong cặp dấu ngoặc kép. Vì vậy không thể cắt chuỗi theo dấu phẩy hay theo dòng một cách ngây thơ. Trong lần đo thực tế, các bản sửa đổi của GPT-5.6 Sol và Claude Opus 4.8 đều xử lý đúng BOM UTF-8, dấu phẩy trong ngoặc kép và xuống dòng bên trong trường. Với bài toán phạm vi rõ ràng, cả hai mô hình đều có thể viết đúng phần phân tích CSV.
GPT-5.6 Sol và Claude Opus 4.8 xử lý CSV lộn xộn như thế nào khi được giao đúng yêu cầu
Khi viết lời nhắc cho mô hình, mô tả thành công thôi là chưa đủ — phải nói rõ cả cách mà công cụ phải thất bại. Đây là phiên bản tiếng Việt rút gọn của yêu cầu tôi đã gửi:
Hãy viết một file Node.js CommonJS hoàn chỉnh
import-products.cjs. Cách dùng:node import-products.cjs products.csv products.json. Không được dùng thư viện ngoài. Tệp CSV là UTF-8 (cho phép BOM); hỗ trợ CRLF/LF, dấu phẩy và xuống dòng trong ngoặc kép, dấu ngoặc kép được thoát bằng"". Header phải chứa đúng một trong mỗi:sku/SKU/Product ID,name/Product Name,price/Price,stock/Stock. Chấp nhận thứ tự cột khác nhau và khoảng trắng bao quanh tên cột, nhưng từ chối cột thiếu, bí danh lặp, hoặc cột không nhận dạng. SKU và tên giữ nguyên chuỗi, chỉtrim()để kiểm tra rỗng; SKU phân biệt chữ hoa, không được trùng lặp. Giá phải có đúng hai chữ số thập phân và được chuyển sang số nguyên cent an toàn. Tồn kho phải là số nguyên không âm. Chỉ ghi mảng JSON khi toàn bộ CSV hợp lệ.Quan trọng: Nếu CSV sai định dạng, dữ liệu vi phạm quy tắc, hoặc đường dẫn đầu vào và đầu ra trỏ về cùng một file thực, hãy ghi lỗi ra stderr và kết thúc với mã khác không. Không được sửa file đầu vào, cũng không được tạo mới hoặc ghi đè file đầu ra cũ. Khi thành công, in số lượng sản phẩm đã xử lý. Ghi vào một file tạm cùng thư mục rồi
renamesang tên đích. Không gọi mạng, không chạy tiến trình con.
Khi yêu cầu được viết ở mức này, cả hai mô hình đã ánh xạ bí danh cột đúng, kể cả khi tôi xáo trộn thứ tự cột và dùng cả tiêu đề tiếng Anh lẫn tiếng Trung giản thể. Các trường hợp cột thiếu, cột lặp hoặc cột không nhận dạng đều bị từ chối đúng cách và file JSON cũ không bị động đến.
Dù vậy, phiên bản đầu tiên của cả GPT-5.6 Sol và Claude Opus 4.8 vẫn bỏ qua câu "không được sửa file đầu vào" khi tôi cố ý truyền cùng một đường dẫn cho đầu vào và đầu ra. Cả hai đều ghi đè file CSV nguồn. Sau khi tôi mô tả cụ thể lỗi đó và yêu cầu kiểm tra danh tính file thực sự (so sánh realpath + inode trên Linux, equivalent trên Windows), các bản sửa đổi mới chặn được tình huống này. Bài học rõ ràng: lời nhắc kỹ không miễn trừ việc kiểm tra bản thảo đầu tiên — bạn vẫn phải chạy nó trên fixture, không phải trên dữ liệu thật.
Chạy an toàn công cụ do GPT-5.6 Sol và Claude Opus 4.8 sinh ra
Cách tích hợp vào quy trình công việc hằng ngày rất đơn giản. Lưu mã sinh ra thành import-products.cjs cùng thư mục với products.csv, cài Node.js nếu máy chưa có, rồi chạy:
node import-products.cjs products.csv products.json
Nếu bạn đưa lệnh này vào pipeline tự động (chẳng hạn trong một bash script của cron), hãy kiểm tra mã thoát trước khi chuyển sang bước tiếp theo:
node import-products.cjs products.csv products.json
if [ $? -ne 0 ]; then
echo "Lần nhập thất bại. Dừng xử lý sau." >&2
exit 1
fi
Khi thành công, bạn có thể viết một script phụ nhỏ để lọc nhanh — ví dụ lấy ra các SKU hết hàng:
const fs = require('node:fs');
const products = JSON.parse(fs.readFileSync('products.json', 'utf8'));
const outOfStock = products.filter(product => product.stock === 0);
console.log(`Tổng sản phẩm: ${products.length}`);
console.log(`SKU hết hàng: ${JSON.stringify(outOfStock.map(product => product.sku))}`);
Có một tình huống dễ bị bỏ sót: khi lần nhập hôm nay thất bại, các bản sửa đổi của cả hai mô hình giữ nguyên products.json lần trước. Điều này tốt vì nó không phá dữ liệu cũ, nhưng cũng nguy hiểm vì bước sau trong pipeline có thể đọc file đó mà tưởng là kết quả của hôm nay. Cách phòng tránh duy nhất là luôn đọc mã thoát; đừng dựa vào việc file có tồn tại hay không. Tôi đã kiểm thử tình huống này bằng cách đặt sẵn một products.json giả lập "lần trước thành công" rồi cố ý nhập giá 12.3 (không đủ hai chữ số thập phân): cả hai công cụ đều báo lỗi, thoát với mã khác không, và file giả lập kia không bị động đến.
GPT-5.6 Sol và Claude Opus 4.8 báo lỗi khác nhau ở đâu
Với giá sai định dạng 12.3, Claude Opus 4.8 in ra một thông báo bằng tiếng Trung giản thể dạng "giá phải có đúng hai chữ số thập phân (ví dụ 12.30)". Nếu bạn hoặc đồng nghiệp đọc được tiếng Trung thì nó rõ hơn mô tả kỹ thuật. GPT-5.6 Sol trả lời bằng tiếng Anh và kèm theo số thứ tự bản ghi logic bị lỗi. Khi file có hàng nghìn dòng, con số đó giúp mở editor và nhảy thẳng tới dòng cần sửa.
Trong một bài kiểm tra riêng chỉ tập trung vào hàm phân tích chuỗi — tôi yêu cầu mỗi mô hình sinh ba lần hàm parseCsv(input) cho một đầu vào có dấu ngoặc kép chưa đóng và một chú thích đa dòng — cả ba lần của GPT-5.6 Sol đều phân tích đúng, còn Claude Opus 4.8 chỉ đúng một trong ba lần, hai lần còn lại chèn dòng rỗng hoặc dừng đột ngột. Đây là một quan sát trên n nhỏ, chỉ áp dụng cho đoạn mã phân tích đơn lẻ, không phải tuyên bố tổng quát về khả năng lập trình.
Khi 01.00 được truyền vào vị trí giá, GPT-5.6 Sol từ chối còn Claude Opus 4.8 chấp nhận và chuyển thành 100 cent. Phép toán của Claude không sai; nhưng yêu cầu gốc không ghi rõ có cho phép số không đứng đầu phần nguyên hay không. Nếu dữ liệu kế toán của bạn phụ thuộc vào quy ước này, hãy quyết định trước và đưa vào yêu cầu, đừng để mô hình đoán.
Khi nào nên chọn GPT-5.6 Sol và khi nào nên chọn Claude Opus 4.8
Nếu bạn chỉ cần một công cụ hoàn chỉnh để chạy lại nhiều lần, cả GPT-5.6 Sol và Claude Opus 4.8 đều đáp ứng được sau một vòng phản hồi. Hãy dùng mô hình bạn đã quen, và dành thời gian còn lại để xác định rõ các quy tắc nghiệp vụ: A01 có bằng A01 không, giá thiếu nên báo lỗi hay mặc định bằng không, giá dạng 01.00 có hợp lệ không. Đó là những quyết định mô hình không thể thay bạn, và cũng là nơi hệ thống hay vỡ nhất.
Tất cả lệnh gọi được thực hiện ngày 3 tháng 11 năm 2026 thông qua https://api.crazyrouter.com/v1/chat/completions với các model ID gpt-5.6-sol và claude-opus-4-8. Tôi dùng cùng một lời nhắc tiếng Trung giản thể, cùng một vòng phản hồi và không chỉnh sửa mã do mô hình sinh ra. Môi trường chạy là Node.js v24.21.0. 23 tình huống đầu vào là các biến thể cục bộ dành cho cùng một công cụ, không phải 23 bài toán độc lập cho mô hình.
Để tự thử lại, bạn có thể xem danh mục mô hình phục vụ coding và hướng dẫn tích hợp OpenAI-compatible. Hãy chuẩn bị một CSV mẫu không chứa dữ liệu nhạy cảm, viết rõ "khi thành công sinh file gì" và "khi thất bại tuyệt đối không được chạm vào file nào" — bộ quy tắc này đáng giá hơn mọi so sánh "mô hình nào mạnh hơn".
All rights reserved