قابلیت های پردازش اسناد را با Gemini API کاوش کنید

Gemini API از ورودی PDF، از جمله اسناد طولانی (تا 3600 صفحه) پشتیبانی می کند. مدل‌های Gemini فایل‌های PDF را با دید بومی پردازش می‌کنند و بنابراین می‌توانند محتوای متن و تصویر درون اسناد را درک کنند. با پشتیبانی از دید PDF بومی، مدل‌های Gemini قادرند:

  • نمودارها، نمودارها و جداول داخل اسناد را تجزیه و تحلیل کنید.
  • استخراج اطلاعات به فرمت های خروجی ساخت یافته
  • به سوالات مربوط به محتوای تصویری و متنی در اسناد پاسخ دهید.
  • اسناد را خلاصه کنید
  • محتوای سند (مثلاً به HTML) را با حفظ طرح‌بندی و قالب‌بندی، برای استفاده در برنامه‌های پایین دستی (مانند خطوط لوله RAG) رونویسی کنید.

این آموزش راه های ممکن برای استفاده از Gemini API با اسناد PDF را نشان می دهد. تمام خروجی ها فقط متنی هستند.

قبل از شروع: پروژه و کلید API خود را تنظیم کنید

قبل از فراخوانی Gemini API، باید پروژه خود را راه اندازی کرده و کلید API خود را پیکربندی کنید.

درخواست با فایل های PDF

این راهنما نحوه آپلود و پردازش PDFها را با استفاده از File API یا با گنجاندن آنها به عنوان داده درون خطی نشان می دهد.

جزئیات فنی

Gemini 1.5 Pro و 1.5 Flash حداکثر از 3600 صفحه سند پشتیبانی می کنند. صفحات سند باید در یکی از انواع MIME داده متنی زیر باشند:

  • PDF - application/pdf
  • جاوا اسکریپت - application/x-javascript ، text/javascript
  • پایتون - 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 زیر 20 مگابایت، می‌توانید بین آپلود اسناد کدگذاری شده 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 های ذخیره شده محلی، می توانید از روش زیر استفاده کنید:

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)

پی دی اف های بزرگ

می توانید از File API برای آپلود یک سند با هر اندازه ای استفاده کنید. همیشه زمانی از File API استفاده کنید که حجم کل درخواست (شامل فایل‌ها، پیام متنی، دستورالعمل‌های سیستم و غیره) بیشتر از 20 مگابایت باشد.

برای آپلود فایل با استفاده از File API با media.upload تماس بگیرید. کد زیر یک فایل سند را آپلود می کند و سپس از فایل در تماس با models.generateContent استفاده می کند.

پی دی اف های بزرگ از URL ها (:#large-pdfs-urls)

از File API برای فایل‌های پی‌دی‌اف بزرگی که از آدرس‌های اینترنتی موجود است، استفاده کنید، و فرآیند آپلود و پردازش این اسناد را مستقیماً از طریق 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

Gemini API قادر است چندین سند 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 از درخواست با داده‌های متنی، تصویری، صوتی و ویدیویی پشتیبانی می‌کند که به عنوان درخواست چندوجهی نیز شناخته می‌شود.
  • دستورالعمل‌های سیستم : دستورالعمل‌های سیستم به شما امکان می‌دهد رفتار مدل را بر اساس نیازهای خاص و موارد استفاده خود هدایت کنید.
  • راهنمایی ایمنی : گاهی اوقات مدل‌های هوش مصنوعی تولیدی خروجی‌های غیرمنتظره مانند خروجی‌های نادرست، جانبدارانه یا توهین‌آمیز تولید می‌کنند. پس پردازش و ارزیابی انسانی برای محدود کردن خطر آسیب ناشی از چنین خروجی‌هایی ضروری است.