Ứng dụng trò chuyện nhóm công khai với khả năng dịch tin nhắn đa ngôn ngữ, tận dụng tối đa sức mạnh của Gemini 1.5 Pro để tự động dịch mọi tin nhắn sang ngôn ngữ yêu thích của người dùng.
Đánh Giá Khả Thi & Lựa Chọn Giải Pháp
Dựa trên mô tả lỗi #12, có nhiều phương án khác nhau để giải quyết bài toán này. Tuy nhiên, em muốn giữ nguyên ý tưởng ban đầu của tác giả và tận dụng tối đa tiềm năng của Gemini 1.5 để giải quyết vấn đề. Lựa chọn Gemini là một hướng đi mới so với các ứng dụng tương tự đã tồn tại và sẽ có nhiều hướng để phát triển tiếp trong tương lai.
Em đã tham khảo thêm Slide hướng dẫn tích hợp Gemini từ package google_generative_ai tại HaNoiDevfest24 của chị Su và tài liệu từ Google AI Docs. Từ đó, em lên các ý tưởng để giải quyết bài toán này một cách hiệu quả nhất.
Lên ý tưởng và Xây dựng kịch bản (cho giải pháp sử dụng Gemini 1.5 Pro)
Handle 1: Lưu ngôn ngữ
Lưu ngôn ngữ yêu thích của người dùng: em sẽ lưu ngôn ngữ yêu thích của người dùng lên Firebase, giúp giữ cấu hình ngôn ngữ khi đăng nhập trên các thiết bị khác nhau.
Handle 2: Xử lý dịch
🤔 Ý tưởng 1: Tự động dịch toàn bộ tin nhắn
Hiện tại gemini hỗ trợ chung 30 ngôn ngữ cho cả thiết bị Android và IOS Gemini Supported Languages
Supported Languages for Prompts và em không nghĩ ý tưởng sử dụng gemini để dịch 1 tin nhắn ra tổng cộng 30 ngôn ngữ là ý tưởng hay. Gemini Pro hiện đang giới hạn output là 8192 token Source, nếu chia cho 30 câu trả lời cho các ngôn ngữ thì đâu đó mỗi câu sẽ có khoảng 250 token, là không quá lớn.
Em muốn trao đổi thêm với chị về ý tưởng này để có phương án tối ưu hơn. Có thể là thay vì translate ra 30 ngôn ngữ khác nhau mình sẽ chị translate ra các ngôn ngữ yêu thích của người trong group message. Em sẽ tạo 1 Pull Request mới cho option này, chắc sẽ sử dụng Firebase Cloud Functions và tích hợp với AI Gemini 1.5 Flash thông qua Vertex AI API 🤔, để cân nhắc thêm ạ.
Mô tả giải pháp:
Khi một người dùng gửi tin nhắn mới, ứng dụng sẽ:
1 - Sử dụng Function call, tự động dịch tin nhắn sang các ngôn ngữ trong danh sách.
2 - Lưu kết quả dịch cùng với tin nhắn gốc vào Firebase.
3 - Cập nhật tin nhắn đã dịch tới tất cả người dùng.
Vấn đề cần giải quyết:
Không phải lúc nào người dùng cũng cần tin nhắn phải được dịch. Việc luôn tự động dịch tất cả tin nhắn tiêu tốn nhiều tài nguyên , sẽ có chút bị deley trong quá trình chờ phản hồi từ gemini.
Trong trường hợp xấu nếu input message quá dài có thể output translate sẽ không đáp ứng đúng kì vọng đặt ra
Kết luận:
Mặc dù giải pháp này có thể tự động dịch tin nhắn, nhưng có nhiều tình huống khó handle. ví dụ output json nhưng reponse thiếu,...
Cần chia ra nhiều case để xử lý trong các trường hợp đặc biệt nêu trên
❌ Ý tưởng 2: Dịch tin nhắn theo ngôn ngữ người nhận
Mô tả giải pháp:
Mỗi khi người dùng nhận tin nhắn, ứng dụng sẽ tự động dịch tin nhắn đó sang ngôn ngữ yêu thích của người nhận và lưu thông tin dịch lên Firebase.
Vấn đề cần giải quyết:
Tải yêu cầu dịch lên Gemini quá lớn: Khi có quá nhiều người dùng và mỗi tin nhắn cần dịch sang nhiều ngôn ngữ, số lượng yêu cầu dịch gửi tới Gemini sẽ tăng lên nhanh chóng.
Điều này có thể dẫn đến lỗi "Resource has been exhausted" từ Gemini, vì số lượng yêu cầu dịch vượt quá khả năng xử lý của gemini.
-> Ý tưởng này sẽ khả thi nếu như ứng dụng yêu cầu người dùng nhập key Gemini, như vậy sẽ hạn chế số lượng request gửi cùng lúc, tuy nhiên như vậy sẽ ảnh hưởng đến trải nghiệm người dùng, Không tối ưu
✅ Ý tưởng 3: Giải pháp hiện tại để giải quyết issue này (Yêu cầu dịch khi người dùng nhấp vào tin nhắn)
Mô tả giải pháp:
Không tự động dịch: Thay vì tự động dịch tất cả tin nhắn, người dùng sẽ có thể lựa chọn tin nhắn nào cần dịch. Điều này thêm tuỳ biến cho người dùng
Cách hoạt động: Khi người dùng nhấp vào một tin nhắn, họ sẽ yêu cầu dịch tin nhắn đó sang ngôn ngữ yêu thích của mình. Sau đó, Ứng dụng sẽ gọi function call từ Gemini để dịch tin nhắn và lưu kết quả vào Firebase.
Cập nhật tin nhắn dịch cho tất cả người dùng cùng ngôn ngữ: Khi tin nhắn đã được dịch cho một người dùng, kết quả dịch sẽ được lưu lại và tự động cập nhật cho tất cả người dùng có cùng ngôn ngữ yêu thích.
Lợi ích:
Giảm tải hệ thống: Việc không tự động dịch mọi tin nhắn giúp giảm số lượng yêu cầu gửi tới Gemini, tránh gây ra lỗi "Resource has been exhausted" do số lượng yêu cầu dịch quá lớn.
Chỉ dịch khi cần thiết: Tin nhắn chỉ được dịch khi người dùng yêu cầu, điều này giúp giảm số lượng yêu cầu không cần thiết và luôn đủ tải để sẫn sàng cung cấp dịch vụ khi người dùng cần.
Chia sẻ bản dịch giữa các người dùng: Khi một người dùng yêu cầu dịch tin nhắn, kết quả dịch sẽ được lưu vào Firebase và có thể được chia sẻ với những người dùng khác có cùng ngôn ngữ yêu thích. Điều này giúp tiết kiệm tài nguyên và tránh phải dịch lại cùng một tin nhắn nhiều lần cho mỗi người dùng.
🙅 Một chút nhược điểm: Sẽ mất một chút thời gian khi yêu cầu dịch: Mặc dù giải pháp này giảm tải cho hệ thống, nhưng người dùng có thể sẽ phải đợi một lúc để nhận được bản dịch sau khi họ nhấp vào tin nhắn.
Kết luận:
Giải pháp này là tối ưu nhất cho việc sử dụng dịch vụ Gemini, không gặp các vấn đề của các ý tưởng trước, còn cung cấp trải nghiệm dịch ngôn ngữ tốt cho người dùng mà không gây ra các vấn đề về quá tải tài nguyên.
Các Cập Nhật Trong Pull Request
Tạo giao diện lựa chọn ngôn ngữ: Đã tạo giao diện cho phép người dùng lựa chọn ngôn ngữ yêu thích, với danh sách 30 ngôn ngữ được Gemini hỗ trợ, áp dụng trên cả Android và iOS. Danh sách này có thể tham khảo từ Gemini Supported Languages và
Supported Languages for Prompts.
Lưu thông tin ngôn ngữ yêu thích: Đã cập nhật để lưu thông tin ngôn ngữ yêu thích của người dùng vào Firebase, giúp đảm bảo rằng người dùng không cần phải chọn lại ngôn ngữ mỗi khi họ đăng nhập.
Tạo model Gemini và function call: Đã tạo model Gemini để hỗ trợ dịch ngôn ngữ và function call để dịch bất kỳ tin nhắn nào sang ngôn ngữ mục tiêu khi người dùng nhấn vào tin nhắn đó.
Tạo model Gemini và function call: Đã tạo model Gemini và function call để xử lý dịch một danh sách message sang ngôn ngữ mục tiêu khi người dùng chọn thay đổi ngôn ngữ yêu thích để xử lý thay đổi ngôn ngữ ứng dụng sang ngôn ngữ yêu thích mới của người dùng.
Verify
Đã kiểm tra trên 2 thiết bị Android và web cùng lúc và các chức năng đều hoạt động tốt.
PR này được submit với mục tiêu giữ cho PR đơn giản, dễ hiểu, dễ dàng review, PR không có quá nhiều thay đổi, hạn chế commit không cần thiết và chỉ thay đổi những file liên quan. Mục tiêu chính là giải quyết issue #12 mà không có thêm các cập nhật về UI hay các chức năng khác bổ sung.
Mục Tiêu Của Ứng Dụng
Ứng dụng trò chuyện nhóm công khai với khả năng dịch tin nhắn đa ngôn ngữ, tận dụng tối đa sức mạnh của Gemini 1.5 Pro để tự động dịch mọi tin nhắn sang ngôn ngữ yêu thích của người dùng.
Đánh Giá Khả Thi & Lựa Chọn Giải Pháp
Dựa trên mô tả lỗi #12, có nhiều phương án khác nhau để giải quyết bài toán này. Tuy nhiên, em muốn giữ nguyên ý tưởng ban đầu của tác giả và tận dụng tối đa tiềm năng của Gemini 1.5 để giải quyết vấn đề. Lựa chọn Gemini là một hướng đi mới so với các ứng dụng tương tự đã tồn tại và sẽ có nhiều hướng để phát triển tiếp trong tương lai.
Em đã tham khảo thêm Slide hướng dẫn tích hợp Gemini từ package
google_generative_ai
tại HaNoiDevfest24 của chị Su và tài liệu từ Google AI Docs. Từ đó, em lên các ý tưởng để giải quyết bài toán này một cách hiệu quả nhất.Lên ý tưởng và Xây dựng kịch bản (cho giải pháp sử dụng Gemini 1.5 Pro)
Handle 1: Lưu ngôn ngữ
Lưu ngôn ngữ yêu thích của người dùng: em sẽ lưu ngôn ngữ yêu thích của người dùng lên Firebase, giúp giữ cấu hình ngôn ngữ khi đăng nhập trên các thiết bị khác nhau.
Handle 2: Xử lý dịch
🤔 Ý tưởng 1: Tự động dịch toàn bộ tin nhắn
Hiện tại gemini hỗ trợ chung 30 ngôn ngữ cho cả thiết bị Android và IOS Gemini Supported Languages Supported Languages for Prompts và em không nghĩ ý tưởng sử dụng gemini để dịch 1 tin nhắn ra tổng cộng 30 ngôn ngữ là ý tưởng hay. Gemini Pro hiện đang giới hạn output là 8192 token Source, nếu chia cho 30 câu trả lời cho các ngôn ngữ thì đâu đó mỗi câu sẽ có khoảng 250 token, là không quá lớn.
Em muốn trao đổi thêm với chị về ý tưởng này để có phương án tối ưu hơn. Có thể là thay vì translate ra 30 ngôn ngữ khác nhau mình sẽ chị translate ra các ngôn ngữ yêu thích của người trong group message. Em sẽ tạo 1 Pull Request mới cho option này, chắc sẽ sử dụng Firebase Cloud Functions và tích hợp với AI Gemini 1.5 Flash thông qua Vertex AI API 🤔, để cân nhắc thêm ạ.
Mô tả giải pháp:
Vấn đề cần giải quyết:
Kết luận:
❌ Ý tưởng 2: Dịch tin nhắn theo ngôn ngữ người nhận
Mô tả giải pháp:
Vấn đề cần giải quyết:
-> Ý tưởng này sẽ khả thi nếu như ứng dụng yêu cầu người dùng nhập key Gemini, như vậy sẽ hạn chế số lượng request gửi cùng lúc, tuy nhiên như vậy sẽ ảnh hưởng đến trải nghiệm người dùng, Không tối ưu
✅ Ý tưởng 3: Giải pháp hiện tại để giải quyết issue này (Yêu cầu dịch khi người dùng nhấp vào tin nhắn)
Mô tả giải pháp:
Lợi ích:
Giảm tải hệ thống: Việc không tự động dịch mọi tin nhắn giúp giảm số lượng yêu cầu gửi tới Gemini, tránh gây ra lỗi "Resource has been exhausted" do số lượng yêu cầu dịch quá lớn.
Chỉ dịch khi cần thiết: Tin nhắn chỉ được dịch khi người dùng yêu cầu, điều này giúp giảm số lượng yêu cầu không cần thiết và luôn đủ tải để sẫn sàng cung cấp dịch vụ khi người dùng cần.
Chia sẻ bản dịch giữa các người dùng: Khi một người dùng yêu cầu dịch tin nhắn, kết quả dịch sẽ được lưu vào Firebase và có thể được chia sẻ với những người dùng khác có cùng ngôn ngữ yêu thích. Điều này giúp tiết kiệm tài nguyên và tránh phải dịch lại cùng một tin nhắn nhiều lần cho mỗi người dùng.
🙅 Một chút nhược điểm: Sẽ mất một chút thời gian khi yêu cầu dịch: Mặc dù giải pháp này giảm tải cho hệ thống, nhưng người dùng có thể sẽ phải đợi một lúc để nhận được bản dịch sau khi họ nhấp vào tin nhắn.
Kết luận:
Các Cập Nhật Trong Pull Request
Tạo giao diện lựa chọn ngôn ngữ: Đã tạo giao diện cho phép người dùng lựa chọn ngôn ngữ yêu thích, với danh sách 30 ngôn ngữ được Gemini hỗ trợ, áp dụng trên cả Android và iOS. Danh sách này có thể tham khảo từ Gemini Supported Languages và Supported Languages for Prompts.
Lưu thông tin ngôn ngữ yêu thích: Đã cập nhật để lưu thông tin ngôn ngữ yêu thích của người dùng vào Firebase, giúp đảm bảo rằng người dùng không cần phải chọn lại ngôn ngữ mỗi khi họ đăng nhập.
Tạo model Gemini và function call: Đã tạo model Gemini để hỗ trợ dịch ngôn ngữ và function call để dịch bất kỳ tin nhắn nào sang ngôn ngữ mục tiêu khi người dùng nhấn vào tin nhắn đó.
Tạo model Gemini và function call: Đã tạo model Gemini và function call để xử lý dịch một danh sách message sang ngôn ngữ mục tiêu khi người dùng chọn thay đổi ngôn ngữ yêu thích để xử lý thay đổi ngôn ngữ ứng dụng sang ngôn ngữ yêu thích mới của người dùng.
Verify
Video Demo
Demo Video
Firestore Database
Collection users for UserDatabase
Collection public for message Chat Public Room
Collection displayed for app language UI texts
Note: