สร้างประสบการณ์แบบไฮบริดในเว็บแอปด้วยโมเดลที่โฮสต์ในอุปกรณ์และระบบคลาวด์


สร้างเว็บแอปและฟีเจอร์ที่ขับเคลื่อนด้วย AI พร้อมการอนุมานแบบไฮบริดโดยใช้ Firebase AI Logic การอนุมานแบบไฮบริดช่วยให้สามารถเรียกใช้การอนุมานโดยใช้โมเดลในอุปกรณ์เมื่อพร้อมใช้งาน และเปลี่ยนไปใช้โมเดลที่โฮสต์ในระบบคลาวด์ได้อย่างราบรื่นในกรณีอื่นๆ (และในทางกลับกัน)

หน้านี้อธิบายวิธี เริ่มต้นใช้งาน Client SDK หลังจากตั้งค่ามาตรฐานนี้เสร็จแล้ว ให้ดูตัวเลือกการกำหนดค่าและความสามารถเพิ่มเติม (เช่น เอาต์พุตที่มีโครงสร้าง)

โปรดทราบว่าระบบรองรับการอนุมานในอุปกรณ์สำหรับ เว็บแอปที่ทำงานบน Chrome ในเดสก์ท็อป

ข้ามไปยังตัวอย่างโค้ด

กรณีการใช้งานที่แนะนำและความสามารถที่รองรับ

กรณีการใช้งานที่แนะนำ:

  • การใช้โมเดลในอุปกรณ์สำหรับการอนุมานมีข้อดีดังนี้

    • ความเป็นส่วนตัวที่ดียิ่งขึ้น
    • บริบทเฉพาะรายการ
    • การอนุมานโดยไม่มีค่าใช้จ่าย
    • ฟังก์ชันการทำงานแบบออฟไลน์
  • การใช้ฟังก์ชันการทำงานแบบไฮบริดมีข้อดีดังนี้

    • เข้าถึงกลุ่มเป้าหมายได้ 100% ไม่ว่าโมเดลในอุปกรณ์จะพร้อมใช้งานหรือไม่ หรือการเชื่อมต่ออินเทอร์เน็ตจะเป็นอย่างไร

ความสามารถและฟีเจอร์ที่รองรับสำหรับการอนุมานในอุปกรณ์:

การอนุมานในอุปกรณ์รองรับเฉพาะการสร้างข้อความแบบครั้งเดียว (ไม่ใช่ แชท) โดยมีเอาต์พุตแบบสตรีมมิงหรือไม่สตรีมมิง และรองรับความสามารถในการสร้างข้อความต่อไปนี้

นอกจากนี้ คุณยัง สร้างเอาต์พุตที่มีโครงสร้าง, ซึ่งรวมถึง JSON และ Enum ได้ด้วย

ก่อนเริ่มต้น

โปรดทราบสิ่งต่อไปนี้

  • การอนุมานโดยใช้โมเดลในอุปกรณ์จะใช้ Prompt API จาก Chrome ส่วน การอนุมานโดยใช้โมเดลที่โฮสต์ในระบบคลาวด์จะใช้Gemini API ผู้ให้บริการที่คุณเลือก (ไม่ว่าจะเป็นGemini Developer API หรือ Vertex AI Gemini API)

  • หน้านี้อธิบายวิธีเริ่มต้นพัฒนาโดยใช้ localhost (ดูข้อมูล เพิ่มเติมเกี่ยวกับการ ใช้ API ใน localhost ในเอกสารประกอบของ Chrome)

    หลังจากตั้งค่ามาตรฐานนี้เสร็จแล้ว ให้ดูตัวเลือกการกำหนดค่าและความสามารถเพิ่มเติม (เช่น เอาต์พุตที่มีโครงสร้าง)

  • หลังจากติดตั้งใช้งานฟีเจอร์แล้ว คุณสามารถ เปิดใช้ฟีเจอร์ให้ผู้ใช้ปลายทางได้ทดลองใช้ ในแอปจริง

เริ่มต้นใช้งานใน localhost

