Gemini API を使用してドキュメント(PDF など)を分析する

Gemini モデルに、インライン(Base64 エンコード)または URL 経由で指定したドキュメント ファイル(PDF やテキスト ファイルなど)を分析するよう指示できます。Firebase AI Logic を使用する場合は、アプリから直接このリクエストを実行できます。

この機能を使用すると、次のようなことができます。

  • ドキュメント内の図、グラフ、表を分析する
  • 情報を構造化された出力形式に抽出する
  • ドキュメント内の画像とテキストの内容に関する質問に回答する
  • ドキュメントを要約する
  • ドキュメント コンテンツを(HTML などに変換して)文字起こしし、レイアウトとフォーマットを保持して、ダウンストリーム アプリケーション(RAG パイプラインなど)で使用できるようにする

コードサンプルに移動 ストリーミング レスポンスをコードに移動


ドキュメント(PDF など)を操作するためのその他のオプションについては、他のガイドをご覧ください
構造化出力を生成する マルチターン チャット

始める前に

Gemini API プロバイダをクリックして、このページでプロバイダ固有のコンテンツとコードを表示します。

まだ行っていない場合は、スタートガイドを完了してください。このガイドでは、Firebase プロジェクトの設定、アプリの Firebase への接続、SDK の追加、選択した Gemini API プロバイダのバックエンド サービスの初期化、GenerativeModel インスタンスの作成方法について説明しています。

プロンプトのテストと反復処理、生成されたコード スニペットの取得には、Google AI Studio を使用することをおすすめします。

PDF ファイルからテキストを生成する(base64 エンコード)

このサンプルを試す前に、このガイドの始める前にのセクションを完了して、プロジェクトとアプリを設定します。
このセクションでは、選択した Gemini API プロバイダのボタンをクリックして、このページにプロバイダ固有のコンテンツが表示されるようにします

テキストと PDF でプロンプトを与えることで、各入力ファイルの mimeType とファイル自体を指定して、Gemini モデルにテキストの生成を依頼できます。入力ファイルの要件と推奨事項については、このページの下部をご覧ください。

Swift

generateContent() を呼び出して、テキストと PDF のマルチモーダル入力からテキストを生成できます。


import FirebaseAI

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(modelName: "gemini-2.0-flash")


// Provide the PDF as `Data` with the appropriate MIME type
let pdf = try InlineDataPart(data: Data(contentsOf: pdfURL), mimeType: "application/pdf")

// Provide a text prompt to include with the PDF file
let prompt = "Summarize the important results in this report."

// To generate text output, call `generateContent` with the PDF file and text prompt
let response = try await model.generateContent(pdf, prompt)

// Print the generated text, handling the case where it might be nil
print(response.text ?? "No text in response.")

Kotlin

generateContent() を呼び出して、テキストと PDF のマルチモーダル入力からテキストを生成できます。

Kotlin の場合、この SDK のメソッドは suspend 関数であり、Coroutine スコープから呼び出す必要があります。

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
                        .generativeModel("gemini-2.0-flash")


val contentResolver = applicationContext.contentResolver

// Provide the URI for the PDF file you want to send to the model
val inputStream = contentResolver.openInputStream(pdfUri)

if (inputStream != null) {  // Check if the PDF file loaded successfully
    inputStream.use { stream ->
        // Provide a prompt that includes the PDF file specified above and text
        val prompt = content {
            inlineData(
                bytes = stream.readBytes(),
                mimeType = "application/pdf" // Specify the appropriate PDF file MIME type
            )
            text("Summarize the important results in this report.")
        }

        // To generate text output, call `generateContent` with the prompt
        val response = generativeModel.generateContent(prompt)

        // Log the generated text, handling the case where it might be null
        Log.d(TAG, response.text ?: "")
    }
} else {
    Log.e(TAG, "Error getting input stream for file.")
    // Handle the error appropriately
}

Java

generateContent() を呼び出して、テキストと PDF のマルチモーダル入力からテキストを生成できます。

Java の場合、この SDK のメソッドは ListenableFuture を返します。

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .generativeModel("gemini-2.0-flash");

// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);


ContentResolver resolver = getApplicationContext().getContentResolver();

// Provide the URI for the PDF file you want to send to the model
try (InputStream stream = resolver.openInputStream(pdfUri)) {
    if (stream != null) {
        byte[] audioBytes = stream.readAllBytes();
        stream.close();

        // Provide a prompt that includes the PDF file specified above and text
        Content prompt = new Content.Builder()
              .addInlineData(audioBytes, "application/pdf")  // Specify the appropriate PDF file MIME type
              .addText("Summarize the important results in this report.")
              .build();

        // To generate text output, call `generateContent` with the prompt
        ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
        Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
            @Override
            public void onSuccess(GenerateContentResponse result) {
                String text = result.getText();
                Log.d(TAG, (text == null) ? "" : text);
            }
            @Override
            public void onFailure(Throwable t) {
                Log.e(TAG, "Failed to generate a response", t);
            }
        }, executor);
    } else {
        Log.e(TAG, "Error getting input stream for file.");
        // Handle the error appropriately
    }
} catch (IOException e) {
    Log.e(TAG, "Failed to read the pdf file", e);
} catch (URISyntaxException e) {
    Log.e(TAG, "Invalid pdf file", e);
}

