Bạn có thể xây dựng các ứng dụng và tính năng Android dựa trên AI bằng tính năng suy luận kết hợp thông qua Firebase AI Logic. Tính năng suy luận kết hợp cho phép chạy tính năng suy luận bằng các mô hình trên thiết bị khi có và tự động chuyển sang các mô hình được lưu trữ trên đám mây (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à tính năng định cấu hình bổ sung, chẳng hạn như nhiệt độ.
Xin lưu ý rằng tính nă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ị và chịu sự điều chỉnh của các điều khoản về Bộ công cụ học máy, cũng như các điều khoản dành riêng cho các khía cạnh AI tạo sinh của Bộ công cụ học máy.
Trường hợp sử dụng được đề xuất và các tính năng được hỗ trợ
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 cục bộ
- Suy luận miễn phí
- Chức năng ngoại tuyến
Việc sử dụng chức năng kết hợp mang lại:
- Tiếp cận nhiều đối tượng hơn bằng cách đáp ứng khả năng sử dụng mô hình trên thiết bị và kết nối Internet
Các tính năng và chức năng được hỗ trợ cho tính năng suy luận trên thiết bị
Tính năng 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 trò chuyện), với đầu ra truyền trực tuyến hoặc không truyền trực tuyến. Tính năng 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 có văn bản và hình ảnh, cụ thể là một hình ảnh Bitmap làm dữ liệu đầu vào
Trước khi bắt đầu
Hãy lưu ý những điều sau:
API được hỗ trợ:
Tính năng suy luận trong đám mây sử dụng nhà cung cấp Gemini API mà bạn chọn (hoặc Gemini Developer API hoặc Vertex AI Gemini API).
Tính năng 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ị.
Trang này mô tả cách bắt đầu.
Sau khi hoàn tất quá trình thiết lập tiêu chuẩn này, hãy xem các lựa chọn và tính năng định cấu hình bổ sung (như đặt nhiệt độ).
Các thiết bị Android được hỗ trợ và mô hình trên thiết bị của chúng
Đối với tính nă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ể tìm thấy 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ả quy trình thiết lập chung bắt buộc cho mọi yêu cầu câu lệnh được hỗ trợ mà bạn muốn gửi.
Bước 1: Thiết lập 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 Dịch vụ AI > AI Logic.
Nhấp vào Bắt đầu để khởi chạy 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 nhà cung cấp "Gemini API".
Bạn nên bắt đầu sử dụng Gemini Developer API. Bất cứ lúc nào, bạn cũng có thể thiết lập Vertex AI Gemini API (và yêu cầu thanh toán của API này).
Đố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á Gemini API trong dự án của bạn.
Không thêm khoá API này vào cơ sở mã của ứng dụng.Gemini 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 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
SDK cho Android
(firebase-aifirebase-ai-ondevice
Trong tệp Gradle mô-đun (cấp ứng dụng)
(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.11.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.11.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ó dùng được không
Sử dụng
FirebaseAIOnDevice,
hãy kiểm tra xem mô hình trên thiết bị có dùng được 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 lưu ý sau đoạn mã để biết thêm thông tin chi tiết về AICore và cách quản lý quá trình tải mô hình trên thiết bị xuống.
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.
Hãy lưu ý những điều sau 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ô hình trên thiết bị cho tính năng 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 dùng được 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ẽ chuyển sang mô hình được lưu trữ trên đám mây hoặc đưa ra 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) quản lý cho bạn mô hình và phiên bản nào được tải xuống, giữ cho mô hình được 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ì quá 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 chạy các thành phần thời gian chạy.
Bước 4: Khởi chạy dịch vụ và tạo thực thể mô hình
|
Nhấp vào nhà cung định Gemini API để xem nội dung dành riêng cho nhà cung cấp và mã trên trang này. |
Thiết lập những nội dung sau trước khi gửi yêu cầu câu lệnh đến 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 chuyển sang mô hình được lưu trữ trên đám mây.ONLY_ON_DEVICE: Thử sử dụng mô hình trên thiết bị; nếu không, hãy đưa ra một ngoại lệ.PREFER_IN_CLOUD: Thử sử dụng mô hình được lưu trữ trên đám mây; nếu không, hãy chuyển sang mô hình trên thiết bị.ONLY_IN_CLOUD: Thử sử dụng mô hình được lưu trữ trên đám mây; nếu không, hãy đưa 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 câu lệnh đến một 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 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ể sử 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 phản hồ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 có 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ể sử 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 phản hồ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ì nữa?
Bạn có thể sử dụng nhiều lựa chọn và tính năng định cấu hình bổ sung cho trải nghiệm kết hợp:
Xác định xem bạn đã sử dụng tính năng suy luận trên thiết bị hay trong đám mây.
Sử dụng cấu hình mô hình để kiểm soát phản hồi (như nhiệt độ).
Các tính năng chưa có sẵn cho tính năng suy luận trên thiết bị
Là một bản phát hành thử nghiệm, không phải tất cả các tính năng của mô hình đám mây đều có sẵn cho tính năng suy luận trên thiết bị.
Các tính năng được liệt kê trong phần này chưa có sẵn cho tính năng 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 dữ liệu đầu ra có cấu trúc (như JSON hoặc enum)
Tạo văn bản từ các loại dữ liệu đầu vào tệp hình ảnh khác vớ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 âm thanh, video và tài liệu (như 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 các yêu cầu vượt quá 4.000 mã thông báo (hoặc khoảng 3.000 từ tiếng Anh).
Trò chuyện nhiều lượt
Cung cấp cho mô hình công cụ để giúp mô hình tạo phản hồi (như gọi hàm, thực thi mã, bối cảnh URL và cơ sở dữ liệu với Google Tìm kiếm)
Tính năng giám sát bằng AI trong bảng điều khiển Firebase không hiển thị bất kỳ dữ liệu nào cho tính năng suy luận trên thiết bị (bao gồm cả nhật ký trên thiết bị). Tuy nhiên, bạn có thể giám sát mọi tính năng suy luận sử dụng mô hình được lưu trữ trên đám mây giống như các tính năng suy luận khác thông qua Firebase AI Logic.
Các giới hạn khác
Ngoài những điều trên, tính năng suy luận trên thiết bị có các giới hạn 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 một thiết bị được hỗ trợ cho tính năng suy luận trên thiết bị.
Ứng dụng của bạn chỉ có thể chạy tính năng suy luận trên thiết bị khi ứng dụng đó ở trên nền trước.
Chỉ có tiếng Anh và tiếng Hàn đã được xác thực cho tính năng 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 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 tính năng suy luận trên thiết bị yêu cầu đầ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 thực hiện 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 nhận được lỗi này, hãy cân nhắc sử dụng thời gian đợi luỹ thừa để 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