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 các ứng dụng và tính năng web 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ách sử dụ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ư đầu ra có cấu trúc.

Xin lưu ý rằng suy luận trên thiết bị được hỗ trợ cho các ứng dụng web chạy trên 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 chức 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ị để suy luận các đề xuất:

    • 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 100% đối tượng của bạn, bất kể khả năng cung cấp mô hình trên thiết bị hay khả năng kết nối Internet

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

Trước khi bắt đầu

Hãy lưu ý những điều sau:

Bắt đầu trên localhost

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 Chrome và Prompt API để suy luận trên thiết bị

  1. Đảm bảo bạn đang dùng phiên bản Chrome gần đây. Cập nhật trong chrome://settings/help.
    Tính năng suy luận trên thiết bị có trong Chrome phiên bản 139 trở lên.

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

    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
  3. Khởi động lại Chrome.

  4. (Không bắt buộc) Tải mô hình trên thiết bị xuống trước yêu cầu đầu tiên.

    Prompt API được tích hợp vào Chrome; tuy nhiên, theo mặc định, mô hình trên thiết bị sẽ không hoạt động. Nếu bạn chưa tải mô hình xuống trước yêu cầu đầu tiên về suy luận trên thiết bị, thì yêu cầu sẽ tự động bắt đầu tải mô hình xuống ở chế độ nền.

Bước 2: Thiết lập một dự án Firebase và kết nối ứng dụng của bạn 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 để 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.

  4. 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.

  5. 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.

  6. 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 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 các mô hình tạo sinh. Thư viện này được đưa vào SDK JavaScript của Firebase cho Web.

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

    npm install firebase
    
  2. Khởi động Firebase trong ứng dụng của bạn:

    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.

Thiết lập những nội dung sau trước khi bạn gửi yêu cầu câu lệnh cho mô hình.

  1. Khởi chạy dịch vụ cho nhà cung cấp API mà bạn đã chọn.

  2. Tạo một thực thể GenerativeModel. Hãy nhớ làm những việc sau:

    1. Gọi getGenerativeModel sau hoặc trong một lượt tương tác của người dùng cuối (chẳng hạn như lượt nhấp vào nút). Đây là điều kiện tiên quyết cho inferenceMode.

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

      • PREFER_ON_DEVICE: Sử dụng mô hình trên thiết bị nếu có; nếu không, hãy quay lại mô hình được lưu trữ trên đám mây.

      • ONLY_ON_DEVICE: Sử dụng mô hình trên thiết bị nếu có; nếu không, hãy gửi một trường hợp ngoại lệ.

      • PREFER_IN_CLOUD: Sử dụng mô hình được lưu trữ trên đám mây nếu có; nếu không, hãy quay lại mô hình trên thiết bị.

      • ONLY_IN_CLOUD: Sử dụng mô hình được lưu trữ trên đám mây nếu có; nếu không, hãy gây ra một ngoại lệ.

import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend, InferenceMode } 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
// Call `getGenerativeModel` after or on an end-user interaction
// Set the mode (for example, use the on-device model if it's available)
const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_ON_DEVICE });

Bước 5: Gửi yêu cầu dạng câu lệnh cho 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 ra 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 (chẳng hạn 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à định cấu hình mô hình để phản hồi theo một giản đồ được cung cấp.

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:

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

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 tệp văn bản và hình ảnh, bằng cách cung cấp mimeType của từng tệp đầu vào và chính tệp đó.

Các loại hình ảnh đầu vào được hỗ trợ cho 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();

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).

Cho phép người dùng cuối dùng thử tính năng của bạn

Để người dùng cuối dùng thử tính năng của bạn trong ứng dụng, bạn phải đăng ký tham gia Chương trình dùng thử nguồn gốc của Chrome. Xin lưu ý rằng các bản dùng thử này có thời lượng và phạm vi sử dụng có giới hạn.

  1. Đăng ký Bản dùng thử theo nguyên gốc Prompt API của Chrome. Bạn sẽ nhận được một mã thông báo.

  2. Cung cấp mã thông báo trên mọi trang web mà bạn muốn bật tính năng dùng thử. Dùng một trong các cách sau:

    • Cung cấp mã thông báo dưới dạng thẻ meta trong thẻ <head>: <meta http-equiv="origin-trial" content="TOKEN">

    • Cung cấp mã thông báo dưới dạng tiêu đề HTTP: Origin-Trial: TOKEN

    • Cung cấp mã thông báo theo phương thức lập trình.

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

Trong phần này, hãy tìm hiểu cách đặt chế độ suy luận, ghi đè mô hình dự phòng mặc định được lưu trữ trên đám mâysử dụng cấu hình mô hình để kiểm soát các phản hồi (chẳng hạn như tạo đầu ra có cấu trúc).

