อัปเดต Vertex AI แบบไดนามิกในแอป Firebase ด้วยการกำหนดค่าระยะไกลของ Firebase

เมื่อเรียกใช้ Gemini API จากแอปโดยใช้ Vertex AI in Firebase SDK คำขอของคุณจะมีพารามิเตอร์จำนวนหนึ่งที่ควบคุมคำตอบของ Generative AI ซึ่งมักจะประกอบด้วยชื่อโมเดล การกำหนดค่าการสร้างโมเดล (โทเค็นสูงสุด อุณหภูมิ ฯลฯ) การตั้งค่าความปลอดภัย วิธีการของระบบ และข้อมูลพรอมต์

ในกรณีส่วนใหญ่ คุณจะต้องเปลี่ยนข้อมูลเหล่านี้ตามต้องการหรือตามความจำเป็นในสถานการณ์ต่างๆ ต่อไปนี้

  • อัปเดตโมเดล Generative AI โดยไม่ต้องเผยแพร่แอปใหม่ คุณสามารถอัปเกรดเป็นโมเดลเวอร์ชันใหม่ที่มีความเสถียรก่อนที่จะเลิกใช้งานเวอร์ชันเก่า เปลี่ยนไปใช้โมเดลที่ประหยัดค่าใช้จ่ายหรือมีประสิทธิภาพสูงขึ้นตามความต้องการและคุณลักษณะของผู้ใช้ หรือทำให้โมเดลล่าสุดและดีที่สุดใช้งานได้ตามเงื่อนไขกับกลุ่มผู้ใช้บางกลุ่ม (เช่น ผู้ทดสอบเบต้า)
  • ตั้งค่าตำแหน่งที่คุณเข้าถึงโมเดลเพื่อให้อยู่ใกล้ผู้ใช้มากขึ้น
  • ทํา A/B Testing วิธีการและพรอมต์ของระบบที่แตกต่างกัน จากนั้นค่อยๆ เปิดตัวค่าการทดสอบที่ได้ผลลัพธ์ดีที่สุดกับผู้ใช้
  • ใช้ Flag ฟีเจอร์เพื่อแสดงหรือซ่อนฟีเจอร์ Generative AI ในแอปอย่างรวดเร็ว

Firebase Remote Config ดำเนินการทั้งหมดนี้และอื่นๆ อีกมากมาย ซึ่งช่วยให้คุณอัปเดตค่าพารามิเตอร์ได้ตามต้องการและแบบมีเงื่อนไขสำหรับอินสแตนซ์แอปที่ตรงกับลักษณะที่คุณตั้งค่าไว้ในคอนโซล Firebase โดยไม่ต้องเผยแพร่แอปเวอร์ชันใหม่

คู่มือโซลูชันนี้จะแสดง Use Case ที่แนะนําและอธิบายวิธีเพิ่ม Remote Config ลงในแอป Generative AI

ข้ามไปยังการติดตั้งใช้งานโค้ด

เหตุผลที่ควรใช้ Firebase Remote Config กับแอป

Firebase Remote Config ช่วยให้คุณปรับลักษณะการทํางานของแอปแบบไดนามิกได้โดยไม่ต้องอัปเดตแอป ซึ่งจะมีประสิทธิภาพอย่างยิ่งสำหรับแอปที่ใช้ Generative AI ซึ่งการปรับปรุงซ้ำอย่างรวดเร็วและการปรับแต่งอย่างละเอียดเป็นสิ่งสําคัญ

กรณีการใช้งานที่สำคัญสำหรับ Remote Config กับแอป Generative AI

เราขอแนะนำให้ใช้ Remote Config กับ Vertex AI in Firebase สำหรับกรณีการใช้งานที่สำคัญต่อไปนี้

  • อัปเกรดเป็นโมเดลเวอร์ชันล่าสุดโดยไม่ต้องอัปเดตแอป: ใช้พารามิเตอร์ Remote Config เพื่อเปลี่ยนชื่อโมเดลตามต้องการ เพื่อให้คุณอัปเกรดเป็นโมเดล Gemini ที่ต้องการเป็นเวอร์ชันล่าสุดได้ทันทีที่พร้อมใช้งาน
  • อัปเดตวิธีการของระบบและการตั้งค่าความปลอดภัยโดยไม่ต้องอัปเดตแอป:เก็บวิธีการของระบบและการตั้งค่าความปลอดภัยไว้ในพารามิเตอร์ Remote Config เพื่อให้คุณเปลี่ยนได้ตามต้องการหากพบปัญหาหลังจากการทําให้ใช้งานได้
  • ลดความเสี่ยงและบังคับใช้ความปลอดภัยของ AI: ใช้Remote Configการเปิดตัวเพื่อเผยแพร่การเปลี่ยนแปลง Generative AI ให้แก่ผู้ใช้ iOS และ Android อย่างปลอดภัยและค่อยเป็นค่อยไป

