تتيح 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 ما يصل إلى 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 رمزًا.
على الرغم من عدم وجود حدود محدّدة لعدد البكسل في المستند باستثناء نافذة سياق النموذج، يتم تصغير الصفحات الأكبر حجمًا إلى الحد الأقصى من الدقة الذي يبلغ 3072×3072 مع الحفاظ على نسبة العرض إلى الارتفاع الأصلية، في حين يتم تكبير الصفحات الأصغر حجمًا إلى 768×768 بكسل. لا يتمّ تخفيض التكلفة للصفحات ذات الحجم المنخفض، باستثناء عرض النطاق، ولا يتمّ تحسين الأداء للصفحات ذات الدقة العالية.
للحصول على أفضل النتائج:
- اضبط اتجاه الصفحات على الوضع الصحيح قبل التحميل.
- تجنَّب الصفحات المموّهة.
- في حال استخدام صفحة واحدة، ضَع الطلب النصي بعد الصفحة.
ملفات PDF المخزّنة على الجهاز
بالنسبة إلى ملفات 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)
ملفات PDF كبيرة
يمكنك استخدام واجهة برمجة التطبيقات File API لتحميل مستند من أي حجم. استخدِم دائمًا واجهة برمجة التطبيقات File API عندما يكون إجمالي حجم الطلب (بما في ذلك الملفات والطلبات النصية وتعليمات النظام وغيرها) أكبر من 20 ميغابايت.
اتصل بـ media.upload
لتحميل ملف باستخدام
File API. تحمِّل التعليمة البرمجية التالية ملف مستند، ثم تستخدم الملف في
طلب موجَّه إلى
models.generateContent
.
ملفات PDF كبيرة من عناوين URL
استخدِم واجهة برمجة التطبيقات File API لملفات PDF الكبيرة الحجم المتوفّرة من عناوين URL، لتبسيط عملية تحميل هذه المستندات ومعالجتها مباشرةً من خلال عناوين 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)
يمكنك التحقّق من أنّ واجهة برمجة التطبيقات قد نجحت في تخزين الملف المحمَّل والحصول على ملفه
الوصفي من خلال استدعاء 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 طلب البيانات النصية والمرئية والصوتية والفيديوية، والتي تُعرف أيضًا باسم طلبات البيانات المتعددة الوسائط.
- تعليمات النظام: تتيح لك تعليمات النظام توجيه سلوك النموذج استنادًا إلى احتياجاتك وحالات الاستخدام المحدّدة.