เปลี่ยนชื่อโมเดลในแอปจากระยะไกล

ความพร้อมใช้งานของโมเดล Generative AI มีการเปลี่ยนแปลงบ่อยครั้ง โดยมีการเปิดตัวโมเดลใหม่ๆ ที่ดีขึ้น และปิดตัวโมเดลเก่าๆ ที่มีความสามารถน้อยกว่า

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

Firebase Remote Config ช่วยให้คุณอัปเดตค่าพารามิเตอร์ ในแอป (เช่น ชื่อโมเดล) แบบไดนามิกและจากระยะไกลจาก Firebase ได้โดยไม่ต้องเผยแพร่แอปเวอร์ชันใหม่

โปรดทราบว่าการเปลี่ยนชื่อโมเดลเป็นกรณีการใช้งาน ที่สำคัญ สำหรับการใช้ Remote Config กับ Firebase AI Logic แต่คุณยัง ใช้ Remote Config เพื่อควบคุมพารามิเตอร์ในแอปแบบไดนามิกและแบบมีเงื่อนไขได้ด้วย, เช่น การกำหนดค่าการสร้างโมเดล (เช่น โทเค็นเอาต์พุตสูงสุด) การตั้งค่าความปลอดภัย, คำแนะนำของระบบ และข้อมูลพรอมต์

คู่มือนี้อธิบายวิธีติดตั้งใช้งาน Remote Config ในแอป โดยเฉพาะอย่างยิ่งเพื่อควบคุมชื่อโมเดลที่ใช้ในแอป

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

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

  1. ในคอนโซล Firebase ให้ไปที่ DevOps และการมีส่วนร่วม > การกำหนดค่าระยะไกล

  2. เลือกไคลเอ็นต์ จากตัวเลือกไคลเอ็นต์/เซิร์ฟเวอร์ ที่ด้านบนของหน้า

  3. เริ่มเทมเพลตไคลเอ็นต์โดยคลิกสร้างการกำหนดค่า (หรือเพิ่มพารามิเตอร์ หากคุณเคยใช้เทมเพลตไคลเอ็นต์)

  4. กำหนดพารามิเตอร์ model_name ดังนี้

    ชื่อพารามิเตอร์ คำอธิบาย ประเภท ค่าเริ่มต้น
    model_name ชื่อโมเดล ดูชื่อโมเดลที่มี สตริง gemini-3.5-flash
  5. หลังจากเพิ่มพารามิเตอร์นี้แล้ว ให้คลิกเผยแพร่การเปลี่ยนแปลง หากนี่ ไม่ใช่เทมเพลต Remote Config ใหม่ ให้ตรวจสอบการเปลี่ยนแปลงแล้วคลิก เผยแพร่การเปลี่ยนแปลง อีกครั้ง

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

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

Swift

ในขั้นตอนการตั้งค่า Firebase AI Logic คุณได้เพิ่ม Firebase SDK ลงในแอปแล้ว แต่จะต้องเพิ่ม Remote Config ด้วย

  1. เปิดโปรเจ็กต์ใน Xcode แล้วไปที่File > Add Package Dependencies

  2. เลือก firebase-ios-sdk แล้วคลิก Add package

  3. จากตัวนำทางโปรเจ็กต์ ให้เลือกแอป > Targets > แอปของคุณ

  4. จากแท็บGeneral ให้เลื่อนไปที่Frameworks, Libraries, and Embedded Content

  5. คลิก + แล้วเลือก FirebaseRemoteConfig จากนั้นคลิก Add

  6. เพิ่มการนำเข้า FirebaseRemoteConfig ลงในโค้ด

    import FirebaseRemoteConfig
    
  7. เริ่มต้น Firebase และเพิ่ม Remote Config ลงในตรรกะแอปพลิเคชันหลักภายในคลาสที่เหมาะสมสำหรับแอป

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

    let remoteConfig = RemoteConfig.remoteConfig()
    let settings = RemoteConfigSettings()
    settings.minimumFetchInterval = 3600
    remoteConfig.configSettings = settings
    

Kotlin

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

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

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

Java

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

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

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

Web

  1. เปิดโค้ดในเครื่องมือแก้ไขข้อความและนำเข้า Remote Config

    import { getRemoteConfig } from 'firebase/remote-config';
    
  2. เริ่มต้น Remote Config ภายในฟังก์ชันหลักและหลังจากเริ่มต้นแอป Firebase สำหรับ Firebase AI Logic SDK แล้ว ดังนี้

      // Initialize Remote Config and get a reference to the service
      const remoteConfig = getRemoteConfig(app);
    
  3. ตั้งค่าช่วงการดึงข้อมูลขั้นต่ำ ดังนี้

    remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
    

Dart

  1. จากไดเรกทอรีโปรเจ็กต์ Flutter ให้ติดตั้งและเพิ่ม Remote Config โดยใช้คำสั่งต่อไปนี้

    flutter pub add firebase_remote_config
    
  2. เปิด ./lib/main.dart และเพิ่มการนำเข้าหลังจากการนำเข้าอื่นๆ ที่คุณ เพิ่มเพื่อรองรับ Firebase AI Logic

    import 'package:firebase_vertexai/firebase_ai.dart';
    import 'package:firebase_core/firebase_core.dart';
    import 'package:firebase_remote_config/firebase_remote_config.dart';
    
  3. เพิ่มตัวแปร _modelName ลงในแอปเพื่อให้คุณใช้ตัวแปรนี้ได้ในภายหลัง ดังนี้

    late final String _modelName;
    late final String _systemInstructions;
    late final String _prompt;
    
  4. สร้างอินสแตนซ์ออบเจ็กต์ Remote Config แล้วตั้งช่วงการดึงข้อมูลขั้นต่ำ เพื่อให้มีการรีเฟรชบ่อยๆ ดังนี้ อย่าลืมเพิ่มโค้ดนี้หลังจากเริ่มต้น Firebase แล้ว

      final remoteConfig = FirebaseRemoteConfig.instance;
      await remoteConfig.setConfigSettings(RemoteConfigSettings(
        fetchTimeout: const Duration(seconds: 3600),
        minimumFetchInterval: const Duration(seconds: 3600),
      ));
    

Unity

  1. เพิ่ม Remote Config ลงในโปรเจ็กต์ Unity โดยทำตาม วิธีการเหล่านี้

  2. สร้างอินสแตนซ์ออบเจ็กต์ Remote Config แล้วตั้งช่วงการดึงข้อมูลขั้นต่ำ เพื่อให้มีการรีเฟรชบ่อยๆ ดังนี้ อย่าลืมเพิ่มโค้ดนี้หลังจากเริ่มต้น Firebase แล้ว

    var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
    const int MillisecondsPerSecond = 1000;
    await remoteConfig.SetConfigSettingsAsync(new ConfigSettings() {
      FetchTimeoutInMilliseconds = 3600 * MillisecondsPerSecond,
      MinimumFetchIntervalInMilliseconds = 3600 * MillisecondsPerSecond
    });
    

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

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

Swift

  1. ในคอนโซล Firebase ให้ไปที่หน้า DevOps และการมีส่วนร่วม > การกำหนดค่าระยะไกล > พารามิเตอร์

  2. เปิด เมนู แล้ว เลือก Download default values

  3. เมื่อได้รับข้อความแจ้ง ให้เปิดใช้ .plist for iOS แล้วคลิก Download file

  4. บันทึกไฟล์ในไดเรกทอรีแอปพลิเคชัน

  5. ใน Xcode ให้คลิกขวาที่แอปแล้วเลือกAdd Files

  6. เลือก remote_config_defaults.plist แล้วคลิก Add

  7. อัปเดตโค้ดของแอปเพื่ออ้างอิงไฟล์เริ่มต้น ดังนี้

    // Set default values for Remote Config parameters.
    remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
    