กรณีการใช้งานขั้นสูงและที่แนะนําสําหรับ Remote Config กับแอป Generative AI

หลังจากติดตั้งใช้งาน Remote Config และ Google Analytics ในแอปแล้ว คุณจะสามารถสํารวจกรณีการใช้งานขั้นสูงต่อไปนี้

  • ตั้งค่าตำแหน่งตามตำแหน่งไคลเอ็นต์: ใช้เงื่อนไข Remote Config เพื่อตั้งค่าตำแหน่งของโมเดลตามตำแหน่งที่ตรวจพบของไคลเอ็นต์
  • ทดสอบโมเดลต่างๆ: ทดสอบและสลับใช้โมเดล Generative AI ต่างๆ ได้อย่างรวดเร็ว หรือแม้แต่ติดตั้งใช้งานโมเดลต่างๆ กับกลุ่มผู้ใช้ที่แตกต่างกัน เพื่อหาโมเดลที่เหมาะกับกรณีการใช้งานหนึ่งๆ ของคุณมากที่สุด
  • เพิ่มประสิทธิภาพการทำงานของโมเดล: ปรับแต่งพารามิเตอร์ของโมเดล เช่นพรอมต์ของระบบ โทเค็นเอาต์พุตสูงสุด อุณหภูมิ และการตั้งค่าอื่นๆ
  • ใช้วิธีการต่างๆ ของระบบ พรอมต์ และการกําหนดค่ารูปแบบตามแอตทริบิวต์ไคลเอ็นต์: เมื่อใช้ Remote Config กับ Google Analytics คุณจะสร้างเงื่อนไขตามแอตทริบิวต์ไคลเอ็นต์หรือกลุ่มเป้าหมายที่กําหนดเอง รวมถึงตั้งค่าพารามิเตอร์ต่างๆ ตามแอตทริบิวต์เหล่านี้ได้

    ตัวอย่างเช่น หากคุณใช้ Generative AI เพื่อมอบการสนับสนุนด้านเทคนิคในแอป คุณอาจต้องตั้งค่าวิธีการของระบบสำหรับแพลตฟอร์มแอปโดยเฉพาะเพื่อให้แน่ใจว่าผู้ใช้แพลตฟอร์ม Android, iOS และเว็บจะได้รับวิธีการที่ถูกต้อง

  • ปรับเปลี่ยนประสบการณ์การใช้งานในแบบของคุณสำหรับผู้ใช้แต่ละคน: ใช้Remote Configการปรับเปลี่ยนเฉพาะบุคคลเพื่อกำหนดการตั้งค่า Generative AI ที่ดีที่สุดให้กับผู้ใช้แต่ละรายโดยอัตโนมัติ

  • ควบคุมต้นทุน: ปรับจากระยะไกลว่าจะใช้โมเดล Generative AI ใด จะใช้บ่อยแค่ไหน และกำหนดค่าโทเค็นเอาต์พุตสูงสุดแบบไดนามิกตามกลุ่มเป้าหมายของผู้ใช้เพื่อลดต้นทุนที่ไม่จำเป็น

  • เพิ่มประสิทธิภาพประสบการณ์การใช้งานแอปและผลลัพธ์: ใช้ A/B Testing กับ Remote Config ในแอป iOS, Android และ Flutter เพื่อทดสอบการเปลี่ยนแปลงพารามิเตอร์ Generative AI ในกลุ่มผู้ใช้ต่างๆ เพื่อดูว่าการเปลี่ยนแปลงส่งผลต่อเมตริกหลัก เช่น การคงผู้ใช้ไว้และรายได้อย่างไร

การใช้ Firebase Remote Config ในการตรวจสอบแอป Generative AI จะช่วยให้คุณสร้างแอปพลิเคชันที่ทำงานด้วยระบบ AI ที่ยืดหยุ่น ปลอดภัย และคุ้มค่า พร้อมมอบประสบการณ์การใช้งานที่ยอดเยี่ยมให้แก่ผู้ใช้

เพิ่ม Firebase Remote Config ลงในแอป

