Bạn có thể tạo các ứng dụng và tính năng Android dựa trên AI bằng suy luận kết hợp thông qua Firebase AI Logic. Suy luận kết hợp cho phép chạy suy luận bằng các mô hình trên thiết bị khi có sẵn và chuyển đổi liền mạch sang các mô hình được lưu trữ trên đám mây nếu không (và ngược lại).
Trang này mô tả cách bắt đầu sử dụng SDK ứng dụng, cũng như cho thấy các lựa chọn và chức năng cấu hình bổ sung, chẳng hạn như nhiệt độ.
Xin lưu ý rằng suy luận trên thiết bị thông qua Firebase AI Logic được hỗ trợ cho các ứng dụng Android chạy trên một số thiết bị cụ thể và chịu sự điều chỉnh của điều khoản của Bộ công cụ học máy, cũng như các điều khoản dành riêng cho khía cạnh AI tạo sinh của Bộ công cụ học máy.
Các trường hợp sử dụng được đề xuất và các chức năng được hỗ trợ
Các trường hợp sử dụng được đề xuất
Việc sử dụng mô hình trên thiết bị để suy luận mang lại:
- Quyền riêng tư nâng cao
- Bối cảnh địa phương
- Suy luận miễn phí
- Chức năng ngoại tuyến
Sử dụng các chức năng kết hợp:
- Tiếp cận nhiều đối tượng hơn bằng cách điều chỉnh khả năng cung cấp mô hình trên thiết bị và khả năng kết nối Internet
Các tính năng và chức năng được hỗ trợ cho hoạt động suy luận trên thiết bị
Suy luận trên thiết bị chỉ hỗ trợ tạo văn bản một lượt (không phải là cuộc trò chuyện), với đầu ra truyền phát trực tuyến hoặc không truyền phát trực tuyến. Công cụ này hỗ trợ các chức năng tạo văn bản sau:
Tạo văn bản từ dữ liệu đầu vào là văn bản và hình ảnh, cụ thể là một hình ảnh Bitmap duy nhất làm dữ liệu đầu vào
Hãy nhớ xem danh sách các tính năng chưa có sẵn cho suy luận trên thiết bị ở cuối trang này.
Trước khi bắt đầu
Hãy lưu ý những điều sau:
Các API được hỗ trợ:
Suy luận trên đám mây sử dụng nhà cung cấp Gemini API mà bạn chọn (Gemini Developer API hoặc Vertex AI Gemini API).
Suy luận trên thiết bị sử dụng Prompt API của Bộ công cụ học máy. API này đang ở giai đoạn thử nghiệm beta và chỉ có trên một số thiết bị cụ thể.
Trang này mô tả cách bắt đầu.
Sau khi hoàn tất quy trình thiết lập tiêu chuẩn này, hãy xem các lựa chọn và khả năng cấu hình bổ sung (chẳng hạn như thiết lập nhiệt độ).
Các thiết bị Android được hỗ trợ và các mô hình trên thiết bị
Đối với hoạt động suy luận trên thiết bị (sử dụng Prompt API của Bộ công cụ học máy), bạn có thể xem danh sách các thiết bị được hỗ trợ và mô hình trên thiết bị của chúng trong tài liệu về Bộ công cụ học máy.
Bắt đầu
Các bước bắt đầu này mô tả chế độ thiết lập chung bắt buộc cho mọi yêu cầu về câu lệnh được hỗ trợ mà bạn muốn gửi.
Bước 1: Thiết lập một dự án Firebase và kết nối ứng dụng của bạn với Firebase
Đăng nhập vào bảng điều khiển Firebase, sau đó chọn dự án Firebase của bạn.
Trong bảng điều khiển Firebase, hãy chuyển đến trang Firebase AI Logic.
Nhấp vào Bắt đầu để chạy một quy trình có hướng dẫn giúp bạn thiết lập các API bắt buộc và tài nguyên cho dự án của mình.
Thiết lập dự án để sử dụng một nhà cung cấp "Gemini API".
Bạn nên bắt đầu bằng cách sử dụng Gemini Developer API. Bất cứ lúc nào, bạn đều có thể thiết lập Vertex AI Gemini API (và yêu cầu về việc thanh toán).
Đối với Gemini Developer API, bảng điều khiển sẽ bật các API bắt buộc và tạo khoá API Gemini trong dự án của bạn.
Đừng thêm khoá API Gemini này vào cơ sở mã của ứng dụng. Tìm hiểu thêm.Nếu được nhắc trong quy trình của bảng điều khiển, hãy làm theo hướng dẫn trên màn hình để đăng ký ứng dụng và kết nối ứng dụng đó với Firebase.
Tiếp tục chuyển sang bước tiếp theo trong hướng dẫn này để thêm SDK vào ứng dụng của bạn.
Bước 2: Thêm các SDK bắt buộc
Firebase AI Logic SDK cho Android (firebase-aifirebase-ai-ondevice
Trong tệp Gradle (cấp ứng dụng) của mô-đun (chẳng hạn như <project>/<app-module>/build.gradle.kts), hãy thêm các phần phụ thuộc cho thư viện Firebase AI Logic cho 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
Đối với Java, bạn cần thêm 2 thư viện bổ sung.
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") }
Bước 3: Kiểm tra xem mô hình trên thiết bị có hoạt động không
Sử dụng FirebaseAIOnDevice, kiểm tra xem mô hình trên thiết bị có dùng được hay không và tải mô hình xuống nếu không dùng được.
Sau khi tải xuống, AICore sẽ tự động cập nhật mô hình. Hãy xem các ghi chú sau đoạn mã để biết thêm thông tin về AICore và cách quản lý quá trình tải mô hình xuống thiết bị.
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.
Xin lưu ý những điều sau đây về việc tải mô hình trên thiết bị xuống:
Thời gian tải mô hình trên thiết bị xuống phụ thuộc vào nhiều yếu tố, bao gồm cả mạng của bạn.
Nếu mã của bạn sử dụng một mô hình trên thiết bị cho suy luận chính hoặc dự phòng, hãy đảm bảo rằng mô hình được tải xuống sớm trong vòng đời của ứng dụng để mô hình trên thiết bị có sẵn trước khi người dùng cuối gặp phải mã trong ứng dụng của bạn.
Nếu mô hình trên thiết bị không có sẵn khi có yêu cầu suy luận trên thiết bị, thì SDK sẽ không tự động kích hoạt quá trình tải mô hình trên thiết bị xuống. SDK sẽ quay lại mô hình được lưu trữ trên đám mây hoặc gửi một ngoại lệ (xem thông tin chi tiết về hành vi của các chế độ suy luận).
AICore (một dịch vụ hệ thống Android) sẽ quản lý cho bạn mô hình và phiên bản nào được tải xuống, duy trì mô hình ở trạng thái cập nhật, v.v. Xin lưu ý rằng thiết bị sẽ chỉ tải xuống một mô hình. Vì vậy, nếu một ứng dụng khác trên thiết bị đã tải xuống thành công mô hình trên thiết bị trước đó, thì quy trình kiểm tra này sẽ trả về rằng mô hình có sẵn.
Tối ưu hoá độ trễ
Để tối ưu hoá cho lệnh gọi suy luận đầu tiên, bạn có thể yêu cầu ứng dụng gọi warmup().
Thao tác này sẽ tải mô hình trên thiết bị vào bộ nhớ và khởi tạo các thành phần thời gian chạy.
Bước 4: Khởi chạy dịch vụ và tạo một thực thể mô hình
|
Nhấp vào nhà cung cấp Gemini API để xem nội dung và mã dành riêng cho nhà cung cấp trên trang này. |
Thiết lập những nội dung sau trước khi bạn gửi yêu cầu bằng câu lệnh cho mô hình.
Khởi chạy dịch vụ cho nhà cung cấp API mà bạn đã chọn.
Tạo một thực thể
GenerativeModelvà đặtmodethành một trong những giá trị sau. Các nội dung mô tả ở đây rất chung chung, nhưng bạn có thể tìm hiểu thông tin chi tiết về hành vi của các chế độ này trong phần Đặt chế độ suy luận.PREFER_ON_DEVICE: Thử sử dụng mô hình trên thiết bị; nếu không, hãy quay lại mô hình được lưu trữ trên đám mây.ONLY_ON_DEVICE: Cố gắng sử dụng mô hình trên thiết bị; nếu không, hãy gây ra một ngoại lệ.PREFER_IN_CLOUD: Cố gắng sử dụng mô hình được lưu trữ trên đám mây; nếu không, hãy quay lại mô hình trên thiết bị.ONLY_IN_CLOUD: Cố gắng sử dụng mô hình được lưu trữ trên đám mây; nếu không, hãy gây ra một ngoại lệ.
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);
Bước 5: Gửi yêu cầu cho mô hình
Phần này hướng dẫn bạn cách gửi nhiều loại dữ liệu đầu vào để tạo ra nhiều loại dữ liệu đầu ra, bao gồm:
Tạo văn bản từ dữ liệu đầu vào chỉ có văn bản
| Trước khi thử mẫu này, hãy đảm bảo bạn đã hoàn tất phần Bắt đầu của hướng dẫn này. |
Bạn có thể dùng generateContent() để tạo văn bản từ một câu lệnh có chứa văn bản:
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);
Xin lưu ý rằng Firebase AI Logic cũng hỗ trợ truyền trực tuyến các câu trả lời bằng văn bản bằng cách sử dụng generateContentStream (thay vì generateContent).
Tạo văn bản từ dữ liệu đầu vào là văn bản và hình ảnh (đa phương thức)
| Trước khi thử mẫu này, hãy đảm bảo bạn đã hoàn tất phần Bắt đầu của hướng dẫn này. |
Bạn có thể dùng generateContent() để tạo văn bản từ một câu lệnh có chứa văn bản và tối đa một tệp hình ảnh (Chỉ bitmap) — cung cấp mimeType của từng tệp đầu vào và chính tệp đó.
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);
Xin lưu ý rằng Firebase AI Logic cũng hỗ trợ truyền trực tuyến các câu trả lời bằng văn bản bằng cách sử dụng generateContentStream (thay vì generateContent).
Bạn có thể làm gì khác?
Bạn có thể sử dụng nhiều lựa chọn và chức năng cấu hình bổ sung cho trải nghiệm kết hợp của mình:
Xác định xem bạn có sử dụng tính năng suy luận trên thiết bị hay trong đám mây hay không.
Sử dụng cấu hình mô hình để kiểm soát các câu trả lời (chẳng hạn như nhiệt độ).
Các tính năng chưa có sẵn cho suy luận trên thiết bị
Vì là bản phát hành thử nghiệm, nên không phải mọi chức năng của các mô hình trên đám mây đều có sẵn cho quá trình suy luận trên thiết bị.
Các tính năng được liệt kê trong phần này hiện chưa có sẵn cho suy luận trên thiết bị. Nếu muốn sử dụng bất kỳ tính năng nào trong số này, bạn nên sử dụng chế độ suy luận ONLY_IN_CLOUD để có trải nghiệm nhất quán hơn.
Tạo đầu ra có cấu trúc (chẳng hạn như JSON hoặc enum)
Tạo văn bản từ các loại tệp hình ảnh đầu vào khác ngoài Bitmap (hình ảnh được tải vào bộ nhớ)
Tạo văn bản từ nhiều tệp hình ảnh
Tạo văn bản từ dữ liệu đầu vào là âm thanh, video và tài liệu (chẳng hạn như tệp PDF)
Tạo hình ảnh bằng mô hình Gemini hoặc Imagen
Cung cấp tệp bằng URL trong các yêu cầu đa phương thức. Bạn phải cung cấp tệp dưới dạng dữ liệu nội tuyến cho các mô hình trên thiết bị
Gửi yêu cầu vượt quá 4.000 mã thông báo (hoặc khoảng 3.000 từ tiếng Anh).
Cuộc trò chuyện nhiều lượt
Cung cấp cho mô hình các công cụ để giúp mô hình tạo ra câu trả lời (chẳng hạn như gọi hàm, thực thi mã, ngữ cảnh URL và cơ sở kiến thức với Google Tìm kiếm)
Tính năng giám sát AI trong bảng điều khiển Firebase không hiển thị bất kỳ dữ liệu nào cho suy luận trên thiết bị (bao gồm cả nhật ký trên thiết bị). Tuy nhiên, mọi suy luận sử dụng mô hình được lưu trữ trên đám mây đều có thể được theo dõi giống như các suy luận khác thông qua Firebase AI Logic.
Các hạn chế khác
Ngoài những hạn chế nêu trên, suy luận trên thiết bị còn có những hạn chế sau (tìm hiểu thêm trong tài liệu về Bộ công cụ học máy):
Người dùng cuối của ứng dụng phải sử dụng thiết bị được hỗ trợ để suy luận trên thiết bị.
Ứng dụng của bạn chỉ có thể chạy suy luận trên thiết bị khi ở nền trước.
Chỉ có tiếng Anh và tiếng Hàn được xác thực cho suy luận trên thiết bị.
Giới hạn mã thông báo tối đa cho toàn bộ yêu cầu suy luận trên thiết bị là 4.000 mã thông báo. Nếu các yêu cầu của bạn có thể vượt quá giới hạn này, hãy nhớ định cấu hình một chế độ suy luận có thể sử dụng mô hình được lưu trữ trên đám mây.
Bạn nên tránh các trường hợp sử dụng suy luận trên thiết bị đòi hỏi đầu ra dài (hơn 256 mã thông báo).
AICore (một dịch vụ hệ thống Android quản lý các mô hình trên thiết bị) thực thi hạn mức suy luận cho mỗi ứng dụng. Việc đưa ra quá nhiều yêu cầu API trong một khoảng thời gian ngắn sẽ dẫn đến phản hồi
ErrorCode.BUSY. Nếu bạn gặp lỗi này, hãy cân nhắc sử dụng thuật toán đợi luỹ tuyến để thử lại yêu cầu. Ngoài ra,ErrorCode.PER_APP_BATTERY_USE_QUOTA_EXCEEDEDcó thể được trả về nếu một ứng dụng vượt quá hạn mức dài hạn (ví dụ: hạn mức hằng ngày).
Gửi ý kiến phản hồi về trải nghiệm của bạn với Firebase AI Logic