เมื่อเรียกใช้ Gemini API จากแอปโดยใช้ Vertex AI in Firebase SDK คุณสามารถแจ้งให้โมเดล Gemini สร้างข้อความตามอินพุตแบบหลายรูปแบบได้ พรอมต์แบบหลายโมดัลอาจมีหลายโมดัล (หรือประเภทอินพุต) เช่น ข้อความพร้อมกับรูปภาพ, PDF, วิดีโอ และเสียง
สําหรับส่วนที่เป็นข้อมูลไม่ใช่ข้อความของอินพุต (เช่น ไฟล์สื่อ) คุณสามารถใช้ Cloud Storage for Firebase เพื่อรวมไฟล์ในคําขอได้ ข้อมูลโดยย่อเกี่ยวกับฟีเจอร์นี้มีดังนี้
คุณใช้ Cloud Storage for Firebase กับคำขอแบบมัลติโมเดลได้ (เช่น ทั้งการสร้างข้อความและการแชท) ตัวอย่างในคู่มือนี้แสดงอินพุตข้อความและรูปภาพพื้นฐาน
คุณต้องระบุประเภท MIME ของไฟล์และ Cloud Storage for Firebase URL (ซึ่งขึ้นต้นด้วย
gs://
เสมอ) ของไฟล์ในอินพุตคำขอ ค่าเหล่านี้คือข้อมูลเมตาที่กำหนดให้กับไฟล์ที่อัปโหลดไปยังCloud Storageที่เก็บข้อมูลโดยอัตโนมัติคุณต้องใช้ประเภทไฟล์และ URL ที่รองรับ
คู่มือโซลูชันนี้อธิบายวิธีตั้งค่า Cloud Storage for Firebase, อัปโหลดไฟล์ไปยังที่เก็บข้อมูล Cloud Storage for Firebase จากแอป จากนั้นใส่ประเภท MIME ของไฟล์และ URL Cloud Storage for Firebase ในคำขอแบบหลายโมดัลไปยัง Gemini API
คุณต้องการดูตัวอย่างโค้ดไหม หรือคุณตั้งค่า Cloud Storage for Firebase ไว้แล้วและพร้อมเริ่มใช้งานกับคำขอแบบหลายสื่อ
เหตุผลที่ควรใช้ Cloud Storage for Firebase กับแอป
Cloud Storage for Firebase ใช้โครงสร้างพื้นฐานที่รวดเร็ว ปลอดภัย และปรับขนาดได้แบบเดียวกับ Google Cloud Storage ในการจัดเก็บ Blob และไฟล์ อีกทั้ง SDK ของไคลเอ็นต์ยังสร้างขึ้นเพื่อแอปบนอุปกรณ์เคลื่อนที่และเว็บแอปโดยเฉพาะ
สำหรับ Vertex AI in Firebase SDK ขนาดคำขอสูงสุดคือ 20 MB คุณจะได้รับข้อผิดพลาด HTTP 413 หากคำขอมีขนาดใหญ่เกินไป หากขนาดของไฟล์จะทำให้คำขอทั้งหมดมีขนาดใหญ่เกิน 20 MB ให้ใช้ Cloud Storage for FirebaseURL เพื่อรวมไฟล์ไว้ในคำขอแบบหลายรูปแบบ อย่างไรก็ตาม หากไฟล์มีขนาดเล็ก คุณมักจะส่งไฟล์เป็นข้อมูลในบรรทัดได้โดยตรง (โปรดทราบว่าไฟล์ที่ส่งเป็นข้อมูลในบรรทัดจะได้รับการเข้ารหัสเป็น Base64 ระหว่างการส่ง ซึ่งจะเพิ่มขนาดคำขอ)
ประโยชน์เพิ่มเติมในการใช้ Cloud Storage for Firebase มีดังนี้
คุณอาจให้ผู้ใช้ปลายทางอัปโหลดรูปภาพจากแอปลงในที่เก็บข้อมูล Cloud Storage for Firebase โดยตรง แล้วรวมรูปภาพเหล่านั้นไว้ในพรอมต์แบบสื่อหลากรูปแบบ เพียงระบุประเภท MIME และ URL Cloud Storage for Firebase ของไฟล์ (ซึ่งเป็นตัวระบุสำหรับไฟล์)
คุณช่วยประหยัดเวลาและแบนด์วิดท์ของผู้ใช้ปลายทางได้หากผู้ใช้ต้องส่งรูปภาพ โดยเฉพาะอย่างยิ่งในกรณีที่ผู้ใช้มีเครือข่ายคุณภาพต่ำหรือไม่เสถียร
- หากการอัปโหลดหรือดาวน์โหลดไฟล์ถูกขัดจังหวะ Cloud Storage for Firebase SDK จะรีสตาร์ทการดำเนินการโดยอัตโนมัติจากจุดที่หยุดไว้
- ไฟล์ที่อัปโหลดเดียวกันสามารถใช้ได้หลายครั้งโดยที่ผู้ใช้ปลายทางไม่ต้องอัปโหลดไฟล์เดิมทุกครั้งที่ต้องการใช้ในแอป (เช่น ในคำขอแบบหลายรูปแบบใหม่)
คุณสามารถจำกัดการเข้าถึงไฟล์ที่เก็บไว้ใน Cloud Storage for Firebase ของผู้ใช้ปลายทางได้โดยใช้ Firebase Security Rules ซึ่งจะอนุญาตให้เฉพาะผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่อัปโหลด ดาวน์โหลด หรือลบไฟล์ได้
คุณสามารถเข้าถึงไฟล์ในที่เก็บข้อมูลได้จาก Firebase หรือจาก Google Cloud ซึ่งช่วยให้คุณประมวลผลฝั่งเซิร์ฟเวอร์ได้อย่างยืดหยุ่น เช่น การกรองรูปภาพหรือการแปลงไฟล์วิดีโอโดยใช้ Google Cloud Storage API
รองรับไฟล์และ URL ประเภทใดบ้าง
ต่อไปนี้คือข้อกำหนดสำหรับไฟล์และ URL เมื่อคุณต้องการใช้ URL ของ Cloud Storage for Firebase กับ SDK ของ Vertex AI in Firebase
ไฟล์ต้องเป็นไปตามข้อกําหนดของไฟล์อินพุตสําหรับคําขอแบบหลายรูปแบบเมื่อใช้ Vertex AI in Firebase SDK ซึ่งรวมถึงข้อกำหนดต่างๆ เช่น ประเภท MIME และขนาดไฟล์
ไฟล์ต้องจัดเก็บไว้ในที่เก็บข้อมูล Cloud Storage for Firebase (ซึ่งหมายความว่าบริการ Firebase เช่น Firebase Security Rules จะเข้าถึงที่เก็บข้อมูลดังกล่าวได้) หากคุณดูที่เก็บข้อมูลได้ในคอนโซล Firebase ที่เก็บข้อมูลดังกล่าวจะเป็นที่เก็บข้อมูล Cloud Storage for Firebase
ที่เก็บข้อมูล Cloud Storage for Firebase ต้องอยู่ในโปรเจ็กต์ Firebase เดียวกับที่คุณลงทะเบียนแอป
URL Cloud Storage for Firebase ของไฟล์ต้องขึ้นต้นด้วย
gs://
ซึ่งเป็นวิธีสร้าง URL Google Cloud Storage ทั้งหมดURL ของไฟล์ต้องไม่ใช่ URL "เบราว์เซอร์" (เช่น URL ของรูปภาพที่คุณพบบนอินเทอร์เน็ต)
นอกจากนี้ Firebase Security Rules สำหรับที่เก็บข้อมูลของคุณต้องอนุญาตให้เข้าถึงไฟล์อย่างเหมาะสม เช่น
หากคุณมีกฎสาธารณะ ผู้ใช้หรือไคลเอ็นต์ทุกคนจะเข้าถึงไฟล์และระบุ URL ของไฟล์ในการเรียกใช้โดยใช้ Vertex AI in Firebase SDK ได้ กฎประเภทนี้ควรใช้เพื่อเริ่มต้นใช้งานและในช่วงเริ่มต้นการสร้างต้นแบบเท่านั้น (เว้นแต่ว่าไฟล์มีไว้สำหรับการเข้าถึงแบบสาธารณะทั้งหมดจริงๆ)
หากคุณมีกฎที่มีประสิทธิภาพ (แนะนำอย่างยิ่ง) Firebase จะตรวจสอบว่าผู้ใช้ที่ลงชื่อเข้าใช้หรือไคลเอ็นต์มีสิทธิ์เข้าถึงไฟล์เพียงพอก่อนที่จะอนุญาตให้เรียกใช้ URL ที่ระบุ
ใช้ URL Cloud Storage for Firebase กับ Vertex AI in Firebase
ขั้นตอนที่ 1: ตั้งค่า Cloud Storage for Firebase
ดูวิธีการโดยละเอียดในการตั้งค่าและใช้ Cloud Storage for Firebase ได้ในคู่มือการเริ่มต้นใช้งาน
ไปที่Cloud Storage for Firebaseคู่มือเริ่มต้นใช้งาน
งานระดับสูงที่คุณต้องทำมีดังนี้
สร้างที่เก็บข้อมูล Cloud Storage for Firebase ในโปรเจ็กต์ Firebase
หากมีที่เก็บข้อมูล Cloud Storage ในโปรเจ็กต์ Google Cloud อยู่แล้วที่ต้องการใช้กับ Vertex AI in Firebase คุณสามารถทำให้บริการ Firebase (รวมถึง Vertex AI in Firebase) เข้าถึงที่เก็บข้อมูลดังกล่าวได้โดยการ"นําเข้า" ที่เก็บข้อมูลไปยัง Firebase
ใช้ Firebase Security Rules กับที่เก็บข้อมูลนี้ Firebase Security Rules ช่วยคุณทำให้ไฟล์ปลอดภัยด้วยการจำกัดการเข้าถึงสำหรับผู้ใช้ในปลายทางที่ได้รับอนุญาต
เพิ่มไลบรารีไคลเอ็นต์สำหรับ Cloud Storage for Firebase ลงในแอป
โปรดทราบว่าคุณสามารถข้ามงานนี้ได้ แต่คุณต้องใส่ประเภท MIME และค่า URL Cloud Storage for Firebase ในคำขอแบบหลายโมดัลไว้เสมอ
ขั้นตอนที่ 2: อัปโหลดไฟล์ไปยังที่เก็บข้อมูล
ในเอกสารประกอบของ Cloud Storage for Firebase คุณสามารถดูวิธีต่างๆ ทั้งหมดในการอัปโหลดไฟล์ไปยังที่เก็บข้อมูล Cloud Storage for Firebase เช่น คุณสามารถอัปโหลดไฟล์ในเครื่องจากอุปกรณ์ของผู้ใช้ปลายทาง อย่างเช่นรูปภาพและวิดีโอจากกล้อง
เมื่อคุณอัปโหลดไฟล์ไปยังที่เก็บข้อมูล Cloud Storage จะใส่ข้อมูล 2 รายการต่อไปนี้ลงในไฟล์โดยอัตโนมัติ คุณจะต้องใส่ค่าเหล่านี้ในคำขอแบบหลายรูปแบบ (ดังที่แสดงในขั้นตอนถัดไปของคู่มือนี้)
ประเภท MIME: ประเภทสื่อของไฟล์ (เช่น
image/png
) Cloud Storage for Firebase จะพยายามตรวจหาประเภท MIME โดยอัตโนมัติขณะอัปโหลด และใช้ข้อมูลเมตานั้นกับออบเจ็กต์ในที่เก็บข้อมูล อย่างไรก็ตาม คุณระบุประเภท MIME ในระหว่างการอัปโหลดได้URL Cloud Storage for Firebase: ตัวระบุที่ไม่ซ้ำกันสำหรับไฟล์ URL ต้องขึ้นต้นด้วย
gs://
ขั้นตอนที่ 3: รวมประเภท MIME และ URL ของไฟล์ในคำขอแบบหลายรูปแบบ
เมื่อมีไฟล์ที่จัดเก็บไว้ในที่เก็บข้อมูล Cloud Storage for Firebase แล้ว คุณจะรวมประเภท MIME และ URL Cloud Storage for Firebase ของไฟล์นั้นไว้ในคำขอหลายรูปแบบได้
โปรดทราบว่าตัวอย่างเหล่านี้แสดงคำขอ generateContent
ที่ไม่เป็นสตรีมมิง แต่คุณใช้ URL Cloud Storage for Firebase กับสตรีมมิงและแชทได้ด้วย
หากต้องการรวมไฟล์ในคำขอ ให้ใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
ตัวเลือกที่ 1: รวมประเภท MIME และ URL โดยใช้การอ้างอิงพื้นที่เก็บข้อมูล
ตัวเลือกที่ 2: ระบุประเภท MIME และ URL อย่างชัดแจ้ง
ตัวเลือกที่ 1: รวมประเภท MIME และ URL โดยใช้การอ้างอิงพื้นที่เก็บข้อมูล
ใช้ตัวเลือกนี้หากคุณเพิ่งอัปโหลดไฟล์ไปยังที่เก็บข้อมูล และต้องการรวมไฟล์ (ผ่านการอ้างอิงพื้นที่เก็บข้อมูล) ในคำขอแบบหลายโมดัลทันที การเรียกใช้ต้องใช้ทั้งประเภท MIME และ URL Cloud Storage for Firebase
Kotlin+KTX
สำหรับ Kotlin เมธอดใน SDK นี้เป็นฟังก์ชันที่ระงับและต้องมีการเรียกใช้จากขอบเขต Coroutine// Upload an image file using Cloud Storage for Firebase.
val storageRef = Firebase.storage.reference.child("images/image.jpg")
val fileUri = Uri.fromFile(File("image.jpg"))
try {
val taskSnapshot = storageRef.putFile(fileUri).await()
// Get the MIME type and Cloud Storage for Firebase file path.
val mimeType = taskSnapshot.metadata?.contentType
val bucket = taskSnapshot.metadata?.bucket
val filePath = taskSnapshot.metadata?.path
if (mimeType != null && bucket != null) {
// Construct a URL in the required format.
val storageUrl = "gs://$bucket/$filePath"
// Construct a prompt that includes text, the MIME type, and the URL.
val prompt = content {
fileData(mimeType = mimeType, uri = storageUrl)
text("What's in this picture?")
}
// To generate text output, call generateContent with the prompt.
val response = generativeModel.generateContent(prompt)
println(response.text)
}
} catch (e: StorageException) {
// An error occurred while uploading the file.
} catch (e: GoogleGenerativeAIException) {
// An error occurred while generating text.
}
Java
สําหรับ Java เมธอดใน SDK นี้จะแสดงผลเป็นListenableFuture
// Upload an image file using Cloud Storage for Firebase.
StorageReference storage = FirebaseStorage.getInstance().getReference("images/image.jpg");
Uri fileUri = Uri.fromFile(new File("images/image.jpg"));
storage.putFile(fileUri).addOnSuccessListener(taskSnapshot -> {
// Get the MIME type and Cloud Storage for Firebase file path.
String mimeType = taskSnapshot.getMetadata().getContentType();
String bucket = taskSnapshot.getMetadata().getBucket();
String filePath = taskSnapshot.getMetadata().getPath();
if (mimeType != null && bucket != null) {
// Construct a URL in the required format.
String storageUrl = "gs://" + bucket + "/" + filePath;
// Create a prompt that includes text, the MIME type, and the URL.
Content prompt = new Content.Builder()
.addFileData(storageUrl, mimeType)
.addText("What's in this picture?")
.build();
// To generate text output, call generateContent with the prompt.
GenerativeModelFutures modelFutures = GenerativeModelFutures.from(model);
ListenableFuture<GenerateContentResponse> response = modelFutures.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(@NonNull Throwable t) {
t.printStackTrace();
}
}, executor);
}
}).addOnFailureListener(e -> {
// An error occurred while uploading the file.
e.printStackTrace();
});
ตัวเลือกที่ 2: ระบุประเภท MIME และ URL อย่างชัดเจน
ใช้ตัวเลือกนี้หากคุณทราบค่าสำหรับประเภท MIME และ URL Cloud Storage for Firebase และต้องการนำค่าเหล่านั้นไปใส่ในคำขอแบบมัลติมีเดียอย่างชัดเจน การเรียกใช้ต้องใช้ทั้งประเภท MIME และ URL
Kotlin+KTX
สำหรับ Kotlin เมธอดใน SDK นี้เป็นฟังก์ชันที่ระงับและต้องมีการเรียกใช้จากขอบเขต Coroutine// Construct a prompt that explicitly includes the MIME type and Cloud Storage for Firebase URL values.
val prompt = content {
fileData(mimeType = "image/jpeg", uri = "gs://bucket-name/path/image.jpg")
text("What's in this picture?")
}
// To generate text output, call generateContent with the prompt.
val response = generativeModel.generateContent(prompt)
println(response.text)
Java
สําหรับ Java เมธอดใน SDK นี้จะแสดงผลเป็นListenableFuture
// Construct a prompt that explicitly includes the MIME type and Cloud Storage for Firebase URL values.
Content prompt = new Content.Builder()
.addFilePart("gs://bucket-name/path/image.jpg", "image/jpeg")
.addText("What's in this picture?")
.build();
// To generate text output, call generateContent with the prompt
GenerativeModelFutures modelFutures = GenerativeModelFutures.from(model);
ListenableFuture<GenerateContentResponse> response = modelFutures.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(@NonNull Throwable t) {
t.printStackTrace();
}
}, executor);