ขั้นตอนการเริ่มต้นใช้งานเหล่านี้อธิบายการตั้งค่าทั่วไปที่จำเป็นสำหรับคำขอพรอมต์ที่รองรับซึ่งคุณต้องการส่ง

ขั้นตอนที่ 1: ตั้งค่า Chrome และ Prompt API สำหรับการอนุมานในอุปกรณ์

  1. ตรวจสอบว่าคุณใช้ Chrome เวอร์ชันล่าสุด อัปเดตใน chrome://settings/help
    การอนุมานในอุปกรณ์พร้อมใช้งานตั้งแต่ Chrome v139 ขึ้นไป

  2. เปิดใช้โมเดลมัลติโมดัลในอุปกรณ์โดยตั้งค่าแฟล็กต่อไปนี้เป็น เปิดใช้:

    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
  3. รีสตาร์ท Chrome

  4. (ไม่บังคับ) ดาวน์โหลดโมเดลในอุปกรณ์ก่อนส่งคำขอแรก

    Prompt API ติดตั้งมากับ Chrome แต่โมเดลในอุปกรณ์จะไม่พร้อมใช้งานโดยค่าเริ่มต้น หากคุณยังไม่ได้ดาวน์โหลดโมเดลก่อนส่งคำขอแรกสำหรับการอนุมานในอุปกรณ์ ระบบจะเริ่มดาวน์โหลดโมเดลในเบื้องหลังโดยอัตโนมัติ

ขั้นตอนที่ 2: ตั้งค่าโปรเจ็กต์ Firebase และเชื่อมต่อแอปกับ Firebase

  1. ลงชื่อเข้าใช้คอนโซล Firebase แล้วเลือกโปรเจ็กต์ Firebase

  2. ในคอนโซล Firebase ให้ไปที่บริการ AI > AI Logic

  3. คลิกเริ่มต้นใช้งาน เพื่อเปิดเวิร์กโฟลว์แบบมีคำแนะนำที่จะช่วยคุณตั้งค่า API ที่จำเป็น และทรัพยากรสำหรับโปรเจ็กต์

  4. ตั้งค่าโปรเจ็กต์ให้ใช้ผู้ให้บริการ "Gemini API"

    เราขอแนะนำให้เริ่มต้นใช้งาน Gemini Developer API. คุณสามารถตั้งค่า Vertex AI Gemini API (และข้อกำหนดในการเรียกเก็บเงิน) ได้ทุกเมื่อ

    สำหรับ Gemini Developer API คอนโซลจะเปิดใช้ API ที่จำเป็น และสร้างคีย์ Gemini API ในโปรเจ็กต์
    อย่า เพิ่ม คีย์ Gemini API นี้ลงในโค้ดเบสของแอป ดูข้อมูลเพิ่มเติม

  5. หากระบบแจ้งในเวิร์กโฟลว์ของคอนโซล ให้ทำตามวิธีการบนหน้าจอเพื่อลงทะเบียนแอปและเชื่อมต่อแอปกับ Firebase

  6. ทำตามขั้นตอนถัดไปในคู่มือนี้เพื่อเพิ่ม SDK ลงในแอป

ขั้นตอนที่ 3: เพิ่ม SDK

ไลบรารี Firebase ให้สิทธิ์เข้าถึง API สำหรับโต้ตอบกับโมเดล Generative โดยไลบรารีนี้รวมอยู่ใน Firebase JavaScript SDK สำหรับเว็บ

  1. ติดตั้ง Firebase JS SDK สำหรับเว็บโดยใช้ npm ดังนี้

    npm install firebase
    
  2. เริ่มต้น Firebase ในแอปโดยใช้โค้ดต่อไปนี้

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

ขั้นตอนที่ 4: เริ่มต้นบริการและสร้างอินสแตนซ์โมเดล

คลิกผู้ให้บริการ Gemini API เพื่อดูเนื้อหาเฉพาะของผู้ให้บริการ และโค้ดในหน้านี้

