Gemini API Developer Competionにアプリを出してみた。
今年の3月にリリースした英単語帳アプリをアップデートし、Gemini API Competitionに提出してみました。ちなみにリリースした時の記事はこちらです。
提出したアプリの紹介を以下から見ることができ、投票することができます!ぜひご確認ください!
今回、このハッカソンに出すにあたって、Gemini APIの有効活用法を考える良いきっかけになりました。ということで、本記事では、Flutterアプリの英単語帳で、どのようにGemini APIを活用したのかを紹介したいと思います。
Geminiを使った機能一覧
大きく分けて次の3つの機能に対してGeminiを使いました。
英単語のサジェスト
元々このアプリは英英辞書みたいな感じでしたので、知らない単語に出会ったときにそれを検索して、保存するという用途でリリースしていました。appleという単語が知らなかったら、appまで入力するとappleやapproproateなどがサジェストされる感じです。
これに対してはGeminiを使う必要がなく、Datamuse APIだけでやっていました。
しかし、日英辞書機能を追加しようとすると、基本的には日英辞書のAPIを使う必要があります。調べてパッとちょうどいいAPIが見つからなかったので、Geminiの生成AIにこの役割をやってもらうことにしました。
結果としては以下のスクショように使えます。
元々僕が英語の意味をChatGPTやGeminiなどの生成AIに聞くことがあったため、その機能を実装してみました。
参考までに、プロンプトを書いた関数は以下です。
Future<String> showPossibleTranslations(String yourMotherLanguageWord) async {
final prompt = '''
Please provide multiple possible translations of the word “$yourMotherLanguageWord” into English, separated by commas, without any spaces after the commas.
For example, if the word you want to look up is “めんどくさい” in Japanese, the output should be as follows.
「tedious,bothersome,tiresome,annoying」
''';
return await _generateContent(prompt) ??
'No response because Gemini API went wrong.';
}
ちなみに関数の引数が yourMotherLanguageWord
であることに気づいたでしょうか?これは、language_pickerで出てくる言語であれば何語でも対応できます。
現在は、最初にアプリを開いたときに出てくる母国語設定で設定した言語を認識できるようにしています。
全ての言語から英語に翻訳できる機能を作るのは、一般に提供されている辞書APIだけで行うのは難しいのではないかと思います。そこを生成AIであれば、プロンプトにその言語を投げるだけで対応してくれるのはお手軽で嬉しいです。
例文の作成と多言語対応のその翻訳
同様にして、例文の作成とその翻訳結果(多言語対応)の実装も行いました。
コードは以下です。
Stream<String> createExampleSentence(String word, {motherLanguage = 'ja'}) {
final languageName = Language.fromIsoCode(motherLanguage).name;
final prompt = '''
Please provide three example sentences in English using the following word or phrase.
---
$word
---
Leave one blank line between each example sentence. Do not include example numbers such as 1, 2, 3 before the sentences. Also, provide a $languageName translation below each example sentence.
If the word has multiple meanings or uses, show different meanings or uses in each example sentence. For instance, if the word can be used as both a verb and a noun, demonstrate each usage in separate sentences. Use English that is understandable at a high school level and create sentences that are commonly used in daily life.
For example, if the word you want to look up is “word,” with Japanese translation, the output should be as follows.
---
The word "hello" is used to greet someone.
「hello」という言葉は誰かに挨拶するために使われます。
The doctor used a medical word that I didn't understand.
医者は、私が理解できない医学用語を使いました。
Please choose your words carefully.
あなたの言葉は慎重に選んでください。
---
''';
return _generateContentStream(prompt);
}
英作文のレビュー機能
保存した単語を使って英作文をすることで復習する機能を追加しました。この英文の添削をGemini APIでやってもらっています。
コードは以下。
Future<String> correct(ReviewItem item) async {
final word0 = item.words[0].text;
final word1 = item.words[1].text;
final prompt = '''
You're an English teacher.
Now you're checking the students' sentence.
The sentence conditions are two as follows:
1. Use both "$word0" and "$word1"
2. Grammatically correct
If the sentence meet these 2 conditions, respond with “Correct👍”.
If the sentence doesn't meet the conditions, respond with “Incorrect❌”, point out the problems, and provide a corrected version of the sentence.
So, please correct the following sentence.
---
${item.sentence}
---
Note that don't be too demanding. Only if the sentence really incorrect, point out.
''';
final output = await _generateContent(prompt);
return output ?? 'No response because Gemini API went wrong.';
}
まとめ
以上、Gemini APIを使った英単語帳アプリのGemini活用方法を紹介してみました。まだまだ最適化できる余地はあるかもしれません。
投票してね
9月30日まで、ユーザー投票期間となっているので、ぜひ以下からこのアプリに投票お願いします!
Discussion