יכולות של עיבוד מסמכים עם Gemini API

Gemini API תומך בקלט בפורמט PDF, כולל מסמכים ארוכים (עד 3,600 דפים). המודלים של Gemini מעבדים קובצי PDF באמצעות ראייה מקורית, ולכן הם יכולים להבין גם תוכן טקסט וגם תוכן תמונה במסמכים. בעזרת תמיכה מקורית ב-PDF, מודלים של Gemini יכולים:

  • לנתח דיאגרמות, תרשימים וטבלאות במסמכים.
  • חילוץ מידע לפורמטים של פלט מובנה.
  • משיבים על שאלות לגבי תוכן חזותי וטקסטואלי במסמכים.
  • לסכם מסמכים.
  • תמלול תוכן של מסמכים (למשל ל-HTML) תוך שמירה על פריסות ועיצוב, לשימוש באפליקציות במורד הזרם (למשל בצינורות עיבוד נתונים של RAG).

במדריך הזה נסביר כמה דרכים אפשריות לשימוש ב-Gemini API עם מסמכי PDF. כל הפלט הוא טקסט בלבד.

לפני שמתחילים: מגדירים את הפרויקט ומפתח ה-API

לפני שמפעילים את Gemini API, צריך להגדיר את הפרויקט ולהגדיר את מפתח ה-API.

הצגת הנחיות באמצעות קובצי PDF

במדריך הזה מוסבר איך להעלות ולעבד קובצי PDF באמצעות File API או על ידי הכללה שלהם כנתונים בתוך שורות.

פרטים טכניים

ב-Gemini 1.5 Pro וב-Gemini 1.5 Flash יש תמיכה ב-3,600 דפי מסמכים לכל היותר. דפי המסמך חייבים להיות באחד מסוגי ה-MIME הבאים של נתוני טקסט:

  • PDF – application/pdf
  • JavaScript – ‏application/x-javascript, ‏ text/javascript
  • Python –‏ application/x-python, ‏ text/x-python
  • TXT – text/plain
  • HTML – text/html
  • CSS –‏ text/css
  • Markdown – text/md
  • CSV –‏ text/csv
  • XML – text/xml
  • RTF –‏ text/rtf

כל דף במסמך שווה ל-258 אסימונים.

אין מגבלות ספציפיות למספר הפיקסלים במסמך, מלבד חלון ההקשר של המודל. עם זאת, דפים גדולים יותר מוקטנים לרזולוציה מקסימלית של 3072x3072 תוך שמירה על יחס הגובה-רוחב המקורי שלהם, ודפים קטנים יותר מוגדלים לרזולוציה של 768x768 פיקסלים. אין הפחתת עלות של עמודים בגדלים קטנים יותר, מלבד רוחב הפס, או שיפור בביצועים של עמודים ברזולוציה גבוהה יותר.

לקבלת התוצאות הטובות ביותר:

  • לפני ההעלאה, צריך לסובב את הדפים לכיוון הנכון.
  • הימנעו מדפים מטושטשים.
  • אם משתמשים בדף יחיד, צריך למקם את הנחיית הטקסט אחרי הדף.

קלט בפורמט PDF

בעומס שימושי של קובצי PDF שקטן מ-20MB, אפשר לבחור בין העלאת מסמכים בקידוד base64 לבין העלאה ישירה של קבצים שמאוחסנים באופן מקומי.

מסמכים בקידוד Base64

אפשר לעבד מסמכי PDF ישירות מכתובות URL. הנה קטע קוד שמראה איך עושים את זה:

import httpx
import base64

model = genai.GenerativeModel("gemini-1.5-flash")
doc_url = "https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf"  # Replace with the actual URL of your PDF

# Retrieve and encode the PDF
doc_data = base64.standard_b64encode(httpx.get(doc_url).content).decode("utf-8")

prompt = "Summarize this document"

response = model.generate_content([{'mime_type':'application/pdf', 'data': doc_data}, prompt])
print(response.text)

