
Sau 2 năm từ khi bắt đầu học lập trình, hôm nay tôi quyết định thử sức với một dự án mới, phát triển một ứng dụng Web bằng html, css và javascript, sử dụng API của OpenAI để nhận diện giọng nói của học sinh và tự động sửa bài. Với kiến thức cơ bản về lập trình, chatGPT đã giúp tôi hoàn thiện dự án này chỉ trong 1 tuần, một trải nghiệm thật thú vị.
*Bài viết sẽ không đi quá sâu vào coding, chỉ chia sẻ trải nghiệm của tôi về quá trình thực hiện thôi ^^
*Bài viết sẽ không đi quá sâu vào coding, chỉ chia sẻ trải nghiệm của tôi về quá trình thực hiện thôi ^^
Bài toán cần giải quyết
Là một giáo viên tiếng Anh, từ lâu tôi đã muốn có một ứng dụng có khả năng ghi âm và tự đánh giá bài nói của học viên, tương tự như App Elsa. Do hiện nay tôi dạy online, việc học viên luyện nói không hiệu quả như học trực tiếp. Ứng dụng này giúp học viên thoải mái luyện tập mà không cần phải phụ thuộc vào việc tham gia lớp học trực tiếp với giáo viên. Sau khi hoàn thành khóa học, họ vẫn có thể sử dụng ứng dụng để nâng cao trình độ của mình.- Ứng dụng chạy trên nền web (có thể truy cập từ các thiết bị IOS/ Android)
- Cho phép ghi âm giọng nói và chuyển đổi sang định dạng MP3 → chuyển MP3 thành văn bản
- Xử lý văn bản (nội dung nói của người dùng) → sửa lỗi chính tả và tăng cường từ vựng
- Văn bản sau khi được cải thiện → chuyển đổi thành MP3 để người dùng nghe lại
Công cụ hỗ trợ trong dự án
Dự án này tôi sử dụng API của OpenAI và Google Text-To-Speech- Sử dụng Whisper API để chuyển đổi giọng nói thành văn bản
- Sử dụng Model GPT-3.5 để xử lý văn bản (sửa lỗi chính tả, mở rộng từ vựng)
- Sử dụng Google Text-To-Speech để chuyển văn bản thành giọng nói để nghe lại
Đây là phiên bản beta của ứng dụng nên tôi đã xây dựng cơ bản bằng html, css và javascript. Đa phần các logic sẽ được xử lý trên phía client. Các dự án lớn hơn, tôi sẽ phân chia thành hai phần server - client (đang học React và Nodejs trên Youtube hihi)
Luồng làm việc của Web-App sẽ như sau:
- Người dùng đăng nhập bằng tài khoản Google
- Nếu là lần đầu đăng ký, dữ liệu sẽ được lưu vào cơ sở dữ liệu (tôi sử dụng Firebase Realtime Database)
- Người dùng nhấn nút để bắt đầu ghi âm
- Phần ghi âm được chuyển thành file MP3
- File MP3 gửi yêu cầu đến Whisper API → ta nhận được kịch bản của bài nói gốc
- Kịch bản bài nói gốc gửi yêu cầu đến model GPT-3.5 → ta có bản nâng cấp của bài nói
- Bản nâng cấp của bài nói gửi yêu cầu đến Google Text-To-Speech → chuyển đổi thành MP3 để phát lại cho người dùng nghe
Cách tôi sử dụng ChatGPT để viết code
Là một người tự học lập trình và còn non nớt, tôi đã nhờ đến ChatGPT để hỗ trợ hoàn thành từng phần công việc.
Tôi dùng phiên bản ChatGPT Plus với tốc độ phản hồi vô cùng nhanh chóng. Việc lập trình trở nên dễ dàng hơn rất nhiều (chi phí khoảng 500k/ tháng, tôi nhờ một người bạn ở Mỹ đăng ký giúp vì không thanh toán được bằng tài khoản ngân hàng Việt Nam)
Phương pháp của tôi là đặt vấn đề cho ChatGPT và sao chép mã code nhận được vào Visual Studio Code

Tôi đã gửi yêu cầu mô tả giao diện và cách hoạt động cho ChatGPT
- Giao diện có 1 nút để ghi âm, 1 nút để phát lại và 1 trình phát âm thanh
- Người dùng nhấn nút ghi âm → nút chuyển sang màu đỏ → nhấn lại để chuyển về trạng thái bình thường
- Sau khi ghi âm, có file MP3 → nhấn nút phát lại để nghe lại

Tôi sao chép đoạn mã nhận được vào Visual Studio Code

Khi code chạy trên trình duyệt, chức năng ghi âm và phát lại hoạt động hoàn hảo, thật là kỳ diệu 😁
Tôi tiếp tục sử dụng cách trên, từng bước yêu cầu chatGPT gợi ý mã code cho các phần còn lại:

Đăng nhập bằng tài khoản Google nhé

Chuyển đổi âm thanh thu được thành văn bản và xử lý sửa lỗi chính tả cũng như mở rộng từ vựng nhé

Lưu bài viết và nhấn vào từ trong bài nói để tra từ điển nhé
Vậy làm Web-app với ChatGPT cũng khá đơn giản, chỉ cần copy và paste là xong phải không? Hãy tiếp tục đọc phần tiếp theo để biết thêm thông tin nhé ^^
Giới hạn của chatGPT
1. Chỉ có thể trả về một số kết quả giới hạn
- Nếu bạn nghĩ rằng chỉ cần đưa ra yêu cầu chi tiết, chatGPT sẽ cung cấp đầy đủ mã code để hoàn thành một ứng dụng... thì không hẳn vậy đâu!
Mình đã thử yêu cầu một giao diện hoàn toàn mới cho ứng dụng của mình và chỉ nhận được một phần nhỏ yêu cầu được thực hiện trước khi quá trình bị ngưng. Tuy nhiên, bạn vẫn có thể nhập lệnh 'continue' để tiếp tục, mặc dù sau 2, 3 lần nhập lệnh này, nó đã quên mất những gì đã được thực hiện trước đó và bắt đầu tạo ra một mã code lộn xộn.