Prompt API

เผยแพร่: 20 พฤษภาคม 2025

วิดีโออธิบาย เว็บ ส่วนขยาย สถานะ Chrome ความตั้งใจ
GitHub ทดลอง ใน EPP Chrome 138 ดู ความตั้งใจที่จะทดสอบ

Prompt API ช่วยให้คุณส่งคําขอเป็นภาษาธรรมชาติไปยัง Gemini Nano ในเบราว์เซอร์ได้

คุณใช้ Prompt API ได้หลายวิธี ในเว็บแอปพลิเคชันหรือเว็บไซต์ คุณสามารถสร้างสิ่งต่อไปนี้

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

ตัวอย่างข้างต้นเป็นเพียงตัวอย่างบางส่วนเท่านั้น เราหวังว่าจะได้ดูผลงานที่คุณสร้างสรรค์

ตรวจสอบข้อกำหนดด้านฮาร์ดแวร์

เครื่องมือตรวจหาภาษาและ Translator API ใช้งานได้ในเดสก์ท็อปใน Chrome เท่านั้น

Prompt API, Summarizer API, Writer API และ Rewriter API จะทำงานใน Chrome ได้เมื่อมีคุณสมบัติตรงตามเงื่อนไขต่อไปนี้

  • ระบบปฏิบัติการ: Windows 10 หรือ 11, macOS 13 ขึ้นไป (Ventura ขึ้นไป) หรือ Linux API ที่ Gemini Nano รองรับยังไม่รองรับ Chrome สำหรับ Android, iOS และ ChromeOS
  • พื้นที่เก็บข้อมูล: อย่างน้อย 22 GB ในวอลุ่มที่มีโปรไฟล์ Chrome
  • GPU: VRAM มากกว่า 4 GB เท่านั้น
  • เครือข่าย: อินเทอร์เน็ตแบบไม่จำกัดหรือการเชื่อมต่อแบบไม่จำกัดปริมาณ

ข้อกำหนดเหล่านี้มีไว้สำหรับคุณในกระบวนการพัฒนาและผู้ใช้ของคุณที่ใช้ฟีเจอร์ที่คุณสร้างขึ้น

ใช้ Prompt API

โปรดอ่านนโยบายการใช้งานที่ไม่อนุญาตสำหรับ Generative AI ของ Google ก่อนใช้ API นี้

ฟังก์ชัน 2 รายการที่คุณใช้ได้ใน LanguageModelเนมสเปซมีดังนี้

  • availability() เพื่อดูว่าโมเดลทำอะไรได้บ้างและพร้อมใช้งานหรือไม่
  • create() เพื่อเริ่มเซสชันโมเดลภาษา

การดาวน์โหลดโมเดล

Prompt API ใช้โมเดล Gemini Nano ใน Chrome แม้ว่า API จะฝังอยู่ใน Chrome แต่ระบบจะดาวน์โหลดโมเดลแยกต่างหากเมื่อต้นทางใช้ API เป็นครั้งแรก

หากต้องการตรวจสอบว่าโมเดลพร้อมใช้งานหรือไม่ ให้เรียกใช้ฟังก์ชันแบบแอซิงโครนัส LanguageModel.availability() ซึ่งควรแสดงผลลัพธ์อย่างใดอย่างหนึ่งต่อไปนี้

  • "unavailable" หมายความว่าการติดตั้งใช้งานไม่รองรับตัวเลือกที่ขอ หรือไม่รองรับการแจ้งโมเดลภาษาเลย
  • "downloadable" หมายความว่าการติดตั้งใช้งานรองรับตัวเลือกที่ขอ แต่จะต้องดาวน์โหลดบางอย่าง (เช่น โมเดลภาษาเองหรือการปรับแต่งอย่างละเอียด) ก่อนจึงจะสร้างเซสชันโดยใช้ตัวเลือกเหล่านั้นได้
  • "downloading" หมายความว่าการติดตั้งใช้งานรองรับตัวเลือกที่ขอ แต่จะต้องดำเนินการดาวน์โหลดที่ดำเนินอยู่ให้เสร็จสิ้นก่อนจึงจะสร้างเซสชันโดยใช้ตัวเลือกเหล่านั้นได้
  • "available" หมายความว่าการติดตั้งใช้งานรองรับตัวเลือกที่ขอโดยไม่ต้องดาวน์โหลดใหม่

หากต้องการเรียกให้ดาวน์โหลดโมเดลและสร้างเซสชันโมเดลภาษา ให้เรียกใช้ฟังก์ชัน LanguageModel.create() แบบแอซิงโครนัส หากคําตอบสําหรับ availability() คือ 'downloadable' แนวทางปฏิบัติแนะนําคือให้ฟังความคืบหน้าของการดาวน์โหลด วิธีนี้จะช่วยให้คุณแจ้งผู้ใช้ได้ในกรณีที่การดาวน์โหลดใช้เวลานาน

const session = await LanguageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  },
});

ความสามารถของโมเดล

ฟังก์ชัน params() จะแจ้งพารามิเตอร์ของโมเดลภาษา ออบเจ็กต์มีฟิลด์ต่อไปนี้

await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}

สร้างเซสชัน

เมื่อ Prompt API ทำงานได้ คุณก็สร้างเซสชันด้วยฟังก์ชัน create() คุณสามารถแจ้งให้โมเดลทราบด้วยฟังก์ชัน prompt() หรือ promptStreaming()

ปรับแต่งเซสชัน

คุณสามารถปรับแต่งเซสชันแต่ละรายการด้วย topK และ temperature โดยใช้ออบเจ็กต์ตัวเลือก (ไม่บังคับ) ระบบจะแสดงค่าเริ่มต้นสำหรับพารามิเตอร์เหล่านี้จาก LanguageModel.params()

const params = await LanguageModel.params();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
  temperature: Math.max(params.defaultTemperature * 1.2, 2.0),
  topK: params.defaultTopK,
});

ออบเจ็กต์ตัวเลือกที่ไม่บังคับของฟังก์ชัน create() ยังใช้ฟิลด์ signal ด้วย ซึ่งช่วยให้คุณส่ง AbortSignal เพื่อทำลายเซสชันได้

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const session = await LanguageModel.create({
  signal: controller.signal,
})

พรอมต์เริ่มต้น

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

const session = await LanguageModel.create({
  initialPrompts: [
    { role: 'system', content: 'You are a helpful and friendly assistant.' },
    { role: 'user', content: 'What is the capital of Italy?' },
    { role: 'assistant', content: 'The capital of Italy is Rome.'},
    { role: 'user', content: 'What language is spoken there?' },
    { role: 'assistant', content: 'The official language of Italy is Italian. [...]' }
  ]
});

ขีดจำกัดเซสชัน

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

console.log(`${session.inputUsage}/${session.inputQuota}`);

การเก็บเซสชันไว้

โดยแต่ละเซสชันจะติดตามบริบทของการสนทนา ระบบจะพิจารณาการโต้ตอบก่อนหน้านี้สําหรับการโต้ตอบในอนาคตจนกว่ากรอบเวลาบริบทของเซสชันจะเต็ม

const session = await LanguageModel.create({
  initialPrompts: [{
    role: "system",
    content: "You are a friendly, helpful assistant specialized in clothing choices."
  }]
});

const result1 = await session.prompt(
  "What should I wear today? It is sunny. I am unsure between a t-shirt and a polo."
);
console.log(result1);

const result2 = await session.prompt(
  "That sounds great, but oh no, it is actually going to rain! New advice?"
);
console.log(result2);

โคลนเซสชัน

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

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const clonedSession = await session.clone({
  signal: controller.signal,
});

พรอมต์โมเดล

คุณสามารถแจ้งให้โมเดลทราบด้วยฟังก์ชัน prompt() หรือ promptStreaming()

เอาต์พุตที่ไม่ได้สตรีม

หากต้องการผลลัพธ์สั้นๆ คุณสามารถใช้ฟังก์ชัน prompt() ซึ่งจะแสดงผลลัพธ์เมื่อพร้อมใช้งาน

// Start by checking if it's possible to create a session based on the
// availability of the model, and the characteristics of the device.
const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();

