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