مفاهیم اساسی هوش مصنوعی را در برنامه های چت گوگل ادغام کنید

1. قبل از شروع

برنامه های چت گوگل با هوش مصنوعی چیست؟

برنامه‌های چت Google با هوش مصنوعی کارهای زیر را انجام می‌دهند:

  • خدمات و منابع خود را به Google Chat بیاورید، که به کاربران امکان می‌دهد بدون ترک مکالمه اطلاعاتی را دریافت کرده و اقدام کنند.
  • برای ایجاد، جستجو و ویرایش داده‌هایی مانند متن یا تصاویر، با مدل‌های هوش مصنوعی مولد یکپارچه شوید.
  • با استفاده از مفاهیم هوش مصنوعی محاوره ای برای تعاملات کاربردی تر، طبیعی، پیچیده تر و مفیدتر، از یک تجربه نمایندگی پشتیبانی کنید.

چرا برنامه های چت گوگل را با هوش مصنوعی ادغام کنیم؟

موارد استفاده معمولی در دسته های زیر قرار می گیرند:

  • ایجاد و ویرایش محتوا . کپی بازاریابی ایجاد کنید، پست‌های رسانه‌های اجتماعی را ایجاد کنید، تصاویر واقعی بسازید، موسیقی بنویسید یا به ایجاد محتوای ویدیویی کمک کنید.
  • جستجو و تجزیه و تحلیل داده ها . بینش های کلیدی را از یک پایگاه دانش بدون ساختار استخراج کنید، متون طولانی را خلاصه کنید، مطالب را طبقه بندی کنید، یا زبان ها را با دقت و سرعت بیشتر ترجمه کنید.
  • گفتگو . مانند یک دستیار در گفتگوهای طبیعی، آموزنده و کارآمد شرکت کنید.
  • اتوماسیون وظایف اقداماتی را از طرف کاربر انجام دهید، مانند ایجاد یک رویداد تقویم جدید، ارسال یک سند، یا مدیریت بلیط در یک سیستم خارجی.

توانایی ادغام این قابلیت ها به طور مستقیم در رابط آشنای Google Chat یک فرصت بزرگ برای هر کسی است که می خواهد تجربه و بهره وری کاربران خود را بهبود بخشد.

پیش نیازها

آنچه را که خواهید ساخت

در این نرم افزار کد، هشت برنامه مینیمالیستی Google Chat را خواهید ساخت که مفاهیم اساسی هوش مصنوعی را ادغام می کند تا نشان دهد چگونه می توان آنها را در برنامه های کاربردی دنیای واقعی به کار برد. همه آنها به عنوان افزونه های Google Workspace ساخته شده اند و به معماری HTTP متکی هستند:

2f1e2c66f6e2e2f0.png

به صورت زیر عمل می کند:

  1. کاربر پیامی را در Google Chat به یک برنامه Chat یا به صورت پیام مستقیم یا در فضای چت ارسال می کند.
  2. یک درخواست HTTP به سرور وب در حال اجرا به عنوان یک تابع Google Cloud Run Node.js ارسال می شود که حاوی منطق برنامه Chat است.
  3. در صورت تمایل، منطق برنامه Chat می‌تواند با سرویس‌های Google Workspace (مانند Calendar و Sheets)، سایر سرویس‌های Google (مانند Maps، YouTube، و Vertex AI) یا سایر سرویس‌های وب (مانند سیستم مدیریت پروژه یا ابزار فروش بلیط) یکپارچه شود.
  4. وب سرور یک پاسخ HTTP را به سرویس برنامه Chat در Chat برمی گرداند.
  5. پاسخ به کاربر تحویل داده می شود.
  6. به صورت اختیاری، برنامه چت می‌تواند با Chat API تماس بگیرد تا پیام‌ها را به صورت ناهمزمان ارسال کند یا عملیات دیگری را انجام دهد.

تابع Google Cloud Run هر برنامه Google Chat Node.js حاوی نسخه خود از فایل‌های منبع زیر است تا اقدامات لازم را در مراحل #3 و #6 در بالا انجام دهد:

  • package.json : یک مانیفست مرکزی که به عنوان طرحی برای پروژه Node.js عمل می کند. برای تعریف ابرداده ها، وابستگی ها و اسکریپت ها استفاده می شود.
  • env.js : اسکریپتی که ثابت های لازم برای اجرا را تنظیم می کند. باید بر اساس محیط و پیکربندی ویرایش شود.
  • index.js: اسکریپت اصلی که منطق رویدادهای تعامل Google Chat را مدیریت می کند. فقط نوع رویداد پیام در این لبه کد پیاده‌سازی می‌شود، اما معمولاً شامل انواع دیگری مانند کلیک کارت، دستور اسلش و گفتگو در برنامه‌های واقعی می‌شود.

برنامه سریع

این برنامه به مدل Gemini برای مکالمه با کاربران به زبان طبیعی آنها با استفاده از پاسخ های متنی مختصر و ساده متکی است.

5975b36968ab597a.gif

فرمت برنامه