Đặt chế độ suy luận

Các ví dụ trong chế độ thiết lập chung sử dụng chế độ PREFER_ON_DEVICE, nhưng đây chỉ là một trong bốn chế độ suy luận có sẵn.

  • PREFER_ON_DEVICE: Sử dụng mô hình trên thiết bị nếu có; nếu không, hãy quay lại mô hình được lưu trữ trên đám mây.

    const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_ON_DEVICE });
    
  • ONLY_ON_DEVICE: Sử dụng mô hình trên thiết bị nếu có; nếu không, hãy gửi một trường hợp ngoại lệ.

    const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_ON_DEVICE });
    
  • PREFER_IN_CLOUD: Sử dụng mô hình được lưu trữ trên đám mây nếu có; nếu không, hãy quay lại mô hình trên thiết bị.

    const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_IN_CLOUD });
    
  • ONLY_IN_CLOUD: Sử dụng mô hình được lưu trữ trên đám mây nếu có; nếu không, hãy gây ra một ngoại lệ.

    const model = getGenerativeModel(ai, { mode: InferenceMode.ONLY_IN_CLOUD });
    

Xác định xem bạn đã dùng suy luận trên thiết bị hay suy luận trên đám mây

Nếu bạn sử dụng chế độ suy luận PREFER_ON_DEVICE hoặc PREFER_IN_CLOUD, thì bạn nên biết chế độ nào đã được dùng cho các yêu cầu nhất định. Thông tin này được cung cấp bởi thuộc tính inferenceSource của mỗi phản hồi (có từ JS SDK phiên bản 12.5.0).

Khi bạn truy cập vào thuộc tính này, giá trị được trả về sẽ là ON_DEVICE hoặc IN_CLOUD.

// ...

console.log('You used: ' + result.response.inferenceSource);

console.log(result.response.text());

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

Mô hình được lưu trữ trên đám mây mặc định là gemini-2.5-flash-lite

Đây là mô hình dự phòng được lưu trữ trên đám mây khi bạn sử dụng chế độ PREFER_ON_DEVICE. Đây cũng là mô hình mặc định khi bạn sử dụng chế độ ONLY_IN_CLOUD hoặc chế độ PREFER_IN_CLOUD.

Bạn có thể sử dụng lựa 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: InferenceMode.INFERENCE_MODE,
  inCloudParams: {
    model: "GEMINI_MODEL_NAME"
  }
});

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 câu trả lời

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

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

Thiết lập cấu hình cho một mô hình được lưu trữ trên đám mây

Sử dụng lựa 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: InferenceMode.INFERENCE_MODE,
  inCloudParams: {
    model: "GEMINI_MODEL_NAME"
    temperature: 0.8,
    topK: 10
  }
});

Đặt cấu hình cho một mô hình trên thiết bị

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

Sử dụng lựa chọn onDeviceParams để định cấu hình một 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: InferenceMode.INFERENCE_MODE,
  onDeviceParams: {
    createOptions: {
      temperature: 0.8,
      topK: 8
    }
  }
});

Đặt cấu hình cho đầu ra có cấu trúc (chẳng hạn như JSON)

Việc tạo đầu ra có cấu trúc (chẳng hạn như JSON và enum) được hỗ trợ cho suy luận bằ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 nhằm 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 có thể áp dụng.

  • Đố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.

Đầu ra 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: InferenceMode.INFERENCE_MODE,
  inCloudParams: {
    model: "gemini-2.5-flash"
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});
Đầu ra enum

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ó cho 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 chức năng của Web SDK đều có sẵn cho 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ó sẵn cho suy luận dựa trên đám mây).

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

    • Có thể dự phòng cho mô hình được lưu trữ trên đám mây; tuy nhiên, chế độ ONLY_ON_DEVICE sẽ gặp lỗi.
  • 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)

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

    • Có thể dự phòng cho mô hình được lưu trữ trên đám mây; tuy nhiên, chế độ ONLY_ON_DEVICE sẽ gặp 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 các tệp dưới dạng dữ liệu nội tuyến cho các mô hình trên thiết bị.

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

    • Có thể dự phòng cho mô hình được lưu trữ trên đám mây; tuy nhiên, chế độ ONLY_ON_DEVICE sẽ gặp lỗi.
  • Phát trực tiếp hai chiều bằng Gemini Live API

  • Cung cấp cho mô hình các công cụ để giúp mô hình tạo ra phản hồ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 từ Google Tìm kiếm)

  • Đế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ó giải pháp 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 suy luận bằng các mô hình được lưu trữ trên đám mây giống như các 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