Nhắc bằng tệp nội dung nghe nhìn


Xem trên ai.google.dev Chạy trong Google Colab Xem nguồn trên GitHub

Gemini API hỗ trợ lời nhắc bằng dữ liệu văn bản, hình ảnh, âm thanh và video, còn gọi là lời nhắc đa phương thức, tức là bạn có thể đưa các loại tệp nội dung nghe nhìn đó vào câu lệnh của mình. Đối với các tệp nhỏ, bạn có thể trỏ trực tiếp mô hình Gemini vào một tệp trên máy khi đưa ra câu lệnh. Tải các tệp lớn hơn lên bằng File API trước khi đưa vào lời nhắc.

File API cho phép bạn lưu trữ tối đa 20 GB tệp cho mỗi dự án, với mỗi tệp có kích thước không vượt quá 2 GB. Các tệp được lưu trữ trong 48 giờ và có thể được truy cập bằng khoá API để tạo trong khoảng thời gian đó, đồng thời không thể tải xuống từ API. Bạn có thể sử dụng Files API mà không tốn phí ở mọi khu vực có Gemini API.

File API xử lý dữ liệu đầu vào có thể dùng để tạo nội dung bằng model.generateContent hoặc model.streamGenerateContent. Để biết thông tin về các định dạng tệp hợp lệ (loại MIME) và các mô hình được hỗ trợ, hãy xem phần Các định dạng tệp được hỗ trợ.

Hướng dẫn này cho biết cách sử dụng File API để tải các tệp đa phương tiện lên và đưa các tệp đó vào lệnh gọi GenerateContent đến API Gemini. Để biết thêm thông tin, hãy xem mã mẫu.

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

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

Câu lệnh bằng hình ảnh

Trong hướng dẫn này, bạn tải hình ảnh mẫu lên bằng API tệp rồi sử dụng hình ảnh đó để tạo nội dung.

Tải tệp hình ảnh lên

Tham khảo phần Phụ lục để tìm hiểu cách tải tệp của riêng bạn lên.

  1. Chuẩn bị hình ảnh mẫu để tải lên:

      curl -o image.jpg https://storage.googleapis.com/generativeai-downloads/images/jetpack.jpg
    
  2. Tải tệp đó lên bằng cách sử dụng media.upload để bạn có thể truy cập tệp bằng các lệnh gọi API khác:

    sample_file = genai.upload_file(path="image.jpg",
                                display_name="Sample drawing")
    
    print(f"Uploaded file '{sample_file.display_name}' as: {sample_file.uri}")
    

response cho biết hình ảnh tải lên được lưu trữ bằng display_name được chỉ định và có uri để tham chiếu tệp trong các lệnh gọi Gemini API. Sử dụng response để theo dõi cách các tệp đã tải lên được ánh xạ với URI.

Tuỳ thuộc vào trường hợp sử dụng, bạn có thể lưu trữ URI trong các cấu trúc, chẳng hạn như dict hoặc cơ sở dữ liệu.

Lấy siêu dữ liệu của tệp hình ảnh

Sau khi tải tệp lên, bạn có thể xác minh API đã lưu trữ thành công tệp và nhận siêu dữ liệu của tệp bằng cách gọi files.get thông qua SDK.

Phương thức này cho phép bạn lấy siêu dữ liệu của tệp đã tải lên liên kết với dự án Google Cloud liên kết với khoá API của bạn. Chỉ có name (và theo đó là uri) là duy nhất. Chỉ sử dụng display_name để xác định các tệp nếu bạn tự quản lý tính duy nhất.

file = genai.get_file(name=sample_file.name)
print(f"Retrieved file '{file.display_name}' as: {sample_file.uri}")

Sáng tạo nội dung bằng tệp hình ảnh đã tải lên

Sau khi tải hình ảnh lên, bạn có thể thực hiện các yêu cầu GenerateContent tham chiếu đến uri trong phản hồi (từ tải tệp lên hoặc trực tiếp lấy siêu dữ liệu của tệp).

Trong ví dụ này, bạn tạo một câu lệnh bắt đầu bằng văn bản, theo sau là tham chiếu URI cho tệp đã tải lên:

# The Gemini 1.5 models are versatile and work with multimodal prompts
model = genai.GenerativeModel(model_name="models/gemini-1.5-flash")

response = model.generate_content([sample_file, "Describe the image with a creative description."])

Markdown(">" + response.text)

Xoá tệp hình ảnh

Các tệp sẽ tự động bị xoá sau 48 giờ. Bạn cũng có thể xoá chúng theo cách thủ công bằng cách sử dụng files.delete thông qua SDK.

