تاريخ النشر: 20 مايو 2025
شرح | الويب | الإضافات | حالة Chrome | النيّة بالشراء |
---|---|---|---|---|
Github | العرض | النية في إجراء تجربة |
تساعدك Writer API في إنشاء محتوى جديد يتوافق مع مهمة كتابة محدّدة. تشكّل Writer API وRewriter API جزءًا من اقتراح واجهات برمجة التطبيقات للمساعدة في الكتابة.
يمكن أن تساعدك واجهات برمجة التطبيقات الخاصة بالشركاء هذه في تحسين المحتوى الذي ينشئه المستخدمون.
حالات الاستخدام
كتابة محتوى جديد استنادًا إلى فكرتك الأولية والسياق الاختياري ويمكن استخدامها في ما يلي:
- مساعدة المستخدمين في كتابة أي نوع من المحتوى، مثل المراجعات أو مشاركات المدونة أو الرسائل الإلكترونية
- مساعدة المستخدمين في كتابة طلبات دعم أفضل
- اكتب مسودة مقدّمة لسلسلة من عيّنات العمل، وذلك لتسليط الضوء بشكل أفضل على مهارات معيّنة.
هل حالة الاستخدام غير متوفّرة؟ يمكنك الانضمام إلى برنامج الاستخدام المبكر لمشاركة ملاحظاتك.
البدء
الانضمام إلى مرحلة التجربة والتقييم لواجهة Writer API، والتي ستتوفّر في الإصدارات من 137 إلى 142 من Chrome
مراجعة متطلبات الأجهزة
في ما يلي المتطلبات التي يجب استيفاؤها من قِبل المطوّرين والمستخدمين الذين يشغّلون الميزات باستخدام واجهات برمجة التطبيقات هذه في Chrome. قد تتطلّب المتصفّحات الأخرى متطلبات تشغيل مختلفة.
تعمل واجهتا برمجة التطبيقات Language Detector وTranslator في متصفّح Chrome على أجهزة الكمبيوتر المكتبي. ولا تعمل واجهات برمجة التطبيقات هذه على الأجهزة الجوّالة. تعمل واجهات برمجة التطبيقات Prompt API وSummarizer API وWriter API وRewriter API في Chrome عند استيفاء الشروط التالية:
- نظام التشغيل: Windows 10 أو 11 أو macOS 13 (Ventura والإصدارات الأحدث) أو Linux لا تتوافق واجهات برمجة التطبيقات التي تستخدم Gemini Nano مع متصفّح Chrome على أجهزة Android وiOS وChromeOS حتى الآن.
- مساحة التخزين: يجب أن تتوفّر مساحة تخزين لا تقلّ عن 22 غيغابايت على وحدة التخزين التي تحتوي على ملفك الشخصي على Chrome.
- وحدة معالجة الرسومات (GPU): يجب أن تكون ذاكرة الوصول العشوائي للفيديو (VRAM) أكبر من 4 غيغابايت.
- الشبكة: بيانات غير محدودة أو اتصال غير محدود.
قد يختلف حجم Gemini Nano قليلاً. للعثور على الحجم الحالي، انتقِل إلى
chrome://on-device-internals
ثم إلى حالة النموذج.
افتح مسار الملف المُدرَج لتحديد حجم النموذج.
الاشتراك في التجربة الأصلية
تتوفّر واجهة Writer API في مرحلة تجربة مشتركة مع واجهة Rewriter API. لبدء استخدام واجهات برمجة التطبيقات هذه، اتّبِع الخطوات التالية:
- الموافقة على سياسة الاستخدام المحظور للذكاء الاصطناعي التوليدي من Google
- انتقِل إلى مرحلة التجربة والتقييم في Writer API.
- انقر على تسجيل واملأ النموذج. في حقل "أصل الويب"، أدخِل الأصل أو معرّف الإضافة،
chrome-extension://YOUR_EXTENSION_ID
. - لإرسال الطلب، انقر على تسجيل.
- انسخ الرمز المميّز المقدَّم وأضِفه إلى كل صفحة ويب مشارِكة على مصدرك أو أدرِجه في بيان Extension.
- ابدأ باستخدام واجهتَي Writer وRewriter API.
مزيد من المعلومات حول كيفية بدء استخدام التجارب الأصلية
إضافة دعم إلى localhost
للوصول إلى واجهتَي برمجة التطبيقات Writer وRewriter على localhost أثناء مرحلة التجربة والتقييم، عليك تحديث متصفّح Chrome إلى أحدث إصدار. ثم اتبع الخطوات التالية:
- الانتقال إلى
chrome://flags/#writer-api-for-gemini-nano
- اختَر مفعّل.
- انقر على إعادة التشغيل أو أعِد تشغيل Chrome.
استخدام Writer API
أولاً، شغِّل عملية رصد الميزات لمعرفة ما إذا كان المتصفّح يتيح استخدام واجهات برمجة التطبيقات هذه.
if ('Writer' in self) {
// The Writer API is supported.
}
تم دمج Writer API وجميع واجهات برمجة تطبيقات الذكاء الاصطناعي المضمّنة الأخرى في المتصفّح. يتم تنزيل Gemini Nano بشكل منفصل في المرة الأولى التي يستخدم فيها أي موقع إلكتروني إحدى واجهات برمجة التطبيقات المدمجة المستندة إلى الذكاء الاصطناعي. من الناحية العملية، إذا سبق للمستخدم التفاعل مع إحدى واجهات برمجة التطبيقات المضمّنة، يكون قد نزّل النموذج إلى المتصفّح.
لتحديد ما إذا كان النموذج جاهزًا للاستخدام، استدعِ الدالة غير المتزامنة Writer.availability()
. تعرض هذه السمة سلسلة يمكن أن تتضمّن أربع قيم محتملة:
-
unavailable
: يتوافق المتصفّح مع Writer API، ولكن لا يمكن استخدامه في الوقت الحالي. قد يرجع ذلك لعدة أسباب، مثل عدم توفّر مساحة كافية على القرص لتنزيل النموذج. available
: يعني أنّ المتصفّح يتيح استخدام Writer API ويمكن استخدامه على الفور.downloadable
: يتوافق المتصفّح مع Writer API، ولكن يجب تنزيل النموذج أولاً.-
downloading
: يعني ذلك أنّ المتصفّح متوافق مع Writer API، ويتم حاليًا تنزيل النموذج.
لتفعيل تنزيل النموذج وبدء استخدام أداة الكتابة، استدعِ الدالة Writer.create()
إذا كان الردّ على availability()
هو downloadable
، استمع إلى مستوى التقدّم في عملية التنزيل وأبلِغ المستخدم بذلك، لأنّ عملية التنزيل قد تستغرق بعض الوقت.
const writer = await Writer.create({
monitor(m) {
m.addEventListener("downloadprogress", e => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
}
});
وظائف واجهة برمجة التطبيقات
تتيح لك الدالة create()
إعداد كائن كاتب جديد. تتلقّى هذه الدالة كائن options
اختياريًا يتضمّن المَعلمات التالية:
tone
: يمكن أن يشير أسلوب الكتابة إلى نمط المحتوى أو شخصيته أو موقفه. يمكن ضبط القيمة علىformal
أوneutral
(القيمة التلقائية) أوcasual
.-
format
: تنسيق الإخراج، مع القيم المسموح بهاmarkdown
(تلقائي) وplain-text
-
length
: طول الناتج، مع القيم المسموح بهاshort
وmedium
(القيمة التلقائية) وlong
sharedContext
: عند كتابة نتائج متعددة، يمكن أن يساعد السياق المشترك النموذج في إنشاء محتوى يتوافق بشكل أفضل مع توقعاتك.
يوضّح المثال التالي كيفية بدء عنصر writer
:
const options = {
sharedContext: 'This is an email to acquaintances about an upcoming event.',
tone: 'casual',
format: 'plain-text',
length: 'medium',
};
const available = await Writer.availability();
let writer;
if (available === 'unavailable') {
// The Writer API isn't usable.
return;
}
if (available === 'available') {
// The Writer API can be used immediately .
writer = await Writer.create(options);
} else {
// The Writer can be used after the model is downloaded.
const writer = await Writer.create({
...options,
monitor(m) {
m.addEventListener("downloadprogress", e => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
}
});
}
بدء الكتابة
هناك طريقتان لإخراج الكتابة من النموذج: غير متواصلة ومتواصلة.
الناتج غير المتعلّق بالبث
في الكتابة غير المتدفقة، يعالج النموذج الإدخال ككل ثم ينتج الإخراج.
للحصول على نتيجة غير متدفقة، استدعِ الدالة غير المتزامنة write()
. يجب تضمين طلب للمحتوى الذي تريد كتابته. يمكنك إضافة
context
اختيارية لتقديم معلومات أساسية عن النموذج، ما قد يساعد النموذج في تلبية توقعاتك بشأن الناتج بشكل أفضل.
// Non-streaming
const writer = await Writer.create();
const result = await writer.write(
"An inquiry to my bank about how to enable wire transfers on my account.", {
context: "I'm a longstanding customer",
},
);
مخرجات الكتابة المتواصلة
توفّر ميزة البث نتائج في الوقت الفعلي. يتم تعديل الناتج باستمرار عند إضافة المدخلات وتعديلها.
للحصول على كاتب بث مباشر، استدعِ الدالة writeStreaming()
وكرِّر
العملية على مقاطع النص المتاحة في البث. يمكنك إضافة
context
اختيارية لتقديم معلومات أساسية عن النموذج، ما قد يساعد النموذج في تلبية توقعاتك بشأن الناتج بشكل أفضل.
// Streaming
const writer = await Writer.create();
const stream = writer.writeStreaming(
"An inquiry to my bank about how to enable wire transfers on my account.", {
context: "I'm a longstanding customer",
},
);
for await (const chunk of stream) {
composeTextbox.append(chunk);
}
مشاركة سياق لمهام متعددة
يمكنك استخدام writer
لإنشاء عدة أجزاء من المحتوى. في هذه الحالة، من المفيد إضافة sharedContext
. على سبيل المثال، قد تريد مساعدة المراجعين في تقديم ملاحظات أفضل في التعليقات.
// Shared context and per writing task context
const writer = await Writer.create({
sharedContext: "This is for publishing on [popular website name], a business and employment-focused social media platform."
});
const stream = writer.writeStreaming(
"Write a blog post about how I love all this work on gen AI at Google!" +
"Mention that there's so much to learn and so many new things I can do!",
{ context: " The request comes from someone working at a startup providing an e-commerce CMS solution."}
);
for await (const chunk of stream) {
composeTextbox.append(chunk);
}
إعادة استخدام كاتب
يمكنك استخدام الكاتب نفسه لإنشاء عدة مقالات.
// Reuse a writer
const writer = await Writer.create({ tone: "formal" });
const reviews = await Promise.all(
Array.from(
document.querySelectorAll("#reviews > .review"),
(reviewEl) => writer.write(reviewEl.textContent)
),
);
إيقاف الكاتب
لإنهاء عملية الكتابة، عليك إيقاف وحدة التحكّم وإلغاء الكاتب.
// Aborting a writer
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const writer = await Writer.create({ signal: controller.signal });
await writer.write(reviewEl.textContent, { signal: controller.signal });
// Destroying a writer
writer.destroy();
عرض توضيحي
التفاعل مع الملاحظات ومشاركتها
نحن نناقش حاليًا Writer وRewriter API، وقد يتم إجراء تغييرات عليهما في المستقبل. إذا جرّبت واجهة برمجة التطبيقات هذه ولديك ملاحظات، يسرّنا معرفتها.
- قراءة الشرح وطرح الأسئلة والمشاركة في المناقشة
- راجِع عملية التنفيذ في Chrome على حالة Chrome.
- الانضمام إلى برنامج المعاينة المبكرة للاطّلاع على واجهات برمجة التطبيقات الجديدة قبل إطلاقها والاستفادة من قائمتنا البريدية
- إذا كانت لديك ملاحظات حول طريقة تنفيذ Chrome لهذه الميزة، يُرجى إرسال تقرير عن خلل Chromium.
يمكنك استكشاف جميع واجهات برمجة التطبيقات المدمجة المستندة إلى الذكاء الاصطناعي التي تستخدم نماذج، بما في ذلك Gemini Nano ونماذج أخرى للمختصين، في المتصفح.