เผยแพร่: 20 พฤษภาคม 2025
คำอธิบาย | เว็บ | ส่วนขยาย | สถานะของ Chrome | ความตั้งใจ |
---|---|---|---|---|
GitHub | ดู | ความตั้งใจที่จะทดลอง |
Prompt API ช่วยให้คุณส่งคำขอภาษาง่ายๆ ไปยัง Gemini Nano ในเบราว์เซอร์ได้
คุณใช้ Prompt API ได้หลายวิธี ในเว็บแอปพลิเคชัน หรือเว็บไซต์ คุณจะสร้างสิ่งต่อไปนี้ได้
- การค้นหาที่ทำงานด้วยระบบ AI: ตอบคำถามโดยอิงตามเนื้อหาของหน้าเว็บ
- ฟีดข่าวที่ปรับเปลี่ยนในแบบของคุณ: สร้างฟีดที่จัดหมวดหมู่บทความแบบไดนามิก ด้วยหมวดหมู่ และอนุญาตให้ผู้ใช้กรองเนื้อหานั้น
นี่เป็นเพียงตัวอย่างบางส่วน และเราตื่นเต้นที่จะได้เห็นผลงานของคุณ
ตรวจสอบข้อกำหนดเกี่ยวกับฮาร์ดแวร์
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.create()
แบบอะซิงโครนัส หากการตอบกลับ 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 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 กับอินพุตรูปภาพ
กลยุทธ์ด้านประสิทธิภาพ
เรายังคงพัฒนา Prompt API สำหรับเว็บ ในระหว่างที่เราสร้าง API นี้ โปรดดูแนวทางปฏิบัติแนะนำเกี่ยวกับการจัดการเซสชัน เพื่อประสิทธิภาพสูงสุด
ความคิดเห็น
ความคิดเห็นของคุณช่วยกำหนดอนาคตของ API นี้และ การปรับปรุง Gemini Nano ซึ่งอาจส่งผลให้เกิด API งานเฉพาะ (เช่น API สำหรับการถอดเสียงหรือคำอธิบายรูปภาพ) เพื่อให้เราตอบสนองความต้องการของคุณ และความต้องการของผู้ใช้ได้
เข้าร่วมและแชร์ความคิดเห็น
ข้อมูลของคุณจะส่งผลโดยตรงต่อวิธีที่เราสร้างและใช้ API นี้และ API ของ AI ในตัวทั้งหมดในเวอร์ชันอนาคต
- เข้าร่วมโปรแกรมทดลองใช้เวอร์ชันแรก
- หากต้องการส่งความคิดเห็นเกี่ยวกับการใช้งาน Chrome ให้ยื่นรายงานข้อบกพร่อง หรือคำขอฟีเจอร์
- แชร์ความคิดเห็นเกี่ยวกับรูปแบบ API โดยแสดงความคิดเห็นในปัญหาที่มีอยู่หรือ เปิดปัญหาใหม่ใน ที่เก็บ GitHub ของ Prompt API
- เข้าร่วมความพยายามด้านมาตรฐานโดยเข้าร่วมกลุ่มชุมชน Web Incubator