این برنامه بر اساس Prompt app با افزودن پشتیبانی برای پاسخ‌های متنی غنی مطابق با قالب متنی خاص پیام‌های گپ Google ساخته می‌شود.

bc49e0acf0838f28.gif

برنامه زمینی

این برنامه با افزودن پشتیبانی از ابزار جستجوی Google و برگرداندن منابع در پیام‌های پاسخ با کارت، بر روی Format app ساخته می‌شود.

3cf232bf153f6abc.gif

برنامه MCP

این برنامه با افزودن پشتیبانی از پروتکل زمینه مدل توسعه دهنده Google Workspace (MCP) بر روی Format app ساخته می‌شود.

8219c29366e9120e.gif

برنامه چند چرخشی

این برنامه با افزودن پشتیبانی از حافظه مکالمه با پایگاه داده Google Cloud Firestore بر روی Format app ساخته شده است.

a819c274ce586451.gif

برنامه ابزار سفارشی

این برنامه با افزودن پشتیبانی از یک ابزار سفارشی فراخوانی تابع که بر اساس اطلاعات ارائه شده توسط کاربر ، Google Workspace Calendar API را فراخوانی می کند، بر روی Multi-turn app ساخته می شود.

a1c4f586b7ab2e24.gif

برنامه استریم

این برنامه به مدل Gemini برای تولید داستان های کوتاه بر اساس مضامین ارائه شده توسط کاربران متکی است. Google Chat API برای ارسال نتایج و وضعیت‌ها در پیام‌ها در حین پیشرفت استفاده می‌شود.

fd347ba03fe86e22.gif

برنامه چند وجهی

این برنامه برای ویرایش تصاویر بر اساس دستورالعمل‌های متنی کاربران به مدل Gemini متکی است. Google Chat API برای دانلود و آپلود تصاویر به عنوان پیوست پیام استفاده می شود.

57574be33474bbc.gif

آنچه خواهید آموخت

  • مفاهیم اساسی هوش مصنوعی به برنامه‌های Google Chat و نحوه اعمال آن‌ها مرتبط است.
  • برای دسترسی به Vertex AI با استفاده از Google Gen AI SDK.
  • برای استفاده از 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 را در یک تب جدید باز کنید، سپس این مراحل را دنبال کنید:

  1. پروژه خود را انتخاب کنید
  2. در قسمت جستجوی Google Cloud، «Google Chat API» را جستجو کنید، سپس روی Google Chat API کلیک کنید، روی Manage کلیک کنید و روی Configuration کلیک کنید.

  1. نام برنامه و توضیحات را روی Gen AI App تنظیم کنید.
  2. روی ذخیره کلیک کنید.

9a06649cf9285b99.png

فضای چت گوگل

Google Chat را در یک تب جدید باز کنید، سپس این مراحل را دنبال کنید:

  1. اگر قبلاً این کار را انجام نداده اید، یک فضای پیام مستقیم با برنامه چت باز کنید.
  2. Hello را تایپ کنید و enter را فشار دهید، برنامه چت باید با نام و تصویر آواتار شما پاسخ دهد.

e3b195c7b7b8e2af.png

سرویس عملکرد Google Cloud Run

کنسول Google Cloud را در یک تب جدید باز کنید، سپس این مراحل را دنبال کنید:

  1. پروژه خود را انتخاب کنید
  2. روی Menu ☰ > Cloud Run > Services کلیک کنید.

  1. در لیست خدمات، روی addonchatapp کلیک کنید، سپس تب Source را باز کنید.

b69df34ea0dc48a5.png

کد منبع و منابع را به صورت محلی دانلود کنید

  1. این مخزن GitHub را دانلود کنید.

  1. در محیط توسعه محلی دلخواه خود، دایرکتوری node/chat/gen-ai-apps را باز کنید.

3c57c15db4ebfddb.png

3. برنامه سریع

این برنامه از Gemini در Vertex AI می خواهد تا با استفاده از پاسخ های متنی مختصر و ساده با کاربران به زبان طبیعی خود صحبت کند. پیاده‌سازی به Google Gen AI SDK برای Node.js متکی است.

مفاهیم را مرور کنید

زبان طبیعی

هر زبانی که توسط انسان برای ارتباط روزمره صحبت یا نوشته می شود، برخلاف زبان های مصنوعی یا مبتنی بر رایانه.

توابع Cloud Run

توابع Cloud Run برای ساخت بک‌اندهای بدون سرور، انجام پردازش داده‌ها در زمان واقعی و ایجاد برنامه‌های هوشمند عالی هستند. هیچ سروری برای تهیه، مدیریت، وصله یا به روز رسانی وجود ندارد. آنها به طور خودکار مقیاس می شوند و بسیار در دسترس و تحمل خطا هستند.

تحریک کردن

Prompting به تکنیک ایجاد ورودی (اعلانات) برای هدایت یک مدل هوش مصنوعی مولد برای تولید خروجی دلخواه اشاره دارد. معمولاً شامل عبارت‌بندی دقیق سؤالات، ارائه زمینه، ارائه دستورالعمل‌ها یا ارائه مثال‌هایی برای به دست آوردن پاسخ‌های خاص و مرتبط از مدل است.

