เผยแพร่: 11 พฤศจิกายน 2024, อัปเดตล่าสุด: 20 พฤษภาคม 2025
คำอธิบาย | เว็บ | ส่วนขยาย | สถานะของ Chrome | ความตั้งใจ |
---|---|---|---|---|
GitHub | ดู | ความตั้งใจที่จะทดลอง |
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()
จะแจ้งพารามิเตอร์ของโมเดลภาษาให้คุณทราบ
ออบเจ็กต์มีช่องต่อไปนี้
defaultTopK
: ค่าเริ่มต้นของ top-K (ค่าเริ่มต้น:3
)maxTopK
: ค่าสูงสุดของ K อันดับแรก (8
)defaultTemperature
: อุณหภูมิเริ่มต้น (1.0
) ค่าอุณหภูมิต้องอยู่ระหว่าง0.0
ถึง2.0
maxTemperature
: อุณหภูมิสูงสุด
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
เข้าร่วมและแชร์ความคิดเห็น
ข้อมูลของคุณจะส่งผลโดยตรงต่อวิธีที่เราสร้างและใช้ API นี้ รวมถึง API ของ AI ในตัวทั้งหมดในอนาคต
- หากต้องการส่งความคิดเห็นเกี่ยวกับการใช้งาน Chrome ให้ยื่นรายงานข้อบกพร่อง หรือคำขอฟีเจอร์
- แชร์ความคิดเห็นเกี่ยวกับรูปแบบ API โดยแสดงความคิดเห็นในปัญหาที่มีอยู่หรือ เปิดปัญหาใหม่ใน ที่เก็บ GitHub ของ Prompt API
- ดาวน์โหลดส่วนขยายตัวอย่าง Prompt API บน GitHub
- เข้าร่วมความพยายามด้านมาตรฐานโดยเข้าร่วมกลุ่มชุมชน Web Incubator