โมเดลภาษา

ฟีเจอร์บนเว็บ: LanguageModel

Prompt API ช่วยให้นักพัฒนาซอฟต์แวร์เรียกใช้งานการประมวลผลภาษาธรรมชาติได้โดยตรงในเบราว์เซอร์โดยใช้ Gemini Nano แนวทาง AI ในตัวนี้ช่วยปกป้องความเป็นส่วนตัวของผู้ใช้ ลดค่าใช้จ่ายเกี่ยวกับเซิร์ฟเวอร์ และช่วยให้ใช้งานแบบออฟไลน์ได้

1. การเริ่มต้นใช้งานและข้อกำหนดด้านฮาร์ดแวร์

ปัจจุบัน Prompt API พร้อมใช้งานใน Chrome ตั้งแต่เวอร์ชัน 148 (เดสก์ท็อป) สำหรับ Windows, macOS, Linux และ Chromebook Plus

ข้อกำหนดเบื้องต้นเกี่ยวกับฮาร์ดแวร์

  • พื้นที่เก็บข้อมูล: พื้นที่ว่าง 22 GB (สำหรับโปรไฟล์และโมเดลเริ่มต้น)
  • หน่วยความจำ/CPU: RAM 16 GB และ CPU 4 คอร์ขึ้นไป
  • GPU: VRAM ขนาด 4 GB ขึ้นไป (จำเป็นสำหรับอินพุตเสียง)
  • เครือข่าย: จำเป็นสำหรับการดาวน์โหลดโมเดลครั้งแรกเท่านั้น

การเริ่มต้น API

ตรวจสอบความพร้อมใช้งานของโมเดลก่อนเรียกให้ดาวน์โหลด ดังนี้

const availability = await LanguageModel.availability();

// Do not call create() when unavailable — the model cannot run on this device.
if (availability !== 'unavailable') {
    const session = await LanguageModel.create({
        monitor(m) {
            // Inform the user while the model downloads so the UI doesn't appear frozen.
            m.addEventListener('downloadprogress', (e) => {
                console.log(`Downloaded ${e.loaded * 100}%`);
            });
        },
    });
}

2. ความสามารถหลักในการเขียนพรอมต์

ตัวอย่างเซสชันในส่วนนี้จะละเว้น session.destroy() เพื่อความกระชับ เรียกใช้ session.destroy() เสมอเมื่อไม่จำเป็นต้องใช้เซสชันอีกต่อไปเพื่อเพิ่มหน่วยความจำของอุปกรณ์ (ดูส่วนที่ 5)

เอาต์พุตพื้นฐานและแบบสตรีม

สำหรับคำตอบสั้นๆ ให้ใช้ prompt() สำหรับเนื้อหาที่ยาวขึ้น ให้ใช้ promptStreaming() เพื่อให้ UI ตอบสนองได้ดียิ่งขึ้น

บังคับ: อย่ากำหนดเอาต์พุตโมเดลให้กับ innerHTML เอาต์พุตโมเดลไม่น่าเชื่อถือและอาจมีมาร์กอัปที่แทรกอยู่ ใช้textContentหรือเจลล้างมือเสมอ

const session = await LanguageModel.create();

// prompt() accumulates the full response before resolving — use for short, one-shot output.
const result = await session.prompt('Write a haiku about coding.');
// textContent, not innerHTML — model output is untrusted and must not be parsed as markup.
outputEl.textContent = result;

// promptStreaming() yields independent chunks that must be concatenated;
// use for longer content so each chunk can be rendered progressively.
const stream = session.promptStreaming('Write a long story about a robot.');
let completeResult = '';
for await (const chunk of stream) {
    completeResult += chunk;
    outputEl.append(chunk);
}
console.log('Full story:', completeResult);

อินพุตหลายรูปแบบ

Prompt API รองรับอินพุตข้อความ เสียง และภาพ (รูปภาพ, Canvas, เฟรมวิดีโอ)