Kotlin

  1. ในคอนโซล Firebase ให้ไปที่หน้า DevOps และการมีส่วนร่วม > การกำหนดค่าระยะไกล > พารามิเตอร์

  2. เปิด เมนู แล้ว เลือก Download default values

  3. เมื่อได้รับข้อความแจ้ง ให้เปิดใช้ .xml for Android แล้วคลิก Download file

  4. บันทึกไฟล์ในไดเรกทอรีทรัพยากร XML ของแอป

  5. อัปเดตไฟล์กิจกรรมหลักเพื่อเพิ่มค่าเริ่มต้นหลังจาก configSettings ที่คุณเพิ่มไว้ก่อนหน้านี้ ดังนี้

    // Set default values for Remote Config parameters.
    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
    

Java

  1. ในคอนโซล Firebase ให้ไปที่หน้า DevOps และการมีส่วนร่วม > การกำหนดค่าระยะไกล > พารามิเตอร์

  2. เปิด เมนู แล้ว เลือก Download default values

  3. เมื่อได้รับข้อความแจ้ง ให้เปิดใช้ .xml for Android แล้วคลิก Download file

  4. บันทึกไฟล์ในไดเรกทอรีทรัพยากร XML ของแอป

  5. อัปเดตไฟล์กิจกรรมหลักเพื่อเพิ่มค่าเริ่มต้นหลังจาก configSettings ที่คุณเพิ่มไว้ก่อนหน้านี้ ดังนี้

    // Set default values for Remote Config parameters.
    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
    

Web

คุณสามารถตั้งค่าเริ่มต้นสำหรับชื่อโมเดลได้โดยตรงในโค้ด ดังนี้

// Set default values for Remote Config parameters.
remoteConfig.defaultConfig = {
  model_name: 'gemini-3.5-flash',
};

Dart

คุณสามารถตั้งค่าเริ่มต้นสำหรับชื่อโมเดลได้โดยตรงในโค้ด ดังนี้

// Set default values for Remote Config parameters.
remoteConfig.setDefaults(const {
  "model_name": "gemini-3.5-flash"
});

Unity

คุณสามารถตั้งค่าเริ่มต้นสำหรับชื่อโมเดลได้โดยตรงในโค้ด ดังนี้

// Set default values for Remote Config parameters.
await remoteConfig.SetDefaultsAsync(
  new System.Collections.Generic.Dictionary<string, object>() {
    { "model_name", "gemini-3.5-flash" }
  }
);

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

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

Swift

// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate { status, error in
  if let error = error {
    print("Error fetching Remote Config: \(error.localizedDescription)")
  }
}

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

Kotlin

// 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)
            }
          }
    });

Web

  1. เพิ่ม getValue และ fetchAndActivate ลงในการนำเข้า ดังนี้

    import { getValue, fetchAndActivate } from 'firebase/remote-config';
    
  2. ค้นหาโค้ดที่คุณระบุค่าเริ่มต้นสำหรับชื่อโมเดล จากนั้นให้เพิ่มโค้ดบล็อกต่อไปนี้เพื่อดึงข้อมูลและเปิดใช้งานการกำหนดค่า รวมถึงกำหนดค่าที่ดึงข้อมูลไปยังค่าคงที่ modelName

    // Fetch and activate Remote Config.
    try {
      await fetchAndActivate(remoteConfig);
    } catch(err) {
      console.error('Remote Config fetch failed', err);
    }
    
    console.log('Remote Config fetched.');
    
    // Assign Remote Config values.
    const modelName = getValue(remoteConfig, 'model_name').asString();
    

Dart

// Fetch and activate Remote Config.
remoteConfig.fetchAndActivate();

// Assign Remote Config values.
String? _modelName = remoteConfig.getString("model_name");

Unity

// Fetch and activate Remote Config values.
await remoteConfig.FetchAndActivateAsync();

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

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

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

Swift

// Add real-time Remote Config
remoteConfig.addOnConfigUpdateListener { configUpdate, error in
  guard let configUpdate = configUpdate, error == nil else {
    print("Error listening for config updates: \(error?.localizedDescription ?? "No error available")")
    return
  }

  print("Updated keys: \(configUpdate.updatedKeys)")
  remoteConfig.activate { changed, error in
    guard error == nil else {
      print("Error activating config: \(error?.localizedDescription ?? "No error available")")
      return
    }
    print("Activated config successfully")
  }
}

Kotlin