genai.delete_file(sample_file.name)
print(f'Deleted {sample_file.display_name}.')

Nhắc nhở bằng video

Trong hướng dẫn này, bạn sẽ tải một video mẫu lên bằng API tệp rồi sử dụng API đó để tạo nội dung.

Tải tệp video lên

Gemini API trực tiếp chấp nhận các định dạng tệp video. Ví dụ này sử dụng phim ngắn "Big Buck Bunny".

"Big Buck Bunny" là (c) bản quyền năm 2008, Binder Foundation / www.bigbuckbunny.org và được cấp phép theo Giấy phép Creative Commons Attribution 3.0.

Tham khảo phần Phụ lục để tìm hiểu cách tải tệp của riêng bạn lên.

  1. Chuẩn bị tệp video mẫu để tải lên:

    wget https://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4
    
  2. Tải tệp đó lên bằng cách sử dụng media.upload để bạn có thể truy cập tệp bằng các lệnh gọi API khác:

    video_file_name = "BigBuckBunny_320x180.mp4"
    
    print(f"Uploading file...")
    video_file = genai.upload_file(path=video_file_name)
    print(f"Completed upload: {video_file.uri}")
    

Xác minh trạng thái tải lên của tệp video

Xác minh rằng API đã tải tệp video lên thành công bằng cách gọi phương thức files.get thông qua SDK.

Các tệp video có trường State từ File API. Khi được tải lên, một video sẽ ở trạng thái PROCESSING cho đến khi sẵn sàng để suy luận. Bạn chỉ có thể sử dụng các tệp ACTIVE để suy luận mô hình.

import time

while video_file.state.name == "PROCESSING":
    print('.', end='')
    time.sleep(10)
    video_file = genai.get_file(video_file.name)

if video_file.state.name == "FAILED":
  raise ValueError(video_file.state.name)

Lấy siêu dữ liệu của tệp video

Bạn có thể lấy siêu dữ liệu của tệp video đã tải lên bất cứ lúc nào bằng cách gọi phương thức files.get thông qua SDK.

Phương thức này cho phép bạn lấy siêu dữ liệu của tệp đã tải lên liên kết với dự án Google Cloud liên kết với khoá API của bạn. Chỉ có name (và theo đó là uri) là duy nhất. Chỉ sử dụng display_name để xác định các tệp nếu bạn tự quản lý tính duy nhất.

file = genai.get_file(name=video_file.name)
print(f"Retrieved file '{file.display_name}' as: {video_file.uri}")

Sáng tạo nội dung bằng tệp video đã tải lên

Sau khi tải video lên, bạn có thể thực hiện các yêu cầu GenerateContent tham chiếu đến uri trong phản hồi (bằng cách tải tệp lên hoặc trực tiếp tải siêu dữ liệu của tệp).

Đảm bảo bạn đã xác minh trạng thái tải lên của tệp video (phần ở trên) trước khi chạy suy luận về video.

# Create the prompt.
prompt = "Describe this video."

# The Gemini 1.5 models are versatile and work with multimodal prompts
model = genai.GenerativeModel(model_name="models/gemini-1.5-flash")

# Make the LLM request.
print("Making LLM inference request...")
response = model.generate_content([video_file, prompt],
                                  request_options={"timeout": 600})
print(response.text)

Xoá tệp video

Các tệp sẽ tự động bị xoá sau 48 giờ. Bạn cũng có thể xoá chúng theo cách thủ công bằng cách sử dụng files.delete thông qua SDK.

genai.delete_file(file_response.name)
print(f'Deleted file {file_response.uri}')

Các định dạng tệp được hỗ trợ

Các mô hình Gemini hỗ trợ tính năng nhắc bằng nhiều định dạng tệp. Phần này giải thích những điều cần cân nhắc khi sử dụng các định dạng nội dung nghe nhìn chung để nhắc, cụ thể là hình ảnh, âm thanh, video và tệp văn bản thuần tuý. Bạn chỉ có thể sử dụng tệp nội dung nghe nhìn để nhắc với các phiên bản mô hình cụ thể, như minh hoạ trong bảng sau.

Mô hình Hình ảnh Âm thanh Video Văn bản thuần tuý
Gemini 1.5 Pro (bản phát hành 008 trở lên) ✔ (tệp hình ảnh tối đa 3600)

Định dạng hình ảnh