const session = await LanguageModel.create({
    // Declaring expected input types lets the browser optimize model loading.
    expectedInputs: [{ type: 'text' }, { type: 'image' }],
    expectedOutputs: [{ type: 'text' }],
});

const response = await session.prompt([
    {
        role: 'user',
        content: [
            { type: 'text', value: 'What is in this image?' },
            { type: 'image', value: document.querySelector('canvas') },
        ],
    },
]);

3. การจัดการเซสชันขั้นสูง

เซสชันช่วยให้โมเดลรักษาบริบทในการโต้ตอบหลายครั้งได้

บริบทและโควต้า

แต่ละเซสชันมีขีดจำกัดโทเค็นสูงสุด คุณสามารถตรวจสอบการใช้งานผ่าน session.contextUsage และ session.contextWindow หากหน้าต่างมีข้อมูลมากเกินไป ระบบจะทิ้งข้อความที่เก่าที่สุด (ยกเว้นพรอมต์ของระบบ)

เซสชันการโคลน

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

const mainSession = await LanguageModel.create({
    initialPrompts: [{ role: 'system', content: 'You speak like a pirate.' }],
});

const branchA = await mainSession.clone();
const branchB = await mainSession.clone();
// Destroy the base after cloning — the clones own their own context from here.
mainSession.destroy();

การกู้คืนเซสชันที่ผ่านมา

ในขณะที่ฟีเจอร์ "กู้คืน" ในตัวกำลังอยู่ระหว่างการพัฒนา คุณสามารถสร้างเซสชันใหม่ได้โดยป้อนประวัติก่อนหน้าลงใน initialPrompts

หมายเหตุ: localStorage ไม่มีการเข้ารหัสและคงอยู่ถาวร ประวัติการสนทนาที่จัดเก็บไว้อาจมี PII ของผู้ใช้ โปรดพิจารณาผลกระทบด้านความเป็นส่วนตัวก่อนที่จะเก็บประวัติการแชทไว้

// || '[]' ensures JSON.parse never receives null when the key doesn't exist yet.
const history = JSON.parse(localStorage.getItem('chat_history') || '[]');
const session = await LanguageModel.create({
    initialPrompts: history, // Array of {role, content} objects
});

4. เอาต์พุตที่มีโครงสร้างด้วยสคีมา JSON

หากต้องการป้องกันไม่ให้โมเดลเพิ่ม "การพูดคุย" (เช่น "ได้เลย นี่คือ JSON ของคุณ:") ให้ใช้ JSON Schema ผ่านช่อง responseConstraint วิธีนี้ช่วยให้มั่นใจว่าเอาต์พุตเป็น JSON ที่ถูกต้องซึ่งสามารถแยกวิเคราะห์ได้ทันที

ตัวอย่าง: การแยกประเภทความรู้สึก

// Pass the schema as a plain object — do not JSON.stringify() it first.
const schema = {
    type: 'object',
    properties: {
        rating: { type: 'number', minimum: 1, maximum: 5 },
        is_positive: { type: 'boolean' },
    },
    required: ['rating', 'is_positive'],
};

const result = await session.prompt(
    "Rate the following feedback: 'The food was great!'",
    { responseConstraint: schema },
);

const data = JSON.parse(result);
console.log(data.rating); // 5

ข้อจำกัดและคำนำหน้า

คุณสามารถกำหนดทิศทางของโมเดลเพิ่มเติมได้โดยการป้อนคำตอบของผู้ช่วยล่วงหน้าโดยใช้ prefix: true

const character = await session.prompt([
    { role: 'user', content: 'Create a character sheet' },
    { role: 'assistant', content: '```json\n', prefix: true },
]);

