【Flutter/Dart】Googleの生成AIモデルをつかう

2024/03/29に公開

はじめに

https://pub.dev/packages/google_generative_ai
google_generative_aiでFlutterアプリから簡単にGeminiが使えるようになりましたね。🎉
使用できるモデルバージョンや設定できる項目などを簡単にまとめました📝

使ってみる

使用可能なモデル

Gemini 1.5 Pro

プレビュー版のみ。(Geminiモデルにはプレビュー版と安定版があります)
テキストと画像の入力ができますが、出力はテキストのみです。
コード生成などに最適化されています。

Gemini Pro

入出力はテキストのみ対応しています。
チャットなどに使用する、複数のターンにわたる会話形式の処理が可能です。

Gemini 1.0 Pro Vision

テキストと画像の入力ができますが、出力はテキストのみです。
こちらはまだ複数ターンの会話用に最適化されていないので、チャットを構築するためにはGemini Proを使ってテキストのみ(画像入力は使えない)でやり取りする必要があります。

Embedding

入出力はテキストのみ対応です。
入力テキストのエンベディングを生成します。

AQA

入出力はテキストのみ対応です。
質疑応答を実行するモデルです。

Flutterアプリに導入する

APIキーを取得する

Gemini APIの使用にはAPIキーが必要なので、Google AI Studioで作成します。
https://ai.google.dev/tutorials/setup?hl=ja

プロジェクトにパッケージを追加する

flutter pub add google_generative_ai

パッケージをインポートして使う

プロンプトをハードコーディングしてコンソールにレスポンスを出力するシンプルな例です。
GenerativeModelクラスにモデル名とAPIキーをセットしてgenerateContentを実行すると結果が返ってきます。

import 'package:google_generative_ai/google_generative_ai.dart';

class TestPage extends ConsumerWidget {
  const TestPage();

  
  Widget build(BuildContext context, WidgetRef ref) {
    return Scaffold(
      body: Center(
        child: TextButton(
          onPressed: () async {
            final model = GenerativeModel(model: 'gemini-pro', apiKey: apiKey);
            const prompt = 'なにか喋って';
            final response =
                await model.generateContent([Content.text(prompt)]);
            print(response.text);
          },
          child: const Text('Generate'),
        ),
      ),
    );
  }
}

generateContentStreamを使ってStreamで受け取ることもできます。

final response =
        model.generateContentStream([Content.text(prompt)]);
    await for (final chunk in response) {
      print(chunk.text);
    }

指定するモデルを変更する

先ほどの例では、model: 'gemini-pro'Gemini Proを指定しましたが、他のモデルを指定したい時はここを使いたいモデル名に書き換えます。

生成コンテンツの制御をする

GenerativeModelGenerationConfigをセットすることで生成コンテンツの制御ができます。

たとえばGenerationConfigtemperatureを変更することでコンテンツを生成する際のランダム性の度合いを制御します。(デフォルト値はモデルによって違うようです)
temperatureが0.0や0.1など低い場合は予測可能な一般的な結果を出力する傾向にあり、「なにか喋って」というプロンプトで生成すると次のような普遍的なレスポンスが得られます。

こんにちは、私は言語モデルです。あなたと会話をしたり、質問に答えたり、情報を提供したりできます。何かお手伝いできることはありますか?

temperatureを1.0など高めに設定すると、予測不可能で創造的な結果を出力する傾向にあるので先ほどと同じ「なにか喋って」というプロンプトで生成しても、次のようなレスポンスが返ってきます。

こんばんは、皆さん。お集まりいただき、ありがとうございます。このような場でお話しできることを光栄に思います。

私は、AI技術の進歩とそれが私たちの生活にもたらす影響についてお話ししたいと思っています。この分野は急速に発展しており、私たちはすでにその影響を感じ始めています。

AIは、多くの産業で自動化と効率化を促進してきました。製造業では、ロボットがより多くのタスクを担うようになり、医療では、AIが病気の診断と治療を支援するようになりました。

しかし、AIの台頭には課題も伴います。その中には、雇用の喪失や、AIシステムのバイアスの影響が含まれます。こうした課題を慎重に検討し、これらの技術を責任を持って開発・活用するための対策を講じる必要があります。

AIは私たちの生活を変える可能性を秘めています。これを、私たちの社会を向上させ、人類の進歩を促進するために活用する方法を見出すことが重要です。

ご清聴ありがとうございました。

一般的なレスポンスが欲しいとき・創造的なアイデアが欲しいときなどで使い分けができそうです。

生成コンテンツの安全性を高める

GenerativeModelSafetySettingをセットすることで生成コンテンツの安全性を高めることができます。
SafetySettingは複数指定することができ、次のカテゴリーをどのくらいのレベルでブロックするのか調整できます。

  • harassment(ハラスメント)
  • hateSpeech(ヘイトスピーチ)
  • sexuallyExplicit(性的表現)
  • dangerousContent(危険なコンテンツ)

ユースケースごとに細かく調整ができそうです。

さいごに

iPhoneにGemini搭載の噂があるので今後もっと進化していきそうで楽しみです!
最後までご覧いただきありがとうございました🙏🏻

GitHubで編集を提案
Altiveエンジニアリングブログ

Discussion