شحن كروم نموذج ذكاء اصطناعي مباشرة داخل المتصفح. Prompt API هو الواجهة البرمجية لـ JavaScript التي تستدعيها لاستخدامه. لا مفتاح API، لا رحلة ذهاب وعودة للشبكة، لا فاتورة لكل رمز. النموذج هو Gemini Nano، ويعمل على جهاز المستخدم، واعتبارًا من كروم 138، أصبح متاحًا بشكل عام للإضافات وخلف علامة لصفحات الويب. بالنسبة لمطوري API، هذا يغير ما هو معقول القيام به على العميل.
يغطي هذا الدليل ماهية Chrome Prompt API، وكيف يختلف عن Gemini API السحابي، ومتى يتناسب فعليًا مع سير عمل API، ورمز عملي لكل من الإضافات وصفحات الويب، والقيود التي ستصادفك أسرع مما تقر به الوثائق. نربطه بـ Apidog في النهاية بحيث يكون للمهام نفسها مسار احتياطي عندما لا يكون النموذج متاحًا.
ملخص سريع
- يكشف Chrome Prompt API عن Gemini Nano من خلال
LanguageModel، المتاح علىwindow.LanguageModelلصفحات الويب وchrome.languageModelللإضافات. - يعمل النموذج بالكامل على الجهاز. لا توجد مكالمة شبكة، لا مفتاح، لا تكلفة رمز.
- مستقر لإضافات Chrome في Chrome 138+. بالنسبة لصفحات الويب، يتم شحنه خلف علامة
chrome://flags/#prompt-api-for-gemini-nanoوتجربة أصل (Origin Trial) مسجلة. - أفضل استخدامات لمطوري API: تحليل المدخلات من جانب العميل، إصلاح شكل JSON، تلخيص استجابات API للواجهة الرسومية، وتوليد الثوابت (stub generation) أثناء التطوير.
- قم دائمًا بتوصيل مسار احتياطي سحابي. النموذج الموجود على الجهاز يفشل بشكل مفتوح؛ لا ينبغي أن يفعل الكود الخاص بك ذلك.
ما يكشفه Prompt API بالفعل
يعد Prompt API واحدًا من مجموعة صغيرة من واجهات برمجة تطبيقات "الذكاء الاصطناعي المدمج" التي بدأ Chrome في شحنها العام الماضي. الواجهات الأخرى أضيق نطاقًا: الملخص، الكاتب، إعادة الصياغة، المترجم، ومكتشف اللغة. Prompt API هو الواجهة العامة؛ أما الواجهات الأخرى فتغلفه بإعدادات افتراضية خاصة بالمهمة.