5. แนวทางปฏิบัติแนะนำและความปลอดภัย

  • การล้างทรัพยากร: เรียกใช้ session.destroy() เสมอเมื่อการสนทนาเสร็จสิ้นเพื่อเพิ่มพื้นที่หน่วยความจำ
  • ความปลอดภัยของเอาต์พุต: เอาต์พุตโมเดลไม่น่าเชื่อถือ เขียนผลลัพธ์ลงใน textContent เสมอ ไม่ใช่ innerHTML เพื่อป้องกันการแทรก XSS จากเอาต์พุตโมเดลที่เป็นอันตราย
  • ใช้เครื่องมือทำความสะอาด เช่น Sanitizer API แบบเนทีฟหรือ DOMPurify หากต้องการอนุญาต HTML แบบจำกัด
  • การยกเลิกงาน: ใช้ AbortController เพื่ออนุญาตให้ผู้ใช้หยุดการสร้างที่ใช้เวลานาน ส่ง signal ไปยัง prompt() หรือ promptStreaming() ไม่ใช่ LanguageModel.create()
  • ความปลอดภัย: ใช้นโยบายสิทธิ์เพื่อควบคุมการเข้าถึงใน iframe: <iframe src="..." allow="language-model"></iframe>
  • การออกแบบ: อ่านคู่มือ People + AI เพื่อให้มั่นใจว่าการใช้งาน AI เป็นไปอย่างมีความรับผิดชอบ

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

สิ่งที่ควรและไม่ควรทำ

ดูรายการสิ่งที่ควรทำและไม่ควรทำโดยละเอียดได้ที่ https://developer.chrome.com/docs/ai/built-in-ai-dos-donts.md.txt โดยสรุปมีดังนี้

เตรียมโมเดลในเวลาที่เหมาะสม

มีผลกับ: API ทั้งหมด เช่น Summarizer, Translator และ Writer

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

ข้อควรหลีกเลี่ยง: อย่ารอให้ผู้ใช้คลิก "สร้าง" เพื่อเริ่มต้นเซสชัน เว้นแต่จำเป็น ซึ่งจะทำให้เกิดความล่าช้าในการเริ่มทำงานแบบ Cold Start เนื่องจากโมเดลต้องโหลดลงในหน่วยความจำและเตรียมไปป์ไลน์การดำเนินการก่อน

ตั้งค่าพรอมต์เริ่มต้นระหว่างการสร้าง

ใช้กับ: Prompt API

สิ่งที่ควรทำ: ระบุคำสั่งของระบบในระหว่างการเริ่มต้นเซสชันเพื่อเพิ่มความเร็วของพรอมต์แรก

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

โคลนเซสชันสำหรับงานที่ต้องทำซ้ำๆ

ใช้กับ: Prompt API

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

สิ่งที่ควรทำ

  • สร้างเซสชันพื้นฐาน: หากต้องการจัดการงานที่ไม่เกี่ยวข้องอย่างมีประสิทธิภาพ ให้สร้างเซสชันพื้นฐานที่มีเฉพาะคำสั่งของระบบและไม่มีบริบทการสนทนาก่อนหน้า
  • โคลนข้อมูลพื้นฐาน: ใช้ clone() ในเซสชันฐานนั้นสำหรับงานใหม่เพื่อประหยัดค่าใช้จ่ายในการแยกวิเคราะห์คำสั่งของระบบอีกครั้ง ซึ่งจะช่วยให้คุณสร้างการสนทนาแบบคู่ขนานหรือรีเซ็ตงานกลับไปเป็นค่าพื้นฐานได้

สิ่งที่ไม่ควรทำ

  • อย่าใช้เซสชันเดียวกันซ้ำสำหรับงานที่ไม่เกี่ยวข้อง และหลีกเลี่ยงการโคลนเซสชันที่มีประวัติการโต้ตอบที่ไม่จำเป็นอยู่แล้ว ทั้ง 2 รูปแบบอาจทำให้บริบทก่อนหน้าที่ไม่เกี่ยวข้องรบกวนงานปัจจุบันของคุณ
  • อย่าเรียกใช้ create() ซ้ำๆ ด้วยคำสั่งของระบบที่เหมือนกัน ให้ใช้รูปแบบการโคลนแทนเพื่อเพิ่มประสิทธิภาพ

ทำลายเซสชันที่ไม่ได้ใช้

ใช้กับ: API ทั้งหมด

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

สิ่งที่ไม่ควรทำ: เปิดเซสชันขนาดใหญ่หลายเซสชันไว้พร้อมกัน แต่ละเซสชันจะใช้หน่วยความจำ ซึ่งทำให้เกิดการใช้ทรัพยากรโดยไม่จำเป็นและอาจกลายเป็นปัญหาได้ โดยปกติแล้ว Garbage Collector จะล้างเซสชัน แต่การเรียกใช้ destroy() จะช่วยเพิ่มหน่วยความจำได้เร็วยิ่งขึ้น

แสดงผลคำตอบแบบสตรีมมิงอย่างปลอดภัยและมีประสิทธิภาพ

ใช้กับ: API ทั้งหมดที่รองรับการสตรีม (Prompt, Summarizer, Writer, Rewriter และ Translator)

สิ่งที่ควรทำ: ถือว่าเอาต์พุต LLM ทั้งหมดเป็นเนื้อหาที่ไม่น่าเชื่อถือ ตรวจสอบเอาต์พุตที่รวมกันทั้งหมด ไม่ใช่แค่บางส่วน เนื่องจากโค้ดที่เป็นอันตรายอาจแยกออกจากการอัปเดตได้ ก่อนแสดงผล ให้ใช้ Sanitizer API หากรองรับ หากต้องการหลีกเลี่ยงประสิทธิภาพที่ลดลง ให้ใช้โปรแกรมแยกวิเคราะห์ Markdown แบบสตรีมมิง เช่น streaming-markdown

ไม่ควร: ตั้งค่า innerHTML โดยตรงในการอัปเดตกลุ่มข้อมูลทุกครั้ง ซึ่งจะช้า โดยเฉพาะอย่างยิ่งเมื่อมีการจัดรูปแบบที่ซับซ้อน เช่น การไฮไลต์ไวยากรณ์ และเสี่ยงต่อการแทรก

เพิ่มประสิทธิภาพอินพุตเพื่อความเร็ว

ใช้กับ: API ทั้งหมด

สิ่งที่ควรทำ: ส่งเฉพาะสิ่งที่จำเป็นจริงๆ ไปยังโมเดล ตัดทุกอย่างที่ไม่เกี่ยวข้องกับงานที่ทำอยู่ออก สำหรับชุดข้อมูลขนาดใหญ่ ให้ระบุภาพรวมสั้นๆ และรายการที่เกี่ยวข้องที่เลือกมาเพียงเล็กน้อย

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

ใช้เอาต์พุตที่มีโครงสร้างเพื่อให้ได้ผลลัพธ์ที่คาดการณ์ได้

ใช้กับ: Prompt API

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

ไม่ควร: อาศัยคำสั่งภาษาธรรมชาติ (เช่น "เอาต์พุต JSON เท่านั้น") เพียงอย่างเดียว โมเดลอาจมีคำพูดที่ใช้คั่นเวลาในการสนทนาซึ่งทำให้โปรแกรมแยกวิเคราะห์ของคุณหยุดทำงาน

แยกการสร้างออกจากข้อจำกัดด้านความยาว

ใช้กับ: Prompt API เนื่องจากเป็น API เดียวที่รองรับสคีมาเอาต์พุตที่มีโครงสร้าง

สิ่งที่ควรทำ: ปล่อยให้โมเดลสร้างคำตอบอย่างเป็นธรรมชาติ แล้วใช้ตรรกะฝั่งไคลเอ็นต์เพื่อตัดข้อความให้พอดีกับ UI

ไม่ควร: บังคับใช้จำนวนอักขระสูงสุดที่เข้มงวด เช่น maxLength: 125 โดยใช้สคีมาเอาต์พุตที่มีโครงสร้าง เมื่อคำตอบของโมเดลยาวเกินขีดจำกัดที่คุณตั้งไว้ โมเดลอาจเปลี่ยนไปใช้โทเค็นที่มีความหนาแน่นสูง เช่น ภาษาต่างประเทศหรืออีโมจิ เพื่อบีบอัดความหมาย ซึ่งส่งผลให้เอาต์พุตไม่มีความหมาย

แจ้งให้ผู้ใช้ทราบอยู่เสมอ

ใช้กับ: API ทั้งหมด

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

  • สตรีมมิงสำหรับเนื้อหาขนาดยาว: สำหรับสรุปหรือแชท สตรีมมิงจะสร้างเอฟเฟกต์เครื่องพิมพ์ดีดต่อโทเค็นโดยค่าเริ่มต้น ซึ่งจะให้ความรู้สึกเป็นธรรมชาติและให้ความคิดเห็นได้ทันที
  • ไม่สตรีมมิงสำหรับงานสั้นๆ (หรืองานแบบไม่พร้อมกันที่ใช้เวลานาน): สำหรับเอาต์พุตสั้นๆ เช่น ข้อความแสดงแทน การไม่สตรีมมิงจะสร้าง UI ที่สวยงามยิ่งขึ้นได้ นอกจากนี้ยังช่วยให้มีเวลาเตรียมงาน AI ถัดไปในขณะที่งานปัจจุบันกำลังแสดงผล วิธีนี้ยังใช้ได้กับงานแบบอะซิงโครนัสหรืองานที่ทำอยู่เบื้องหลังซึ่งใช้เวลานานกว่าด้วย หากผู้ใช้ไม่ถูกบล็อกในเอาต์พุตเพื่อดำเนินการต่อ ก็ไม่จำเป็นต้องสร้างเอาต์พุตอย่างเร่งด่วนในขณะที่เกิดขึ้น ส่งสัญญาณว่ากระบวนการกำลังดำเนินอยู่ใน UI
  • การเปลี่ยนภาพสำหรับการอัปเดต: เมื่อแปลหรือเขียนข้อความใหม่ ให้ใช้ภาพเคลื่อนไหว เช่น การเปลี่ยนรูปคำ

ไม่ควร: อัปเดต UI โดยไม่มีสัญญาณบอกสถานะที่มองเห็นได้

สอดคล้องกับโมเดลทางความคิดของผู้ใช้เกี่ยวกับเวลาและการทำงาน

ใช้กับ: API ทั้งหมด

สิ่งที่ควรทำ: พิจารณาการหน่วงเวลาเทียม 1-2 วินาทีหากการตอบสนองเกือบจะทันที ในทางกลับกัน ผู้ใช้อาจพบว่าผลลัพธ์น่าเชื่อถือมากขึ้นเมื่อรับรู้ถึงกระบวนการสร้างที่สอดคล้องกับความยากของงานที่ตนรับรู้ ใช้ภาพเคลื่อนไหวเพื่อส่งสัญญาณว่ามีการประมวลผลด้วย AI เกิดขึ้นแล้ว

ไม่ควรทำ: ทำให้ผู้ใช้ประหลาดใจด้วยการแทนที่ UI ทันที

อนุญาตให้ผู้ใช้ไปยังส่วนต่างๆ และเลิกทำการแก้ไขด้วย AI ได้อย่างรวดเร็ว

ใช้กับ: API ทั้งหมด

สิ่งที่ควรทำ: ติดตั้ง UI ด้วยตัวเลือกแบบขั้นบันไดหรือประวัติการนำทางที่ช่วยให้ผู้ใช้สำรวจผลลัพธ์ต่างๆ ได้อย่างมั่นใจ และช่วยให้ผู้ใช้เลิกทำการแก้ไขของ AI ได้อย่างรวดเร็ว ซึ่งจะช่วยให้มั่นใจได้ว่าเวอร์ชันต่างๆ จะยังคงพร้อมใช้งานอยู่เสมอ