ตั้งค่าสิ่งต่อไปนี้ก่อนส่งคำขอพรอมต์ไปยังโมเดล

  1. เริ่มต้นบริการสำหรับผู้ให้บริการ API ที่คุณเลือก

  2. สร้างอินสแตนซ์ GenerativeModel และตรวจสอบว่าได้ทำสิ่งต่อไปนี้

    1. เรียกใช้ getGenerativeModel หลังหรือเมื่อผู้ใช้ปลายทางโต้ตอบ (เช่น การคลิกปุ่ม) ซึ่งเป็นข้อกำหนดเบื้องต้นสำหรับ inferenceMode

    2. ตั้งค่า mode เป็นค่าใดค่าหนึ่งต่อไปนี้

      • PREFER_ON_DEVICE: ใช้โมเดลในอุปกรณ์หากพร้อมใช้งาน ไม่เช่นนั้น เปลี่ยนไปใช้โมเดลที่โฮสต์ในระบบคลาวด์

      • ONLY_ON_DEVICE: ใช้โมเดลในอุปกรณ์หากพร้อมใช้งาน ไม่เช่นนั้น แสดงข้อยกเว้น

      • PREFER_IN_CLOUD: ใช้โมเดลที่โฮสต์ในระบบคลาวด์หากพร้อมใช้งาน ไม่เช่นนั้น เปลี่ยนไปใช้โมเดลในอุปกรณ์

      • ONLY_IN_CLOUD: ใช้โมเดลที่โฮสต์ในระบบคลาวด์หากพร้อมใช้งาน ไม่เช่นนั้น แสดงข้อยกเว้น

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 });

ขั้นตอนที่ 5: ส่งคำขอพรอมต์ไปยังโมเดล

ส่วนนี้แสดงวิธีส่งอินพุตประเภทต่างๆ เพื่อสร้างเอาต์พุตประเภทต่างๆ ซึ่งรวมถึง

หากต้องการสร้างเอาต์พุตที่มีโครงสร้าง (เช่น JSON หรือ Enum) ให้ ใช้ตัวอย่าง "สร้างข้อความ" ตัวอย่างใดตัวอย่างหนึ่งต่อไปนี้ และกำหนดค่าโมเดลเพิ่มเติมให้ตอบสนองตามสคีมาที่ระบุ

สร้างข้อความจากอินพุตที่เป็นข้อความเท่านั้น

ก่อนลองใช้ตัวอย่างนี้ โปรดตรวจสอบว่าคุณได้ทำตาม ส่วนเริ่มต้นใช้งานในคู่มือนี้แล้ว

คุณสามารถใช้ generateContent() เพื่อสร้างข้อความจากพรอมต์ที่มีข้อความได้

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

โปรดทราบว่า Firebase AI Logic ยังรองรับการสตรีมมิงการตอบกลับที่เป็นข้อความโดยใช้ generateContentStream (แทน generateContent)

สร้างข้อความจากอินพุตที่เป็นข้อความและรูปภาพ (มัลติโมดัล)

ก่อนลองใช้ตัวอย่างนี้ โปรดตรวจสอบว่าคุณได้ทำตาม ส่วนเริ่มต้นใช้งานในคู่มือนี้แล้ว

คุณสามารถใช้ generateContent() เพื่อสร้างข้อความจากพรอมต์ที่มีข้อความและไฟล์รูปภาพ โดยระบุ ไฟล์อินพุตแต่ละไฟล์'s mimeType และไฟล์นั้น

ประเภทรูปภาพอินพุตที่รองรับสำหรับการอนุมานในอุปกรณ์คือ PNG และ 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();

โปรดทราบว่า Firebase AI Logic ยังรองรับการสตรีมมิงการตอบกลับที่เป็นข้อความโดยใช้ generateContentStream (แทน generateContent)

เปิดใช้ฟีเจอร์ให้ผู้ใช้ปลายทางได้ทดลองใช้

หากต้องการให้ผู้ใช้ปลายทางได้ทดลองใช้ฟีเจอร์ในแอป คุณต้อง ลงทะเบียนเข้าร่วมการทดลองใช้ Origin ของ Chrome โปรดทราบว่าการทดลองใช้เหล่านี้มีระยะเวลาและการใช้งานที่จำกัด

  1. ลงทะเบียนเข้าร่วมการทดลองใช้ Origin ของ Chrome สำหรับ Prompt API แล้วคุณจะได้รับโทเค็น

  2. ระบุโทเค็นในทุกหน้าเว็บที่คุณต้องการเปิดใช้ฟีเจอร์ช่วงทดลองใช้ โดยใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้

    • ระบุโทเค็นเป็นเมตาแท็กในแท็ก <head>: <meta http-equiv="origin-trial" content="TOKEN">

    • ระบุโทเค็นเป็นส่วนหัว HTTP: Origin-Trial: TOKEN

    • ระบุโทเค็น แบบเป็นโปรแกรม

คุณทำอะไรได้อีกบ้าง

คุณสามารถใช้ตัวเลือกการกำหนดค่าและความสามารถเพิ่มเติมต่างๆ สำหรับประสบการณ์ใช้งานแบบไฮบริดได้ดังนี้

ฟีเจอร์ที่ยังไม่พร้อมใช้งานสำหรับการอนุมานในอุปกรณ์

เนื่องจากเป็นเวอร์ชันทดลองใช้ ความสามารถบางอย่างของ Web SDK จึงยังไม่พร้อมใช้งานสำหรับการอนุมาน ในอุปกรณ์ ฟีเจอร์ต่อไปนี้ ยังไม่รองรับการอนุมานในอุปกรณ์ (แต่โดยปกติจะพร้อมใช้งานสำหรับการอนุมานที่อิงตามระบบคลาวด์)

  • การสร้างข้อความจากอินพุตไฟล์รูปภาพประเภทอื่นที่ไม่ใช่ JPEG และ PNG

    • สามารถเปลี่ยนไปใช้โมเดลที่โฮสต์ในระบบคลาวด์ได้ แต่โหมด ONLY_ON_DEVICE จะแสดงข้อผิดพลาด
  • การสร้างข้อความจากอินพุตเสียง วิดีโอ และเอกสาร (เช่น PDF)

    • สามารถเปลี่ยนไปใช้โมเดลที่โฮสต์ในระบบคลาวด์ได้ แต่โหมด ONLY_ON_DEVICE จะแสดงข้อผิดพลาด
  • การสร้างรูปภาพโดยใช้โมเดล Gemini หรือ Imagen

    • สามารถเปลี่ยนไปใช้โมเดลที่โฮสต์ในระบบคลาวด์ได้ แต่โหมด ONLY_ON_DEVICE จะแสดงข้อผิดพลาด
  • การระบุไฟล์โดยใช้ URL ในคำขอมัลติโมดัล คุณต้องระบุไฟล์เป็นข้อมูลแบบอินไลน์ให้กับโมเดลในอุปกรณ์

  • แชทแบบหลายรอบ

    • สามารถเปลี่ยนไปใช้โมเดลที่โฮสต์ในระบบคลาวด์ได้ แต่โหมด ONLY_ON_DEVICE จะแสดงข้อผิดพลาด
  • การสตรีมมิงแบบ 2 ทางด้วย Gemini Live API

  • การระบุ เครื่องมือ ให้กับโมเดลเพื่อช่วยสร้างการตอบกลับ (เช่น การเรียกใช้ฟังก์ชัน การดำเนินการโค้ด บริบท URL และ การเชื่อมต่อแหล่งข้อมูลกับ Google Search)

  • นับโทเค็น

    • แสดงข้อผิดพลาดเสมอ จำนวนโทเค็นจะแตกต่างกันระหว่างโมเดลที่โฮสต์ในระบบคลาวด์กับโมเดลในอุปกรณ์ จึงไม่มีการเปลี่ยนไปใช้โมเดลอื่นที่เข้าใจง่าย
  • การตรวจสอบ AI ในคอนโซล Firebase สำหรับการอนุมานในอุปกรณ์

    • โปรดทราบว่าคุณสามารถตรวจสอบการอนุมานใดๆ ที่ใช้โมเดลที่โฮสต์ในระบบคลาวด์ได้เช่นเดียวกับการอนุมานอื่นๆ ที่ใช้ Firebase AI Logic client SDK สำหรับเว็บ


แสดงความคิดเห็น เกี่ยวกับประสบการณ์ใช้งานFirebase AI Logic