ثلاثة أساسيات مهمة:
LanguageModel.availability(): تعيدavailable(متاح)،downloadable(قابل للتنزيل)،downloading(جارٍ التنزيل)، أوunavailable(غير متاح). يبلغ حجم النموذج حوالي 2 غيغابايت ويتم تنزيله في الخلفية في المرة الأولى التي يطلبه فيها موقع.LanguageModel.create(options): يبدأ جلسة. تحمل الجلسة حالة الدور، وموجه النظام، وبعض مفاتيح أخذ العينات.session.prompt(text)وsession.promptStreaming(text): الطريقتان الفعليتان لاستدعاء النموذج.
الشكل قريب عمدًا من Gemini cloud SDK ولكنه مختصر. لا يوجد استدعاء للأدوات بعد، ولا يوجد إدخال للصور على القناة المستقرة (إنه في Origin Trial)، ونافذة السياق صغيرة (4 آلاف رمز إدخال، 1 آلاف رمز إخراج، مع توسع مرن إلى 8 آلاف رمز إجمالي).
أول استدعاء من صفحة ويب يبدو كالتالي:
if (!('LanguageModel' in window)) {
console.warn('Prompt API not available. Falling back to cloud.');
} else {
const status = await LanguageModel.availability();
if (status === 'unavailable') {
console.warn('Device does not support Gemini Nano.');
} else {
if (status !== 'available') {
// Triggers a background download. Show a UI.
await LanguageModel.create({ monitor(m) {
m.addEventListener('downloadprogress', e => {
console.log(`downloaded ${(e.loaded * 100).toFixed(0)}%`);
});
}});
}
const session = await LanguageModel.create({
systemPrompt: 'You answer in three concise bullets. JSON only.',
});
const reply = await session.prompt(
'Summarize this changelog in three bullets.\n\n' + changelog
);
console.log(reply);
}
}
كل جزء مهم معروض في المقتطف: اكتشاف الميزات، فحص التوفر، التنزيل الاختياري، إنشاء الجلسة، موجه النظام، استدعاء الموجه.
كيف يختلف عن Gemini API السحابي
نفس العائلة، نشر مختلف. تُشكل الاختلافات ما يمكنك وما لا يمكنك بناؤه عليه.
| خاصية | Chrome Prompt API | Gemini API (سحابي) |
|---|---|---|
| النموذج | Gemini Nano (على الجهاز) | gemini-3-flash, gemini-3-flash-preview, gemini-3-pro |
| التكلفة لكل استدعاء | صفر | فوترة حسب الرمز |
| وقت الاستجابة | 50 إلى 300 مللي ثانية للرمز الأول عادةً | 200 إلى 800 مللي ثانية للرمز الأول |
| الشبكة | غير مطلوب بعد تنزيل النموذج | مطلوب في كل استدعاء |
| الخصوصية | المدخلات لا تغادر الجهاز أبدًا | تُرسل إلى خوادم Google |
| نافذة السياق | 4K إدخال / 1K إخراج (8K مدمجة) | حتى مليون رمز |
| استدعاء الأدوات | لا (مخطط له) | نعم |
| متعدد الوسائط | إدخال الصور في Origin Trial | نعم |
| وضع JSON | أفضل جهد عبر موجه النظام | من الدرجة الأولى مع مخطط |
| التوفر | Chrome فقط، أجهزة قادرة فقط | أي عميل متصل بالشبكة |
النموذج الموجود على الجهاز أصغر بمقدار مرتبتين تقريبًا من gemini-3-flash. استخدمه للمهام القصيرة حيث كنت ستستخدم تعبيرًا عاديًا (regex) أو مصنف موجه مضبوط يدويًا. لا تستخدمه كبديل مباشر لـ Gemini السحابي.
أين يتناسب بالفعل في سير عمل مطور API
أربع حالات استخدام تغطي تكلفة التكامل. بخلاف هذه الحالات، لا يزال API السحابي هو الخيار الصحيح.
1. تحليل وإعادة تشكيل مدخلات المستخدم من جانب العميل. خذ استعلامًا حرًا وحوّله إلى عامل تصفية منظم لـ API الخاص بك. يكتب المستخدم "رسوم Stripe تزيد عن 100 دولار الأسبوع الماضي"؛ يحوله Prompt API إلى { "amount_gt": 100, "since": "2026-04-22", "provider": "stripe" } قبل استدعاء نقطة نهاية البحث الخاصة بك. يوفر رحلة ذهاب وعودة ويحمي خصوصية المستخدم.
2. تلخيص استجابات API للواجهة الرسومية. تستدعي API الخاص بك، وتستقبل 40 سجلًا، وتحتاج إلى ملخص من سطر واحد لعرضه في بطاقة. إرسال السجلات إلى نموذج سحابي يضيف وقت استجابة وتكلفة. يعمل Prompt API محليًا ويعيد النتائج في أقل من 200 مللي ثانية.
3. إصلاح شكل JSON. غالبًا ما تصل استجابات LLM مشوهة بشكل كافٍ لتكون مشكلة. قم بتشغيل تمريرة إصلاح لمرة واحدة عبر Gemini Nano: "هنا JSON غير صالح. أعد فقط JSON صالحًا بنفس الحقول." رخيص، سريع، بدون تكلفة.
4. التمويه المحلي (stubbing) أثناء التطوير. أثناء توصيل نقطة نهاية جديدة والخلفية نصف مبنية، قم بإنشاء هياكل استجابة معقولة أثناء التنفيذ. لن تكون الأشكال صحيحة للإنتاج، ولكنها تفتح المجال لعمل الواجهة الأمامية. اجمعها مع خادم Apidog الوهمي لإعداد هجين حيث تأتي نقاط النهاية الهامة من أمثلة محفوظة وتأتي نقاط النهاية الاستكشافية من Prompt API.
بناؤه كإضافة
تحصل الإضافات على Prompt API على القناة المستقرة من Chrome 138 فصاعدًا. تقوم بالإعلان عن الإذن وتستدعي chrome.languageModel.
manifest.json:
{
"manifest_version": 3,
"name": "Endpoint Summarizer",
"version": "1.0.0",
"permissions": ["languageModel"],
"action": { "default_popup": "popup.html" }
}
popup.js:
const status = await chrome.languageModel.availability();
if (status === 'unavailable') {
document.getElementById('out').textContent =
'Device does not support on-device AI.';
return;
}
const session = await chrome.languageModel.create({
systemPrompt: [
'You summarize HTTP responses in three short bullets.',
'Mention status, the most-changed field, and any error keys.',
].join(' '),
temperature: 0.3,
topK: 3,
});
document.getElementById('go').addEventListener('click', async () => {
const tab = await chrome.tabs.query({ active: true, currentWindow: true });
const [{ result }] = await chrome.scripting.executeScript({
target: { tabId: tab[0].id },
func: () => document.body.innerText.slice(0, 4000),
});
const stream = session.promptStreaming(result);
const out = document.getElementById('out');
out.textContent = '';
for await (const chunk of stream) {
out.textContent += chunk;
}
});
شيئان يستحقان الإشارة إليهما. temperature وtopK هما مفتاحا أخذ العينات الوحيدان اللذان يكشفهما API؛ لا يتم دعم topP على القناة المستقرة. التدفق هو مكرر غير متزامن (async iterator)، وليس أحداثًا مرسلة من الخادم (server-sent events)، لذا فإن نمط الاستهلاك هو for await بدلاً من قارئ SSE الذي كنت ستكتبه لـ Gemini السحابي.
بناؤه في صفحة ويب
تحتاج صفحات الويب إلى قيام المستخدم بقلب علامة أو أن يكون مصدرك مسجلاً في Origin Trial. يذهب رمز التجربة في علامة meta.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="origin-trial" content="YOUR_TRIAL_TOKEN_HERE" />
</head>
<body>
<textarea id="in" placeholder="Paste an API response..."></textarea>
<button id="go">Summarize</button>
<pre id="out"></pre>
<script type="module">
if (!('LanguageModel' in window)) {
document.getElementById('out').textContent =
'Prompt API not available in this browser.';
} else {
const session = await LanguageModel.create({
systemPrompt: 'Reply in JSON: { "summary": "...", "tags": [...] }',
temperature: 0.2,
});
document.getElementById('go').onclick = async () => {
const text = document.getElementById('in').value;
const reply = await session.prompt(text);
try {
document.getElementById('out').textContent =
JSON.stringify(JSON.parse(reply), null, 2);
} catch {
document.getElementById('out').textContent = reply;
}
};
}
</script>
</body>
</html>
إذا كنت ترغب في اختبار الصفحة بدون رمز Origin Trial، فافتح chrome://flags/#prompt-api-for-gemini-nano، اضبطه على "ممكّن"، وأعد تشغيل Chrome. كانت هذه العلامة مستقرة عبر الإصدارات الستة الأخيرة ولكن لا يُعد بأن تبقى للأبد؛ استخدم مسار Origin Trial إذا كنت تريد سلوكًا يمكن التنبؤ به.
القيود والمزالق التي لا تركز عليها الوثائق بما يكفي
ستة أشياء ستوقعك في المشاكل.
- السياق صغير. 4 آلاف رمز إدخال، 1 آلاف رمز إخراج. قم بالتقطيع بقوة. لا تلصق مستند JSON بحجم 50 ألف رمز وتتوقع إجابة مفيدة.
- دعم الأجهزة غير متساوٍ. يحتاج النموذج إلى حوالي 4 غيغابايت من ذاكرة VRAM أو الذاكرة الموحدة ويعمل فقط على Chrome 138+ على أنظمة Windows و macOS و Linux و ChromeOS الحديثة. لا يتم دعم Chrome للجوال وقت كتابة هذا النص.
- التحميل الأول بطيء. يحدث تنزيل الـ 2 غيغابايت في الخلفية ولكنه يحظر الجلسة الأولى. اعرض دائمًا واجهة مستخدم لتقدم التنزيل.
- لا يوجد استدعاء للأدوات. إذا كانت مهمتك تتطلب من النموذج استدعاء API الخاص بك، فافعل ذلك على العميل بنفسك؛ النموذج يقرر فقط ما سيستدعيه.
- انحراف موجه النظام. يتبع النموذج الموجود على الجهاز موجهات النظام بشكل أقل صرامة من المتغيرات السحابية. ثبّت التنسيق بأمثلة لمرة واحدة في موجه النظام.
- الأذونات مهمة. تحتاج الإضافات إلى
"languageModel"فيpermissions. إذا نسيتها، يعيد API بصمتunavailable.
جهز مسارًا احتياطيًا سحابيًا قبل النشر
يصل تطبيقك إلى المستخدمين الذين ليس لديهم النموذج. قم دائمًا بتجهيز مسار احتياطي. النمط قصير:
async function summarize(text) {
if ('LanguageModel' in window) {
const status = await LanguageModel.availability();
if (status === 'available') {
const session = await LanguageModel.create({
systemPrompt: 'Reply with one bullet summary, max 12 words.',
});
return session.prompt(text);
}
}
// Fallback: call your server, which calls cloud Gemini or your own model.
const r = await fetch('/api/summarize', {
method: 'POST', body: JSON.stringify({ text }),
});
return (await r.json()).summary;
}
الخصوصية وما يجب إخباره للمستخدمين
نقطة البيع لـ Prompt API هي أن المدخلات لا تغادر الجهاز أبدًا. هذا صحيح اليوم وهو القصد التصميمي الصريح لمبادرة الذكاء الاصطناعي المدمج. مؤهلان يستحقان المعرفة:
- تم تدريب النموذج نفسه بواسطة Google على بيانات Google؛ تشغيله محليًا لا يغير ذلك. يشحن Chrome الأوزان مع تحديث المتصفح.
- قد لا يزال Chrome يبلغ عن بيانات الاستخدام (telemetry) بموجب إعدادات بيانات استخدام Chrome العادية للمستخدم. محتوى الموجه ليس جزءًا من تلك البيانات.
بالنسبة لمعظم تطبيقات المستهلكين، هذه قصة خصوصية قوية يمكنك وضعها في واجهة المستخدم الخاصة بك دون مراجعة قانونية. بالنسبة لأعباء العمل الخاضعة للتنظيم (HIPAA، PCI)، تأكد مع المستشار القانوني قبل الاعتماد عليها.
متى تتخطى Prompt API
اختر Gemini API السحابي بدلاً من ذلك عندما:
- تحتاج مهمتك إلى أكثر من 4 آلاف رمز إدخال.
- تحتاج إلى استدعاء أدوات، أو إخراج منظم مع فرض مخطط، أو مدخلات متعددة الوسائط تتجاوز Origin Trial.
- تخدم المستخدمين على Safari أو Firefox أو Chrome للجوال. دعم المتصفح يقتصر على Chrome اليوم ولم تعلن Apple عن تاريخ شحن.
- جودة الإخراج تهم أكثر من وقت الاستجابة. Nano صغير؛ Pro ليس كذلك.
بالنسبة لزاوية الأوزان المفتوحة، يغطي كيفية تشغيل DeepSeek V4 محليًا تشغيل نموذج أكبر بكثير على جهاز مطور دون مغادرة الشبكة المحلية.
الأسئلة الشائعة
- هل Prompt API ضمن عملية معايير الويب الرسمية؟ إنه في مجموعة مجتمع W3C WebML كمقترح. تعامل معه على أنه خاص بـ Chrome حتى تشحنه المحركات الأخرى.
- هل يمكنني استخدامه من عامل خدمة (service worker)؟ في Chrome 138+، نعم للإضافات. تقيد صفحات الويب حاليًا استخدامه بسياق المستند. تحقق من الوثائق قبل النشر إلى عامل خدمة.
- ما هو حجم النموذج الذي أحصل عليه فعليًا؟ يقع Gemini Nano في نطاق 2-4 مليار معلمة، ومكمم ليتناسب. لم تلتزم Google بحجم محدد؛ توقع أن ينمو.
- هل يدعم استدعاء الوظائف؟ لا على القناة المستقرة. فرع Origin Trial لديه دعم تجريبي للأدوات؛ لا تعتمد عليه للإنتاج.
- كيف أختبره في CI مؤتمت؟ لا يمكنك تشغيل النموذج الموجود على الجهاز في Chromium بدون واجهة رسومية (headless Chromium) بعد. قم بإنشاء كائن وهمي (mock) لـ
LanguageModelالشامل في الاختبارات وقم بتشغيل مسار الاحتياطي السحابي في CI. - هل هو مجاني للاستخدام التجاري؟ نعم. لا توجد فوترة لكل استدعاء. تتحمل أنت تكلفة التخزين على جهاز المستخدم (حوالي 2 غيغابايت) ويتولى Chrome التحديثات.
بالنسبة للفرق التي تدير بالفعل سير عمل LLM من جانب السحابة جنبًا إلى جنب مع هذا، فإن منشور ما هو GPT-5.5 يغطي المقايضات من جانب السحابة بمزيد من العمق، ويتولى Apidog التمويه وتوصيل المسار الاحتياطي دون الحاجة إلى أداة اختبار منفصلة.
