Gemini API'sini kullanarak belgeleri (ör. PDF'ler) analiz etme

Gemini modelinden, satır içi (Base64 olarak kodlanmış) veya URL aracılığıyla sağladığınız belge dosyalarını (PDF'ler ve düz metin dosyaları gibi) analiz etmesini isteyebilirsiniz. Firebase AI Logic kullanırken bu isteği doğrudan uygulamanızdan yapabilirsiniz.

Bu özellik sayesinde şunları yapabilirsiniz:

  • Dokümanlardaki diyagramları, grafikleri ve tabloları analiz etme
  • Bilgileri yapılandırılmış çıkış biçimlerine ayıklama
  • Dokümanlardaki görsel ve metin içerikleriyle ilgili soruları yanıtlama
  • Belgeleri özetleme
  • Doküman içeriğini (ör. HTML'ye) metne dönüştürerek düzenleri ve biçimlendirmeyi koruyun ve alt uygulamalarda (ör. RAG ardışık düzenlerinde) kullanın.

Bu kılavuzda, belge girişinden (PDF'ler gibi) metin oluşturma işlemi ele alınmaktadır ancak belge girişinden görüntü de oluşturabilirsiniz.

Kod örneklerine git Akışlı yanıtlar için koda git


Belgelerle (PDF'ler gibi) çalışmaya yönelik ek seçenekler için diğer kılavuzlara göz atın
Yapılandırılmış çıkış oluşturma Çok turlu sohbet

Başlamadan önce

Bu sayfada sağlayıcıya özel içerikleri ve kodları görüntülemek için Gemini API sağlayıcınızı tıklayın.

Henüz yapmadıysanız başlangıç kılavuzundaki adımları tamamlayın. Bu kılavuzda Firebase projenizi nasıl oluşturacağınız, uygulamanızı Firebase'e nasıl bağlayacağınız, SDK'yı nasıl ekleyeceğiniz, seçtiğiniz Gemini API sağlayıcı için arka uç hizmetini nasıl başlatacağınız ve bir GenerativeModel örneği nasıl oluşturacağınız açıklanmaktadır.

İstemlerinizi test etmek ve yinelemek için Google AI Studio kullanmanızı öneririz.

Bu özelliği destekleyen modeller

Bu kılavuzda, belge girişinden (ör. PDF'ler) metin oluşturma işlemi ele alınmaktadır ve aşağıdaki Gemini modelleri için geçerlidir:

  • gemini-4-argon
  • gemini-3.8-flash
  • gemini-3.5-flash-lite (ve daha eski gemini-3.1-flash-lite)

Eski genel kullanımlı Gemini 3.x Flash ve Gemini 2.5 modelleri bu özelliği destekler ancak yaklaşan kapatma tarihleri ve/veya daha yeni modellere otomatik yönlendirme nedeniyle artık kullanılması önerilmez.

PDF dosyalarından (Base64 kodlu) metin oluşturma

Bu örneği denemeden önce projenizi ve uygulamanızı ayarlamak için bu kılavuzun Başlamadan önce bölümünü tamamlayın.
Bu bölümde, seçtiğiniz Gemini API sağlayıcıya ait düğmeyi tıklayarak bu sayfada sağlayıcıya özel içerikleri görebilirsiniz.

Bir Gemini modelinden, metin ve PDF'lerle istem vererek oluşturulan metin üretmesini isteyebilirsiniz. Bunun için her giriş dosyasının mimeType değerini ve dosyanın kendisini sağlamanız gerekir. Giriş dosyalarıyla ilgili koşulları ve önerileri bu sayfanın ilerleyen bölümlerinde bulabilirsiniz.

Swift

Metin ve PDF'lerden oluşan çok formatlı girişten metin oluşturmak için generateContent() yöntemini çağırabilirsiniz.


import FirebaseAILogic

// 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-3.8-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

Metin ve PDF'lerden oluşan çok formatlı girişten metin oluşturmak için generateContent() yöntemini çağırabilirsiniz.

Kotlin için bu SDK'daki yöntemler askıya alma işlevleridir ve Coroutine kapsamından çağrılmaları gerekir.

// 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-3.8-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 = model.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

Metin ve PDF'lerden oluşan çok formatlı girişten metin oluşturmak için generateContent() yöntemini çağırabilirsiniz.

Java için bu SDK'daki yöntemler bir ListenableFuture döndürür.

// 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-3.8-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

Metin ve PDF'lerden oluşan çok formatlı girişten metin oluşturmak için generateContent() yöntemini çağırabilirsiniz.


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-3.8-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 {
    type: "inlineData",
    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

Metin ve PDF'lerden oluşan çok formatlı girişten metin oluşturmak için generateContent() modelini çağırabilirsiniz.


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-3.8-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

Metin ve PDF'lerden oluşan çok formatlı girişten metin oluşturmak için GenerateContentAsync() yöntemini çağırabilirsiniz.


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-3.8-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.");

Kullanım alanınıza ve uygulamanıza uygun bir model seçmeyi öğrenin.

Yanıtı akış şeklinde göster

Bu örneği denemeden önce projenizi ve uygulamanızı ayarlamak için bu kılavuzun Başlamadan önce bölümünü tamamlayın.
Bu bölümde, seçtiğiniz Gemini API sağlayıcıya ait düğmeyi tıklayarak bu sayfada sağlayıcıya özel içerikleri görebilirsiniz.

Model tarafından üretilen sonucun tamamını beklemek yerine akış özelliğini kullanarak kısmi sonuçları işleyebilir ve daha hızlı etkileşimler elde edebilirsiniz. Yanıtı aktarmak için generateContentStream yöntemini çağırın.



Giriş belgeleri için şartlar ve öneriler

Satır içi veri olarak sağlanan bir dosyanın aktarım sırasında base64 olarak kodlandığını ve bunun da isteğin boyutunu artırdığını unutmayın. İstek çok büyükse HTTP 413 hatası alırsınız.

Aşağıdakiler hakkında ayrıntılı bilgi edinmek için "Desteklenen giriş dosyaları ve koşullar" sayfasına bakın:

Desteklenen doküman MIME türleri

Gemini çok formatlı modeller aşağıdaki belge MIME türlerini destekler:

  • PDF - application/pdf
  • Metin - text/plain

İstek başına sınırlar

PDF'ler resim olarak değerlendirilir. Bu nedenle, PDF'nin tek bir sayfası bir resim olarak kabul edilir. Bir istemde izin verilen sayfa sayısı, Gemini çok formatlı modellerinin destekleyebileceği resim sayısıyla sınırlıdır.

  • İstek başına maksimum dosya sayısı: 3.000 dosya
  • Dosya başına maksimum sayfa sayısı: Dosya başına 1.000 sayfa
  • Dosya başına maksimum boyut: Dosya başına 50 MB



Başka ne yapabilirsin?

Diğer özellikleri deneme

İçerik üretimini nasıl kontrol edeceğinizi öğrenin.

Ayrıca istemler ve model yapılandırmalarıyla denemeler yapabilir, hatta Google AI Studio kullanarak oluşturulan bir kod snippet'i alabilirsiniz.

Desteklenen modeller hakkında daha fazla bilgi

Çeşitli kullanım alanları için kullanılabilen modeller, kotaları ve fiyatlandırmaları hakkında bilgi edinin.


Firebase AI Logic ile ilgili deneyiminiz hakkında geri bildirimde bulunun