คุณสามารถสร้างแอปและฟีเจอร์ Android ที่ทำงานด้วยระบบ AI ด้วยการอนุมานแบบไฮบริดโดยใช้ Firebase AI Logic การอนุมานแบบไฮบริดช่วยให้สามารถเรียกใช้การอนุมานโดยใช้ โมเดลในอุปกรณ์เมื่อพร้อมใช้งาน และเปลี่ยนกลับไปใช้ โมเดลที่โฮสต์ในระบบคลาวด์ได้อย่างราบรื่นในกรณีอื่นๆ (และในทางกลับกัน)
หน้านี้อธิบายวิธี เริ่มต้นใช้งาน Client SDK รวมถึงแสดง ตัวเลือกการกำหนดค่าและความสามารถเพิ่มเติม เช่น อุณหภูมิ
โปรดทราบว่าการอนุมานบนอุปกรณ์ผ่าน Firebase AI Logic รองรับสำหรับแอป Android ที่ทำงานบนอุปกรณ์บางรุ่น และอยู่ภายใต้ข้อกำหนดของ ML Kit รวมถึงข้อกำหนดที่เฉพาะเจาะจงสำหรับลักษณะ Gen AI ของ ML Kit
กรณีการใช้งานที่แนะนำและความสามารถที่รองรับ
กรณีการใช้งานที่แนะนำ
การใช้โมเดลในอุปกรณ์สำหรับการอนุมานมีข้อดีดังนี้
- ความเป็นส่วนตัวที่ดียิ่งขึ้น
- บริบทเฉพาะรายการ
- การอนุมานโดยไม่มีค่าใช้จ่าย
- ฟังก์ชันการทำงานแบบออฟไลน์
การใช้ฟังก์ชันไฮบริดมีข้อดีดังนี้
- เข้าถึงกลุ่มเป้าหมายได้มากขึ้นด้วยการรองรับความพร้อมใช้งานของโมเดลในอุปกรณ์ และการเชื่อมต่ออินเทอร์เน็ต
ความสามารถและฟีเจอร์ที่รองรับสำหรับการอนุมานในอุปกรณ์
การอนุมานในอุปกรณ์รองรับเฉพาะการสร้างข้อความแบบเทิร์นเดียว (ไม่ใช่แชท) โดยมีเอาต์พุตแบบสตรีมมิงหรือไม่ใช่สตรีมมิง โดยรองรับความสามารถในการสร้างข้อความต่อไปนี้
การสร้างข้อความจากอินพุตข้อความและรูปภาพ โดยเฉพาะ รูปภาพบิตแมปเดียวเป็นอินพุต
โปรดดูรายการ ฟีเจอร์ที่ยังไม่พร้อมใช้งานสำหรับการอนุมานในอุปกรณ์ ที่ด้านล่างของหน้านี้
ก่อนเริ่มต้น
ข้อควรทราบมีดังนี้
API ที่รองรับ
การอนุมานในระบบคลาวด์ใช้Gemini APIผู้ให้บริการที่คุณเลือก (Gemini Developer API หรือ Vertex AI Gemini API)
การอนุมานบนอุปกรณ์ใช้ Prompt API จาก ML Kit ซึ่งอยู่ในเวอร์ชันเบต้าและพร้อมใช้งานในอุปกรณ์บางรุ่นเท่านั้น
หน้านี้จะอธิบายวิธีเริ่มต้นใช้งาน
หลังจากตั้งค่ามาตรฐานนี้เสร็จแล้ว ให้ดู ตัวเลือกและความสามารถในการกำหนดค่าเพิ่มเติม (เช่น การตั้งค่าอุณหภูมิ)
อุปกรณ์ Android ที่รองรับและโมเดลในอุปกรณ์
สำหรับการอนุมานบนอุปกรณ์ (ซึ่งใช้ Prompt API ของ ML Kit) คุณจะดูรายการ อุปกรณ์ที่รองรับและโมเดลบนอุปกรณ์ของอุปกรณ์เหล่านั้น ได้ในเอกสารประกอบของ ML Kit
เริ่มต้นใช้งาน
ขั้นตอนการเริ่มต้นใช้งานเหล่านี้อธิบายการตั้งค่าทั่วไปที่จำเป็นสำหรับคำขอพรอมต์ที่รองรับ ที่คุณต้องการส่ง
ขั้นตอนที่ 1: ตั้งค่าโปรเจ็กต์ Firebase และเชื่อมต่อแอปกับ Firebase
ลงชื่อเข้าใช้คอนโซล Firebase แล้วเลือกโปรเจ็กต์ Firebase
ในFirebase Console ให้ไปที่หน้า Firebase AI Logic
คลิกเริ่มต้นใช้งานเพื่อเปิดตัวเวิร์กโฟลว์แบบมีคำแนะนำที่จะช่วยคุณตั้งค่า API ที่จำเป็น และทรัพยากรสำหรับโปรเจ็กต์
ตั้งค่าโปรเจ็กต์ให้ใช้ผู้ให้บริการ "Gemini API"
เราขอแนะนำให้เริ่มต้นใช้งานโดยใช้ Gemini Developer API คุณสามารถตั้งค่าVertex AI Gemini API (และข้อกำหนดสำหรับการเรียกเก็บเงิน) ได้ทุกเมื่อ
สำหรับ Gemini Developer API คอนโซลจะเปิดใช้ API ที่จำเป็น และสร้างคีย์ API ของ Gemini ในโปรเจ็กต์
อย่าเพิ่มคีย์ API Gemini นี้ลงในโค้ดเบสของแอป ดูข้อมูลเพิ่มเติมหากได้รับแจ้งในเวิร์กโฟลว์ของคอนโซล ให้ทำตามวิธีการบนหน้าจอเพื่อ ลงทะเบียนแอปและเชื่อมต่อกับ Firebase
ทําตามขั้นตอนถัดไปในคู่มือนี้เพื่อเพิ่ม SDK ลงในแอป
ขั้นตอนที่ 2: เพิ่ม SDK ที่จำเป็น
Firebase AI Logic SDK สำหรับ Android
(firebase-aifirebase-ai-ondevice
ในไฟล์ Gradle ของโมดูล (ระดับแอป)
(เช่น <project>/<app-module>/build.gradle.kts) ให้เพิ่มทรัพยากร Dependency สำหรับคลัง Firebase AI Logic สำหรับ Android ดังนี้
Kotlin
dependencies { // ... other androidx dependencies // Add the dependencies for the Firebase AI Logic libraries // Note that the on-device SDK is not yet included in the Firebase Android BoM implementation("com.google.firebase:firebase-ai:17.10.0") implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta01") }
Java
สำหรับ Java คุณต้องเพิ่มไลบรารีอีก 2 รายการ
dependencies { // ... other androidx dependencies // Add the dependencies for the Firebase AI Logic libraries // Note that the on-device SDK is not yet included in the Firebase Android BoM implementation("com.google.firebase:firebase-ai:17.10.0") implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta01") // Required for one-shot operations (to use `ListenableFuture` from Guava Android) implementation("com.google.guava:guava:31.0.1-android") // Required for streaming operations (to use `Publisher` from Reactive Streams) implementation("org.reactivestreams:reactive-streams:1.0.4") }
ขั้นตอนที่ 3: ตรวจสอบว่าโมเดลในอุปกรณ์พร้อมใช้งานหรือไม่
ใช้
FirebaseAIOnDevice
เพื่อตรวจสอบว่าโมเดลในอุปกรณ์พร้อมใช้งานหรือไม่ และดาวน์โหลดโมเดลหากยังไม่พร้อมใช้งาน
เมื่อดาวน์โหลดแล้ว AICore จะอัปเดตโมเดลให้โดยอัตโนมัติ ดูรายละเอียดเพิ่มเติมเกี่ยวกับ AICore และการจัดการการดาวน์โหลดโมเดลในอุปกรณ์ได้ใน หมายเหตุหลังตัวอย่างโค้ด
Kotlin
val status = FirebaseAIOnDevice.checkStatus()
when (status) {
OnDeviceModelStatus.UNAVAILABLE -> {
Log.w(TAG, "On-device model is unavailable")
}
OnDeviceModelStatus.DOWNLOADABLE -> {
FirebaseAIOnDevice.download().collect { status ->
when (status) {
is DownloadStatus.DownloadStarted ->
Log.w(TAG, "Starting download - ${status.bytesToDownload}")
is DownloadStatus.DownloadInProgress ->
Log.w(TAG, "Download in progress ${status.totalBytesDownloaded} bytes downloaded")
is DownloadStatus.DownloadCompleted ->
Log.w(TAG, "On-device model download complete")
is DownloadStatus.DownloadFailed ->
Log.e(TAG, "Download failed ${status}")
}
}
}
OnDeviceModelStatus.DOWNLOADING -> {
Log.w(TAG, "On-device model is being downloaded")
}
OnDeviceModelStatus.AVAILABLE -> {
Log.w(TAG, "On-device model is available")
}
}
Java
Checking for and downloading the model is not yet available for Java.
However, all other APIs and interactions in this guide are available for Java.
ข้อควรทราบเกี่ยวกับการดาวน์โหลดโมเดลในอุปกรณ์มีดังนี้
เวลาที่ใช้ในการดาวน์โหลดโมเดลในอุปกรณ์ขึ้นอยู่กับหลายปัจจัย รวมถึงเครือข่ายของคุณ
หากโค้ดของคุณใช้โมเดลในอุปกรณ์สำหรับการอนุมานหลักหรือการอนุมานสำรอง โปรดตรวจสอบว่าได้ดาวน์โหลดโมเดลตั้งแต่ช่วงแรกๆ ของวงจรแอป เพื่อให้ โมเดลในอุปกรณ์พร้อมใช้งานก่อนที่ผู้ใช้ปลายทางจะพบโค้ดในแอป
หากโมเดลในอุปกรณ์ไม่พร้อมใช้งานเมื่อมีการส่งคำขออนุมานในอุปกรณ์ SDK จะไม่ทริกเกอร์การดาวน์โหลดโมเดลในอุปกรณ์โดยอัตโนมัติ SDK จะกลับไปใช้โมเดลที่โฮสต์ในระบบคลาวด์หรือ ส่งข้อยกเว้น (ดูรายละเอียดเกี่ยวกับลักษณะการทำงานของ โหมดการอนุมาน)
AICore (บริการระบบ Android) จะจัดการให้คุณว่าดาวน์โหลดโมเดลและเวอร์ชันใด ไว้แล้ว รวมถึงดูแลให้โมเดลเป็นเวอร์ชันล่าสุดอยู่เสมอ ฯลฯ โปรดทราบว่าอุปกรณ์จะดาวน์โหลดโมเดลได้เพียงโมเดลเดียว ดังนั้นหากแอปอื่นในอุปกรณ์เคยดาวน์โหลดโมเดลในอุปกรณ์สำเร็จแล้ว การตรวจสอบนี้จะแสดงว่าโมเดลพร้อมใช้งาน
การเพิ่มประสิทธิภาพเวลาในการตอบสนอง
หากต้องการเพิ่มประสิทธิภาพสำหรับการเรียกใช้การอนุมานครั้งแรก คุณสามารถให้แอปเรียกใช้
warmup() ได้
ซึ่งจะโหลดโมเดลในอุปกรณ์ลงในหน่วยความจำและเริ่มต้นคอมโพเนนต์รันไทม์
ขั้นตอนที่ 4: เริ่มต้นบริการและสร้างอินสแตนซ์โมเดล
|
คลิกผู้ให้บริการ Gemini API เพื่อดูเนื้อหาและรหัสเฉพาะของผู้ให้บริการ ในหน้านี้ |
ตั้งค่าสิ่งต่อไปนี้ก่อนส่งคำขอพรอมต์ไปยังโมเดล
เริ่มต้นบริการสำหรับผู้ให้บริการ API ที่คุณเลือก
สร้างอินสแตนซ์
GenerativeModelและตั้งค่าmodeเป็นค่าใดค่าหนึ่งต่อไปนี้ คำอธิบายที่นี่เป็นเพียงภาพรวม แต่คุณสามารถดูรายละเอียดเกี่ยวกับลักษณะการทำงานของโหมดเหล่านี้ได้ในตั้งค่าโหมดการอนุมานPREFER_ON_DEVICE: พยายามใช้โมเดลในอุปกรณ์ หากไม่ได้ ให้ใช้โมเดลที่โฮสต์ในระบบคลาวด์แทนONLY_ON_DEVICE: พยายามใช้โมเดลในอุปกรณ์ มิฉะนั้น throw an exceptionPREFER_IN_CLOUD: พยายามใช้โมเดลที่โฮสต์บนระบบคลาวด์ หรือกลับไปใช้โมเดลในอุปกรณ์ONLY_IN_CLOUD: พยายามใช้โมเดลที่โฮสต์บนระบบคลาวด์ มิฉะนั้น throw an exception
Kotlin
// Using this SDK to access on-device inference is an Experimental release and requires opt-in
@OptIn(PublicPreviewAPI::class)
// ...
// Initialize the Gemini Developer API backend service
// Create a GenerativeModel instance with a model that supports your use case
// Set the inference mode (like PREFER_ON_DEVICE to use the on-device model if available)
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel(
modelName = "MODEL_NAME",
onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE)
)
Java
// Initialize the Gemini Developer API backend service
// Create a GenerativeModel instance with a model that supports your use case
// Set the inference mode (like PREFER_ON_DEVICE to use the on-device model if available)
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
"MODEL_NAME",
new OnDeviceConfig(InferenceMode.PREFER_ON_DEVICE)
);
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
ขั้นตอนที่ 5: ส่งคำขอพรอมต์ไปยังโมเดล
ส่วนนี้จะแสดงวิธีส่งอินพุตประเภทต่างๆ เพื่อสร้างเอาต์พุตประเภทต่างๆ ซึ่งรวมถึง
สร้างข้อความจากอินพุตที่เป็นข้อความเท่านั้น
| ก่อนที่จะลองใช้ตัวอย่างนี้ โปรดตรวจสอบว่าคุณได้ทำตามส่วนเริ่มต้นใช้งานของคู่มือนี้แล้ว |
คุณใช้
generateContent()
เพื่อสร้างข้อความจากพรอมต์ที่มีข้อความได้โดยทำดังนี้
Kotlin
// Imports + initialization of Gemini API backend service + creation of model instance
// Provide a prompt that contains text
val prompt = "Write a story about a magic backpack."
// To generate text output, call generateContent with the text input
val response = model.generateContent(prompt)
print(response.text)
Java
// Imports + initialization of Gemini API backend service + creation of model instance
// Provide a prompt that contains text
Content prompt = new Content.Builder()
.addText("Write a story about a magic backpack.")
.build();
// To generate text output, call generateContent with the text input
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
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);
โปรดทราบว่า Firebase AI Logic ยังรองรับการสตรีมคำตอบที่เป็นข้อความโดยใช้
generateContentStream
(แทน generateContent) ด้วย
สร้างข้อความจากอินพุตข้อความและรูปภาพ (หลายรูปแบบ)
| ก่อนที่จะลองใช้ตัวอย่างนี้ โปรดตรวจสอบว่าคุณได้ทำตามส่วนเริ่มต้นใช้งานของคู่มือนี้แล้ว |
คุณสามารถใช้
generateContent()
เพื่อสร้างข้อความจากพรอมต์ที่มีข้อความและไฟล์รูปภาพสูงสุด1 ไฟล์
(บิตแมปเท่านั้น) โดยระบุ mimeType ของไฟล์อินพุตแต่ละไฟล์และตัวไฟล์เอง
Kotlin
// Imports + initialization of Gemini API backend service + creation of model instance
// Loads an image from the app/res/drawable/ directory
val bitmap: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.sparky)
// Provide a prompt that includes the image specified above and text
val prompt = content {
image(bitmap)
text("What developer tool is this mascot from?")
}
// To generate text output, call generateContent with the prompt
val response = model.generateContent(prompt)
print(response.text)
Java
// Imports + initialization of Gemini API backend service + creation of model instance
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);
// Provide a prompt that includes the image specified above and text
Content content = new Content.Builder()
.addImage(bitmap)
.addText("What developer tool is this mascot from?")
.build();
// To generate text output, call generateContent with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
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);
โปรดทราบว่า Firebase AI Logic ยังรองรับการสตรีมคำตอบที่เป็นข้อความโดยใช้
generateContentStream
(แทน generateContent) ด้วย
คุณทำอะไรได้อีกบ้าง
คุณสามารถใช้ตัวเลือกการกำหนดค่าและความสามารถเพิ่มเติมต่างๆ สำหรับ ประสบการณ์แบบไฮบริดได้ดังนี้
ฟีเจอร์ที่ยังไม่พร้อมใช้งานสำหรับการอนุมานในอุปกรณ์
เนื่องจากเป็นรุ่นทดลอง ความสามารถบางอย่างของโมเดลระบบคลาวด์จึงยังไม่พร้อมใช้งานสำหรับการอนุมานในอุปกรณ์
ฟีเจอร์ที่ระบุไว้ในส่วนนี้ยังไม่พร้อมใช้งานสำหรับการอนุมานในอุปกรณ์ หากต้องการใช้ฟีเจอร์เหล่านี้ เราขอแนะนำให้ใช้
ONLY_IN_CLOUDโหมดการอนุมานเพื่อให้ได้รับประสบการณ์การใช้งานที่สอดคล้องกันมากขึ้น
การสร้างเอาต์พุตที่มีโครงสร้าง (เช่น JSON หรือ Enum)
การสร้างข้อความจากประเภทอินพุตไฟล์รูปภาพที่ไม่ใช่บิตแมป (รูปภาพที่โหลดลงในหน่วยความจำ)
การสร้างข้อความจากไฟล์รูปภาพมากกว่า 1 ไฟล์
การสร้างข้อความจากอินพุตเสียง วิดีโอ และเอกสาร (เช่น PDF)
การสร้างรูปภาพโดยใช้โมเดล Gemini หรือ Imagen
การระบุไฟล์โดยใช้ URL ในคำขอแบบมัลติโมดัล คุณต้องระบุไฟล์เป็น ข้อมูลแบบอินไลน์ให้กับโมเดลในอุปกรณ์
การส่งคำขอที่มีโทเค็นเกิน 4,000 รายการ (หรือประมาณ 3,000 คำภาษาอังกฤษ)
แชทแบบหลายรอบ
การให้เครื่องมือแก่โมเดลเพื่อช่วยสร้างคำตอบ (เช่น การเรียกใช้ฟังก์ชัน การเรียกใช้โค้ด บริบท URL และการอ้างอิงจาก Google Search)
การตรวจสอบ AI ในคอนโซล Firebase จะไม่แสดงข้อมูลใดๆ สำหรับ การอนุมานในอุปกรณ์ (รวมถึงบันทึกในอุปกรณ์) อย่างไรก็ตาม คุณสามารถตรวจสอบการอนุมานที่ใช้โมเดลที่โฮสต์ในระบบคลาวด์ได้เช่นเดียวกับการอนุมานอื่นๆ ผ่าน Firebase AI Logic
ข้อจำกัดเพิ่มเติม
นอกจากที่กล่าวมาข้างต้นแล้ว การอนุมานในอุปกรณ์ยังมีข้อจำกัดต่อไปนี้ (ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ ML Kit)
ผู้ใช้ปลายทางของแอปต้องใช้อุปกรณ์ที่รองรับ สำหรับการอนุมานในอุปกรณ์
แอปจะเรียกใช้การอนุมานในอุปกรณ์ได้เมื่อทำงานอยู่เบื้องหน้าเท่านั้น
เฉพาะภาษาอังกฤษและภาษาเกาหลีเท่านั้นที่ได้รับการตรวจสอบแล้วว่าใช้ได้กับการอนุมานในอุปกรณ์
ขีดจำกัดโทเค็นสูงสุดสำหรับคำขอการอนุมานบนอุปกรณ์ทั้งหมดคือ 4,000 โทเค็น หากคำขออาจเกินขีดจำกัดนี้ ให้ตรวจสอบว่าได้ กำหนดค่าโหมดการอนุมานที่ใช้โมเดลที่โฮสต์ในระบบคลาวด์ได้
เราขอแนะนำให้หลีกเลี่ยงกรณีการใช้งานการอนุมานในอุปกรณ์ที่ต้องมีเอาต์พุตยาว (มากกว่า 256 โทเค็น)
AICore (บริการของระบบ Android ที่จัดการโมเดลในอุปกรณ์) จะบังคับใช้ โควต้าการอนุมานต่อแอป การส่งคำขอ API มากเกินไปในระยะเวลาอันสั้น จะส่งผลให้ได้รับคำตอบ
ErrorCode.BUSYหากคุณได้รับข้อผิดพลาดนี้ ให้ลองใช้ Exponential Backoff เพื่อส่งคำขออีกครั้ง นอกจากนี้ ระบบยังอาจแสดงข้อผิดพลาดErrorCode.PER_APP_BATTERY_USE_QUOTA_EXCEEDEDหากแอป ใช้โควต้าแบบระยะยาวเกิน (เช่น โควต้าต่อวัน)
แสดงความคิดเห็น เกี่ยวกับประสบการณ์การใช้งาน Firebase AI Logic