Xây dựng trải nghiệm kết hợp bằng các mô hình trên thiết bị và được lưu trữ trên đám mây


Tạo ứng dụng và tính năng dựa trên AI bằng suy luận kết hợp bằng cách sử dụng 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 về các mô hình được lưu trữ trên đám mây một cách liền mạch nếu không.

Với bản phát hành này, bạn có thể sử dụng tính năng suy luận kết hợp bằng SDK ứng dụng Firebase AI Logic cho Web, đồng thời hỗ trợ tính năng suy luận trên thiết bị cho Chrome trên máy tính.

Chuyển đến các ví dụ về mã

Các trường hợp sử dụng được đề xuất và các tính năng được hỗ trợ

Các trường hợp sử dụng được đề xuất:

  • Sử dụng mô hình trên thiết bị cho các ưu đãi suy luận:

    • Cải thiện quyền riêng tư
    • Bối cảnh cục bộ
    • Suy luận miễn phí
    • Chức năng ngoại tuyến
  • Sử dụng ưu đãi chức năng kết hợp:

    • Tiếp cận 100% đối tượng, bất kể mẫu thiết bị có sẵn hay không

Các tính năng và chức năng được hỗ trợ để suy luận trên thiết bị:

  • Tạo nội dung một lượt, phát trực tuyến và không phát trực tuyến
  • Tạo văn bản từ dữ liệu đầu vào chỉ văn bản
  • Tạo văn bản từ dữ liệu đầu vào văn bản và hình ảnh, cụ thể là các loại hình ảnh đầu vào JPEG và PNG
  • Tạo đầu ra có cấu trúc, bao gồm cả JSON và enum

Bắt đầu

Hướng dẫn này cho bạn biết cách bắt đầu sử dụng SDK Firebase AI Logic cho Web để thực hiện suy luận kết hợp.

Dự đoán bằng mô hình trên thiết bị sử dụng Prompt API của Chrome; trong khi dự đoán bằng mô hình được lưu trữ 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).

Bước 1: Thiết lập Chrome và Prompt API để suy luận trên thiết bị

  1. Tải bản dựng Chrome Dev mới nhất.

    Tính năng suy luận trên thiết bị có trong Chrome phiên bản 138 trở lên.

  2. Bật Prompt API cho phiên bản Chrome bằng cách đặt các cờ sau:

    • chrome://flags/#optimization-guide-on-device-model: Đặt thành Đã bật.
    • chrome://flags/#prompt-api-for-gemini-nano: Đặt thành Đã bật.

    Tìm hiểu thêm về cách sử dụng API trên máy chủ cục bộ trong tài liệu của Chrome. Bạn có thể tham gia Chương trình dùng thử sớm của Chrome (EPP) để gửi ý kiến phản hồi.

  3. Bật mô hình đa phương thức trên thiết bị bằng cách đặt cờ sau:

    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input: Đặt thành Đã bật.
  4. Xác minh API trên máy:

    1. Khởi động lại Chrome.

    2. Mở Công cụ cho nhà phát triển > Bảng điều khiển.

    3. Chạy lệnh sau:

      await LanguageModel.availability();
      
    4. Đảm bảo rằng kết quả là available, downloading hoặc downloadable. .

    5. Nếu đầu ra là downloadable, bạn có thể bắt đầu tải mô hình xuống bằng cách chạy await LanguageModel.create();. Nếu không, yêu cầu đầu tiên để dự đoán trên thiết bị sẽ bắt đầu tải mô hình xuống ở chế độ nền. Quá trình này có thể mất vài phút.