นอกจากนี้ คุณยังกำหนดค่าการดำเนินการภายในการเปิดใช้งาน addOnCompleteListener ได้ด้วย (ไม่บังคับ)

      // 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

นอกจากนี้ คุณยังกำหนดค่าการดำเนินการภายในการเปิดใช้งาน addOnCompleteListener ได้ด้วย (ไม่บังคับ)

  // 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);
      }
  });

Web

 // Add a real-time Remote Config listener
 onConfigUpdate(remoteConfig, {
   next: (configUpdate) => {
      console.log("Updated keys:", configUpdate.getUpdatedKeys());
      if (configUpdate.getUpdatedKeys().has("welcome_message")) {
         activate(remoteConfig).then(() => {
         showWelcomeMessage();
         });
      }
   },
   error: (error) => {
      console.log("Config update error:", error);
   },
   complete: () => {
      console.log("Listening stopped.");
   }
});

Dart

// Add a real-time Remote Config listener
remoteConfig.onConfigUpdated.listen((event) async {
  await remoteConfig.activate();
});

Unity

// Add a real-time Remote Config listener to automatically update whenever
// a new template is published.
// Note: the parameters can be anonymous as they are unused.

remoteConfig.OnConfigUpdateListener += (_, _) => {
  remoteConfig.ActivateAsync();
};

ขั้นตอนที่ 6: อัปเดตคำขอ Gemini API เพื่อใช้ค่า Remote Config

คลิกผู้ให้บริการ Gemini API เพื่อดูเนื้อหาเฉพาะของผู้ให้บริการ และโค้ดในหน้านี้

เมื่อกำหนดค่า Remote Config เสร็จสมบูรณ์แล้ว ให้อัปเดตโค้ดเพื่อแทนที่ ค่าที่ฮาร์ดโค้ดด้วยค่าที่มาจาก Remote Config

Swift

import FirebaseAI

// When creating a `GenerativeModel` instance, source the model name value from Remote Config
let modelName = remoteConfig.configValue(forKey: "model_name").stringValue
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
  modelName: modelName
)

// ...

Kotlin

// When creating a `GenerativeModel` instance, source the model name value from Remote Config
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
  modelName = remoteConfig.getString("model_name")
)

// ...

Java

// When creating a `GenerativeModel` instance, source the model name value from Remote Config
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
    .generativeModel(
      /* modelName */ remoteConfig.getString("model_name"),
      /* generationConfig (optional) */ null,
      /* safetySettings (optional) */ null,
      /* requestOptions (optional) */ new RequestOptions(),
      /* tools (optional) */ null,
      /* toolsConfig (optional) */ null,
      /* systemInstruction (optional) */ null,
    );

GenerativeModelFutures model = GenerativeModelFutures.from(ai);

// ...

Web

// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// When creating a `GenerativeModel` instance, source the model name value from Remote Config
const model = getGenerativeModel(ai, {
  model: modelName
});

// ...

Dart

// ...

// When creating a `GenerativeModel` instance, source the model name value from Remote Config
final model = FirebaseAI.googleAI().generativeModel(
  model: _modelName,
);

// ...

Unity

// ...

var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// When creating a `GenerativeModel` instance, source the model name value from Remote Config
var modelName = remoteConfig.GetValue("model_name").StringValue;
var model = ai.GetGenerativeModel(
  modelName: modelName
);

// ...

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

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

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

  • ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งใช้งานกรณีการใช้งานอื่นๆ สำหรับ Remote Config และ Firebase AI Logic

  • สำหรับแอปและเกมบนอุปกรณ์เคลื่อนที่

    • ทดสอบการตั้งค่าโมเดลต่างๆ ด้วย Remote Config และ A/B Testing

    • เผยแพร่การเปลี่ยนแปลงพารามิเตอร์โมเดลทีละน้อยโดยใช้ Remote Config rollouts (iOS+ และ Android เท่านั้น)

    • ใช้ Remote Config การปรับเปลี่ยนในแบบของคุณ เพื่อใช้แมชชีนเลิร์นนิงในการกำหนดการตั้งค่าที่ดีที่สุดสำหรับผู้ใช้แต่ละราย (iOS+, Android และ Unity เท่านั้น)