درک سند

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

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

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

ورودی PDF

برای بارگذاری‌های PDF زیر 20 مگابایت، می‌توانید بین آپلود اسناد کدگذاری شده base64 یا آپلود مستقیم فایل‌های ذخیره‌شده محلی یکی را انتخاب کنید.

به عنوان داده های درون خطی

می توانید اسناد PDF را مستقیماً از URL ها پردازش کنید. در اینجا یک قطعه کد وجود دارد که نحوه انجام این کار را نشان می دهد:

from google import genai
from google.genai import types
import httpx

client = genai.Client()

doc_url = "https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf"

# Retrieve and encode the PDF byte
doc_data = httpx.get(doc_url).content

prompt = "Summarize this document"
response = client.models.generate_content(
  model="gemini-2.0-flash",
  contents=[
      types.Part.from_bytes(
        data=doc_data,
        mime_type='application/pdf',
      ),
      prompt])
print(response.text)

جزئیات فنی

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 های ذخیره شده محلی، می توانید از روش زیر استفاده کنید:

from google import genai
from google.genai import types
import pathlib
import httpx

client = genai.Client()

doc_url = "https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf"

# Retrieve and encode the PDF byte
filepath = pathlib.Path('file.pdf')
filepath.write_bytes(httpx.get(doc_url).content)

prompt = "Summarize this document"
response = client.models.generate_content(
  model="gemini-2.0-flash",
  contents=[
      types.Part.from_bytes(
        data=filepath.read_bytes(),
        mime_type='application/pdf',
      ),
      prompt])
print(response.text)

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

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

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

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

از File API برای فایل‌های پی‌دی‌اف بزرگی که از آدرس‌های اینترنتی موجود است، استفاده کنید، و فرآیند آپلود و پردازش این اسناد را مستقیماً از طریق URL‌هایشان ساده‌تر می‌کند:

from google import genai
from google.genai import types
import io
import httpx

client = genai.Client()

long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf"

# Retrieve and upload the PDF using the File API
doc_io = io.BytesIO(httpx.get(long_context_pdf_path).content)

sample_doc = client.files.upload(
  # You can pass a path or a file-like object here
  file=doc_io,
  config=dict(
    mime_type='application/pdf')
)

prompt = "Summarize this document"

response = client.models.generate_content(
  model="gemini-2.0-flash",
  contents=[sample_doc, prompt])
print(response.text)

PDF های بزرگ ذخیره شده به صورت محلی

from google import genai
from google.genai import types
import pathlib
import httpx

client = genai.Client()

long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf"

# Retrieve the PDF
file_path = pathlib.Path('A17.pdf')
file_path.write_bytes(httpx.get(long_context_pdf_path).content)

# Upload the PDF using the File API
sample_file = client.files.upload(
  file=file_path,
)

prompt="Summarize this document"

response = client.models.generate_content(
  model="gemini-2.0-flash",
  contents=[sample_file, "Summarize this document"])
print(response.text)

می‌توانید تأیید کنید که API با موفقیت فایل آپلود شده را ذخیره کرده و ابرداده‌های آن را با فراخوانی files.get دریافت کنید. فقط name (و با بسط، uri ) منحصر به فرد است.

from google import genai
import pathlib

client = genai.Client()

fpath = pathlib.Path('example.txt')
fpath.write_text('hello')

file = client.files.upload('example.txt')

file_info = client.files.get(file.name)
print(file_info.model_dump_json(indent=4))

چندین فایل PDF

Gemini API قادر است چندین سند PDF را در یک درخواست واحد پردازش کند، تا زمانی که اندازه ترکیبی اسناد و اعلان متن در پنجره زمینه مدل باقی بماند.

from google import genai
import io
import httpx

client = genai.Client()

doc_url_1 = "https://arxiv.org/pdf/2312.11805"
doc_url_2 = "https://arxiv.org/pdf/2403.05530"

# 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 = client.files.upload(
  file=doc_data_1,
  config=dict(mime_type='application/pdf')
)
sample_pdf_2 = client.files.upload(
  file=doc_data_2,
  config=dict(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 = client.models.generate_content(
  model="gemini-2.0-flash",
  contents=[sample_pdf_1, sample_pdf_2, prompt])
print(response.text)

بعدش چی

برای کسب اطلاعات بیشتر به منابع زیر مراجعه کنید:

  • استراتژی‌های درخواست فایل : Gemini API از درخواست با داده‌های متنی، تصویری، صوتی و ویدیویی پشتیبانی می‌کند که به عنوان درخواست چندوجهی نیز شناخته می‌شود.
  • دستورالعمل‌های سیستم : دستورالعمل‌های سیستم به شما امکان می‌دهد رفتار مدل را بر اساس نیازهای خاص و موارد استفاده خود هدایت کنید.