Bước 2: Thiết lập dự án Firebase và kết nối ứng dụng với Firebase

  1. Đăng nhập vào bảng điều khiển Firebase, sau đó chọn dự án Firebase của bạn.

  2. Trong bảng điều khiển Firebase, hãy chuyển đến trang Firebase AI Logic.

  3. Nhấp vào Bắt đầu để bắt đầu quy trình làm việc 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.

  4. Chọn nhà cung cấp "Gemini API" mà bạn muốn sử dụng với SDK Firebase AI Logic. Bạn luôn có thể thiết lập và sử dụng nhà cung cấp API khác sau này nếu muốn.

    • Gemini Developer APIkhông bắt buộc phải thanh toán (có trong gói giá Spark không tính phí)
      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. Bạn có thể thiết lập thông tin thanh toán sau nếu muốn nâng cấp gói giá.

    • Vertex AI Gemini APIbắt buộc phải thanh toán (yêu cầu gói giá Blaze trả theo mức sử dụng)
      Bảng điều khiển sẽ giúp bạn thiết lập hệ thống thanh toán và bật các API bắt buộc trong dự án.

  5. Nếu được nhắc trong quy trình làm việc 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.

  6. Tiếp tục bước tiếp theo trong hướng dẫn này để thêm SDK vào ứng dụng.

Bước 3: Thêm SDK

Thư viện Firebase cung cấp quyền truy cập vào các API để tương tác với mô hình tạo sinh. Thư viện này được đưa vào SDK JavaScript Firebase cho web.

  1. Cài đặt SDK JS Firebase cho web bằng npm.

    Tính năng kết hợp được phát hành theo một thẻ npm khác, vì vậy, hãy nhớ đưa tính năng này vào lệnh cài đặt.

    npm install firebase@eap-ai-hybridinference
    
  2. Khởi động Firebase trong ứng dụng:

    import { initializeApp } from "firebase/app";
    
    // TODO(developer) Replace the following with your app's Firebase configuration
    // See: https://firebase.google.com/docs/web/learn-more#config-object
    const firebaseConfig = {
      // ...
    };
    
    // Initialize FirebaseApp
    const firebaseApp = initializeApp(firebaseConfig);
    

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.

Trước khi gửi lời nhắc đến mô hình Gemini, hãy khởi chạy dịch vụ cho nhà cung cấp API mà bạn đã chọn và tạo một thực thể GenerativeModel.

Đặt mode thành một trong các giá trị sau:

  • prefer_on_device: Định cấu hình SDK để sử dụng mô hình trên thiết bị nếu có hoặc quay lại mô hình được lưu trữ trên đám mây.

  • only_on_device: Định cấu hình SDK để sử dụng mô hình trên thiết bị hoặc gửi ngoại lệ.

  • only_in_cloud: Định cấu hình SDK để không bao giờ sử dụng mô hình trên thiết bị.

Theo mặc định, khi bạn sử dụng prefer_on_device hoặc only_in_cloud, mô hình được lưu trữ trên đám mây là gemini-2.0-flash-lite, nhưng bạn có thể ghi đè giá trị mặc định.

import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance
// Set the mode, for example to use on-device model when possible
const model = getGenerativeModel(ai, { mode: "prefer_on_device" });

Gửi yêu cầu lời nhắc đến một mô hình

Phần này cung cấp các ví dụ về 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:

Nếu bạn muốn tạo đầu ra có cấu trúc (như JSON hoặc enum), hãy sử dụng một trong các ví dụ "tạo văn bản" sau đây và ngoài ra, hãy định cấu hình mô hình để phản hồi theo giản đồ được cung cấp.

Tạo văn bản từ dữ liệu đầu vào chỉ 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 chứa văn bản:

// Imports + initialization of FirebaseApp and backend service + creation of model instance

// Wrap in an async function so you can use await
async function run() {
  // Provide a prompt that contains text
  const prompt = "Write a story about a magic backpack."

  // To generate text output, call `generateContent` with the text input
  const result = await model.generateContent(prompt);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

run();

Tạo văn bản từ dữ liệu đầu vào 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 chứa tệp văn bản và hình ảnh, cung cấp mimeType của mỗi tệp đầu vào và chính tệp đó.

Các loại hình ảnh đầu vào được hỗ trợ để suy luận trên thiết bị là PNG và JPEG.

// Imports + initialization of FirebaseApp and backend service + creation of model instance

// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
  const base64EncodedDataPromise = new Promise((resolve) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result.split(',')[1]);
    reader.readAsDataURL(file);
  });
  return {
    inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
  };
}

