Khám phá các chức năng xử lý tài liệu bằng Gemini API

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 hạ nguồn (chẳng hạn như trong quy trình RAG).

Hướng dẫn này minh hoạ một số cách có thể sử dụng API Gemini với tài liệu PDF. Tất cả đầu ra đều chỉ ở dạng văn bản.

Trước khi bắt đầu: Thiết lập dự án và khoá API

Trước khi gọi API Gemini, bạn cần thiết lập dự án và định cấu hình khoá API.

Lời nhắc bằng tệp PDF

Hướng dẫn này minh hoạ cách tải lên và xử lý tệp PDF bằng File API hoặc bằng cách đưa tệp PDF vào dưới dạng dữ liệu nội tuyến.

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í đố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 đó.

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.

Giấy tờ được mã hoá base64

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:

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)

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:

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)

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 (:#large-pdfs-urls)

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:

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)

Tệp PDF lớn được lưu trữ cục bộ (:#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)

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.

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)

Nhiều tệp PDF

Gemini API 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.

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)

Liệt kê tệp

Bạn có thể liệt kê tất cả tệp được tải lên bằng API Tệp và URI của các tệp đó bằng cách sử dụng files.list.

import google.generativeai as genai

print("My files:")
for f in genai.list_files():
    print("  ", f.name)

Xóa tệp

Các tệp được tải lên bằng File API sẽ tự động bị xoá sau 2 ngày. Bạn cũng có thể xoá các tệp đó theo cách thủ công bằng 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

Lưu ngữ cảnh vào bộ nhớ đệm bằng tệp 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)

Liệt kê bộ nhớ đệm

Bạn không thể truy xuất hoặc xem nội dung được lưu vào bộ nhớ đệm, nhưng có thể truy xuất siêu dữ liệu bộ nhớ đệm (name, model, display_name, usage_metadata, create_time, update_timeexpire_time).

Để liệt kê siêu dữ liệu cho tất cả bộ nhớ đệm đã tải lên, hãy sử dụng CachedContent.list():

for c in caching.CachedContent.list():
  print(c)

Cập nhật bộ nhớ đệm

Bạn có thể đặt ttl hoặc expire_time mới cho bộ nhớ đệm. Không hỗ trợ thay đổi bất kỳ nội dung nào khác về bộ nhớ đệm.

Ví dụ sau đây cho thấy cách cập nhật ttl của bộ nhớ đệm bằng cách sử dụng CachedContent.update().

import datetime

cache.update(ttl=datetime.timedelta(hours=2))

Xoá bộ nhớ đệm

Dịch vụ lưu vào bộ nhớ đệm cung cấp thao tác xoá để xoá nội dung khỏi bộ nhớ đệm theo cách thủ công. Ví dụ sau đây cho biết cách xoá bộ nhớ đệm bằng CachedContent.delete().

cache.delete()

Bước tiếp theo

Hướng dẫn này cho biết cách sử dụng generateContent và cách tạo đầu ra văn bản từ các tài liệu đã xử lý. Để 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ể.
  • Hướng dẫn an toàn: Đôi khi, các mô hình AI tạo sinh tạo ra kết quả không mong muốn, chẳng hạn như kết quả không chính xác, thiên vị hoặc phản cảm. Quy trình xử lý hậu kỳ và đánh giá của con người là điều cần thiết để hạn chế rủi ro gây hại từ những kết quả như vậy.