ในคู่มือโซลูชันนี้ คุณจะใช้ Firebase Remote Config เพื่ออัปเดตพารามิเตอร์ในแอป Android ที่ใช้ Vertex AI in Firebase SDK แบบไดนามิก คุณจะได้เรียนรู้วิธีต่อไปนี้

  • ดึงข้อมูลและเปิดใช้งานพารามิเตอร์ เช่น ชื่อรุ่นและวิธีการของระบบจาก Firebase Remote Config
  • อัปเดตการเรียก Gemini API เพื่อใช้พารามิเตอร์ที่ดึงข้อมูลแบบไดนามิก ซึ่งจะช่วยให้คุณสลับระหว่างรูปแบบต่างๆ หรือแก้ไขคำสั่งของระบบได้โดยไม่ต้องอัปเดตแอป
  • ควบคุมพารามิเตอร์จากระยะไกล ปรับลักษณะการทำงานและความสามารถของโมเดลตามต้องการ

ข้อกำหนดเบื้องต้น

คู่มือนี้จะถือว่าคุณคุ้นเคยกับการใช้ Android Studio เพื่อพัฒนาแอปสำหรับแพลตฟอร์ม Android ก่อนเริ่มต้น โปรดตรวจสอบว่าคุณได้ทำสิ่งต่อไปนี้แล้ว

  • ทำตามคู่มือเริ่มต้นใช้งานสำหรับ Vertex AI in FirebaseSDK ตรวจสอบว่าคุณได้ทำสิ่งต่อไปนี้ทั้งหมดแล้ว

    1. ตั้งค่าโปรเจ็กต์ Firebase ใหม่หรือที่มีอยู่ รวมถึงใช้แพ็กเกจราคา Blaze และเปิดใช้ API ที่จําเป็น
    2. เชื่อมต่อแอปกับ Firebase ซึ่งรวมถึงการลงทะเบียนแอปและเพิ่มการกําหนดค่า Firebase ลงในแอป
    3. เพิ่ม SDK และเริ่มต้นบริการ Vertex AI และโมเดล Generative ในแอป
  • เปิดใช้ Google Analytics ในโปรเจ็กต์และเพิ่ม SDK ลงในแอป (จําเป็นสําหรับการกําหนดเป้าหมายแบบมีเงื่อนไข เช่น การตั้งค่าตําแหน่งบริการและโมเดลตามตําแหน่งของอุปกรณ์ไคลเอ็นต์)

ขั้นตอนที่ 1: ตั้งค่าพารามิเตอร์ในคอนโซล Firebase

สร้างRemote Configเทมเพลตไคลเอ็นต์และกำหนดค่าพารามิเตอร์และค่าเพื่อดึงข้อมูลและใช้ในแอป

  1. เปิดโปรเจ็กต์ Firebase ในคอนโซล Firebase แล้วขยายเรียกใช้จากเมนูการนำทาง แล้วเลือก Remote Config
  2. ตรวจสอบว่าได้เลือกไคลเอ็นต์จากตัวเลือก ไคลเอ็นต์/เซิร์ฟเวอร์ที่ด้านบนของหน้า Remote Config
    • หากนี่เป็นการใช้เทมเพลตไคลเอ็นต์ Remote Config เป็นครั้งแรก ให้คลิกสร้างการกําหนดค่า แผงสร้างพารามิเตอร์แรกจะปรากฏขึ้น
    • หากไม่ได้ใช้เทมเพลต Remote Config เป็นครั้งแรก ให้คลิกเพิ่มพารามิเตอร์
  3. กําหนดพารามิเตอร์ Remote Config ต่อไปนี้

    ชื่อพารามิเตอร์ คำอธิบาย ประเภท ค่าเริ่มต้น
    model_name ชื่อรุ่น ดูรายการชื่อโมเดลล่าสุดที่จะใช้ในโค้ดได้ที่ชื่อโมเดลที่ใช้ได้ สตริง gemini-1.5-flash
    system_instructions คำสั่งของระบบเปรียบเสมือน "ช่วงนำหน้า" ที่คุณเพิ่มก่อนที่โมเดลจะแสดงคำสั่งเพิ่มเติมจากผู้ใช้ปลายทางเพื่อส่งผลต่อลักษณะการทํางานของโมเดล โดยอิงตามความต้องการและกรณีการใช้งานที่เฉพาะเจาะจง สตริง You are a helpful assistant who knows everything there is to know about Firebase!
    prompt พรอมต์เริ่มต้นเพื่อใช้กับฟีเจอร์ Generative AI สตริง I am a developer who wants to know more about Firebase!
    vertex_location ควบคุมตำแหน่ง (ไม่บังคับ) เพื่อเรียกใช้บริการ Vertex AI และเข้าถึงโมเดล คุณสามารถตั้งค่าเงื่อนไขเพื่อกําหนดค่าตัวเลือกนี้ตามตําแหน่งของลูกค้าที่ Google Analytics ตรวจพบ สตริง us-central1
  4. เมื่อเพิ่มพารามิเตอร์เสร็จแล้ว ให้คลิกเผยแพร่การเปลี่ยนแปลง หากเทมเพลตนี้ไม่ใช่เทมเพลต Remote Config ใหม่ ให้ตรวจสอบการเปลี่ยนแปลงแล้วคลิกเผยแพร่การเปลี่ยนแปลงอีกครั้ง