Web

generateContent() を呼び出して、テキストと PDF のマルチモーダル入力からテキストを生成できます。


import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(ai, { model: "gemini-2.0-flash" });


// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
  const base64EncodedDataPromise = new Promise((resolve) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result.split(','));
    reader.readAsDataURL(file);
  });
  return {
    inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
  };
}

async function run() {
  // Provide a text prompt to include with the PDF file
  const prompt = "Summarize the important results in this report.";

  // Prepare PDF file for input
  const fileInputEl = document.querySelector("input[type=file]");
  const pdfPart = await fileToGenerativePart(fileInputEl.files);

  // To generate text output, call `generateContent` with the text and PDF file
  const result = await model.generateContent([prompt, pdfPart]);

  // Log the generated text, handling the case where it might be undefined
  console.log(result.response.text() ?? "No text in response.");
}

run();

Dart

generateContent() を呼び出して、テキストと PDF のマルチモーダル入力からテキストを生成できます。


import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
final model =
      FirebaseAI.googleAI().generativeModel(model: 'gemini-2.0-flash');


// Provide a text prompt to include with the PDF file
final prompt = TextPart("Summarize the important results in this report.");

// Prepare the PDF file for input
final doc = await File('document0.pdf').readAsBytes();

// Provide the PDF file as `Data` with the appropriate PDF file MIME type
final docPart = InlineDataPart('application/pdf', doc);

// To generate text output, call `generateContent` with the text and PDF file
final response = await model.generateContent([
  Content.multi([prompt,docPart])
]);

// Print the generated text
print(response.text);

Unity

GenerateContentAsync() を呼び出して、テキストと PDF のマルチモーダル入力からテキストを生成できます。


using Firebase;
using Firebase.AI;

// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create a `GenerativeModel` instance with a model that supports your use case
var model = ai.GetGenerativeModel(modelName: "gemini-2.0-flash");


// Provide a text prompt to include with the PDF file
var prompt = ModelContent.Text("Summarize the important results in this report.");

// Provide the PDF file as `data` with the appropriate PDF file MIME type
var doc = ModelContent.InlineData("application/pdf",
      System.IO.File.ReadAllBytes(System.IO.Path.Combine(
        UnityEngine.Application.streamingAssetsPath, "document0.pdf")));

// To generate text output, call `GenerateContentAsync` with the text and PDF file
var response = await model.GenerateContentAsync(new [] { prompt, doc });

// Print the generated text
UnityEngine.Debug.Log(response.Text ?? "No text in response.");

ユースケースとアプリに適したモデルを選択する方法を学びます。

レスポンスをストリーミングする

このサンプルを試す前に、このガイドの始める前にのセクションを完了して、プロジェクトとアプリを設定します。
このセクションでは、選択した Gemini API プロバイダのボタンをクリックして、このページにプロバイダ固有のコンテンツが表示されるようにします

モデル生成の結果全体を待たずに、ストリーミングを使用して部分的な結果を処理することで、インタラクションを高速化できます。レスポンスをストリーミングするには、generateContentStream を呼び出します。



入力ドキュメントの要件と推奨事項

インライン データとして指定されたファイルは、転送中に base64 にエンコードされるため、リクエストのサイズが増加します。リクエストが大きすぎると、HTTP 413 エラーが発生します。

次について詳しくは、「サポートされている入力ファイルと Vertex AI Gemini API の要件」をご覧ください。

サポートされている動画の MIME タイプ

Gemini マルチモーダル モデルは、次のドキュメント MIME タイプをサポートしています。

ドキュメントの MIME タイプ Gemini 2.0 Flash Gemini 2.0 Flash‑Lite
PDF - application/pdf
テキスト - text/plain

リクエストあたりの上限

PDF は画像として扱われるため、PDF の 1 ページは 1 つの画像として扱われます。プロンプトで許可されるページ数は、モデルがサポートできる画像の数に制限されます。

  • Gemini 2.0 FlashGemini 2.0 Flash‑Lite:
    • リクエストあたりの最大ファイル数: 3,000
    • ファイルあたりの最大ページ数: 1,000
    • ファイルあたりの最大サイズ: 50 MB



Google アシスタントの機能

  • 長いプロンプトをモデルに送信する前に、トークンをカウントする方法を学習します。
  • Cloud Storage for Firebase を設定して、マルチモーダル リクエストに大きなファイルを含め、プロンプトでファイルを提供するより管理されたソリューションを利用できるようにします。ファイルには、画像、PDF、動画、音声を含めることができます。
  • 以下を含む、本番環境の準備(本番環境チェックリストを参照)について検討します。

その他の機能を試す

コンテンツ生成を制御する方法

プロンプトとモデル構成をテストしたり、Google AI Studio を使用して生成されたコード スニペットを取得したりすることもできます。

サポートされているモデルの詳細

さまざまなユースケースで利用可能なモデルと、その割り当て料金について学びます。


Firebase AI Logic の使用感に関するフィードバックを送信する