async function run() {
  // Provide a text prompt to include with the image
  const prompt = "Write a poem about this picture:";

  const fileInputEl = document.querySelector("input[type=file]");
  const imagePart = await fileToGenerativePart(fileInputEl.files[0]);

  // To generate text output, call `generateContent` with the text and image
  const result = await model.generateContent([prompt, imagePart]);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

run();

Bạn có thể làm gì khác?

Ngoài các ví dụ ở trên, bạn cũng có thể sử dụng các chế độ suy luận thay thế, ghi đè mô hình dự phòng mặc địnhsử dụng cấu hình mô hình để kiểm soát các phản hồi.

Sử dụng các chế độ suy luận thay thế

Các ví dụ ở trên đã sử dụng chế độ prefer_on_device để định cấu hình SDK sử dụng mô hình trên thiết bị nếu có hoặc quay lại mô hình được lưu trữ trên đám mây. SDK cung cấp hai chế độ suy luận thay thế: only_on_deviceonly_in_cloud.

  • Sử dụng chế độ only_on_device để SDK chỉ có thể sử dụng mô hình trên thiết bị. Trong cấu hình này, API sẽ báo lỗi nếu không có mô hình trên thiết bị.

    const model = getGenerativeModel(ai, { mode: "only_on_device" });
    
  • Sử dụng chế độ only_in_cloud để SDK chỉ có thể sử dụng mô hình được lưu trữ trên đám mây.

    const model = getGenerativeModel(ai, { mode: "only_in_cloud" });
    

Ghi đè mô hình dự phòng mặc định

Khi bạn sử dụng chế độ prefer_on_device, SDK sẽ chuyển sang sử dụng mô hình được lưu trữ trên đám mây nếu không có mô hình trên thiết bị. Mô hình dự phòng mặc định được lưu trữ trên đám mây là gemini-2.0-flash-lite. Mô hình được lưu trữ trên đám mây này cũng là mô hình mặc định khi bạn sử dụng chế độonly_in_cloud.

Bạn có thể sử dụng tuỳ chọn cấu hình inCloudParams để chỉ định một mô hình mặc định thay thế được lưu trữ trên đám mây:

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  inCloudParams: {
    model: "gemini-2.0-flash"
  }
});

Tìm tên mô hình cho tất cả các mô hình Gemini được hỗ trợ.

Sử dụng cấu hình mô hình để kiểm soát phản hồi

Trong mỗi yêu cầu gửi đến một mô hình, bạn có thể gửi kèm một cấu hình mô hình để kiểm soát cách mô hình tạo phản hồi. Mô hình được lưu trữ trên đám mây và mô hình trên thiết bị cung cấp nhiều tuỳ chọn cấu hình.

Cấu hình được duy trì trong suốt thời gian hoạt động của thực thể. Nếu bạn muốn sử dụng một cấu hình khác, hãy tạo một thực thể GenerativeModel mới bằng cấu hình đó.

Đặt cấu hình cho mô hình được lưu trữ trên đám mây

Sử dụng tuỳ chọn inCloudParams để định cấu hình mô hình Gemini được lưu trữ trên đám mây. Tìm hiểu về các tham số có sẵn.

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  inCloudParams: {
    model: "gemini-2.0-flash"
    temperature: 0.8,
    topK: 10
  }
});

Thiết lập cấu hình cho mô hình trên thiết bị

Xin lưu ý rằng hoạt động suy luận bằng mô hình trên thiết bị sử dụng Prompt API của Chrome.

Sử dụng tuỳ chọn onDeviceParams để định cấu hình mô hình trên thiết bị. Tìm hiểu về các tham số có sẵn.

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  onDeviceParams: {
    createOptions: {
      temperature: 0.8,
      topK: 8
    }
  }
});

Thiết lập cấu hình cho đầu ra có cấu trúc

Hoạt động tạo đầu ra có cấu trúc (như JSON và enum) được hỗ trợ cho suy luận bằng cách sử dụng cả mô hình được lưu trữ trên đám mây và mô hình trên thiết bị.