ขั้นตอนที่ 2: เพิ่มและเริ่มต้น Remote Config SDK ในแอป

เพิ่มการอ้างอิง Remote Config และตั้งค่า Remote Config ภายในแอป

  1. เพิ่มทรัพยากร Dependency ของ Remote Config ลงในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติจะเป็น app/build.gradle.kts หรือ app/build.gradle)

    dependencies {
        implementation(platform("com.google.firebase:firebase-bom:33.7.0"))
        implementation("com.google.firebase:firebase-vertexai")
        implementation("com.google.firebase:firebase-config")
        // ... other dependencies
    }
    
  2. เพิ่ม Remote Config ลงในตรรกะแอปพลิเคชันหลัก ในส่วนนี้ คุณจะเริ่มต้น Remote Config และเพิ่มช่วงเวลาการดึงข้อมูลขั้นต่ำ

    Kotlin+KTX

    val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig
    val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 3600
    }
    remoteConfig.setConfigSettingsAsync(configSettings)
    

    Java

    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
    mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
    

ในตัวอย่างนี้ ช่วงเวลาในการดึงข้อมูลเริ่มต้นคือ 3600 วินาที แต่เราขอแนะนำให้คุณตั้งค่าช่วงเวลาในการดึงข้อมูลขั้นต่ำที่ค่อนข้างต่ำในโค้ดระหว่างการพัฒนา

ขั้นตอนที่ 3: ตั้งค่าพารามิเตอร์ในแอป

คุณควรตั้งค่าพารามิเตอร์เริ่มต้นในแอปในออบเจ็กต์ Remote Config วิธีนี้ช่วยให้มั่นใจได้ว่าแอปจะทํางานตามที่คาดไว้แม้ว่าจะดึงค่าจากบริการ Remote Config ไม่ได้ก็ตาม

  1. จากคอนโซล Firebase ให้เปิด Remote Config
  2. ในแท็บพารามิเตอร์ ให้เปิดเมนู แล้วเลือกดาวน์โหลดค่าเริ่มต้น
  3. เมื่อได้รับข้อความแจ้ง ให้เปิดใช้ .xml สำหรับ Android แล้วคลิกดาวน์โหลดไฟล์
  4. บันทึกไฟล์ในไดเรกทอรีทรัพยากร XML ของแอป
  5. อัปเดตไฟล์กิจกรรมหลักเพื่อเพิ่มค่าเริ่มต้นหลัง configSettings ที่คุณเพิ่มไว้ก่อนหน้านี้ โดยทำดังนี้

    Kotlin+KTX

    // Set default values.
    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
    

    Java

    // Set default values.
    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
    

ขั้นตอนที่ 4: ดึงข้อมูลและเปิดใช้งานค่า

หลังจากตั้งค่าเริ่มต้นแล้ว ให้เพิ่มรายการต่อไปนี้เพื่อดึงข้อมูลและเปิดใช้งานค่า

Kotlin+KTX

// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate()
     .addOnCompleteListener(this) { task ->
          if (task.isSuccessful) {
              val updated = task.result
              Log.d(TAG, "Remote Config values fetched and activated: $updated")
          } else {
              Log.e(TAG, "Error fetching Remote Config", task.exception)
          }

Java

  // Fetch and activate Remote Config values
  mFirebaseRemoteConfig.fetchAndActivate()
    .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
        @Override
        public void onComplete(@NonNull Task<Boolean> task) {
            if (task.isSuccessful()) {
                boolean updated = task.getResult();
                Log.d(TAG, "Config params updated: " + updated);
            } else {
                Log.e(TAG, "Error fetching Remote Config", task.exception)
            }
          }
    });

ขั้นตอนที่ 5: เพิ่มโปรแกรมฟัง Remote Config แบบเรียลไทม์

เพิ่มโปรแกรมรับฟัง Remote Config แบบเรียลไทม์ลงในแอปเพื่อให้แน่ใจว่าการเปลี่ยนแปลงที่คุณทำกับเทมเพลต Remote Config จะเผยแพร่ไปยังไคลเอ็นต์ทันทีที่อัปเดต