Bạn có thể sử dụng dữ liệu hình ảnh để nhắc bằng các mô hình Gemini 1.5. Khi bạn sử dụng hình ảnh để nhắc, hình ảnh phải tuân theo các giới hạn và yêu cầu sau:

  • Hình ảnh phải thuộc một trong các loại MIME dữ liệu hình ảnh sau đây:
    • PNG - hình ảnh/png
    • JPEG – hình ảnh/jpeg
    • WEBP – hình ảnh/webp
    • HEIC – hình ảnh/heic
    • HEIF – hình ảnh/heif
  • Tối đa 3.600 hình ảnh cho các mô hình Gemini 1.5.
  • Không có giới hạn cụ thể về số lượng pixel trong một hình ảnh. Tuy nhiên, những hình ảnh lớn hơn sẽ được giảm kích thước để phù hợp với độ phân giải tối đa là 3072 x 3072 mà vẫn giữ nguyên tỷ lệ khung hình gốc.

Định dạng âm thanh

Bạn có thể sử dụng dữ liệu âm thanh để đưa ra câu lệnh thông qua các mô hình Gemini 1.5. Khi bạn sử dụng âm thanh để nhắc, chúng phải tuân theo các giới hạn và yêu cầu sau:

  • Dữ liệu âm thanh được hỗ trợ ở các loại MIME định dạng âm thanh phổ biến sau đây:
    • WAV – âm thanh/wav
    • MP3 - âm thanh/mp3
    • AIFF – âm thanh/aiff
    • AAC – âm thanh/aac
    • OGG Vorbis – âm thanh/ogg
    • FLAC – âm thanh/flac
  • Thời lượng tối đa được hỗ trợ của dữ liệu âm thanh trong một câu lệnh là 9,5 giờ.
  • Các tệp âm thanh được lấy mẫu lại ở độ phân giải dữ liệu 16 Kb/giây và nhiều kênh âm thanh được kết hợp thành một kênh duy nhất.
  • Không có giới hạn cụ thể về số lượng tệp âm thanh trong một câu lệnh; tuy nhiên, tổng thời lượng kết hợp của tất cả tệp âm thanh trong một câu lệnh không được vượt quá 9,5 giờ.

Định dạng video

Bạn có thể sử dụng dữ liệu video để đưa ra câu lệnh bằng các mô hình Gemini 1.5.

  • Dữ liệu video được hỗ trợ ở các loại MIME định dạng video phổ biến sau đây:

    • video/mp4
    • video/mpeg
    • video/mov
    • video/avi
    • video/x-flv
    • video/mpg
    • video/webm
    • video/WMV
    • video/3gpp
  • Dịch vụ API tệp lấy mẫu video thành hình ảnh với tốc độ 1 khung hình/giây (FPS) và có thể thay đổi để đưa ra chất lượng suy luận tốt nhất. Từng hình ảnh riêng lẻ chiếm 258 mã thông báo bất kể độ phân giải và chất lượng.

Định dạng văn bản thuần túy

API tệp hỗ trợ tải lên tệp văn bản thuần tuý với các loại MIME sau:

  • văn bản/đơn thuần
  • text/html
  • text/css
  • text/javascript
  • application/x-javascript
  • văn bản/chữ số x
  • ứng dụng/x-typescript
  • văn bản/csv
  • văn bản/đánh dấu
  • văn bản/x-python
  • application/x-python-code
  • application/json
  • text/xml
  • ứng dụng/rtf
  • văn bản/rtf

Đối với các tệp văn bản thuần tuý có loại MIME không có trong danh sách, bạn có thể thử chỉ định thủ công một trong các loại MIME ở trên.

Phụ lục: Tải tệp lên Colab

Sổ tay này sử dụng File API (API tệp) với các tệp đã được tải xuống từ Internet. Nếu đang chạy tính năng này trong Colab và muốn sử dụng các tệp của riêng mình thì trước tiên, bạn cần tải các tệp đó lên phiên bản Colab.

Trước tiên, hãy nhấp vào Tệp trên thanh bên trái, sau đó nhấp vào nút Tải lên:

Tiếp theo, bạn sẽ tải tệp đó lên File API. Trong biểu mẫu cho ô mã bên dưới, hãy nhập tên tệp cho tệp mà bạn đã tải lên và cung cấp tên hiển thị thích hợp cho tệp, sau đó chạy ô.

my_filename = "gemini_logo.png" # @param {type:"string"}
my_file_display_name = "Gemini Logo" # @param {type:"string"}

my_file = genai.upload_file(path=my_filename,
                            display_name=my_file_display_name)
print(f"Uploaded file '{my_file.display_name}' as: {my_file.uri}")