Interfejs Gemini API obsługuje dane wejściowe w formacie PDF, w tym długie dokumenty (do 3600 stron). Modele Gemini przetwarzają pliki PDF z wykorzystaniem natywnej funkcji widzenia, dzięki czemu są w stanie zrozumieć zarówno zawartość tekstową, jak i graficzną dokumentów. Dzięki natywnemu wsparciu dla widzenia maszynowego w PDF modele Gemini mogą:
- analizować diagramy, wykresy i tabele w dokumentach;
- Wyodrębnianie informacji w uporządkowanych formatach wyjściowych
- odpowiadać na pytania dotyczące treści wizualnych i tekstowych w dokumentach;
- streszczać dokumenty,
- Transkrybowanie treści dokumentu (np. do formatu HTML) z zachowaniem układu i formatowania na potrzeby dalszego przetwarzania
W tym samouczku pokazujemy kilka sposobów korzystania z interfejsu Gemini API do przetwarzania dokumentów PDF.
Dane wejściowe w formacie PDF
W przypadku plików PDF o wielkości poniżej 20 MB możesz przesłać dokumenty zakodowane w formacie base64 lub bezpośrednio przesłać pliki zapisane lokalnie.
Jako dane w tekście
Dokumenty PDF możesz przetwarzać bezpośrednio z adresów URL. Oto fragment kodu pokazujący, jak to zrobić:
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)
Szczegóły techniczne
Gemini 1.5 Pro i 1.5 Flash obsługują maksymalnie 3600 stron dokumentu. Strony dokumentu muszą mieć jeden z tych typów MIME danych tekstowych:
- 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
Każda strona dokumentu odpowiada 258 znacnikom.
Chociaż nie ma żadnych konkretnych ograniczeń liczby pikseli w dokumencie poza oknem kontekstowym modelu, większe strony są zmniejszane do maksymalnej rozdzielczości 3072 x 3072 przy zachowaniu oryginalnego współczynnika proporcji, a mniejsze strony są powiększane do 768 x 768 pikseli. Nie ma obniżenia kosztów w przypadku stron o mniejszych rozmiarach (poza przepustowością) ani poprawy wydajności w przypadku stron o wyższej rozdzielczości.
Aby uzyskać najlepsze wyniki:
- Przed przesłaniem obróć strony w odpowiednią orientację.
- Unikaj stron z rozmazanymi obrazami.
- Jeśli używasz pojedynczej strony, umieść prompt tekstowy po tej stronie.
Pliki PDF zapisane lokalnie
W przypadku plików PDF przechowywanych lokalnie możesz wykonać te czynności:
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)
Duże pliki PDF
Za pomocą interfejsu File API możesz przesyłać dokumenty o dowolnym rozmiarze. Zawsze używaj interfejsu File API, gdy łączny rozmiar żądania (w tym pliki, prompt tekstowy, instrukcje systemu itp.) przekracza 20 MB.
Aby przesłać plik za pomocą interfejsu File API, wywołaj funkcję media.upload
. Poniższy kod przesyła plik dokumentu, a potem używa go w wywołaniu funkcji models.generateContent
.
Duże pliki PDF z adresów URL
Użyj interfejsu File API w przypadku dużych plików PDF dostępnych pod adresami URL, aby uprościć proces przesyłania i przetwarzania tych dokumentów bezpośrednio za pomocą ich adresów 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)
duże pliki PDF przechowywane lokalnie;
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)
Aby sprawdzić, czy interfejs API poprawnie zapisał przesłany plik, i uzyskać jego metadane, wywołaj funkcję files.get
. Jedynie name
(a w rozszerzeniu uri
) są niepowtarzalne.
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))
Wiele plików PDF
Interfejs Gemini API może przetwarzać wiele dokumentów PDF w ramach jednego żądania, o ile łączny rozmiar dokumentów i promptu tekstowego mieści się w oknie kontekstu modelu.
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)
Co dalej?
Więcej informacji znajdziesz w tych materiałach:
- Strategie wyświetlania promptów dotyczących plików: interfejs Gemini API obsługuje prompty z tekstem, obrazem, dźwiękiem i danymi wideo, które są też nazywane promptami multimodalnymi.
- Instrukcje systemowe: instrukcje systemowe pozwalają kierować działaniem modelu na podstawie konkretnych potrzeb i przypadków użycia.