קובצי PDF שמאוחסנים באופן מקומי

בקובצי PDF שמאוחסנים באופן מקומי, אפשר להשתמש בשיטה הבאה:

import base64

model = genai.GenerativeModel("gemini-1.5-flash")
doc_path = "/path/to/file.pdf" # Replace with the actual path to your local PDF

# Read and encode the local file
with open(doc_path, "rb") as doc_file:
    doc_data = base64.standard_b64encode(doc_file.read()).decode("utf-8")

prompt = "Summarize this document"

response = model.generate_content([{'mime_type': 'application/pdf', 'data': doc_data}, prompt])

print(response.text)

קובצי PDF גדולים

אפשר להשתמש ב-File API כדי להעלות מסמך בכל גודל. תמיד צריך להשתמש ב-File API כשהגודל הכולל של הבקשה (כולל הקבצים, הנחיות הטקסט, הוראות המערכת וכו') גדול מ-20MB.

קוראים ל-media.upload כדי להעלות קובץ באמצעות File API. הקוד הבא מעלה קובץ מסמך ואז משתמש בקובץ בקריאה ל-models.generateContent.

קובצי PDF גדולים מכתובות URL (‎:#large-pdfs-urls)

שימוש ב-File API לקובצי PDF גדולים שזמינים מכתובות URL, כדי לפשט את תהליך ההעלאה והעיבוד של המסמכים האלה ישירות דרך כתובות ה-URL שלהם:

import io
import httpx

model = genai.GenerativeModel("gemini-1.5-flash")
long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf" # Replace with the actual URL of your large PDF

# Retrieve and upload the PDF using the File API
doc_data = io.BytesIO(httpx.get(long_context_pdf_path).content)
sample_doc = genai.upload_file(data=doc_data, mime_type='application/pdf')

prompt = "Summarize this document"

response = model.generate_content([sample_doc, prompt])
print(response.text)

קובצי PDF גדולים שמאוחסנים באופן מקומי (‎:#large-pdfs-local)

import google.generativeai as genai

model = genai.GenerativeModel("gemini-1.5-flash")
sample_pdf = genai.upload_file(media / "test.pdf")
response = model.generate_content(["Give me a summary of this pdf file.", sample_pdf])
print(response.text)

כדי לוודא שה-API שמר בהצלחה את הקובץ שהעליתם ולקבל את המטא-נתונים שלו, אפשר לבצע קריאה ל-files.get. רק הערך של name (וכתוצאה מכך, הערך של uri) הוא ייחודי.

import google.generativeai as genai

myfile = genai.upload_file(media / "poem.txt")
file_name = myfile.name
print(file_name)  # "files/*"

myfile = genai.get_file(file_name)
print(myfile)

כמה קובצי PDF

ה-API של Gemini מסוגל לעבד כמה מסמכי PDF בבקשה אחת, כל עוד הגודל המצטבר של המסמכים וההנחיה לטקסט נמצא בחלון ההקשר של המודל.

import io
import httpx

model = genai.GenerativeModel("gemini-1.5-flash")

doc_url_1 = "https://arxiv.org/pdf/2312.11805" # Replace with the URL to your first PDF
doc_url_2 = "https://arxiv.org/pdf/2403.05530" # Replace with the URL to your second PDF

# Retrieve and upload both PDFs using the File API
doc_data_1 = io.BytesIO(httpx.get(doc_url_1).content)
doc_data_2 = io.BytesIO(httpx.get(doc_url_2).content)

sample_pdf_1 = genai.upload_file(data=doc_data_1, mime_type='application/pdf')
sample_pdf_2 = genai.upload_file(data=doc_data_2, mime_type='application/pdf')

prompt = "What is the difference between each of the main benchmarks between these two papers? Output these in a table."

response = model.generate_content([sample_pdf_1, sample_pdf_2, prompt])
print(response.text)

הצגת רשימה של קבצים

אפשר לקבל רשימה של כל הקבצים שהועלו באמצעות File API ומזהי ה-URI שלהם באמצעות files.list.

import google.generativeai as genai

print("My files:")
for f in genai.list_files():
    print("  ", f.name)

מחיקת קבצים

קבצים שמעלים באמצעות File API נמחקים באופן אוטומטי אחרי יומיים. אפשר גם למחוק אותם באופן ידני באמצעות files.delete.

import google.generativeai as genai

myfile = genai.upload_file(media / "poem.txt")

myfile.delete()

try:
    # Error.
    model = genai.GenerativeModel("gemini-1.5-flash")
    result = model.generate_content([myfile, "Describe this file."])
except google.api_core.exceptions.PermissionDenied:
    pass

שמירת הקשר במטמון באמצעות קובצי PDF

import os
from google.generativeai import caching
import io
import httpx

# Define the path to the PDF document (or use a URL)
long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf" # Replace with the URL of your large PDF
doc_data = io.BytesIO(httpx.get(long_context_pdf_path).content)

# Upload the PDF document using the File API
document = genai.upload_file(data=doc_data, mime_type='application/pdf')

# Specify the model name and system instruction for caching
model_name = "gemini-1.5-flash-002" # Ensure this matches the model you intend to use
system_instruction = "You are an expert analyzing transcripts."

# Create a cached content object
cache = caching.CachedContent.create(
    model=model_name,
    system_instruction=system_instruction,
    contents=[document], # The document(s) and other content you wish to cache
)

# Display the cache details
print(cache)

# Initialize a generative model from the cached content
model = genai.GenerativeModel.from_cached_content(cache)

# Generate content using the cached prompt and document
response = model.generate_content("Please summarize this transcript")

# (Optional) Print usage metadata for insights into the API call
print(response.usage_metadata)

# Print the generated text
print(response.text)

הצגת רשימה של מטמונים

אי אפשר לאחזר או להציג תוכן שנשמר במטמון, אבל אפשר לאחזר את המטא-נתונים של המטמון (name,‏ model,‏ display_name,‏ usage_metadata,‏ create_time,‏ update_time ו-expire_time).

כדי לקבל רשימה של המטא-נתונים של כל המטמון שהועלו, משתמשים ב-CachedContent.list():

for c in caching.CachedContent.list():
  print(c)

עדכון מטמון

אפשר להגדיר ttl או expire_time חדשים למטמון. אין תמיכה בשינוי של שום דבר אחר במטמון.

בדוגמה הבאה מוסבר איך לעדכן את ttl של מטמון באמצעות CachedContent.update().

import datetime

cache.update(ttl=datetime.timedelta(hours=2))

מחיקת מטמון

שירות האחסון במטמון מספק פעולת מחיקה להסרת תוכן מהמטמון באופן ידני. בדוגמה הבאה מוסבר איך למחוק מטמון באמצעות CachedContent.delete().

cache.delete()

המאמרים הבאים

במדריך הזה מוסבר איך להשתמש ב-generateContent וליצור פלט טקסט ממסמכים שעברו עיבוד. מידע נוסף זמין במשאבים הבאים:

  • אסטרטגיות להצגת בקשות להעלאת קבצים: Gemini API תומך בהצגת בקשות להעלאת קבצים עם נתוני טקסט, תמונות, אודיו ווידאו, שנקראות גם בקשות להעלאת קבצים במגוון מודלים.
  • הוראות מערכת: הוראות המערכת מאפשרות לכם לקבוע את התנהגות המודל בהתאם לצרכים ולתרחישים הספציפיים שלכם.
  • הנחיות בטיחות: לפעמים מודלים של AI גנרטיבי יוצרים תוצאות לא צפויות, כמו תוצאות לא מדויקות, מוטה או פוגעניות. עיבוד תמונה (Post Processing) והערכה אנושית הם חיוניים כדי להגביל את הסיכון לנזק כתוצאה מפלט כזה.