โค้ดต่อไปนี้จะอัปเดตออบเจ็กต์ Remote Config ทุกครั้งที่มีการเปลี่ยนแปลงค่าพารามิเตอร์ นอกจากนี้ คุณยังกําหนดค่าการดําเนินการภายในaddOnCompleteListenerการเปิดใช้งานได้ด้วย โดยทําดังนี้

Kotlin+KTX

      // Add a real-time Remote Config listener
      remoteConfig.addOnConfigUpdateListener(object : ConfigUpdateListener {
          override fun onUpdate(configUpdate : ConfigUpdate) {
              Log.d(ContentValues.TAG, "Updated keys: " + configUpdate.updatedKeys);
              remoteConfig.activate().addOnCompleteListener {
                  // Optionally, add an action to perform on update here.
              }
          }

          override fun onError(error : FirebaseRemoteConfigException) {
              Log.w(ContentValues.TAG, "Config update error with code: " + error.code, error)
          }
      }

Java

  // Add a real-time Remote Config listener
  remoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() {
      @Override
      public void onUpdate(ConfigUpdate configUpdate) {
          Log.d(ContentValues.TAG, "Updated keys: " + configUpdate.getUpdatedKeys());
                remoteConfig.activate().addOnCompleteListener(new OnCompleteListener<Boolean>() {
                  @Override
                  public void onComplete(@NonNull Task<Boolean> task) {
                      // Optionally, add an action to perform on update here.
                  }
              });
          }

      @Override
      public void onError(FirebaseRemoteConfigException error) {
          Log.w(ContentValues.TAG, "Config update error with code: " + error.getCode(), error);
      }
  });

ขั้นตอนที่ 6: กําหนดค่า Remote Config ให้กับตัวแปร Vertex AI

เมื่อกําหนดค่า Remote Config เสร็จแล้ว ให้อัปเดตโค้ดเพื่อแทนที่ค่าที่เขียนไว้อย่างถาวรด้วยค่าที่มาจาก Remote Config

แทนที่ค่าที่กำหนดไว้ล่วงหน้าสำหรับสถานที่ตั้ง ชื่อรุ่น วิธีการของระบบ และข้อความแจ้งผู้ใช้ด้วยค่าที่มาจาก Remote Config

Kotlin+KTX

// Initialize FirebaseVertexAI instance
// Optionally specify a location in which to run the service and access the model
val vertexAI = Firebase.vertexAI(location = remoteConfig.getString("vertex_location"))

// Initialize the Vertex AI service and the generative model
// Specify a model that supports system instructions, like a Gemini 1.5 model
val generativeModel = Firebase.vertexAI.generativeModel(
  modelName = remoteConfig.getString("model_name"),
  systemInstruction = content { text(remoteConfig.getString("system_instructions")) }
)

// To generate text output, call generateContent with the text input
val response = generativeModel.generateContent(remoteConfig.getString("prompt"))
print(response.text)

Java

// Initialize FirebaseVertexAI instance
// Optionally specify a location in which to run the service and access the model
FirebaseVertexAI vertexAI = FirebaseVertexAI.getInstance(remoteConfig.getString("vertex_location"));

// Initialize the Vertex AI service and the generative model
// Specify a model that supports system instructions, like a Gemini 1.5 model
GenerativeModel gm = FirebaseVertexAI.getInstance().generativeModel(
  /* modelName */ remoteConfig.getString("model_name"),
  /* generationConfig (optional) */ null,
  /* safetySettings (optional) */ null,
  /* requestOptions (optional) */ new RequestOptions(),
  /* tools (optional) */ null,
  /* toolsConfig (optional) */ null,
  /* systemInstruction (optional) */ new Content.Builder().addText(remoteConfig.getString("system_instructions")).build()
);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// Provide a prompt that contains text
Content userPrompt = new Content.Builder()
 addText(remoteConfig.getString("prompt"))
 build();

// To generate text output, call generateContent with the text input
ListenableFuture<GenerateContentResponse> response = model.generateContent(userPrompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
  @Override
  public void onSuccess(GenerateContentResponse result) {
    String resultText = result.getText();
    System.out.println(resultText);
  }

  @Override
  public void onFailure(Throwable t) {
    t.printStackTrace();
  }
}, executor);

ขั้นตอนที่ 7: เรียกใช้แอป

สร้างและเรียกใช้แอปเพื่อยืนยันว่าแอปทำงานได้ ทำการเปลี่ยนแปลงการกำหนดค่าจากหน้า Remote Config ในคอนโซล Firebase เผยแพร่การเปลี่ยนแปลง และยืนยันผลลัพธ์

ขั้นตอนถัดไป