1. قبل البدء
ما هي تطبيقات Google Chat المستندة إلى الذكاء الاصطناعي؟
تنفّذ تطبيقات Google Chat التي تستخدم الذكاء الاصطناعي ما يلي:
- يمكنك دمج خدماتك ومواردك في Google Chat، ما يتيح للمستخدمين الحصول على المعلومات واتّخاذ الإجراءات بدون مغادرة المحادثة.
- التكامل مع نماذج الذكاء الاصطناعي التوليدي لإنشاء البيانات والبحث عنها وتعديلها، مثل النصوص أو الصور
- توفير تجربة قائمة على الذكاء الاصطناعي من خلال تطبيق مفاهيم الذكاء الاصطناعي الحواري لإجراء تفاعلات أكثر عملية وطبيعية وتطوّرًا وفائدةً
لماذا يجب دمج تطبيقات Google Chat مع الذكاء الاصطناعي؟
تندرج حالات الاستخدام النموذجية ضمن الفئات التالية:
- إنشاء المحتوى وتعديله: إنشاء نصوص تسويقية أو مشاركات على وسائل التواصل الاجتماعي أو صور واقعية أو تأليف موسيقى أو المساعدة في إنشاء محتوى فيديو
- البحث عن البيانات وتحليلها: استخراج الإحصاءات الرئيسية من قاعدة معلومات غير منظَّمة أو تلخيص النصوص الطويلة أو تصنيف المحتوى أو ترجمة اللغات بدقة وسرعة محسّنتَين
- المحادثة يمكنك إجراء محادثات طبيعية وغنية بالمعلومات وفعّالة كما تفعل مع أي مساعد.
- أتمتة المهام: اتّخاذ إجراءات نيابةً عن المستخدم، مثل إنشاء حدث جديد في التقويم أو إرسال مستند أو إدارة تذكرة في نظام خارجي
إنّ إمكانية دمج هذه الإمكانات مباشرةً في واجهة Google Chat المألوفة هي فرصة كبيرة لأي شخص يريد تحسين تجربة المستخدمين وإنتاجيتهم.
المتطلبات الأساسية
- معرفة أساسية بـ Google Cloud وNode.js
- معرفة أساسية بتطبيقات Google Chat، بما في ذلك الرسائل والبطاقات والمصادقة وواجهات برمجة التطبيقات ونقاط نهاية HTTP
ما ستنشئه
في هذا الدرس العملي، ستنشئ ثمانية تطبيقات بسيطة على Google Chat تدمج مفاهيم الذكاء الاصطناعي الأساسية لتوضيح كيفية تطبيقها في التطبيقات الواقعية. تم إنشاء جميع هذه الإضافات على أنّها إضافات Google Workspace وتعتمد على بنية HTTP:
تعمل هذه الميزة على النحو التالي:
- يرسل أحد المستخدمين رسالة في Google Chat إلى تطبيق Chat، إما كرسالة مباشرة أو في مساحة Chat.
- يتم إرسال طلب HTTP إلى خادم الويب الذي يعمل كـ دالة Node.js Google Cloud Run تحتوي على منطق تطبيق Chat.
- يمكن دمج منطق تطبيق Chat اختياريًا مع خدمات Google Workspace (مثل "تقويم Google" و"جداول بيانات Google") أو خدمات Google الأخرى (مثل "خرائط Google" وYouTube وVertex AI) أو خدمات الويب الأخرى (مثل نظام إدارة المشاريع أو أداة إصدار التذاكر).
- يرسل خادم الويب استجابة HTTP إلى خدمة تطبيق Chat في Chat.
- يتم تسليم الرد إلى المستخدم.
- يمكن لتطبيق Chat اختياريًا استدعاء واجهة برمجة تطبيقات Chat لنشر الرسائل بشكل غير متزامن أو تنفيذ عمليات أخرى.
يحتوي كل دالة Node.js في Google Cloud Run لتطبيق Google Chat على نسخته الخاصة من ملفات المصدر التالية لاتّخاذ الإجراءات اللازمة في الخطوتَين 3 و6 أعلاه:
-
package.json
: ملف بيان مركزي يعمل كمخطط لمشروع Node.js. يُستخدم لتحديد البيانات الوصفية والتبعيات والنصوص البرمجية. -
env.js
: نص برمجي يضبط الثوابت المطلوبة للتنفيذ. يجب تعديله استنادًا إلى البيئة والإعدادات. index.js:
النص البرمجي الرئيسي الذي يعالج منطق أحداث التفاعل في Google Chat. يتم تنفيذ نوع حدث الرسالة فقط في هذا الدرس العملي، ولكنّه يشمل عادةً أنواعًا أخرى، مثل النقر على البطاقة وأمر الشرطة المائلة ومربّع الحوار في التطبيقات الواقعية.
تطبيق الطلبات
يعتمد هذا التطبيق على نموذج Gemini للتحدّث مع المستخدمين بلغاتهم الطبيعية باستخدام إجابات موجزة وواضحة.
تطبيق "تنسيق"
يعتمد هذا التطبيق على Prompt app
من خلال إضافة إمكانية عرض إجابات بتنسيق نصي منسّق متوافق مع تنسيق نص رسائل Google Chat المحدّد.
تطبيق Ground
يستند هذا التطبيق إلى Format app
من خلال إضافة إمكانية استخدام أداة "بحث Google" وعرض المصادر في رسائل الإجابات باستخدام البطاقات.
تطبيق MCP
يستند هذا التطبيق إلى Format app
من خلال إضافة دعم بروتوكول سياق نموذج "مساعدة المطوّرين" في Google Workspace (MCP).
تطبيق متعدد الجولات
يستند هذا التطبيق إلى Format app
من خلال إضافة ميزة الذاكرة الحوارية باستخدام قاعدة بيانات Google Cloud Firestore.
تطبيق أداة مخصّصة
يستند هذا التطبيق إلى Multi-turn app
من خلال إضافة دعم لأداة مخصّصة لاستدعاء الدوال تستدعي Google Workspace Calendar API استنادًا إلى المعلومات التي يقدّمها المستخدم.
تطبيق البث
يعتمد هذا التطبيق على نموذج Gemini لإنشاء قصص قصيرة استنادًا إلى مواضيع يقدّمها المستخدمون. يتم استخدام Google Chat API لإرسال النتائج والحالات في الرسائل أثناء إحراز تقدّم.
تطبيق متعدد الوسائط
يعتمد هذا التطبيق على أحد نماذج Gemini لتعديل الصور استنادًا إلى تعليمات نصية من المستخدمين. تُستخدَم واجهات برمجة التطبيقات في Google Chat لتنزيل الصور وتحميلها كمرفقات للرسائل.
ما ستتعلمه
- المفاهيم الأساسية للذكاء الاصطناعي ذات صلة بتطبيقات Google Chat وطريقة تطبيقها.
- للوصول إلى Vertex AI باستخدام حزمة تطوير البرامج (SDK) من Google Gen AI
- لاستخدام واجهات Google Workspace API لتطوير ميزات رائعة وفعّالة
- للاستفادة من Cloud Run في إنشاء تطبيقات Google Chat قابلة للتوسيع
المتطلبات
- إكمال التشغيل السريع إنشاء تطبيق HTTP في Google Chat باستخدام Node.js تستند هذه التجربة العملية إلى مشروع Google Cloud وتطبيق Google Chat ووظيفة Google Cloud Run الناتجة.
2. طريقة الإعداد
تهيئة الموارد والوصول إليها
في هذا القسم، يمكنك الوصول إلى الموارد التالية وضبطها من متصفّح الويب المفضّل لديك.
إعدادات Google Chat API
افتح وحدة تحكّم Google Cloud في علامة تبويب جديدة، ثم اتّبِع الخطوات التالية:
- اختَر مشروعك.
- في حقل البحث في Google Cloud، ابحث عن "Google Chat API"، ثم انقر على Google Chat API، ثم على إدارة، ثم على الإعدادات.
- اضبط اسم التطبيق والوصف على
Gen AI App
. - انقر على حفظ.
مساحة Google Chat
افتح Google Chat في علامة تبويب جديدة، ثم اتّبِع الخطوات التالية:
- إذا لم يسبق لك إجراء ذلك، افتح مساحة رسائل مباشرة باستخدام تطبيق Chat.
- اكتب
Hello
واضغط علىenter
، من المفترض أن يردّ تطبيق Chat باسمك وصورة الأفاتار.
خدمة دوال Google Cloud Run
افتح وحدة تحكّم Google Cloud في علامة تبويب جديدة، ثم اتّبِع الخطوات التالية:
- اختَر مشروعك.
- انقر على القائمة ☰ > Cloud Run > الخدمات.
- في قائمة الخدمات، انقر على addonchatapp، ثم افتح علامة التبويب المصدر.
تنزيل رمز المصدر والمراجع على الجهاز
- نزِّل مستودع GitHub هذا.
- في بيئة التطوير المحلية المفضّلة لديك، افتح الدليل
node/chat/gen-ai-apps
.
3- تطبيق سريع
يطلب هذا التطبيق من "Gemini في Vertex AI" إجراء محادثات مع المستخدمين بلغاتهم الطبيعية باستخدام إجابات موجزة وبسيطة. يعتمد التنفيذ على حزمة تطوير البرامج (SDK) من Google للذكاء الاصطناعي التوليدي لنظام التشغيل Node.js.
مراجعة المفاهيم
اللغة الطبيعية
أي لغة يتحدث بها البشر أو يكتبونها للتواصل اليومي، على عكس اللغات الاصطناعية أو المستندة إلى الكمبيوتر
دوال Cloud Run
تُعدّ وظائف Cloud Run خيارًا رائعًا لإنشاء أنظمة خلفية بدون خادم، ومعالجة البيانات في الوقت الفعلي، وإنشاء تطبيقات ذكية. لا توجد خوادم يجب توفيرها أو إدارتها أو تصحيحها أو تحديثها. وهي تتكيّف تلقائيًا حسب الحاجة، وتتوفّر بشكل كبير، وتتحمّل الأخطاء.
الطلبات
تشير صياغة الطلبات إلى أسلوب تصميم المعلومات المدخَلة (الطلبات) لتوجيه نموذج الذكاء الاصطناعي التوليدي من أجل تقديم النتائج المطلوبة. ويشمل عادةً صياغة الأسئلة بعناية أو تقديم سياق أو إعطاء تعليمات أو تقديم أمثلة للحصول على ردود محدّدة وذات صلة من النموذج.
Vertex AI
توفّر منصة Vertex AI كل ما تحتاج إليه لإنشاء الذكاء الاصطناعي التوليدي واستخدامه، بما في ذلك حلول الذكاء الاصطناعي، وميزات البحث والمحادثة، وأكثر من 130 نموذجًا أساسيًا، ومنصة موحّدة للذكاء الاصطناعي.
Gemini
Gemini هو نموذج لغوي كبير متعدد الوسائط من Google يمكن الوصول إليه من خلال Vertex AI. فهو يساعد الأشخاص على الاستفادة من إمكاناتهم إلى أقصى حد، ما يتيح لهم تعزيز خيالهم وإثارة فضولهم وتحسين إنتاجيتهم.
Google Gen AI SDK
تم تصميم حزمة تطوير البرامج (SDK) الخاصة بالذكاء الاصطناعي التوليدي من Google للمطوّرين لإنشاء تطبيقات تستند إلى Gemini، وهي توفّر واجهة موحّدة متوافقة مع كل من Gemini Developer API وVertex AI. تتضمّن هذه الحزمة مكتبات برامج في Python وGo وNode.js وJava.
خطوات المراجعة
مراجعة رمز المصدر
env.js
...
// Replace with your GCP project ID.
projectID: process.env.PROJECT_ID || 'your-google-cloud-project-id',
// Replace with your GCP project location.
location: process.env.LOCATION || 'your-google-cloud-project-location',
// Replace with the Gemini model to use.
model: process.env.MODEL || 'gemini-2.5-flash-lite',
...
index.js
// Import the Google Gen AI SDK.
import { GoogleGenAI } from '@google/genai';
...
// Use Vertex AI.
const genAI = new GoogleGenAI({vertexai: true, project: env.projectID, location: env.location});
http('gen-ai-app', async (req, res) => {
// Send a new Chat message with the generated answer
return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
text: await generateAnswer(req.body.chat.messagePayload.message.text)
}}}}});
});
async function generateAnswer(message) {
// The prompt is made of the user's message and specific instructions for the model.
const prompt = 'In a consice and with plain text only (no formatting), '
+ 'answer the following message in the same language: ' + message;
const aiResponse = await genAI.models.generateContent({model: env.model, contents: prompt});
return aiResponse.candidates[0].content.parts[0].text;
};
...
package.json
...
"main": "index.js",
"type": "module",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"@google-cloud/functions-framework": "^4.0.0",
"@google/genai": "1.15.0"
},
...
تفعيل واجهة برمجة التطبيقات Vertex AI API
- في وحدة تحكّم Google Cloud، فعِّل واجهة برمجة التطبيقات Vertex AI:
- انقر على القائمة ☰ > واجهات برمجة التطبيقات والخدمات > واجهات برمجة التطبيقات والخدمات المفعَّلة، ثم تأكَّد من أنّ Vertex AI API مدرَجة في القائمة.
تعديل دالة Google Cloud Run Node.js
- في بيئة التطوير على الجهاز، غيِّر الدليل الحالي إلى
node/chat/gen-ai-apps/1-prompt
. وهي تحتوي على رمز المصدر والموارد بالكامل. - افتح
env.js
في محرّر واضبط ما يلي: - projectID: معرّف مشروعك على Google Cloud يمكن استرداده من صفحة الترحيب في Google Cloud Console.
- استبدِل location بمنطقة خدمة وظيفة Google Cloud Run. يمكن استردادها من صفحة تفاصيل خدمة وظيفة Google Cloud Run.
- النموذج: النموذج المطلوب استخدامه يمكنك العثور على جميع النماذج المتاحة من مستندات Vertex AI. النموذج الذي يتم ضبطه تلقائيًا هو Flash لتنفيذ سريع ورخيص.
- انتقِل إلى علامة التبويب المصدر في صفحة تفاصيل خدمة دالة Google Cloud Run.
- انقر على تعديل المصدر.
- اضبط نقطة دخول الدالة على
gen-ai-app
. - انقر على ➕، واكتب
env.js
، ثم انقر على ✔️ لإنشاء ملف المصدر الناقص. - استبدِل المحتوى الكامل للملفات
index.js
وenv.js
وpackage.json
بالمحتوى الموجود في بيئة التطوير المحلية. - انقر على حفظ وإعادة نشر.
- انتظِر إلى أن يكتمل نشر المراجعة بنجاح.
تجربة
- في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، اكتب
Hello, how are you?
واضغط علىenter
. يجب أن يجيب التطبيق بإيجاز بنص عادي وفقًا للتعليمات الواردة في الطلب.
- في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، اكتب
Bonjour comment allez-vous?
واضغط علىenter
. يجب أن يجيب التطبيق باللغة الفرنسية وفقًا لتعليماتنا في الطلب.
4. تطبيق "التنسيق"
يستند هذا التطبيق إلى Prompt app
من خلال إضافة إمكانية الردّ بنصوص منسّقة متوافقة مع تنسيق الرسائل النصية في Google Chat. يتم تعديل التعليمات في الطلب لتتضمّن وصفًا شاملاً للخيارات المختلفة التي يمكن أن يستخدمها النموذج.
مراجعة المفاهيم
الرسائل النصية في Google Chat
تتيح الرسائل النصية في Google Chat خيارات تنسيق متنوعة للسماح بعرض رسائل أوضح وأكثر تعبيرًا مباشرةً ضمن واجهة Google Chat. وتستند إلى قواعد ترميز محدّدة لتطبيق الخط العريض والمائل والشطب وإنشاء الروابط التشعبية وما إلى ذلك.
خطوات المراجعة
مراجعة رمز المصدر
index.js
...
async function generateAnswer(message) {
// Specify formatting options that are compatible with Google Chat messages
// https://developers.google.com/workspace/chat/format-messages#format-texts
const prompt = `Use simple text for concise answers. The only formatting options you can use is to
(1) surround some text with a single star for bold such as *text* for strong emphasis
(2) surround some text with a single underscore for italic such as _text_ for gentle emphasis
(3) surround some text with a single tild for strikethrough such as ~text~ for removal
(4) use a less than before followed by a URL followed by a pipe followed by a link text followed
by a more than for a hyperlink such as <https://example.com|link text> for resource referencing
(5) use a backslash followed by the letter n for a new line such as \n for readibility
(6) surround some text with a single backquote such as \`text\` for quoting code
(7) surround an entire paragraph with three backquotes in dedicated lines such as
\`\`\`\nparagraph\n\`\`\` for quoting code
(8) prepend lines with list items with a single star or hyphen followed by a single space
such as * list item or - list item for bulleting ;
DO NOT USE ANY OTHER FORMATTING OTHER THAN THOSE.
Answer the following message in the same language: ${message}`;
...
};
...
تعديل دالة Node.js في Google Cloud Run
- في بيئة التطوير على الجهاز، غيِّر الدليل الحالي إلى
node/chat/gen-ai-apps/2-format
. وهي تحتوي على رمز المصدر والموارد بالكامل. - انتقِل إلى علامة التبويب المصدر في صفحة تفاصيل خدمة دالة Google Cloud Run.
- انقر على تعديل المصدر.
- استبدِل محتوى ملف
index.js
بالكامل بالمحتوى الموجود في بيئة التطوير المحلية. - انقر على حفظ وإعادة نشر.
- انتظِر إلى أن يكتمل نشر المراجعة بنجاح.
تجربة
- في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، اكتب
Showcase all formatting options you have with one paragraph each
واضغط علىenter
. يجب أن يجيب التطبيق بنماذج تنسيق استنادًا إلى تعليماتنا في الطلب.
- في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، اكتب
What are Google Chat apps? What's great about them?
واضغط علىenter
. يجب أن يجيب التطبيق مع التنسيق عندما يكون ذلك مفيدًا.
5- تطبيق Ground
يستند هذا التطبيق إلى Format app
من خلال إضافة ميزة تحديد المصادر وعرضها. يشغّل هذا الخيار أداة "بحث Google" ويرفق بطاقات تتضمّن روابط تؤدي إلى الأجوبة.
مراجعة المفاهيم
تحديد المصدر
تحديد المصدر هو أسلوب لربط النماذج بمصادر المعلومات. ويُستخدم غالبًا في التطبيقات العملية لتحسين دقة المحتوى الذي يتم إنشاؤه ومدى صلته بطلب البحث من خلال الرجوع إلى بيانات واقعية، ما يمنع النموذج من الهلوسة أو تقديم معلومات غير صحيحة.
أداة "بحث Google"
تعزّز أداة "بحث Google" تحديد المصدر من خلال السماح للنماذج بالبحث على الويب عن معلومات في الوقت الفعلي، ما يضمن دقة الردود وحداثتها.
إطار عمل بطاقات Google Workspace
يتيح إطار عمل البطاقات في Google Workspace للمطوّرين إنشاء واجهات مستخدم تفاعلية وغنية بالميزات. تتيح هذه الأداة إنشاء بطاقات منظَّمة وجذابة بصريًا يمكن أن تتضمّن نصوصًا وصورًا وأزرارًا وتطبيقات مصغّرة أخرى. تعزّز هذه البطاقات تجربة المستخدم من خلال توفير معلومات منظَّمة وإتاحة اتّخاذ إجراءات سريعة مباشرةً ضمن المحادثة.
مسار المراجعة
مراجعة رمز المصدر
index.js
...
const aiResponse = await genAI.models.generateContent({
model: env.model,
contents: prompt,
// Google Search tool is enabled
config: { tools: [{ googleSearch: {}}]}
});
let groundingCardsV2 = undefined;
const grounding = aiResponse.candidates[0].groundingMetadata;
// Go through the grounding metadata if any
if (grounding && grounding.groundingChunks && grounding.groundingChunks.length > 0) {
let linkButtons = [];
grounding.groundingChunks.forEach(groundingChunk => {
if (groundingChunk.web) {
// Create one link button per web URL returned
linkButtons.push({
text: groundingChunk.web.domain,
onClick: { openLink: { url: groundingChunk.web.uri}}
});
}
});
// Create a card with link buttons
groundingCardsV2 = [{
cardId: "sourcesCard",
card: { sections: [{
header: "Sources",
widgets: [{ buttonList: { buttons: linkButtons}}]
}]}
}];
}
// Send a Chat message with the generated answer
return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
text: aiResponse.candidates[0].content.parts[0].text,
// The sources are referenced in the card
cardsV2: groundingCardsV2
}}}}});
...
تعديل دالة Node.js في Google Cloud Run
- في بيئة التطوير على الجهاز، غيِّر الدليل الحالي إلى
node/chat/gen-ai-apps/3-ground
. وهي تحتوي على رمز المصدر والموارد بالكامل. - انتقِل إلى علامة التبويب المصدر في صفحة تفاصيل خدمة دالة Google Cloud Run.
- انقر على تعديل المصدر.
- استبدِل محتوى ملف
index.js
بالكامل بالمحتوى الموجود في بيئة التطوير المحلية. - انقر على حفظ وإعادة نشر.
- انتظِر إلى أن يكتمل نشر المراجعة بنجاح.
تجربة
في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، اكتب What's the world population?
واضغط على enter
. يجب أن يجيب التطبيق عن السؤال من خلال إرفاق روابط المصادر في بطاقة.
6. تطبيق MCP
يستند هذا التطبيق إلى Format app
من خلال إضافة إمكانية استخدام الأدوات التي يوفّرها خادم Model Context Protocol (MCP) المستضاف عن بُعد. يرتبط هذا التطبيق ببرنامج Google Workspace Developer Assist MCP الذي يوفّر أدوات للوصول إلى مستندات مطوّري Google Workspace والبحث فيها.
مراجعة المفاهيم
بروتوكول سياق النموذج (MCP)
بروتوكول Model Context هو إطار عمل مفتوح المصدر يدمج النماذج مع الخدمات الخارجية بطريقة موحّدة. يمكن للنماذج اكتشاف الأدوات المختلفة وفهمها والتفاعل معها آليًا، ما يؤدي إلى توسيع إمكاناتها وتنفيذ إجراءات في العالم الحقيقي والوصول إلى المعلومات الحديثة.
حزمة تطوير البرامج (SDK) الخاصة بمنصة MCP المستندة إلى TypeScript
تنفِّذ حزمة تطوير البرامج (SDK) بلغة TypeScript مواصفات MCP الكاملة، ما يسهّل إنشاء برامج MCP تتصل بأي خادم MCP. ويتيح أيضًا تطوير خوادم MCP التي توفّر إمكانية الوصول إلى الموارد والطلبات والأدوات.
خطوات المراجعة
مراجعة رمز المصدر
index.js
// Import the MCP TypeScript SDK.
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
...
// Create and connect the MCP client from the URL.
const mcpServerUrl = new URL("https://workspace-developer.goog/mcp");
const client = new Client({ name: "gen-ai-app-mcp", version: "1.0.0" });
// Try Streamable HTTP first (new) and SSE (old) as fallback for transport
try {
await client.connect(new StreamableHTTPClientTransport(mcpServerUrl));
} catch (error) {
await client.connect(new SSEClientTransport(mcpServerUrl));
}
http('gen-ai-app', async (req, res) => {
...
const aiResponse = await genAI.models.generateContent({
model: env.model,
contents: prompt,
// MCP tools are enabled
config: { tools: [mcpToTool(client)]}
});
...
}
...
package.json
...
"dependencies": {
...
"@modelcontextprotocol/sdk": "^1.18.1"
},
...
تعديل دالة Node.js في Google Cloud Run
- في بيئة التطوير على الجهاز، غيِّر الدليل الحالي إلى
node/chat/gen-ai-apps/4-mcp
. وهي تحتوي على رمز المصدر والموارد بالكامل. - انتقِل إلى علامة التبويب المصدر في صفحة تفاصيل خدمة دالة Google Cloud Run.
- انقر على تعديل المصدر.
- استبدِل محتوى الملفَين
index.js
وpackage.json
بالكامل بالمحتوى الموجود في بيئة التطوير المحلية. - انقر على حفظ وإعادة نشر.
- انتظِر إلى أن يكتمل نشر المراجعة بنجاح.
تجربة
- في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، اكتب
What can you do for me?
واضغط علىenter
. يجب أن يوضّح التطبيق الإجراءات التي يمكنه تنفيذها (أدوات MCP).
- في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، اكتب
I would like to get the latest official documentation for the Google Sheets API append values
واضغط علىenter
. يجب أن يجيب التطبيق بالمستندات المطلوبة (باستخدام أدوات MCP).
7. تطبيق متعدد الأدوار
يستند هذا التطبيق إلى Format app
من خلال إضافة ميزة "الذاكرة الحوارية" عن طريق تتبُّع سجلّ التفاعلات في المحادثات. فهي تتيح تجربة أكثر طبيعية وذكاءً وتخصيصًا. يستخدم التطبيق قاعدة بيانات Google Cloud Firestore التلقائية المرتبطة بمشروع Google Cloud للتخزين.
مراجعة المفاهيم
المحادثات المتعددة
يشير مفهوم المحادثات المتعددة إلى قدرة النموذج على الحفاظ على السياقات والاستمرارية في عدة تبادلات ومحادثات. وهي ميزة أساسية لدعم المحادثات المعقّدة والوظائف المتطورة المستندة إلى الذكاء الاصطناعي وتجربة المستخدم الطبيعية.
Google Cloud Firestore
Google Cloud Firestore هي قاعدة بيانات NoSQL مرنة وقابلة للتوسّع في السحابة الإلكترونية لتطوير تطبيقات الأجهزة الجوّالة والويب والخوادم. يخزّن البيانات في مستندات منظَّمة في مجموعات، ويتيح المزامنة في الوقت الفعلي وإمكانية الاستخدام بلا إنترنت.
خطوات المراجعة
مراجعة رمز المصدر
index.js
// Import the Google Cloud Firestore client library.
import { Firestore } from '@google-cloud/firestore';
...
// Configure DB
const USERS_PREFIX = 'users/';
const CHATS_COLLECTION = 'chats';
const db = new Firestore();
...
// Create or update data for a given user
async function createOrUpdateChatHistory(userId, data) {
await db.collection(CHATS_COLLECTION).doc(userId.replace(USERS_PREFIX, '')).set(data);
};
// Retrieve data snapshot for a given user
async function getChatHistory(userId) {
return await db.collection(CHATS_COLLECTION).doc(userId.replace(USERS_PREFIX, '')).get();
};
...
...
http('gen-ai-app', async (req, res) => {
// Retrieve the chat history of the user
const chatHistory = await getChatHistory(userId);
const chat = genAI.chats.create({
model: env.model,
// Initiate the model with chat history for context
history: chatHistory.exists ? chatHistory.data().contents : []
});
// If no history, send a first message to the model with instructions on how to behave
if(!chatHistory.exists) {
const preambule = 'The only formatting options you can use is to '
+ ...
+ 'DO NOT USE ANY OTHER FORMATTING OTHER THAN THOSE. '
+ 'Answer in the same language that I use.';
// The answer to this message is ignored
await chat.sendMessage({message: preambule});
}
// Send the user's message to the model to generate the answer
const aiResponse = await chat.sendMessage({message: userMessage});
// Persist the updated chat history of the user
await createOrUpdateChatHistory(userId, {contents: chat.getHistory({curated: true})});
// Send a Chat message with the generated answer
return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
text: aiResponse.candidates[0].content.parts[0].text
}}}}});
});
...
package.json
...
"dependencies": {
...
"@google-cloud/firestore": "^7.11.5"
},
...
تفعيل Google Cloud Firestore API
- انقر على القائمة ☰ > واجهات برمجة التطبيقات والخدمات > واجهات برمجة التطبيقات والخدمات المفعَّلة، ثم تأكَّد من أنّ Cloud Firestore API مدرَجة في القائمة.
إنشاء قاعدة بيانات Cloud Firestore
- في Google Cloud Console، انقر على القائمة ☰ > Firestore
- انقر على إنشاء قاعدة بيانات Firestore.
- اترك الإعدادات التلقائية وانقر على إنشاء قاعدة بيانات.
تعديل دالة Node.js في Google Cloud Run
- في بيئة التطوير على الجهاز، غيِّر الدليل الحالي إلى
node/chat/gen-ai-apps/5-multi-turn
. وهي تحتوي على رمز المصدر والموارد بالكامل. - انتقِل إلى علامة التبويب المصدر في صفحة تفاصيل خدمة دالة Google Cloud Run.
- انقر على تعديل المصدر.
- استبدِل محتوى الملفَين
index.js
وpackage.json
بالكامل بالمحتوى الموجود في بيئة التطوير المحلية. - انقر على حفظ وإعادة نشر.
- انتظِر إلى أن يكتمل نشر المراجعة بنجاح.
تجربة
- في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، اكتب
Can you speak with the English from the 80's for now on?
واضغط علىenter
. يجب أن يستجيب التطبيق بشكل إيجابي.
- في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، اكتب
Define what Google Chat apps are in one sentence
واضغط علىenter
. يجب أن يواصل التطبيق الردّ باللغة الإنجليزية من الثمانينيات.
8. تطبيق أداة مخصّصة
يستند هذا التطبيق إلى Multi-turn app
من خلال إضافة دعم لأداة مخصّصة لاستدعاء الدوال تعتمد على Google Workspace Calendar API لاسترداد الحدث التالي من تقويم عام. يدير النموذج جميع تفاعلات المستخدمين، بما في ذلك تلقّي المدخلات وتقديم المخرجات من الأداة. ومع ذلك، يظل التطبيق مسؤولاً عن تنفيذ طلبات البيانات اللازمة من واجهة برمجة التطبيقات وتقديم النتائج إلى النموذج عند الطلب. يستخدم التطبيق مفتاح Google API لأنّه لا حاجة إلى بيانات اعتماد المستخدم لجلب بيانات التقويم العامة.
مراجعة المفاهيم
استدعاء الدوال
تتيح ميزة "استدعاء الدوال" للنموذج رصد الحالات التي يمكن فيها تلبية طلب المستخدم من خلال أداة أو واجهة برمجة تطبيقات خارجية. بعد ذلك، يقدّم النموذج المَعلمات اللازمة لاستدعاء هذه الأداة، ويدمج الوظائف الخارجية في ردوده.
واجهات Google Workspace API
تتيح واجهات Google Workspace API للمطوّرين دمج تطبيقاتهم مع خدمات Google Workspace المختلفة. توفّر واجهات برمجة التطبيقات هذه إمكانية الوصول آليًا إلى وظائف في منتجات مثل Gmail وChat و"تقويم Google" وDrive و"مستندات Google" و"جداول بيانات Google" وغيرها، ما يتيح تنفيذ المهام تلقائيًا ومزامنة البيانات وإنشاء سير عمل مخصّص.
خطوات المراجعة
مراجعة رمز المصدر
env.js
...
// Replace with your Google API key.
googleApiKey: process.env.GOOGLE_API_KEY || 'your-google-api-key',
...
index.js
// Import parameter type definitions from Google Gen AI SDK.
import { GoogleGenAI, Type } from '@google/genai';
// Import Google APIs that include the Google Calendar API.
import { google } from 'googleapis';
...
// Create a Google Calendar API client using a Google API key.
const calendar = google.calendar({version: 'v3', auth: env.googleApiKey});
...
// Define the tool used for function calling
const getNextPublicCalendarEventTitleFunctionDeclaration = {
name: 'getNextPublicCalendarEventTitle',
parameters: {
type: Type.OBJECT,
description: 'Get the title of the next event of a public calendar.',
properties: {
calendarId: {
type: Type.STRING,
description: 'ID of the public calendar to get the next event title.',
}
},
required: ['calendarId']
}
};
// The function referenced in the tool definition
async function getNextPublicCalendarEventTitle(calendarId) {
// Use Calendar API to retrieve the next event in the given calendar
const response = await calendar.events.list({
calendarId: calendarId,
timeMin: new Date().toISOString(),
maxResults: 1,
singleEvents: true,
orderBy: 'startTime',
});
const events = response.data.items;
if (!events || events.length === 0) {
return null;
}
return `${events[0].summary}`;
};
...
...
http('gen-ai-app', async (req, res) => {
...
// Send the user's message to the model to generate the answer
let aiResponse = await chat.sendMessage({
message: userMessage,
// The tool used for function calling is enabled
config: { tools: [{ functionDeclarations: [getNextPublicCalendarEventTitleFunctionDeclaration]}]}
});
// Handle the function calling turn with the model if any
const functionCall = aiResponse.candidates[0].content.parts[0].functionCall;
if (functionCall) {
let functionResult = null;
switch(functionCall.name) {
case 'getNextPublicCalendarEventTitle':
// Make the function call as per model request
functionResult = await getNextPublicCalendarEventTitle(functionCall.args['calendarId']);
break;
default:
}
// Finish the function calling turn by sending the execution result to the model
aiResponse = await chat.sendMessage({ message: { functionResponse: {
name: functionCall.name,
response: { output: functionResult }
}}});
}
...
// Send a Chat message with the generated answer
return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
text: aiResponse.candidates[0].content.parts[0].text
}}}}});
});
...
package.json
...
"dependencies": {
...
"googleapis": "^160.0.0"
},
...
تفعيل Calendar API
- في وحدة تحكّم Google Cloud، فعِّل Google Calendar API:
- انقر على القائمة ☰ > واجهات برمجة التطبيقات والخدمات > واجهات برمجة التطبيقات والخدمات المفعَّلة، ثم تأكَّد من أنّ Google Calendar API مدرَجة في القائمة.
إنشاء مفتاح Google API
في وحدة تحكّم Google Cloud، اتّبِع الخطوات التالية:
- انقر على القائمة ☰ > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.
- انقر على + إنشاء بيانات اعتماد، ثمّ اختَر مفتاح واجهة برمجة التطبيقات.
- انتظِر حتى تكتمل العملية.
- في مربّع حوار التأكيد، ابحث عن حقل النص مفتاح واجهة برمجة التطبيقات، ثم انقر على نسخ إلى الحافظة.
تعديل دالة Node.js في Google Cloud Run
- في بيئة التطوير على الجهاز، غيِّر الدليل الحالي إلى
node/chat/gen-ai-apps/6-custom-tool
. وهي تحتوي على رمز المصدر والموارد بالكامل. - انتقِل إلى علامة التبويب المصدر في صفحة تفاصيل خدمة دالة Google Cloud Run.
- انقر على تعديل المصدر.
- استبدِل محتوى الملفَين
index.js
وpackage.json
بالكامل بالمحتوى الموجود في بيئة التطوير المحلية. - افتح ملف
env.js
ونفِّذ ما يلي: - إضافة googleApiKey إلى الحقول التي تم تصديرها
export const env = {
...
googleApiKey: 'your-google-api-key',
};
- استبدِل
your-google-api-key
بمفتاح Google API الذي نسخته في الخطوة السابقة. يمكن استرداده من صفحة بيانات اعتماد Google Cloud من خلال النقر على عرض المفتاح.
- انقر على حفظ وإعادة نشر.
- انتظِر إلى أن يكتمل نشر المراجعة بنجاح.
تجربة
- في تقويم Google، اتّبِع الخطوات التالية:
- ضمن تقاويم أخرى، انقر على +، ثم انقر على إنشاء تقويم جديد.
- اضبط الاسم على
My Public Calendar
- انقر على إنشاء تقويم.
- انتظِر حتى تكتمل العملية.
- ضمن إعدادات تقاويمي، اختَر التقويم الذي تم إنشاؤه حديثًا تقويمي العلني.
- ضمن أذونات الوصول إلى الأحداث، اختَر إتاحة التقويم بشكل علني، ثم انقر على حسنًا في مربّع الحوار تحذير.
- ضمن أذونات الوصول إلى الأحداث، اختَر عرض جميع تفاصيل الحدث من القائمة المنسدلة بجانب الخيار إتاحة التقويم بشكل علني.
- ضمن دمج التقويم، انسخ قيمة الحقل معرّف التقويم إلى الحافظة.
- انقر على السهم المتّجه لليسار في أعلى يمين الصفحة للخروج من الإعدادات.
- انقر على التقويم لإنشاء حدث جديد ليوم الغد، واكتب
Important meeting
، ثم اختَر تقويمي العام من القائمة المنسدلة، ثم انقر على حفظ. - في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، اكتب
When is the next meeting?
واضغط علىenter
. يجب أن يطلب التطبيق تحديد التقويم المقصود لأنّه غير واضح.
- في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، ألصِق رقم تعريف التقويم الذي نسخته سابقًا إلى الحافظة واضغط على
enter
. يجب أن يجيب التطبيق بتفاصيل حول الحدث الذي تم إنشاؤه سابقًا.
9- تطبيق البث
يعتمد هذا التطبيق على أحد نماذج Gemini لإنشاء قصص مدتها دقيقتان استنادًا إلى مواضيع يقدّمها المستخدمون. بما أنّ إنشاء إجابات كاملة يستغرق وقتًا، يطلب التطبيق من النموذج عرض المحتوى في وضع البث المباشر ويعتمد على واجهة برمجة التطبيقات Google Chat API لإرسال المحتوى والحالات في الرسائل أثناء إحراز تقدّم.
مراجعة المفاهيم
Google Chat API
تتيح واجهة برمجة تطبيقات Google Chat للمطوّرين التفاعل آليًا مع Google Chat، ما يتيح لهم إرسال الرسائل وإنشاء المساحات وإدارة الأعضاء وغير ذلك، وذلك لإنشاء عمليات دمج وبرامج تتبُّع مخصّصة.
بث
تشير البث إلى عملية تلقّي البيانات في تدفق مستمر بدلاً من انتظار إنشاء الردّ بأكمله. في ما يتعلق بطلبات نماذج الذكاء الاصطناعي، يتيح البث للتطبيقات عرض نتائج جزئية للمستخدمين فور توفّرها، ما يحسّن الأداء المتوقّع وتجربة المستخدم، لا سيما في مهام الإنشاء الأطول. وينطبق ذلك بشكل خاص على نماذج الذكاء الاصطناعي التوليدي التي قد تستغرق وقتًا طويلاً لإنتاج ناتج كامل.
خطوات المراجعة
مراجعة رمز المصدر
index.js
// Import Google Auth library used to create Google Chat API client
import { GoogleAuth } from 'google-auth-library';
...
http('gen-ai-app', async (req, res) => {
// Use app authentication.
// Application Default Credentials (ADC) will use the Cloud Run function's
// default service account, we just need to specify the Chat API app auth scopes.
const auth = new GoogleAuth({
// Chat API app authentication scopes
scopes: ['https://www.googleapis.com/auth/chat.bot']
});
// Create Chat service client with application credentials
const chatClient = google.chat({
version: 'v1',
auth: await auth.getClient()
});
// Send a server streaming request to generate the answer
const aiResponse = await genAI.models.generateContentStream({
model: env.model,
contents: `Generate a story about a ${userMessage}. `
+ `It should take 2 minutes to read it out loud.`
});
// Send a first Chat message to summarize what will be done
await chatClient.spaces.messages.create({
parent: spaceName,
requestBody: { text: `Sure, let me work on generating a short story `
+ `about a ${userMessage} like you requested.`}
});
// Go through the response chunks received from the stream
let messageName = undefined;
let answer = "";
for await (const chunk of aiResponse) {
const text = chunk.text;
if (text) {
// Update the answer by concatenating the response chunks
answer += text;
// The Chat message request body is the same for message creation and update
const responseBody = {
text: answer,
accessoryWidgets: [getStatusAccessoryWidget('Generating story...', 'progress_activity')]
}
if (!messageName) {
// Create a Chat message dedicated to the generated content
const messageResponse = await chatClient.spaces.messages.create({
parent: spaceName,
requestBody: responseBody
});
messageName = messageResponse.data.name;
} else {
// Update the Chat message dedicated to the generated content
await chatClient.spaces.messages.patch({
name: messageName,
updateMask: 'text,accessory_widgets',
requestBody: responseBody
});
}
}
}
// Update the accessory widget with final progress status
await chatClient.spaces.messages.patch({
name: messageName,
updateMask: 'accessory_widgets',
requestBody: {
accessoryWidgets: [getStatusAccessoryWidget('Story is fully generated', 'check')]
}
});
// Send a last Chat message to confirm it's done
return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
text: 'All done, I hope you like it!'
}}}}});
});
// Create an accessory widget with progress status
function getStatusAccessoryWidget(text, icon) {
return { buttonList: { buttons: [{
text: text,
icon: { materialIcon: { name: icon}},
// This is a workaround to have the icon shown, it's not clickable
onClick: { openLink: { url: "https://google.com"}},
disabled: true
}]}};
}
package.json
...
"dependencies": {
...
"google-auth-library": "^10.3.0"
},
...
تعديل دالة Node.js في Google Cloud Run
- في بيئة التطوير على الجهاز، غيِّر الدليل الحالي إلى
node/chat/gen-ai-apps/7-stream
. وهي تحتوي على رمز المصدر والموارد بالكامل. - انتقِل إلى علامة التبويب المصدر في صفحة تفاصيل خدمة دالة Google Cloud Run.
- انقر على تعديل المصدر.
- استبدِل محتوى الملفَين
index.js
وpackage.json
بالكامل بالمحتوى الموجود في بيئة التطوير المحلية. - انقر على حفظ وإعادة نشر.
- انتظِر إلى أن يكتمل نشر المراجعة بنجاح.
تجربة
في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، اكتب turtle
واضغط على enter
. يجب أن يجيب التطبيق برسالة إقرار، والقصة التي تم إنشاؤها مع عرض الحالة أثناء إحراز تقدّم، ورسالة تأكيد الاكتمال.
10. تطبيق متعدد الوسائط
يعتمد هذا التطبيق على نموذج لتعديل الصور استنادًا إلى تعليمات نصية من المستخدمين. يضيف كل من المستخدمين والتطبيق صورهم كمرفقات في رسائل Google Chat لتبادلها. يعتمد التطبيق على واجهات برمجة تطبيقات Google Chat لتنزيل الصور وتحميلها آليًا.
مراجعة المفاهيم
مرفق رسالة Google Chat
مرفقات رسائل Google Chat هي ملفات، مثل الصور أو الفيديوهات، يتم تحميلها إلى رسالة في Google Chat. يمكن إدارة هذه المرفقات آليًا، ما يتيح للتطبيقات التفاعل مع الوسائط الغنية مباشرةً ضمن المحادثات.
التفويض على مستوى النطاق (DWD)
تتيح ميزة التفويض على مستوى النطاق لحساب الخدمة انتحال هوية المستخدمين في نطاق Google Workspace، ما يتيح للتطبيقات اتّخاذ إجراءات نيابةً عن هؤلاء المستخدمين بدون تفويض مباشر. ويكون ذلك مفيدًا للتطبيقات التي تحتاج إلى الوصول إلى بيانات المستخدم أو تنفيذ إجراءات (مثل تحميل المرفقات إلى Google Chat) في سياق المستخدم، حتى عندما لا يكون المستخدم متواجدًا بشكل نشط، وذلك من خلال منح حساب الخدمة إذن وصول واسع النطاق إلى النطاق.
خطوات المراجعة
مراجعة رمز المصدر
env.js
...
// Replace with the Gemini model to use.
model: process.env.MODEL || 'gemini-2.0-flash-preview-image-generation',
...
index.js
...
// Import byte stream management libraries.
import { Buffer } from 'buffer';
import { Readable } from 'stream';
...
// Download a Google Chat attachment as base 64 string.
async function downloadFile(appChatClient, attachmentName) {
const response = await appChatClient.media.download({
resourceName: attachmentName,
alt: 'media'
}, {
responseType: 'stream'
});
const chunks = [];
return new Promise((resolve) => {
response.data.on('data', (chunk) => {
chunks.push(chunk);
});
response.data.on('end', () => {
const fileBuffer = Buffer.concat(chunks);
const base64String = fileBuffer.toString('base64');
resolve(base64String);
});
});
}
// Upload a base 64 string as Google Chat attachment of a space.
async function uploadFile(useChatClient, spaceName, data) {
const filename = 'generated_image.png';
return await userChatClient.media.upload({
parent: spaceName,
requestBody: { filename: filename },
media: {
mimeType: 'image/png',
body: Readable.from(Buffer.from(data, 'base64'))
}
});
}
...
...
http('gen-ai-app', async (req, res) => {
const userEmail = req.body.chat.user.email;
const spaceName = req.body.chat.messagePayload.space.name;
const userMessage = req.body.chat.messagePayload.message.text;
const attachmentName = req.body.chat.messagePayload.message.attachment[0].attachmentDataRef.resourceName;
const attachmentContentType = req.body.chat.messagePayload.message.attachment[0].contentType;
// Set up app authentication used to download the attachment input
// Application Default Credentials (ADC) will use the Cloud Run function's
// default service account.
const appAuth = new GoogleAuth({
// Specify the Chat API app authentication scopes
scopes: ['https://www.googleapis.com/auth/chat.bot']
});
// Create Chat service client with application credentials
const appChatClient = google.chat({
version: 'v1',
auth: await appAuth.getClient()
});
// Send a request to generate the answer with both text and image contents
const aiResponse = await genAI.models.generateContent({
model: env.model,
contents: [{
role: 'USER',
parts: [
// The text content of the message
{ text: userMessage },
// The attachment of the message is downloaded and added inline
{ inlineData: {
data: await downloadFile(appChatClient, attachmentName),
mimeType: attachmentContentType
}}
]
}],
config: { responseModalities: ['TEXT', 'IMAGE']}
});
// Set up user impersonation authentication used to upload the attachment output
// and send the response.
const impersonatedUserAuth = new GoogleAuth({
// Specify the Chat API user authentication scopes
scopes: ['https://www.googleapis.com/auth/chat.messages'],
keyFile: './credentials.json',
clientOptions: {
// Impersonate the user who sent the original message
subject: userEmail
}
});
// Create Chat service client with impersonated user credentials
const userChatClient = google.chat({
version: 'v1',
auth: await impersonatedUserAuth.getClient()
});
let responseText = undefined;
let responseAttachment = undefined;
// Go through the response parts received
for (const part of aiResponse.candidates[0].content.parts) {
if (part.inlineData) {
// The resulting image is retrieved inline and uploaded
const mediaResponse = await uploadFile(userChatClient, spaceName, part.inlineData.data);
responseAttachment = mediaResponse.data;
} else {
responseText = part.text;
}
}
// Create a Chat message dedicated to the generated content
await userChatClient.spaces.messages.create({
parent: spaceName,
requestBody: {
text: responseText ? responseText : 'Here it is!',
// The uploaded image is referenced as attachment
attachment: responseAttachment ? [responseAttachment] : undefined
}
});
// Send a last Chat message to confirm it's done
return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
text: 'Done, feel free to let me know if you need anything else!'
}}}}});
});
...
ضبط حساب الخدمة وتصدير المفتاح الخاص
- تفويض حساب الخدمة التلقائي في Cloud Run لإدارة رسائل Google Chat للمستخدمين اتّبِع التعليمات باستخدام النطاق https://www.googleapis.com/auth/chat.messages. لاسترداد معرّف العميل لحساب الخدمة التلقائي في Cloud Run، اتّبِع الخطوات التالية:
- انقر على القائمة ☰ > إدارة الهوية وإمكانية الوصول والمشرف > حسابات الخدمة
- انقر على حساب الخدمة الذي يحمل الاسم حساب خدمة Compute التلقائي.
- وسِّع قسم الإعدادات المتقدّمة.
- انسخ معرّف العميل إلى الحافظة.
- إنشاء مفتاح خاص جديد وتنزيله لحساب الخدمة التلقائي في Cloud Run
- انقر على القائمة ☰ > إدارة الهوية وإمكانية الوصول والمشرف > حسابات الخدمة
- انقر على حساب الخدمة الذي يحمل الاسم حساب خدمة Compute التلقائي.
- اختَر علامة التبويب المفاتيح، ثم انقر على إضافة مفتاح، ثم على إنشاء مفتاح جديد.
- اختَر JSON، ثمّ انقر على إنشاء.
- يتم إنشاء زوج المفتاح العام/الخاص وتنزيله على جهازك كملف جديد. احفظ ملف JSON الذي تم تنزيله وانسخ محتواه إلى الحافظة. هذا الملف هو النسخة الوحيدة من هذا المفتاح. للحصول على معلومات عن طريقة التخزين الآمن للمفتاح، راجِع مقالة إدارة مفاتيح حساب الخدمة.
تعديل دالة Node.js في Google Cloud Run
- في بيئة التطوير على الجهاز، غيِّر الدليل الحالي إلى
node/chat/gen-ai-apps/8-multimodal
. وهي تحتوي على رمز المصدر والموارد بالكامل. - انتقِل إلى علامة التبويب المصدر في صفحة تفاصيل خدمة دالة Google Cloud Run.
- انقر على تعديل المصدر.
- انقر على ➕، واكتب
credentials.json
، ثم انقر على ✔️ لإنشاء ملف الموارد الناقص. - الصِق محتوى ملف JSON الذي تم تنزيله في الخطوة السابقة في ملف
credentials.json
الذي تم إنشاؤه حديثًا. - استبدِل محتوى ملف
index.js
بالكامل بالمحتوى الموجود في بيئة التطوير المحلية. - افتح ملف
env.js
واضبط قيمة الطراز علىgemini-2.0-flash-preview-image-generation
.
...
model: 'gemini-2.0-flash-preview-image-generation',
...
- انقر على حفظ وإعادة نشر.
- انتظِر إلى أن يكتمل نشر المراجعة بنجاح.
تجربة الميزة
في مساحة الرسائل المباشرة مع تطبيق Chat في Google Chat، حمِّل صورة شخصية لك بتنسيق PNG، واكتب Change the background color to blue
ثم اضغط على enter
. يجب أن يجيب التطبيق بصورة ذات خلفية زرقاء ورسالة تأكيد اكتمال.
11. تَنظيم
حذف مشروع Google Cloud
لتجنُّب تحمّل رسوم على حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدرس العملي، ننصحك بحذف مشروع Google Cloud.
في وحدة تحكّم Google Cloud، اتّبِع الخطوات التالية:
- انقر على القائمة ☰ > إدارة الهوية وإمكانية الوصول والمشرف > الإعدادات.
- انقر على إيقاف.
- أدخِل رقم تعريف المشروع.
- انقر على إيقاف الاستضافة على البنية الأساسية القديمة.
12. تهانينا
تهانينا! لقد أنشأت تطبيقات Google Chat كإضافات Google Workspace تدمج مفاهيم الذكاء الاصطناعي الأساسية.
ما هي الخطوات التالية؟
نحن نعرض فقط حالات استخدام بسيطة في هذا الدرس البرمجي، ولكن هناك العديد من مجالات التوسّع التي قد تحتاج إلى أخذها في الاعتبار في تطبيقات Google Chat، مثل ما يلي:
- إتاحة أنواع أخرى من الوسائط، مثل الصوت والفيديو
- التكامل مع نماذج الذكاء الاصطناعي الأخرى، بما في ذلك النماذج المخصّصة والمستضافة على منصات مخصّصة مثل Vertex AI
- يمكنك الدمج مع الوكلاء، بما في ذلك الوكلاء المخصّصون، والمستضافون على منصات مخصّصة، مثل Agentspace وDialogflow CX.
- الاعتماد على حلقات الملاحظات والتصنيفات لمراقبة الأداء وتحسينه
- النشر في السوق لتمكين الفِرق أو المؤسسات أو المستخدمين العامين
مزيد من المعلومات
تتوفّر العديد من المراجع للمطوّرين، مثل فيديوهات YouTube ومواقع المستندات وعيّنات التعليمات البرمجية والأدلة التعليمية:
- قناة Google Workspace Developers على YouTube - مرحبًا بالمطوّرين
- الموقع الإلكتروني الذي يوفّر مستندات للمطوّرين حول Google Chat
- مستودع GitHub لجميع نماذج Google Chat
- مركز مطوّري Google Cloud
- الذكاء الاصطناعي التوليدي على Vertex AI
- نماذج الذكاء الاصطناعي التوليدي
- ضبط نموذج الذكاء الاصطناعي التوليدي
- التدريب المخصّص للذكاء الاصطناعي التوليدي