Hiểu tài liệu

API Gemini hỗ trợ nhập PDF, bao gồm cả tài liệu dài (tối đa 3.600 trang). Các mô hình Gemini xử lý tệp PDF bằng công nghệ thị giác gốc, nhờ đó có thể hiểu được cả nội dung văn bản và hình ảnh bên trong tài liệu. Với tính năng hỗ trợ thị giác PDF gốc, các mô hình Gemini có thể:

  • Phân tích sơ đồ, biểu đồ và bảng trong tài liệu
  • Trích xuất thông tin thành các định dạng đầu ra có cấu trúc
  • Trả lời câu hỏi về nội dung hình ảnh và văn bản trong tài liệu
  • Tóm tắt tài liệu
  • Bản chép lời nội dung tài liệu (ví dụ: sang HTML) giữ nguyên bố cục và định dạng để sử dụng trong các ứng dụng tiếp theo

Hướng dẫn này minh hoạ một số cách có thể sử dụng API Gemini để xử lý tài liệu PDF.

Dữ liệu đầu vào PDF

Đối với tải trọng PDF dưới 20 MB, bạn có thể chọn tải tài liệu được mã hoá base64 lên hoặc tải trực tiếp các tệp được lưu trữ cục bộ lên.

Dưới dạng dữ liệu cùng dòng

Bạn có thể xử lý tài liệu PDF trực tiếp từ URL. Dưới đây là đoạn mã cho thấy cách thực hiện việc này:

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)

Chi tiết kỹ thuật

Gemini 1.5 Pro và 1.5 Flash hỗ trợ tối đa 3.600 trang tài liệu. Các trang tài liệu phải ở một trong các loại MIME dữ liệu văn bản sau:

  • 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

Mỗi trang tài liệu tương đương với 258 mã thông báo.

Mặc dù không có giới hạn cụ thể về số pixel trong tài liệu ngoài cửa sổ ngữ cảnh của mô hình, nhưng các trang lớn hơn sẽ được điều chỉnh theo tỷ lệ xuống độ phân giải tối đa là 3072x3072 trong khi vẫn giữ nguyên tỷ lệ khung hình ban đầu, còn các trang nhỏ hơn sẽ được điều chỉnh theo tỷ lệ lên 768x768 pixel. Không có sự giảm chi phí nào đối với các trang có kích thước thấp hơn, ngoài băng thông hoặc cải thiện hiệu suất cho các trang có độ phân giải cao hơn.

Để có kết quả tốt nhất:

  • Xoay các trang theo đúng hướng trước khi tải lên.
  • Tránh các trang bị mờ.
  • Nếu sử dụng một trang, hãy đặt lời nhắc văn bản sau trang đó.

Tệp PDF được lưu trữ cục bộ

Đối với tệp PDF được lưu trữ cục bộ, bạn có thể sử dụng phương pháp sau:

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)

Tệp PDF có kích thước lớn

Bạn có thể sử dụng API Tệp để tải tài liệu có kích thước bất kỳ lên. Luôn sử dụng API tệp khi tổng kích thước yêu cầu (bao gồm cả tệp, lời nhắc văn bản, hướng dẫn hệ thống, v.v.) lớn hơn 20 MB.

Gọi media.upload để tải tệp lên bằng API Tệp. Mã sau đây sẽ tải một tệp tài liệu lên, sau đó sử dụng tệp đó trong lệnh gọi đến models.generateContent.

Tệp PDF lớn từ URL

Sử dụng API Tệp cho các tệp PDF lớn có sẵn từ URL, giúp đơn giản hoá quá trình tải lên và xử lý trực tiếp các tài liệu này thông qua URL của chúng:

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)

Tệp PDF lớn được lưu trữ cục bộ

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)

Bạn có thể xác minh API đã lưu trữ thành công tệp đã tải lên và lấy siêu dữ liệu của tệp đó bằng cách gọi files.get. Chỉ name (và theo đó là uri) là duy nhất.

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))

Nhiều tệp PDF

API Gemini có thể xử lý nhiều tài liệu PDF trong một yêu cầu, miễn là kích thước kết hợp của các tài liệu và lời nhắc văn bản nằm trong cửa sổ ngữ cảnh của mô hình.

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)

Bước tiếp theo

Để tìm hiểu thêm, hãy xem các tài nguyên sau:

  • Chiến lược nhắc tệp: Gemini API hỗ trợ nhắc bằng dữ liệu văn bản, hình ảnh, âm thanh và video, còn gọi là nhắc đa phương thức.
  • Hướng dẫn hệ thống: Hướng dẫn hệ thống cho phép bạn điều hướng hành vi của mô hình dựa trên các nhu cầu và trường hợp sử dụng cụ thể.