Vertex AI

Vertex AI همه چیزهایی را که برای ساخت و استفاده از هوش مصنوعی مولد نیاز دارید، از جمله راه حل های هوش مصنوعی، جستجو و گفتگو، بیش از 130 مدل پایه و یک پلتفرم هوش مصنوعی یکپارچه ارائه می دهد.

c9e9c7a1945b22ac.png

جوزا

Gemini یک LLM چندوجهی از گوگل است که از طریق Vertex AI قابل دسترسی است. این به افراد کمک می کند تا پتانسیل انسانی خود را باز کنند تا بتوانند تخیل خود را تقویت کنند، کنجکاوی خود را گسترش دهند و بهره وری خود را افزایش دهند.

Google Gen AI SDK

Google Gen AI SDK برای توسعه‌دهندگان طراحی شده است تا برنامه‌هایی را با پشتیبانی Gemini بسازند، این رابط یکپارچه سازگار با Gemini Developer API و Vertex AI ارائه می‌کند. با کتابخانه های کلاینت در پایتون ، Go ، Node.js و جاوا عرضه می شود.

بررسی جریان

c625fdcc8b4a27f4.png

کد منبع را مرور کنید

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 را فعال کنید

  1. در کنسول Google Cloud ، Vertex AI API را فعال کنید:

  1. روی Menu ☰ > APIs & Services > Enabled APIs & Services کلیک کنید و سپس تأیید کنید که Vertex AI API در لیست است.

عملکرد Google Cloud Run Node.js را به روز کنید

  1. در محیط توسعه محلی خود، دایرکتوری فعلی را به node/chat/gen-ai-apps/1-prompt تغییر دهید. این شامل کل کد منبع و منابع است.
  2. env.js را در یک ویرایشگر باز کنید و موارد زیر را تنظیم کنید:
  3. projectID : شناسه پروژه Google Cloud شما. می توان آن را از صفحه خوش آمدگویی کنسول Google Cloud بازیابی کرد.

  1. مکان : منطقه سرویس عملکرد Google Cloud Run شما. می توان آن را از صفحه جزئیات سرویس عملکرد Google Cloud Run بازیابی کرد.

  1. مدل : مدل مورد استفاده می توانید تمام مدل های موجود را از اسناد Vertex AI بیابید. مدلی که به‌طور پیش‌فرض تنظیم شده فلش برای اجرای سریع و ارزان است.

6c2fb9f554f53a4a.png

  1. به برگه منبع در صفحه جزئیات سرویس عملکرد Google Cloud Run بروید.

  1. روی ویرایش منبع کلیک کنید.
  2. نقطه ورود تابع را روی gen-ai-app تنظیم کنید.
  3. روی ➕ کلیک کنید، env.js تایپ کنید و ✔️برای ایجاد فایل منبع گم شده کلیک کنید.
  4. کل محتویات فایل های index.js ، env.js و package.json را با موارد موجود در محیط توسعه محلی خود جایگزین کنید.
  5. روی Save و redeploy کلیک کنید.
  6. منتظر تکمیل موفقیت آمیز استقرار ویرایش باشید.

487b64f2d3b1a104.png

آن را امتحان کنید

  1. در فضای پیام مستقیم با برنامه چت در Google Chat ، Hello, how are you? و enter را فشار دهید. برنامه باید طبق دستورالعمل ما در اعلان به طور خلاصه در متن ساده پاسخ دهد.

3cc1fd1de2a9e239.png

  1. در فضای پیام مستقیم با برنامه چت در Google Chat ، Bonjour comment allez-vous? و enter را فشار دهید. برنامه باید طبق دستورالعمل ما در اعلان به زبان فرانسوی پاسخ دهد.

77010f4ad0bde5da.png

4. برنامه را فرمت کنید

این برنامه بر اساس Prompt app با افزودن پشتیبانی برای پاسخ‌های متنی غنی مطابق با قالب پیام متنی Google Chat ساخته می‌شود. دستورالعمل‌های اعلان با توضیح جامع گزینه‌های مختلفی که مدل می‌تواند استفاده کند، به‌روزرسانی می‌شود.

مفاهیم را مرور کنید

پیام های متنی چت گوگل

پیام‌های متنی Google Chat از گزینه‌های قالب‌بندی مختلف پشتیبانی می‌کنند تا پیام‌های واضح‌تر و واضح‌تر را مستقیماً در رابط Google Chat دریافت کنند. آنها بر اساس قوانین علامت گذاری خاص برای اعمال برجسته، مورب، خط خطی، ایجاد لینک ها و غیره هستند.

بررسی جریان

c625fdcc8b4a27f4.png

کد منبع را مرور کنید

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}`;
...
};
...

عملکرد Google Cloud Run Node.js را به روز کنید

  1. در محیط توسعه محلی خود، دایرکتوری فعلی را به node/chat/gen-ai-apps/2-format تغییر دهید. این شامل کل کد منبع و منابع است.
  2. به برگه منبع در صفحه جزئیات سرویس عملکرد Google Cloud Run بروید.

  1. روی ویرایش منبع کلیک کنید.
  2. کل محتوای فایل index.js را با محتوای موجود در محیط توسعه محلی خود جایگزین کنید.
  3. روی Save و redeploy کلیک کنید.
  4. منتظر تکمیل موفقیت آمیز استقرار ویرایش باشید.

487b64f2d3b1a104.png

آن را امتحان کنید

  1. در فضای پیام مستقیم با برنامه Chat در Google Chat ، گزینه Showcase all formatting options you have with one paragraph each تایپ کرده و enter فشار دهید. برنامه باید با قالب بندی نمونه ها بر اساس دستورالعمل های ما در اعلان پاسخ دهد.

cc7f7101d9f7c10.png

  1. در فضای پیام مستقیم با برنامه چت در Google Chat ، What are Google Chat apps? What's great about them? و enter را فشار دهید. در صورت مفید بودن، برنامه باید با قالب بندی پاسخ دهد.

83557d4c7071aac8.png

5. برنامه زمین

این برنامه بر اساس Format app با افزودن پشتیبانی برای اتصال به زمین و منابع برگشتی ایجاد می شود. این ابزار جستجوی گوگل را اجرا می کند و کارت هایی را با پیوندهایی به پاسخ ها متصل می کند.

مفاهیم را مرور کنید

زمین کردن

گراندینگ تکنیک اتصال مدل ها به منابع اطلاعاتی است. اغلب در کاربردهای عملی برای بهبود دقت و ارتباط محتوای تولید شده با ارجاع به داده‌های دنیای واقعی استفاده می‌شود و در نتیجه از ایجاد توهم یا تولید اطلاعات نادرست در مدل جلوگیری می‌کند.

ابزار جستجوی گوگل

ابزار جستجوی Google با اجازه دادن به مدل‌ها برای جست‌وجوی اطلاعات هم‌زمان در وب، زمینه را افزایش می‌دهد و از دقیق و به روز بودن پاسخ‌ها اطمینان می‌دهد.

چارچوب کارت Google Workspace

چارچوب کارت در Google Workspace توسعه دهندگان را قادر می سازد تا رابط های کاربری غنی و تعاملی ایجاد کنند. این امکان ساخت کارت های سازمان یافته و از نظر بصری جذاب را فراهم می کند که می تواند شامل متن، تصاویر، دکمه ها و سایر ویجت ها باشد. این کارت ها با ارائه اطلاعات ساختاریافته و فعال کردن اقدامات سریع به طور مستقیم در مکالمه، تجربه کاربر را افزایش می دهند.

بررسی جریان

b72d69a6e79858d6.png

کد منبع را مرور کنید

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
}}}}});
...

عملکرد Google Cloud Run Node.js را به روز کنید

  1. در محیط توسعه محلی خود، دایرکتوری فعلی را به node/chat/gen-ai-apps/3-ground تغییر دهید. این شامل کل کد منبع و منابع است.
  2. به برگه منبع در صفحه جزئیات سرویس عملکرد Google Cloud Run بروید.

  1. روی ویرایش منبع کلیک کنید.
  2. کل محتوای فایل index.js را با محتوای موجود در محیط توسعه محلی خود جایگزین کنید.
  3. روی Save و redeploy کلیک کنید.
  4. منتظر تکمیل موفقیت آمیز استقرار ویرایش باشید.

487b64f2d3b1a104.png

آن را امتحان کنید

در فضای پیام مستقیم با برنامه چت در Google Chat ، What's the world population? و enter را فشار دهید. برنامه باید با پیوست کردن پیوندهای منبع در کارت پاسخ دهد.

cff461da29c05873.png

6. برنامه MCP

این برنامه با افزودن پشتیبانی از ابزارهای ارائه شده توسط یک سرور پروتکل بافت مدل (MCP) که از راه دور میزبانی می شود، بر روی Format app ساخته می شود. به Google Workspace Developer Assist MCP متصل می‌شود که ابزارهایی برای دسترسی و جستجوی اسناد Google Workspace Developers فراهم می‌کند.

مفاهیم را مرور کنید

پروتکل بافت مدل (MCP)

پروتکل زمینه مدل یک چارچوب متن باز است که مدل ها را با سرویس های خارجی به روشی استاندارد ادغام می کند. مدل‌ها می‌توانند به‌طور برنامه‌نویسی ابزارهای مختلف را کشف، درک کنند و با آنها تعامل داشته باشند، قابلیت‌های خود را گسترش دهند، اقدامات دنیای واقعی را انجام دهند و به اطلاعات به‌روز دسترسی پیدا کنند.

MCP TypeScript SDK

TypeScript SDK مشخصات کامل MCP را پیاده سازی می کند و ایجاد کلاینت های MCP را که به هر سرور MCP متصل می شوند، ساده می کند. همچنین توسعه سرورهای MCP را امکان پذیر می کند که دسترسی به منابع، درخواست ها و ابزارها را فراهم می کنند.

بررسی جریان

e0b324e2cca21915.png

کد منبع را مرور کنید

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"
},
...

عملکرد Google Cloud Run Node.js را به روز کنید

  1. در محیط توسعه محلی خود، دایرکتوری فعلی را به node/chat/gen-ai-apps/4-mcp تغییر دهید. این شامل کل کد منبع و منابع است.
  2. به برگه منبع در صفحه جزئیات سرویس عملکرد Google Cloud Run بروید.

  1. روی ویرایش منبع کلیک کنید.
  2. کل محتویات فایل های index.js و package.json را با موارد موجود در محیط توسعه محلی خود جایگزین کنید.
  3. روی Save و redeploy کلیک کنید.
  4. منتظر تکمیل موفقیت آمیز استقرار ویرایش باشید.

487b64f2d3b1a104.png

آن را امتحان کنید

  1. در فضای پیام مستقیم با برنامه Chat در Google Chat ، What can you do for me? و enter را فشار دهید. برنامه باید توصیف کند که چه کاری می تواند انجام دهد (ابزارهای MCP).

13535bfd31d85a50.png

  1. در فضای پیام مستقیم با برنامه Chat در Google Chat ، تایپ کنید I would like to get the latest official documentation for the Google Sheets API append values و enter فشار دهید. برنامه باید با اسناد درخواستی (با استفاده از ابزار MCP) پاسخ دهد.

8a6f4ac5b7d5fa4a.png

7. برنامه چند نوبتی

این برنامه بر اساس Format app با افزودن پشتیبانی از حافظه مکالمه با ردیابی تاریخچه تعاملات چت ساخته شده است. این یک تجربه طبیعی تر، هوشمندانه تر و شخصی تر را امکان پذیر می کند. این برنامه از پایگاه داده پیش فرض Google Cloud Firestore مرتبط با پروژه Google Cloud آنها برای ذخیره سازی استفاده می کند.

مفاهیم را مرور کنید

چند چرخشی

مفهوم چند چرخشی به توانایی یک مدل برای حفظ زمینه ها و تداوم در میان مبادلات و مکالمات متعدد اشاره دارد. این یک ویژگی ضروری برای پشتیبانی از مکالمات پیچیده، عملکردهای پیچیده مبتنی بر هوش مصنوعی و تجربه کاربر طبیعی است.

Google Cloud Firestore

Google Cloud Firestore یک پایگاه داده ابری انعطاف پذیر و مقیاس پذیر NoSQL برای توسعه موبایل، وب و سرور است. داده‌ها را در اسناد ذخیره می‌کند، در مجموعه‌ها سازمان‌دهی می‌شود و امکان همگام‌سازی بلادرنگ و پشتیبانی آفلاین را فراهم می‌کند.

بررسی جریان

52920a2227467218.png

کد منبع را مرور کنید

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 را فعال کنید

  1. در کنسول Google Cloud ، Google Cloud Firestore API را فعال کنید:

  1. روی Menu ☰ > APIs & Services > Enabled APIs & Services کلیک کنید و سپس تأیید کنید که Cloud Firestore API در لیست است.

ایجاد پایگاه داده Cloud Firestore

  1. در کنسول Google Cloud ، روی Menu ☰ > Firestore کلیک کنید

  1. روی ایجاد پایگاه داده Firestore کلیک کنید
  2. تنظیمات پیش فرض را رها کرده و روی Create Database کلیک کنید

عملکرد Google Cloud Run Node.js را به روز کنید

  1. در محیط توسعه محلی خود، دایرکتوری فعلی را به node/chat/gen-ai-apps/5-multi-turn تغییر دهید. این شامل کل کد منبع و منابع است.
  2. به برگه منبع در صفحه جزئیات سرویس عملکرد Google Cloud Run بروید.

  1. روی ویرایش منبع کلیک کنید.
  2. کل محتویات فایل های index.js و package.json را با موارد موجود در محیط توسعه محلی خود جایگزین کنید.
  3. روی Save و redeploy کلیک کنید.
  4. منتظر تکمیل موفقیت آمیز استقرار ویرایش باشید.

487b64f2d3b1a104.png

آن را امتحان کنید

  1. در فضای پیام مستقیم با برنامه چت در Google Chat ، تایپ کنید Can you speak with the English from the 80's for now on? و enter را فشار دهید. برنامه باید پاسخ مثبت دهد.

b273beda7e203b23.png

  1. در فضای پیام مستقیم با برنامه چت در Google Chat ، Define what Google Chat apps are in one sentence را تایپ کنید و enter فشار دهید. این برنامه باید با انگلیسی های دهه 80 پاسخ دهد.

9156f563c369f186.png

8. برنامه ابزار سفارشی

این برنامه با افزودن پشتیبانی از یک ابزار سفارشی فراخوانی تابع که برای بازیابی رویداد بعدی از یک تقویم عمومی به Google Workspace Calendar API متکی است، بر روی Multi-turn app ساخته می‌شود. این مدل تمام تعاملات کاربر از جمله دریافت ورودی و تحویل خروجی از ابزار را مدیریت می کند. با این حال، برنامه همچنان مسئول اجرای فراخوان‌های API ضروری و ارائه نتایج به مدل در صورت درخواست است. این برنامه از یک کلید API Google استفاده می کند زیرا برای واکشی داده های تقویم عمومی نیازی به اعتبارنامه کاربر نیست.

مفاهیم را مرور کنید

فراخوانی تابع

فراخوانی تابع به یک مدل امکان می دهد تشخیص دهد که چه زمانی درخواست کاربر می تواند توسط یک ابزار خارجی یا API انجام شود. سپس مدل پارامترهای مورد نیاز برای فراخوانی آن ابزار را فراهم می کند و عملکردهای خارجی را در پاسخ های خود ادغام می کند.

APIهای Google Workspace

APIهای Google Workspace به توسعه دهندگان این امکان را می دهند تا برنامه های خود را با سرویس های مختلف Google Workspace یکپارچه کنند. این APIها دسترسی برنامه‌ریزی شده به قابلیت‌های محصولاتی مانند Gmail، Chat، Calendar، Drive، Docs، Sheets و موارد دیگر را فراهم می‌کنند و امکان اتوماسیون، همگام‌سازی داده‌ها و ایجاد گردش‌های کاری سفارشی را فراهم می‌کنند.

بررسی جریان

ed866ca369a4512f.png

کد منبع را مرور کنید

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 را فعال کنید

  1. در کنسول Google Cloud ، Google Calendar API را فعال کنید:

  1. روی Menu ☰ > APIs & Services > Enabled APIs & Services کلیک کنید و سپس تأیید کنید که Google Calendar API در لیست است.

کلید Google API را ایجاد کنید

در کنسول Google Cloud ، این مراحل را دنبال کنید:

  1. روی Menu ☰ > APIs & Services > Credentials کلیک کنید.

  1. روی + Create credentials کلیک کنید و سپس کلید API را انتخاب کنید.
  2. منتظر اتمام عملیات باشید.
  3. در گفتگوی تأیید، فیلد متنی Your API Key را پیدا کنید و روی Copy to clipboard کلیک کنید.

عملکرد Google Cloud Run Node.js را به روز کنید

  1. در محیط توسعه محلی خود، دایرکتوری فعلی را به node/chat/gen-ai-apps/6-custom-tool تغییر دهید. این شامل کل کد منبع و منابع است.
  2. به برگه منبع در صفحه جزئیات سرویس عملکرد Google Cloud Run بروید.

  1. روی ویرایش منبع کلیک کنید.
  2. کل محتویات فایل های index.js و package.json را با موارد موجود در محیط توسعه محلی خود جایگزین کنید.
  3. فایل env.js را باز کنید و مراحل زیر را انجام دهید
  4. googleApiKey را به فیلدهای صادر شده اضافه کنید
export const env = {
 ...
 googleApiKey: 'your-google-api-key',
};
  1. your-google-api-key API را که در مرحله قبل کپی شده بود جایگزین کنید. با کلیک کردن روی نمایش کلید می توان آن را از صفحه اعتبارنامه Google Cloud بازیابی کرد.

  1. روی Save و redeploy کلیک کنید.
  2. منتظر تکمیل موفقیت آمیز استقرار ویرایش باشید.

487b64f2d3b1a104.png

آن را امتحان کنید

  1. در Google Calendar ، این مراحل را دنبال کنید:
  2. در زیر تقویم های دیگر ، روی + کلیک کنید، سپس روی ایجاد تقویم جدید کلیک کنید.
  3. نام را روی My Public Calendar تنظیم کنید
  4. روی ایجاد تقویم کلیک کنید
  5. منتظر اتمام عملیات باشید.
  6. در قسمت تنظیمات برای تقویم‌های من ، تقویم جدید ایجاد شده را انتخاب کنید
  7. در زیر مجوزهای دسترسی برای رویدادها ، در دسترس قرار دادن برای عموم را انتخاب کنید و سپس روی OK در گفتگوی هشدار کلیک کنید.
  8. در بخش مجوزهای دسترسی برای رویدادها ، مشاهده تمام جزئیات رویداد را از منوی کشویی کنار گزینه در دسترس قرار دادن برای عموم انتخاب کنید.
  9. در بخش ادغام تقویم ، مقدار فیلد Calendar ID را در کلیپ بورد کپی کنید
  10. برای خروج از تنظیمات، روی فلش سمت چپ در گوشه بالا سمت چپ کلیک کنید.
  11. برای ایجاد یک رویداد جدید برای فردا، روی تقویم کلیک کنید، Important meeting تایپ کنید، تقویم عمومی من را از منوی کشویی انتخاب کنید، سپس روی ذخیره کلیک کنید.
  12. در فضای پیام مستقیم با برنامه چت در Google Chat ، When is the next meeting? و enter را فشار دهید. برنامه باید یک دقت درخواست کند زیرا مشخص نیست به کدام تقویم ارجاع داده شده است.

40383099311b0813.png

  1. در فضای پیام مستقیم با برنامه Chat در Google Chat ، شناسه تقویم را که قبلاً کپی کرده‌اید در کلیپ‌بورد جای‌گذاری کنید و enter فشار دهید. برنامه باید با جزئیات مربوط به رویداد ایجاد شده قبلی پاسخ دهد.

4c614c7e444e3b45.png

9. برنامه استریم

این برنامه برای تولید داستان های 2 دقیقه ای بر اساس مضامین ارائه شده توسط کاربران، به مدل Gemini متکی است. از آنجایی که تولید پاسخ‌های کامل زمان می‌برد، برنامه در حالت استریم با مدل تماس می‌گیرد و برای ارسال محتویات و وضعیت‌ها در پیام‌ها در حین پیشرفت، به Google Chat API متکی است.

مفاهیم را مرور کنید

Google Chat API

Google Chat API به توسعه‌دهندگان اجازه می‌دهد تا به صورت برنامه‌نویسی با Google Chat تعامل داشته باشند، و آنها را قادر می‌سازد پیام ارسال کنند، فضا ایجاد کنند، اعضا را مدیریت کنند، و موارد دیگر را برای ایجاد ادغام‌ها و ربات‌های سفارشی.

جریان

جریان به فرآیند دریافت داده در یک جریان پیوسته به جای انتظار برای تولید کل پاسخ اشاره دارد. هنگامی که صحبت از تماس‌های مدل هوش مصنوعی به میان می‌آید، استریم به برنامه‌ها اجازه می‌دهد تا نتایج جزئی را به محض در دسترس شدن کاربران به نمایش بگذارند و عملکرد درک شده و تجربه کاربر را بهبود بخشد، به‌ویژه برای کارهای نسل طولانی‌تر. این امر به ویژه برای مدل‌های هوش مصنوعی مولد که ممکن است زمان قابل‌توجهی برای تولید یک خروجی کامل طول بکشد، مرتبط است.

بررسی جریان

25f9036eecd9a48b.png

کد منبع را مرور کنید

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"
},
...

عملکرد Google Cloud Run Node.js را به روز کنید

  1. در محیط توسعه محلی خود، دایرکتوری فعلی را به node/chat/gen-ai-apps/7-stream تغییر دهید. این شامل کل کد منبع و منابع است.
  2. به برگه منبع در صفحه جزئیات سرویس عملکرد Google Cloud Run بروید.

  1. روی ویرایش منبع کلیک کنید.
  2. کل محتویات فایل های index.js و package.json را با موارد موجود در محیط توسعه محلی خود جایگزین کنید.
  3. روی Save و redeploy کلیک کنید.
  4. منتظر تکمیل موفقیت آمیز استقرار ویرایش باشید.

487b64f2d3b1a104.png

آن را امتحان کنید

در فضای پیام مستقیم با برنامه چت در Google Chat ، turtle را تایپ کرده و enter فشار دهید. برنامه باید با یک پیام تأیید، داستان تولید شده با وضعیت پیشرفت و یک پیام تأیید تکمیل پاسخ دهد.

17600cd1490972c7.png

26af4b3d442712a5.png

10. برنامه چند وجهی

این برنامه به مدلی برای ویرایش تصاویر بر اساس دستورالعمل های متنی کاربران متکی است. هم کاربران و هم برنامه تصاویر خود را به عنوان پیوست پیام چت Google برای تبادل اضافه می کنند. این برنامه برای دانلود و آپلود تصاویر به صورت برنامه‌ریزی شده به APIهای چت Google متکی است.

مفاهیم را مرور کنید

پیوست پیام چت Google

پیوست‌های پیام گپ Google فایل‌هایی مانند تصاویر یا ویدیوها هستند که در پیام گپ Google آپلود می‌شوند. این پیوست‌ها را می‌توان به‌صورت برنامه‌ریزی مدیریت کرد و برنامه‌ها را قادر می‌سازد تا مستقیماً در گفتگو با رسانه‌های غنی تعامل داشته باشند.

نمایندگی سراسری دامنه (DWD)

Delegation گسترده دامنه (DWD) به یک حساب سرویس اجازه می‌دهد هویت کاربران را در دامنه Google Workspace جعل کند و برنامه‌ها را قادر می‌سازد تا بدون مجوز مستقیم از طرف آن کاربران اقداماتی را انجام دهند. این برای برنامه‌هایی که نیاز به دسترسی به داده‌های کاربر یا انجام اقداماتی (مانند آپلود پیوست‌ها در چت Google) در زمینه کاربر دارند، مفید است، حتی زمانی که کاربر فعالانه حضور ندارد، با دادن دسترسی گسترده به حساب سرویس در سراسر دامنه.

بررسی جریان

74295b25761f1682.png

کد منبع را مرور کنید

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!'
 }}}}});
});
...

حساب سرویس را پیکربندی کنید و کلید خصوصی را صادر کنید

  1. برای مدیریت پیام‌های Google Chat برای کاربران، حساب سرویس پیش‌فرض Cloud Run را واگذار کنید. دستورالعمل ها را با محدوده https://www.googleapis.com/auth/chat.messages دنبال کنید. برای بازیابی Client ID حساب سرویس پیش‌فرض Cloud Run، این مراحل را دنبال کنید:
  2. روی Menu ☰ > IAM & Admin > Service Accounts کلیک کنید

  1. روی حساب سرویس با نام حساب پیش فرض خدمات محاسبه کلیک کنید.
  2. بخش تنظیمات پیشرفته را باز کنید
  3. شناسه مشتری را در کلیپ بورد کپی کنید.
  4. یک کلید خصوصی جدید برای حساب سرویس پیش‌فرض Cloud Run ایجاد و دانلود کنید
  5. روی Menu ☰ > IAM & Admin > Service Accounts کلیک کنید

  1. روی حساب سرویس با نام حساب پیش فرض خدمات محاسبه کلیک کنید.
  2. برگه Keys را انتخاب کنید، روی Add key کلیک کنید و سپس Create new key را بزنید .
  3. JSON را انتخاب کنید، سپس روی ایجاد کلیک کنید.
  4. جفت کلید عمومی/خصوصی جدید شما تولید شده و به عنوان یک فایل جدید در دستگاه شما دانلود می شود. فایل JSON دانلود شده را ذخیره کنید و محتوای آن را در کلیپ بورد کپی کنید. این فایل تنها کپی این کلید است. برای اطلاعات در مورد نحوه ذخیره ایمن کلید خود، به مدیریت کلیدهای حساب سرویس مراجعه کنید.

عملکرد Google Cloud Run Node.js را به روز کنید

  1. در محیط توسعه محلی خود، دایرکتوری فعلی را به node/chat/gen-ai-apps/8-multimodal تغییر دهید. این شامل کل کد منبع و منابع است.
  2. به برگه منبع در صفحه جزئیات سرویس عملکرد Google Cloud Run بروید.

  1. روی ویرایش منبع کلیک کنید.
  2. روی ➕ کلیک کنید، credentials.json را تایپ کنید و ✔️برای ایجاد فایل منبع گم شده کلیک کنید.
  3. محتویات فایل JSON دانلود شده در مرحله قبل را در فایل credentials.json جدید ایجاد شده جای‌گذاری کنید.
  4. کل محتویات فایل index.js را با محتوای موجود در محیط توسعه محلی خود جایگزین کنید.
  5. فایل env.js را باز کنید و مقدار model را روی gemini-2.0-flash-preview-image-generation قرار دهید.
...
model: 'gemini-2.0-flash-preview-image-generation',
...
  1. روی Save و redeploy کلیک کنید.
  2. منتظر تکمیل موفقیت آمیز استقرار ویرایش باشید.

487b64f2d3b1a104.png

آن را امتحان کنید

در فضای پیام مستقیم با برنامه چت در Google Chat ، یک عکس پرتره از خودتان با فرمت PNG آپلود کنید، Change the background color to blue را تایپ کنید و enter فشار دهید. برنامه باید با نسخه ای از تصویر با پس زمینه آبی و یک پیام تأیید تکمیل پاسخ دهد.

270547e7a83c1841.png

11. پاکسازی کنید

پروژه Google Cloud را حذف کنید

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این کد لبه، توصیه می کنیم پروژه Google Cloud را حذف کنید.

در کنسول Google Cloud ، این مراحل را دنبال کنید:

  1. روی Menu ☰ > IAM & Admin > Settings کلیک کنید.

  1. روی Shut down کلیک کنید.
  2. شناسه پروژه را وارد کنید.
  3. روی Shut down به هر حال کلیک کنید.

407699a4e03afea6.png

12. تبریک می گویم

تبریک می گویم! شما برنامه‌های Google Chat را به‌عنوان افزودنی‌های Google Workspace ساختید که مفاهیم اساسی هوش مصنوعی را ادغام می‌کنند!

بعدش چی؟

ما فقط موارد استفاده مینیمالیستی را در این لبه کد به نمایش می‌گذاریم، اما مناطق گسترش زیادی وجود دارد که ممکن است بخواهید در برنامه‌های Google Chat خود در نظر بگیرید، مانند موارد زیر:

  • از انواع دیگر رسانه ها مانند صدا و تصویر پشتیبانی کنید.
  • با سایر مدل‌های هوش مصنوعی، از جمله گمرک، که در پلتفرم‌های اختصاصی مانند Vertex AI میزبانی می‌شوند، یکپارچه شوید.
  • ادغام با نمایندگان، از جمله گمرک، میزبانی شده در سیستم عامل های اختصاصی مانند Agentspace و Dialogflow CX.
  • برای نظارت و بهبود عملکرد به حلقه‌ها و طبقه‌بندی‌های بازخورد تکیه کنید.
  • برای توانمندسازی تیم ها، سازمان ها یا کاربران عمومی در بازار منتشر کنید.

بیشتر بدانید

منابع زیادی برای توسعه دهندگان در دسترس است مانند ویدیوهای YouTube، وب سایت های اسناد، نمونه کد و آموزش: