suesitran / public_chat

A simple public chat for anyone to chat with Gemini
25 stars 40 forks source link

Add language for Gemini FunctionCall translation, solve error (#12) #22

Open ChunhThanhDe opened 6 days ago

ChunhThanhDe commented 6 days ago

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:

  1. 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.

  2. 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.

  3. 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

Verify

verify

Video Demo

Demo Video

Firestore Database

Collection users for UserDatabase
Screenshot 2024-11-16 at 21 18 13
Collection public for message Chat Public Room
Screenshot 2024-11-16 at 21 18 37
Collection displayed for app language UI texts
Screenshot 2024-11-16 at 21 18 51 Screenshot 2024-11-16 at 21 19 03

Note: