Prompt API

เผยแพร่: 11 พฤศจิกายน 2024, อัปเดตล่าสุด: 20 พฤษภาคม 2025

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

Prompt API ช่วยให้คุณส่งคำขอภาษาง่ายๆ ไปยัง Gemini Nano ในเบราว์เซอร์ได้

คุณใช้ Prompt API ในส่วนขยาย Chrome ได้หลายวิธี เช่น

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

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

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

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

API ตรวจหาภาษาและ API แปลภาษาใช้งานได้ใน Chrome บนเดสก์ท็อป API เหล่านี้ใช้ไม่ได้ในอุปกรณ์เคลื่อนที่ Prompt API, Summarizer API, Writer API และ Rewriter API จะทำงานใน Chrome เมื่อเป็นไปตามเงื่อนไขต่อไปนี้

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

ขนาดที่แน่นอนของ Gemini Nano อาจแตกต่างกันเล็กน้อย หากต้องการดูขนาดปัจจุบัน ให้ไปที่ chrome://on-device-internals แล้วไปที่สถานะโมเดล เปิดเส้นทางไฟล์ที่ระบุเพื่อกำหนดขนาดโมเดล

ใช้ Prompt API ในส่วนขยาย

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

คุณจะใช้ฟังก์ชันส่วนขยาย 2 รายการต่อไปนี้ได้ใน LanguageModelเนมสเปซ

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

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

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

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

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

หากต้องการทริกเกอร์การดาวน์โหลดโมเดลและสร้างเซสชันโมเดลภาษา ให้เรียกใช้ฟังก์ชัน LanguageModel.availability() แบบอะซิงโครนัส หากการตอบกลับ 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 โดยใช้ออบเจ็กต์ options ที่ไม่บังคับ ค่าเริ่มต้นของพารามิเตอร์เหล่านี้จะแสดงจาก 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() ฟังก์ชันนี้ใช้ออบเจ็กต์ options ที่ไม่บังคับซึ่งมีฟิลด์ 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 ให้ติดตั้งส่วนขยายเดโม ซอร์สโค้ดของส่วนขยาย พร้อมให้บริการบน GitHub

อินเทอร์เฟซเดโมสำหรับ Prompt API

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

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