เผยแพร่: 11 พฤศจิกายน 2024
วิดีโออธิบาย | เว็บ | ส่วนขยาย | สถานะ Chrome | ความตั้งใจ |
---|---|---|---|---|
GitHub | ไม่เกี่ยวข้อง | ไม่เกี่ยวข้อง |
Prompt API ช่วยให้คุณส่งคําขอที่เป็นภาษาธรรมชาติไปยัง Gemini Nano ในเบราว์เซอร์ได้
Prompt API พร้อมใช้งานในช่วงทดลองใช้จากต้นทางสําหรับส่วนขยาย Chrome นักพัฒนาเว็บสามารถใช้ Exploratory API ซึ่งมีไว้สำหรับการสร้างต้นแบบและการค้นพบ Use Case เพิ่มเติมได้โดยเข้าร่วมโปรแกรมเวอร์ชันตัวอย่างก่อนเปิดตัว
คุณใช้ Prompt API ในส่วนขยาย Chrome ได้หลายวิธี เช่น
- กิจกรรมในปฏิทินทันที พัฒนาส่วนขยาย Chrome ที่ดึงข้อมูลรายละเอียดกิจกรรมจากหน้าเว็บโดยอัตโนมัติ เพื่อให้ผู้ใช้สร้างรายการในปฏิทินได้ในไม่กี่ขั้นตอน
- การดึงข้อมูลรายชื่อติดต่อที่ราบรื่น สร้างชิ้นงานที่ดึงข้อมูลติดต่อจากเว็บไซต์ ซึ่งช่วยให้ผู้ใช้ติดต่อธุรกิจหรือเพิ่มรายละเอียดลงในรายชื่อติดต่อได้ง่ายขึ้น
- การกรองเนื้อหาแบบไดนามิก สร้างส่วนขยาย Chrome ที่วิเคราะห์บทความข่าวและเบลอหรือซ่อนเนื้อหาโดยอัตโนมัติตามหัวข้อที่ผู้ใช้กำหนด
ทั้งหมดนี้เป็นเพียงตัวอย่างการใช้งานบางส่วนเท่านั้น เราหวังว่าจะได้ดูผลงานของคุณ
เริ่มต้นใช้งาน
หากต้องการใช้ Prompt API ในส่วนขยาย Chrome ให้เพิ่มสิทธิ์ "aiLanguageModelOriginTrial"
ลงใน manifest.json
ของส่วนขยาย พร้อมกับสิทธิ์อื่นๆ ที่จําเป็นต่อส่วนขยาย
{
"manifest_version": 3,
"name": "YOUR_EXTENSION_NAME",
"key": "YOUR_EXTENSION_KEY",
"permissions": ["aiLanguageModelOriginTrial"]
}
ซึ่งจะมอบสิทธิ์ชั่วคราวที่ใช้งานได้เฉพาะในช่วงทดลองใช้ต้นทางเท่านั้น หาก API เริ่มทํางาน คุณต้องอัปเดตและอัปโหลดส่วนขยายอีกครั้ง โดยนําสิทธิ์ที่หมดอายุออกแล้วแทนที่ด้วยสิทธิ์สุดท้าย
นอกจากนี้ เราขอแนะนําให้คุณใช้รหัสส่วนขยายที่สอดคล้องกันโดยเพิ่มพร็อพเพอร์ตี้ key
ลงในไฟล์ Manifest
เข้าร่วมการทดลองใช้จากต้นทาง
วิธีเพิ่ม Prompt API ลงในส่วนขยาย Chrome
- เข้าร่วมช่วงทดลองใช้ต้นทาง Prompt API ซึ่งทำงานใน Chrome เวอร์ชัน 131 ถึง 136
ใช้ URL
chrome-extension://YOUR_EXTENSION_ID
ของส่วนขยายเป็นต้นทางของเว็บ เช่นchrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk
อัปเดตไฟล์ Manifest เพื่อเพิ่มโทเค็นช่วงทดลองใช้เป็นอาร์เรย์
{ "manifest_version": 3, "name": "YOUR_EXTENSION_NAME", "key": "YOUR_EXTENSION_KEY", "permissions": ["aiLanguageModelOriginTrial"], "trial_tokens": ["GENERATED_TOKEN"], }
ใช้ Prompt API ในส่วนขยาย
เมื่อขอสิทธิ์ใช้ Prompt API แล้ว คุณจะสร้างส่วนขยายได้ ฟังก์ชันส่วนขยายที่คุณใช้ได้ในเนมสเปซ chrome.aiOriginTrial.languageModel
มี 2 รายการดังนี้
capabilities()
เพื่อดูว่าโมเดลทำอะไรได้บ้างและพร้อมใช้งานหรือไม่create()
เพื่อเริ่มเซสชันโมเดลภาษา
การดาวน์โหลดโมเดล
Prompt API ใช้โมเดล Gemini Nano ใน Chrome แม้ว่า API จะฝังอยู่ใน Chrome แต่ระบบจะดาวน์โหลดโมเดลแยกต่างหากเมื่อส่วนขยายใช้ API เป็นครั้งแรก
หากต้องการตรวจสอบว่าโมเดลพร้อมใช้งานหรือไม่ ให้เรียกใช้ฟังก์ชันแบบแอซิงโครนัส chrome.aiOriginTrial.languageModel.capabilities()
โดยจะแสดงผลออบเจ็กต์ AILanguageModelCapabilities
ที่มีฟิลด์ available
ซึ่งมีค่าที่เป็นไปได้ 3 ค่า ดังนี้
'no'
: เบราว์เซอร์ปัจจุบันรองรับ Prompt API แต่ใช้งานไม่ได้ในขณะนี้ ซึ่งอาจเกิดจากสาเหตุหลายประการ เช่น พื้นที่ในดิสก์ไม่เพียงพอที่จะดาวน์โหลดโมเดล'readily'
: เบราว์เซอร์ปัจจุบันรองรับ Prompt API และพร้อมใช้งานทันที'after-download'
: เบราว์เซอร์ปัจจุบันรองรับ Prompt API แต่ต้องดาวน์โหลดโมเดลก่อน
หากต้องการเรียกให้ดาวน์โหลดโมเดลและสร้างเซสชันโมเดลภาษา ให้เรียกใช้ฟังก์ชัน chrome.aiOriginTrial.languageModel.create()
แบบแอซิงโครนัส หากคําตอบสําหรับ capabilities()
คือ 'after-download'
แนวทางปฏิบัติแนะนําคือให้ฟังความคืบหน้าของการดาวน์โหลด วิธีนี้จะช่วยให้คุณแจ้งผู้ใช้ได้ในกรณีที่การดาวน์โหลดใช้เวลานาน
const session = await chrome.aiOriginTrial.languageModel.create({
monitor(m) {
m.addEventListener("downloadprogress", (e) => {
console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
});
},
});
ความสามารถของโมเดล
ฟังก์ชัน capabilities()
จะแจ้งให้คุณทราบถึงความสามารถของโมเดลภาษาด้วย นอกจาก available
แล้ว ออบเจ็กต์ AILanguageModelCapabilities
ที่ได้จะมีฟิลด์ต่อไปนี้ด้วย
defaultTopK
: ค่าเริ่มต้นของรายการยอดนิยม K อันดับแรก (ค่าเริ่มต้น:3
)maxTopK
: ค่า top-K สูงสุด (8
)defaultTemperature
: อุณหภูมิเริ่มต้น (1.0
) ค่าอุณหภูมิต้องอยู่ระหว่าง0.0
ถึง2.0
await chrome.aiOriginTrial.languageModel.capabilities();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}
สร้างเซสชัน
เมื่อตรวจสอบแล้วว่า Prompt API ทำงานได้ ให้สร้างเซสชันด้วยฟังก์ชัน
create()
ซึ่งจะช่วยให้คุณพรอมต์โมเดลด้วยฟังก์ชัน
prompt()
หรือ promptStreaming()
ได้
ปรับแต่งเซสชัน
คุณสามารถปรับแต่งเซสชันแต่ละรายการด้วย topK
และ temperature
โดยใช้ออบเจ็กต์ตัวเลือก (ไม่บังคับ) ระบบจะแสดงค่าเริ่มต้นสำหรับพารามิเตอร์เหล่านี้จาก
chrome.aiOriginTrial.languageModel.capabilities()
const capabilities = await chrome.aiOriginTrial.languageModel.capabilities();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await chrome.aiOriginTrial.languageModel.create({
temperature: Math.max(capabilities.defaultTemperature * 1.2, 2.0),
topK: capabilities.defaultTopK,
});
ออบเจ็กต์ตัวเลือกที่ไม่บังคับของฟังก์ชัน create()
ยังใช้ฟิลด์ signal
ด้วย ซึ่งช่วยให้คุณส่ง AbortSignal
เพื่อทำลายเซสชันได้
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await chrome.aiOriginTrial.languageModel.create({
signal: controller.signal,
})
พรอมต์ของระบบ
พรอมต์ของระบบช่วยให้คุณระบุบริบทบางอย่างให้กับโมเดลภาษาได้
const session = await chrome.aiOriginTrial.languageModel.create({
systemPrompt: 'You are a helpful and friendly assistant.',
});
await session.prompt('What is the capital of Italy?');
// 'The capital of Italy is Rome.'
พรอมต์เริ่มต้น
พรอมต์เริ่มต้นช่วยให้คุณระบุบริบทเกี่ยวกับการโต้ตอบก่อนหน้านี้ให้กับโมเดลภาษาได้ เช่น เพื่ออนุญาตให้ผู้ใช้กลับมาใช้เซสชันที่เก็บไว้ต่อหลังจากรีสตาร์ทเบราว์เซอร์
const session = await chrome.aiOriginTrial.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.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);
การเก็บเซสชันไว้
โดยแต่ละเซสชันจะติดตามบริบทของการสนทนา ระบบจะพิจารณาการโต้ตอบก่อนหน้านี้สําหรับการโต้ตอบในอนาคตจนกว่ากรอบเวลาบริบทของเซสชันจะเต็ม
const session = await chrome.aiOriginTrial.languageModel.create({
systemPrompt: '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 {available, defaultTemperature, defaultTopK, maxTopK } =
await chrome.aiOriginTrial.languageModel.capabilities();
if (available !== 'no') {
const session = await chrome.aiOriginTrial.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()
ซึ่งช่วยให้คุณแสดงผลลัพธ์บางส่วนได้เมื่อข้อมูลจากโมเดลเข้ามา
const {available, defaultTemperature, defaultTopK, maxTopK } =
await chrome.aiOriginTrial.languageModel.capabilities();
if (available !== 'no') {
const session = await chrome.aiOriginTrial.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);
}
}
promptStreaming()
จะแสดงผล ReadableStream
ที่มีกลุ่มคำซ้อนทับกัน เช่น "Hello,"
, "Hello world,"
, "Hello world I am,"
,
"Hello world I am an AI."
ซึ่งไม่ใช่ลักษณะการทำงานที่ต้องการ เราตั้งใจที่จะปรับให้สอดคล้องกับ API สตรีมมิงอื่นๆ ในแพลตฟอร์ม โดยที่แต่ละกลุ่มจะเป็นชิ้นส่วนที่สอดคล้องกันของสตรีมยาวรายการเดียว ซึ่งหมายความว่าเอาต์พุตจะเป็นลําดับ เช่น "Hello"
, " world"
, " I am"
, " an AI"
ในระหว่างนี้ คุณสามารถติดตั้งใช้งานสิ่งต่อไปนี้เพื่อให้ได้ลักษณะการทำงานที่ต้องการ ซึ่งใช้ได้กับทั้งลักษณะการทํางานแบบมาตรฐานและแบบไม่มาตรฐาน
let result = '';
let previousChunk = '';
for await (const chunk of stream) {
const newChunk = chunk.startsWith(previousChunk)
? chunk.slice(previousChunk.length) : chunk;
console.log(newChunk);
result += newChunk;
previousChunk = chunk;
}
console.log(result);
หยุดแสดงพรอมต์
ทั้ง 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 ในส่วนขยาย Chrome ได้แล้วโดยเข้าร่วมช่วงทดลองใช้จากต้นทางและแชร์ความคิดเห็น ความคิดเห็นของคุณจะส่งผลโดยตรงต่อวิธีที่เราสร้างและใช้งาน API เวอร์ชันอนาคตของ API นี้และ API AI ในตัวทั้งหมด
- หากต้องการแสดงความคิดเห็นเกี่ยวกับการใช้งาน Chrome ให้ส่งรายงานข้อบกพร่องหรือคำขอฟีเจอร์
- แชร์ความคิดเห็นเกี่ยวกับรูปแบบ API โดยแสดงความคิดเห็นในปัญหาที่มีอยู่ หรือเปิดปัญหาใหม่ในที่เก็บ GitHub ของ Prompt API
- ดาวน์โหลดส่วนขยายตัวอย่าง Prompt API ใน GitHub
- มีส่วนร่วมในมาตรฐานโดยเข้าร่วมกลุ่มชุมชน Web Incubator