Prompt API

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

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

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

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

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

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

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

API ตัวตรวจหาภาษาและ 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 ในส่วนขยาย

ก่อนใช้ 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 ในตัวทั้งหมดในอนาคต