Gemini API از ورودی PDF، از جمله اسناد طولانی (تا 3600 صفحه) پشتیبانی می کند. مدلهای Gemini فایلهای PDF را با دید بومی پردازش میکنند و بنابراین میتوانند محتوای متن و تصویر درون اسناد را درک کنند. با پشتیبانی از دید PDF بومی، مدلهای Gemini قادرند:
- نمودارها، نمودارها و جداول داخل اسناد را تجزیه و تحلیل کنید.
- استخراج اطلاعات به فرمت های خروجی ساخت یافته
- به سوالات مربوط به محتوای تصویری و متنی در اسناد پاسخ دهید.
- اسناد را خلاصه کنید
- محتوای سند (مثلاً به HTML) را با حفظ طرحبندی و قالببندی، برای استفاده در برنامههای پایین دستی (مانند خطوط لوله RAG) رونویسی کنید.
این آموزش راه های ممکن برای استفاده از Gemini API با اسناد PDF را نشان می دهد. تمام خروجی ها فقط متنی هستند.
قبل از شروع: پروژه و کلید API خود را تنظیم کنید
قبل از فراخوانی Gemini API، باید پروژه خود را راه اندازی کرده و کلید API خود را پیکربندی کنید.
کلید API خود را دریافت و ایمن کنید
برای فراخوانی Gemini API به یک کلید API نیاز دارید. اگر قبلاً یکی ندارید، یک کلید در Google AI Studio ایجاد کنید.
اکیداً توصیه می شود که یک کلید API را در سیستم کنترل نسخه خود بررسی نکنید .
شما باید کلید API خود را در یک فروشگاه محرمانه مانند Google Cloud Secret Manager ذخیره کنید.
این آموزش فرض می کند که شما به کلید API خود به عنوان یک متغیر محیطی دسترسی دارید.
بسته SDK را نصب کنید و کلید API خود را پیکربندی کنید
Python SDK برای Gemini API در بسته google-generativeai
موجود است.
وابستگی را با استفاده از pip نصب کنید:
pip install -U google-generativeai
بسته را وارد کنید و سرویس را با کلید API خود پیکربندی کنید:
import os import google.generativeai as genai genai.configure(api_key=os.environ['API_KEY'])
درخواست با فایل های 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 از درخواست با دادههای متنی، تصویری، صوتی و ویدیویی پشتیبانی میکند که به عنوان درخواست چندوجهی نیز شناخته میشود.
- دستورالعملهای سیستم : دستورالعملهای سیستم به شما امکان میدهد رفتار مدل را بر اساس نیازهای خاص و موارد استفاده خود هدایت کنید.
- راهنمایی ایمنی : گاهی اوقات مدلهای هوش مصنوعی تولیدی خروجیهای غیرمنتظره مانند خروجیهای نادرست، جانبدارانه یا توهینآمیز تولید میکنند. پس پردازش و ارزیابی انسانی برای محدود کردن خطر آسیب ناشی از چنین خروجیهایی ضروری است.