Đối với suy luận kết hợp, hãy sử dụng cả inCloudParamsonDeviceParams để định cấu hình mô hình phản hồi bằng đầu ra có cấu trúc. Đối với các chế độ khác, chỉ sử dụng cấu hình hiện hành.

  • Đối với inCloudParams: Chỉ định responseMimeType thích hợp (trong ví dụ này là application/json) cũng như responseSchema mà bạn muốn mô hình sử dụng.

  • Đối với onDeviceParams: Chỉ định responseConstraint mà bạn muốn mô hình sử dụng.

Kết quả JSON

Ví dụ sau đây điều chỉnh ví dụ về đầu ra JSON chung cho suy luận kết hợp:

import {
  getAI,
  getGenerativeModel,
  Schema
} from "firebase/ai";

const jsonSchema = Schema.object({
 properties: {
    characters: Schema.array({
      items: Schema.object({
        properties: {
          name: Schema.string(),
          accessory: Schema.string(),
          age: Schema.number(),
          species: Schema.string(),
        },
        optionalProperties: ["accessory"],
      }),
    }),
  }
});

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  inCloudParams: {
    model: "gemini-2.0-flash"
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});
Đầu ra enum

Giống như trên, nhưng điều chỉnh tài liệu về đầu ra enum cho suy luận kết hợp:

// ...

const enumSchema = Schema.enumString({
  enum: ["drama", "comedy", "documentary"],
});

const model = getGenerativeModel(ai, {

// ...

    generationConfig: {
      responseMimeType: "text/x.enum",
      responseSchema: enumSchema
    },

// ...

Các tính năng chưa có sẵn cho hoạt độ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ả tính năng của SDK web đều có sẵn cho hoạt động suy luận trên thiết bị. Các tính năng sau đây chưa được hỗ trợ cho suy luận trên thiết bị (nhưng thường được hỗ trợ cho suy luận dựa trên đám mây).

  • Tạo văn bản từ các loại dữ liệu đầu vào tệp hình ảnh khác ngoài JPEG và PNG

    • Có thể sử dụng mô hình được lưu trữ trên đám mây; tuy nhiên, chế độ only_on_device sẽ gửi lỗi.
  • Tạo văn bản từ dữ liệu đầu vào âm thanh, video và tài liệu (như PDF)

    • Có thể sử dụng mô hình được lưu trữ trên đám mây; tuy nhiên, chế độ only_on_device sẽ gửi lỗi.
  • Tạo hình ảnh bằng mô hình Gemini hoặc Imagen

    • Có thể sử dụng mô hình được lưu trữ trên đám mây; tuy nhiên, chế độ only_on_device sẽ gửi lỗi.
  • 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 cùng dòng cho các mô hình trên thiết bị.

  • Cuộc trò chuyện nhiều lượt

    • Có thể sử dụng mô hình được lưu trữ trên đám mây; tuy nhiên, chế độ only_on_device sẽ gửi lỗi.
  • Truyền trực tuyến hai chiều bằng Gemini Live API

    • Xin lưu ý rằng SDK ứng dụng Firebase AI Logic cho Web không hỗ trợ tính năng này ngay cả đối với các mô hình được lưu trữ trên đám mây.
  • Lệnh gọi hàm

    • Sắp có!
  • Đếm mã thông báo

    • Luôn báo lỗi. Số lượng sẽ khác nhau giữa các mô hình được lưu trữ trên đám mây và trên thiết bị, vì vậy, không có phương án dự phòng trực quan.
  • Tính năng giám sát AI trong bảng điều khiển Firebase để suy luận trên thiết bị.

    • Xin lưu ý rằng bạn có thể giám sát mọi hoạt động suy luận bằng các mô hình được lưu trữ trên đám mây giống như các hoạt động suy luận khác bằng SDK ứng dụng Firebase AI Logic cho Web.


Gửi ý kiến phản hồi về trải nghiệm của bạn với Firebase AI Logic