אתם יכולים לבקש מGemini מודל לנתח קבצים של מסמכים (כמו קובצי PDF וקובצי טקסט פשוט) שאתם מספקים לו בתוך השורה (מקודדים ב-base64) או באמצעות כתובת URL. כשמשתמשים ב-Firebase AI Logic, אפשר לשלוח את הבקשה הזו ישירות מהאפליקציה.
בעזרת היכולת הזו, אתם יכולים:
- ניתוח של דיאגרמות, תרשימים וטבלאות בתוך מסמכים
- חילוץ מידע לפורמטים מובְנים של פלט
- מענה על שאלות לגבי תוכן חזותי וטקסטואלי במסמכים
- סיכום מסמכים
- תמלול תוכן של מסמכים (למשל ל-HTML), תוך שמירה על הפריסות והעיצוב, לשימוש באפליקציות במורד הזרם (כמו בצינורות RAG)
מעבר לדוגמאות קוד מעבר לקוד של תגובות בסטרימינג
אפשר לעיין במדריכים אחרים כדי לראות אפשרויות נוספות לעבודה עם מסמכים (כמו קובצי PDF) יצירת פלט מובנה שיחה מרובת תפניות |
לפני שמתחילים
לוחצים על הספק Gemini API כדי לראות בדף הזה תוכן וקוד שספציפיים לספק. |
אם עדיין לא עשיתם את זה, כדאי לעיין במדריך לתחילת העבודה. במדריך הזה מוסבר איך להגדיר את פרויקט Firebase, לקשר את האפליקציה ל-Firebase, להוסיף את ה-SDK, לאתחל את שירות ה-Backend עבור ספק Gemini API שבחרתם וליצור מופע GenerativeModel
.
כדי לבדוק את ההנחיות ולשפר אותן, ואפילו כדי לקבל קטע קוד שנוצר, מומלץ להשתמש ב-Google AI Studio.
יצירת טקסט מקובצי PDF (בקידוד Base64)
לפני שמנסים את הדוגמה הזו, צריך להשלים את השלבים שבקטע לפני שמתחילים במדריך הזה כדי להגדיר את הפרויקט והאפליקציה. בקטע הזה צריך גם ללחוץ על לחצן של ספק Gemini API שבחרתם כדי שיוצג בדף הזה תוכן שספציפי לספק. |
אתם יכולים לבקש ממודל Gemini ליצור טקסט על ידי מתן הנחיות עם טקסט וקובצי PDF – צריך לספק את mimeType
של כל קובץ קלט ואת הקובץ עצמו. בהמשך הדף מפורטות דרישות והמלצות לגבי קובצי קלט.
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.5-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.
// 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.5-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.
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.5-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.5-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.5-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.5-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"מידע מפורט על הדברים הבאים" מפורטים:
- אפשרויות שונות למסירת קובץ בבקשה (בתוך הבקשה או באמצעות כתובת ה-URL או ה-URI של הקובץ)
- דרישות ושיטות מומלצות לקבצים של מסמכים
סוגי MIME נתמכים של סרטונים
Gemini מודלים מולטימודאליים תומכים בסוגי ה-MIME הבאים של מסמכים:
סוג MIME של המסמך | Gemini 2.0 Flash | Gemini 2.0 Flash‑Lite |
---|---|---|
PDF – application/pdf |
||
טקסט – text/plain |
מגבלות לכל בקשה
קובצי PDF נחשבים לתמונות, ולכן דף אחד של קובץ PDF נחשב לתמונה אחת. מספר העמודים שמותר להשתמש בהם בהנחיה מוגבל למספר התמונות שהמודל יכול לתמוך בהן:
- Gemini 2.0 Flash וגם Gemini 2.0 Flash‑Lite:
- מספר הקבצים המקסימלי לבקשה: 3,000
- מספר הדפים המקסימלי בכל קובץ: 1,000
- הגודל המקסימלי של כל קובץ: 50MB
מה עוד אפשר לעשות?
- כדאי ללמוד איך לספור טוקנים לפני ששולחים הנחיות ארוכות למודל.
- הגדרת Cloud Storage for Firebase כדי לכלול קבצים גדולים בבקשות מרובות-אופנים ולקבל פתרון מנוהל יותר לאספקת קבצים בהנחיות. הקבצים יכולים לכלול תמונות, קובצי PDF, סרטונים וקובצי אודיו.
-
מתחילים לחשוב על הכנה לייצור (ראו את רשימת המשימות לביצוע לפני העברה לייצור), כולל:
- הגדרת Firebase App Check כדי להגן על Gemini API מפני ניצול לרעה על ידי לקוחות לא מורשים.
- שילוב של Firebase Remote Config כדי לעדכן ערכים באפליקציה (כמו שם המודל) בלי לפרסם גרסה חדשה של האפליקציה.
כדאי לנסות יכולות אחרות
- יצירת שיחות עם זיכרון (צ'אט).
- ליצור טקסט מהנחיות שמכילות טקסט בלבד.
- יצירה של פלט מובנה (כמו JSON) מהנחיות טקסט ומנחיות מולטימודאליות.
- יצירת תמונות מהנחיות טקסט (Gemini או Imagen).
- אפשר להשתמש בקריאות לפונקציות כדי לקשר מודלים גנרטיביים למערכות ולמידע חיצוניים.
איך שולטים ביצירת תוכן
- הסבר על תכנון הנחיות, כולל שיטות מומלצות, אסטרטגיות ודוגמאות להנחיות.
- הגדרת פרמטרים של המודל כמו טמפרטורה וטוקנים מקסימליים של פלט (ל-Gemini) או יחס גובה-רוחב ויצירת דמות של אדם (ל-Imagen).
- שימוש בהגדרות בטיחות כדי לשנות את הסבירות לקבלת תשובות שעלולות להיחשב מזיקות.
מידע נוסף על המודלים הנתמכים
מידע על המודלים שזמינים לתרחישי שימוש שונים ועל המיכסות והתמחור שלהםרוצה לתת משוב על חוויית השימוש ב-Firebase AI Logic?