const available = await LanguageModel.availability();

if (available !== 'unavailable') {
  const session = await LanguageModel.create();

  // Prompt the model and wait for the whole result to come back.
  const result = await session.prompt("Write me a poem!");
  console.log(result);
}

เอาต์พุตที่สตรีม

หากต้องการคำตอบที่นานขึ้น คุณควรใช้ฟังก์ชัน promptStreaming() ซึ่งช่วยให้คุณแสดงผลลัพธ์บางส่วนได้เมื่อข้อมูลจากโมเดลเข้ามา ฟังก์ชัน promptStreaming() จะแสดงผล ReadableStream

const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();

const available = await LanguageModel.availability();
if (available !== 'unavailable') {
  const session = await LanguageModel.create();

  // Prompt the model and stream the result:
  const stream = session.promptStreaming('Write me an extra-long poem!');
  for await (const chunk of stream) {
    console.log(chunk);
  }
}

หยุดแสดงพรอมต์

ทั้ง prompt() และ promptStreaming() ยอมรับพารามิเตอร์ที่ 2 ที่ไม่บังคับซึ่งมีช่อง signal ซึ่งช่วยให้คุณหยุดแสดงพรอมต์ได้

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const result = await session.prompt(
  'Write me a poem!',
  { signal: controller.signal }
);

สิ้นสุดเซสชัน

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

await session.prompt(
  "You are a friendly, helpful assistant specialized in clothing choices."
);

session.destroy();

// The promise is rejected with an error explaining that
// the session is destroyed.
await session.prompt(
  "What should I wear today? It is sunny, and I am unsure between a
  t-shirt and a polo."
);

ความสามารถในสื่อหลากรูปแบบ

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

ความสามารถเหล่านี้ช่วยให้คุณทําสิ่งต่อไปนี้ได้

  • อนุญาตให้ผู้ใช้ถอดเสียงข้อความเสียงที่ส่งในแอปพลิเคชันแชท
  • อธิบายรูปภาพที่อัปโหลดไปยังเว็บไซต์เพื่อใช้ในคำบรรยายหรือข้อความแสดงแทน
const session = await LanguageModel.create({
  // { type: "text" } is not necessary to include explicitly, unless
  // you also want to include expected input languages for text.
  expectedInputs: [
    { type: "audio" },
    { type: "image" }
  ]
});

const referenceImage = await (await fetch("/reference-image.jpeg")).blob();
const userDrawnImage = document.querySelector("canvas");

const response1 = await session.prompt([{
  role: "user",
  content: [
    { type: "text", value: "Give a helpful artistic critique of how well the second image matches the first:" },
    { type: "image", value: referenceImage },
    { type: "image", value: userDrawnImage }
  ]
}]);

console.log(response1);

const audioBlob = await captureMicrophoneInput({ seconds: 10 });

const response2 = await session.prompt([{
  role: "user",
  content: [
    { type: "text", value: "My response to your critique:" },
    { type: "audio", value: audioBlob }
  ]
}]);

การสาธิตแบบหลายรูปแบบ

ดูการสาธิตพรอมต์เสียงของ Mediarecorder เพื่อใช้ Prompt API กับอินพุตเสียง และการสาธิตพรอมต์รูปภาพ Canvas เพื่อใช้ Prompt API กับอินพุตรูปภาพ

ความคิดเห็น

ความคิดเห็นของคุณจะช่วยเรากำหนดอนาคตของ API นี้และการปรับปรุง Gemini Nano การดำเนินการนี้อาจส่งผลให้เกิด API สำหรับงานเฉพาะ (เช่น API สำหรับการถอดเสียงหรือคำอธิบายรูปภาพ) เพื่อให้มั่นใจว่าเราตอบสนองความต้องการของคุณและความต้องการของผู้ใช้

เข้าร่วมและแชร์ความคิดเห็น

ความคิดเห็นของคุณจะส่งผลโดยตรงต่อวิธีที่เราสร้างและใช้งาน API เวอร์ชันอนาคตของ API นี้และ API AI ในตัวทั้งหมด