ไม่ควรทำ: เขียนทับฉบับร่างก่อนหน้าของผู้ใช้หรือผลลัพธ์จาก AI ที่ผู้ใช้อาจชอบโดยไม่มีวิธีให้ย้อนกลับ เปลี่ยนกลับ หรือเปรียบเทียบเวอร์ชัน

เพิ่มประสิทธิภาพการควบคุมและการลบล้างของผู้ใช้

ใช้กับ: API ทั้งหมด

สิ่งที่ควรทำ: กำหนดให้ผู้ใช้เป็นผู้แก้ไขขั้นสุดท้ายของเนื้อหาทั้งหมดที่สร้างขึ้น ให้การลบล้างที่ใช้งานง่ายเพื่อให้ผู้ใช้ยังคงเป็นเจ้าของเอาต์พุตสุดท้ายอย่างเต็มรูปแบบ API อาจให้ผลลัพธ์ที่ไม่ถูกต้อง

ไม่ควรทำ: บังคับให้ผลลัพธ์ที่ AI สร้างขึ้นเป็นตัวเลือกเดียว

แคชผลลัพธ์สำหรับงานที่ทำซ้ำ

ใช้กับ: API ทั้งหมด

สิ่งที่ควรทำ: ใช้แคชผลลัพธ์ในเครื่อง (เช่น ใช้ sessionStorage หรือ IndexedDB) สำหรับอินพุตหรือการค้นหาที่ซ้ำกัน ปรับอินพุตให้เป็นมาตรฐานโดยตัดช่องว่างและใช้อักษรตัวพิมพ์เล็กเพื่อเพิ่มการพบแคช สำหรับอินพุตที่มีขนาดใหญ่ เช่น รูปภาพ ให้สร้างแฮชเพื่อใช้เป็นคีย์แคช ตั้งค่า Time to Live (TTL) แบบอนุรักษ์นิยมสำหรับแคช (หรือแสดงผลลัพธ์ที่แคชไว้ขณะอัปเดตในเบื้องหลัง) อนุญาตให้ผู้ใช้เรียกใช้การอนุมานใหม่หากผลลัพธ์ไม่เป็นที่น่าพอใจ

ไม่ควร: เรียกใช้การอนุมานเดียวกันซ้ำสำหรับคำค้นหาที่ซ้ำกันหรืออินพุตข้อมูลที่เหมือนกันซึ่งไม่ต้องการความแปรปรวน เช่น เมื่อผู้ใช้ไปยังส่วนต่างๆ ไปมาในผลการค้นหา ซึ่งจะช่วยเพิ่มประสิทธิภาพการตอบสนองและการใช้การประมวลผลในเครื่องอย่างมีประสิทธิภาพ

6. กลยุทธ์สำรอง

ก่อนใช้งาน ให้ตรวจสอบว่าออบเจ็กต์ LanguageModel พร้อมใช้งานในขอบเขตส่วนกลางหรือไม่ โดยทำดังนี้

if ('LanguageModel' in self) {
  // The Prompt API is supported.
} else {
  // Execute fallback strategy
}

หากระบบไม่รองรับ Prompt API หรือการตรวจสอบความพร้อมใช้งานแสดงผลเป็น "ไม่พร้อมใช้งาน" คุณต้องใช้กลยุทธ์สำรองอย่างเหมาะสม ดังนี้

  • Remote API Fallback: เปลี่ยนเส้นทางคำขอการตรวจจับไปยังปลายทางเซิร์ฟเวอร์หรือ Cloud API (เช่น Vertex AI Gemini API)
  • ทางเลือกสำรองสำหรับ API ในเครื่อง: เปลี่ยนเส้นทางคำขอการตรวจจับไปยังปลายทางในเครื่อง เช่น การใช้ Transformers.js