รวมไฟล์ขนาดใหญ่ในคำขอแบบหลายโมดัลและจัดการไฟล์โดยใช้ Cloud Storage for Firebase

เมื่อเรียกใช้ 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 เมื่อคุณต้องการใช้ Cloud Storage for Firebase URL กับ 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คู่มือเริ่มต้นใช้งาน

งานระดับสูงที่คุณต้องทำมีดังนี้

  1. สร้างที่เก็บข้อมูล Cloud Storage for Firebase ในโปรเจ็กต์ Firebase

    หากมีที่เก็บข้อมูล Cloud Storage ในโปรเจ็กต์ Google Cloud อยู่แล้วที่ต้องการใช้กับ Vertex AI in Firebase คุณสามารถทำให้บริการ Firebase (รวมถึง Vertex AI in Firebase) เข้าถึงที่เก็บข้อมูลดังกล่าวได้โดยการ"นําเข้า" ที่เก็บข้อมูลไปยัง Firebase

  2. ใช้ Firebase Security Rules กับที่เก็บข้อมูลนี้ Firebase Security Rules ช่วยคุณรักษาความปลอดภัยให้กับไฟล์โดยการจำกัดการเข้าถึงสำหรับผู้ใช้ในปลายทางที่ได้รับอนุญาต

  3. เพิ่มไลบรารีไคลเอ็นต์ของ 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 กับสตรีมมิงและแชทได้ด้วย

รองรับไฟล์และ 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);