ادغام نمایندگان سازمانی Gemini با Google Workspace

۱. قبل از شروع

83e1c1629d14fb31.png

شرکت جمینی انترپرایز چیست؟

Gemini Enterprise یک پلتفرم عامل‌گرای پیشرفته است که بهترین‌های هوش مصنوعی گوگل را برای هر کارمند و برای هر گردش کاری به ارمغان می‌آورد. این پلتفرم به تیم‌ها این امکان را می‌دهد که عامل‌های هوش مصنوعی را در یک محیط امن کشف، ایجاد، به اشتراک بگذارند و اجرا کنند.

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

۱۲۷f2ed7d484722c.png

گوگل ورک اسپیس چیست؟

Google Workspace مجموعه‌ای از راهکارهای بهره‌وری و همکاری مبتنی بر ابر است که برای افراد، مدارس و کسب‌وکارها طراحی شده است:

  • ارتباطات: سرویس‌های ایمیل حرفه‌ای (Gmail)، کنفرانس ویدیویی (Meet) و پیام‌رسانی تیمی (Chat).
  • تولید محتوا: ابزارهایی برای نوشتن اسناد (Docs)، ساخت صفحات گسترده (Sheets) و طراحی ارائه‌ها (Slides).
  • سازماندهی: تقویم‌های مشترک (Calendars) و یادداشت‌برداری دیجیتال (Keep).
  • فضای ذخیره‌سازی: فضای ابری متمرکز برای ذخیره و اشتراک‌گذاری ایمن فایل‌ها (Drive).
  • مدیریت: کنترل‌های مدیریتی برای مدیریت کاربران و تنظیمات امنیتی (کنسول مدیریت فضای کاری).

چه نوع ادغام‌های سفارشی؟

Google Workspace و Gemini Enterprise یک حلقه بازخورد قدرتمند ایجاد می‌کنند که در آن Workspace داده‌های بلادرنگ و زمینه همکاری را فراهم می‌کند، در حالی که Gemini Enterprise مدل‌ها، استدلال عاملی و هماهنگی لازم برای خودکارسازی گردش‌های کاری هوشمند را ارائه می‌دهد.

  • اتصال هوشمند: انبارهای داده تحت مدیریت گوگل، APIها و سرورهای MCP (تحت مدیریت گوگل و سفارشی) به نمایندگان اجازه می‌دهد تا به طور ایمن و یکپارچه به داده‌های Workspace دسترسی داشته باشند و از طرف کاربران اقداماتی را انجام دهند.
  • عامل‌های سفارشی: با استفاده از طراحان بدون کد یا چارچوب‌های حرفه‌ای، تیم‌ها می‌توانند عامل‌های تخصصی مبتنی بر داده‌ها و اقدامات فضای کاری تحت مدیریت ادمین بسازند.
  • ادغام بومی: افزونه‌های فضای کاری، چه از طریق اجزای رابط کاربری اختصاصی و چه از طریق فرآیندهای پس‌زمینه، شکاف بین سیستم‌های هوش مصنوعی و برنامه‌هایی مانند چت و جیمیل را پر می‌کنند. این امر به کارشناسان اجازه می‌دهد تا دقیقاً در همان جایی که کاربران هستند، با آنها ملاقات کنند و از کمک‌های فوری و آگاهانه بهره‌مند شوند.

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

پیش‌نیازها

اگر می‌خواهید تمام مراحل را در محیط خودتان دنبال کنید، به موارد زیر نیاز خواهید داشت:

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

در این آزمایشگاه کد، ما سه راهکار با استفاده از عامل‌های هوش مصنوعی Gemini Enterprise که به طور کامل با Google Workspace یکپارچه شده‌اند، می‌سازیم. آن‌ها الگوهای معماری را نشان می‌دهند که می‌توانند برای تعامل با داده‌ها، اقدامات و رابط‌های کاربری استفاده شوند.

عامل سفارشی بدون کد

این عامل به کاربران اجازه می‌دهد تا داده‌ها را جستجو کرده و اقداماتی را برای Workspace به زبان طبیعی خود انجام دهند. این عامل به عناصر زیر متکی است:

  • مدل: جمینی.
  • داده‌ها و اقدامات: داده‌های Gemini Enterprise برای Google Workspace (تقویم، جیمیل، درایو، NotebookLM)، جستجوی گوگل ذخیره می‌شوند.
  • ابزارهای ساخت عامل: طراح عامل Gemini Enterprise.
  • میزبان نماینده: شرکت جمینی انترپرایز
  • رابط کاربری: اپلیکیشن وب Gemini Enterprise

90e42539e5959634.png

60e62437ce29a818.png

عامل سفارشی پروکد

این عامل به کاربران اجازه می‌دهد تا با استفاده از ابزارها و قوانین سفارشی، داده‌ها را جستجو کرده و اقداماتی را برای Workspace به زبان طبیعی خود انجام دهند. این عامل بر عناصر زیر متکی است:

1647ebff031c42e7.png

a8087d2351e77fb4.png

عامل پیش‌فرض به عنوان افزونه Google Workspace

این عامل به کاربران اجازه می‌دهد تا داده‌ها را برای Workspace به زبان طبیعی خود در چارچوب رابط‌های کاربری برنامه Workspace جستجو کنند. این عامل به عناصر زیر متکی است:

  • مدل: جمینی.
  • داده‌ها: داده‌های Gemini Enterprise برای Google Workspace (تقویم، جیمیل، درایو، NotebookLM)، جستجوی گوگل ذخیره می‌شوند.
  • میزبان نماینده: شرکت جمینی انترپرایز
  • رابط کاربری: افزونه‌ی Google Workspace برای چت و جیمیل (به راحتی قابل گسترش به تقویم، درایو، اسناد، برگه‌ها و اسلایدها).
  • افزونه‌ی Google Workspace: اسکریپت برنامه‌ها، رابط‌های برنامه‌نویسی Gemini Enterprise و Vertex AI، زمینه‌ای (فراداده‌ی کاربر، پیام Gmail انتخاب‌شده).

c8c63fb3f324fecf.png

d33b8cb50ee251b7.png

آنچه یاد خواهید گرفت

  • نقاط ادغام بین Gemini Enterprise و Google Workspace که داده‌ها و اقدامات را فعال می‌کنند.
  • گزینه‌های بدون کد و حرفه‌ای برای ساخت عامل‌های سفارشی میزبانی‌شده در Gemini Enterprise.
  • روش‌هایی که کاربران می‌توانند از طریق برنامه وب Gemini Enterprise و برنامه‌های Google Workspace به Agentها دسترسی داشته باشند.

۲. آماده شوید

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

اپلیکیشن Gemini Enterprise

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

اپلیکیشن وب Gemini Enterprise

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

مقداردهی اولیه و دسترسی به منابع

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

اپلیکیشن Gemini Enterprise

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

  1. پروژه خود را انتخاب کنید.
  2. در قسمت جستجوی Google Cloud، عبارت Gemini Enterprise را جستجو و انتخاب کنید، سپس روی + Create app کلیک کنید. اگر مجوز Gemini Enterprise ندارید، از شما خواسته می‌شود که یک مجوز آزمایشی رایگان 30 روزه را فعال کنید.

  1. نام برنامه را codelab قرار دهید.
  2. یک شناسه بر اساس نام ایجاد می‌شود و در زیر فیلد نمایش داده می‌شود، آن را کپی کنید.
  3. گزینه چند-منطقه‌ای را روی global (Global) تنظیم کنید.
  4. روی ایجاد کلیک کنید.

8712ada39377205e.png

  1. برنامه ایجاد شده است و شما به طور خودکار به Gemini Enterprise > Overview هدایت می‌شوید.
  2. در قسمت «دسترسی کامل» ، روی «تنظیم هویت» کلیک کنید.
  3. در صفحه جدید، گزینه «استفاده از هویت گوگل» را انتخاب کرده و روی «تأیید هویت نیروی کار» کلیک کنید.

3209c156eff4ba43.png

  1. پیکربندی ذخیره می‌شود و شما به طور خودکار به Gemini Enterprise > Overview هدایت می‌شوید.
  2. به بخش پیکربندی‌ها (Configurations) بروید.
  3. در برگه مدیریت ویژگی‌ها ، گزینه فعال کردن طراح عامل را فعال کنید، روی ذخیره کلیک کنید.

f0cd9da419b41cb6.png

اپلیکیشن وب Gemini Enterprise

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

  1. روی برنامه‌ای به نام codelab کلیک کنید.
  2. آدرس اینترنتی (URL) نمایش داده شده را کپی کنید، زیرا در مراحل بعدی از آن برای پیمایش به برنامه وب Gemini Enterprise استفاده خواهیم کرد.

b46ee6176744565d.png

۳. عامل سفارشی بدون کد

این عامل به کاربران اجازه می‌دهد تا داده‌ها را جستجو کرده و اقداماتی را برای Workspace به زبان طبیعی خود انجام دهند. این عامل به عناصر زیر متکی است:

  • مدل: جمینی.
  • داده‌ها و اقدامات: داده‌های Gemini Enterprise برای Google Workspace (تقویم، جیمیل، درایو، NotebookLM)، جستجوی گوگل ذخیره می‌شوند.
  • ابزارهای ساخت عامل: طراح عامل Gemini Enterprise.
  • میزبان نماینده: شرکت جمینی انترپرایز
  • رابط کاربری: اپلیکیشن وب Gemini Enterprise

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

جوزا

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

فروشگاه داده Gemini Enterprise

یک مخزن داده Gemini Enterprise موجودیتی است که شامل داده‌های دریافت‌شده از یک منبع داده شخص ثالث مانند Google Workspace یا برنامه‌های شخص ثالث مانند Jira یا Salesforce است. مخازن داده‌ای که حاوی داده‌های برنامه‌های شخص ثالث هستند، رابط‌های داده نیز نامیده می‌شوند.

طراح عامل سازمانی Gemini

طراح عامل Gemini Enterprise یک پلتفرم تعاملی بدون کد و کم کد برای ایجاد، مدیریت و راه‌اندازی عامل‌های تک مرحله‌ای و چند مرحله‌ای در Gemini Enterprise است.

بررسی معماری راهکار

e77aafb772502aaf.png

فعال کردن APIها

انبارهای داده Gemini Enterprise Workspace نیاز به فعال‌سازی APIها دارند:

  1. در کنسول گوگل کلود ، APIهای تقویم، جیمیل و People را فعال کنید:

573322606b715a69.png

  1. روی منو ☰ > APIها و خدمات > APIها و خدمات فعال‌شده کلیک کنید و سپس تأیید کنید که API تقویم گوگل ، API جیمیل و API افراد در لیست هستند.

اقدامات تقویم فضای کاری سازمانی Gemini و Gmail نیاز به پیکربندی صفحه رضایت دارند:

  1. در کنسول گوگل کلود ، روی منو ☰ > پلتفرم گوگل آث > برندسازی کلیک کنید.

  1. روی شروع به کار کلیک کنید.
  2. در قسمت اطلاعات برنامه ، نام برنامه را روی Codelab تنظیم کنید.
  3. در ایمیل پشتیبانی کاربر ، یک آدرس ایمیل پشتیبانی انتخاب کنید که کاربران در صورت داشتن هرگونه سوال در مورد رضایت خود بتوانند با شما تماس بگیرند.
  4. روی بعدی کلیک کنید.
  5. در قسمت مخاطبان ، داخلی (Internal) را انتخاب کنید.
  6. روی بعدی کلیک کنید.
  7. در قسمت اطلاعات تماس ، یک آدرس ایمیل وارد کنید که از طریق آن بتوانید از هرگونه تغییر در پروژه خود مطلع شوید.
  8. روی بعدی کلیک کنید.
  9. در قسمت Finish ، سیاست داده‌های کاربر سرویس‌های API گوگل را مرور کنید و در صورت موافقت، گزینه «من با سیاست‌های داده‌های کاربر سرویس‌های API گوگل موافقم» را انتخاب کنید.
  10. روی ادامه و سپس ایجاد کلیک کنید.

578c2b38219b2f7b.png

  1. پیکربندی ذخیره شده است و شما به طور خودکار به Google Auth Platform > Overview هدایت می‌شوید.
  2. به بخش دسترسی به داده‌ها بروید.
  3. روی افزودن یا حذف محدوده‌ها کلیک کنید.
  4. محدوده‌های زیر را کپی کرده و در فیلد «افزودن دستی محدوده‌ها» قرار دهید.
https://www.googleapis.com/auth/calendar.readonly
https://www.googleapis.com/auth/calendar.events
https://www.googleapis.com/auth/calendar.calendars
https://www.googleapis.com/auth/gmail.send
https://www.googleapis.com/auth/gmail.readonly
  1. روی افزودن به جدول ، سپس به‌روزرسانی و در نهایت ذخیره کلیک کنید.

874b1dda14e8f379.png

برای کسب اطلاعات بیشتر، به راهنمای کامل پیکربندی رضایت OAuth مراجعه کنید.

ایجاد اعتبارنامه‌های کلاینت OAuth

برای احراز هویت کاربران، یک کلاینت OAuth جدید برای Gemini Enterprise ایجاد کنید:

  1. در کنسول گوگل کلود ، روی منو ☰ > پلتفرم گوگل آث > کلاینت‌ها کلیک کنید.

  1. روی + ایجاد کلاینت کلیک کنید.
  2. برای نوع برنامه ، برنامه وب را انتخاب کنید.
  3. نام را روی codelab تنظیم کنید.
  4. از منابع جاوا اسکریپت مجاز صرف نظر کنید.
  5. در بخش Authorized redirect URIs ، روی Add URI کلیک کنید و https://vertexaisearch.cloud.google.com/oauth-redirect را وارد کنید.
  6. روی ایجاد کلیک کنید.
  7. یک کادر محاوره‌ای حاوی شناسه و رمز کلاینت OAuth که به تازگی ایجاد کرده‌اید، ظاهر می‌شود. این اطلاعات را در جای امنی ذخیره کنید.

a46e5ebfb851aea5.png

ایجاد انبارهای داده

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

  1. روی برنامه‌ای به نام codelab کلیک کنید.
  2. در منوی پیمایش، روی «ذخیره‌های داده متصل» کلیک کنید.
  3. روی + فروشگاه داده جدید کلیک کنید.
  4. در بخش منبع ، عبارت «تقویم گوگل» را جستجو کنید و روی «انتخاب» کلیک کنید.
  5. در بخش اقدامات ، شناسه کلاینت و راز کلاینت ذخیره شده از مراحل قبلی را وارد کنید، و سپس روی تأیید اعتبار کلیک کنید و مراحل را برای تأیید اعتبار و مجوزدهی کلاینت OAuth دنبال کنید.
  6. فعال کردن اقدامات «ایجاد رویداد تقویم» و «به‌روزرسانی رویداد تقویم» .
  7. روی ادامه کلیک کنید.

a1d76e70edec0cf.png

  1. در بخش پیکربندی ، نام کانکتور داده را روی calendar تنظیم کنید.
  2. روی ایجاد کلیک کنید.
  3. شما به طور خودکار به فروشگاه‌های داده متصل هدایت می‌شوید که در آنجا می‌توانید فروشگاه داده تازه اضافه شده را مشاهده کنید.

ایجاد مخزن داده گوگل جیمیل:

  1. روی + فروشگاه داده جدید کلیک کنید.
  2. در قسمت منبع ، عبارت Google Gmail را جستجو کنید و روی انتخاب (Select) کلیک کنید.
  3. در بخش اقدامات ، شناسه کلاینت و راز کلاینت ذخیره شده از مراحل قبلی را وارد کنید و سپس روی تأیید اعتبار کلیک کنید.
  4. فعال کردن عملکرد ارسال ایمیل .
  5. روی ادامه کلیک کنید.
  6. در بخش پیکربندی ، نام رابط داده را روی gmail تنظیم کنید.
  7. روی ایجاد کلیک کنید.
  8. شما به طور خودکار به فروشگاه‌های داده متصل هدایت می‌شوید که در آنجا می‌توانید فروشگاه داده تازه اضافه شده را مشاهده کنید.

ایجاد فروشگاه داده گوگل درایو:

  1. روی + فروشگاه داده جدید کلیک کنید.
  2. در قسمت منبع ، عبارت Google Drive را جستجو کنید و روی انتخاب (Select) کلیک کنید.
  3. در بخش داده‌ها ، همه را انتخاب کنید، سپس روی ادامه کلیک کنید.
  4. در بخش پیکربندی ، نام کانکتور داده را روی drive تنظیم کنید.
  5. روی ایجاد کلیک کنید.
  6. شما به طور خودکار به فروشگاه‌های داده متصل هدایت می‌شوید که در آنجا می‌توانید فروشگاه داده تازه اضافه شده را مشاهده کنید.

ایجاد مخزن داده NotebookLM:

  1. روی + فروشگاه داده جدید کلیک کنید.
  2. در بخش منبع ، NotebookLM را جستجو کنید و روی انتخاب (Select) کلیک کنید.
  3. در بخش پیکربندی ، نام کانکتور داده را روی notebooklm تنظیم کنید.
  4. روی ایجاد کلیک کنید.
  5. شما به طور خودکار به فروشگاه‌های داده متصل هدایت می‌شوید که در آنجا می‌توانید فروشگاه داده تازه اضافه شده را مشاهده کنید.

پس از چند دقیقه، وضعیت تمام وضعیت‌های ذخیره‌ساز داده متصل (به جز NotebookLM) فعال خواهد شد. در صورت مشاهده هرگونه خطا، می‌توانید روی منبع داده کلیک کنید تا جزئیات خطا را مشاهده کنید.

ceba9eb2480a2696.png

فروشگاه‌های داده آزمایشی

آدرس اینترنتی برنامه وب Gemini Enterprise را که قبلاً کپی کردیم، باز کنید:

  1. روی منو ☰ > گفتگوی جدید کلیک کنید.
  2. در پایین صفحه‌ی پیام چت جدید، روی آیکون کانکتورها کلیک کنید و همه کانکتورها را فعال کنید.
  3. اکنون می‌توانید با دستورات مربوط به رابط‌ها آزمایش کنید. برای مثال، در چت، عبارت « Do I have any meetings today? را تایپ کنید و enter بزنید.
  4. سپس، عبارت How many emails did I receive today? را تایپ کنید و enter را بزنید.
  5. در نهایت، عبارت Give me the title of the last Drive file I created را تایپ کنید و enter بزنید.

90e42539e5959634.png

ایجاد عامل سفارشی

در برنامه وب Gemini Enterprise، با استفاده از Agent Designer یک عامل جدید ایجاد کنید:

  1. روی منو ☰ > + نماینده جدید کلیک کنید.
  2. در چت، عبارت An agent that always sends pirate-themed emails but use normal English otherwise را تایپ کنید و enter را بزنید.

2803c1dedd20433e.png

  1. طراح عامل، عامل را بر اساس درخواست، پیش‌نویس می‌کند و آن را در ویرایشگر باز می‌کند.
  2. روی ایجاد کلیک کنید

عامل سفارشی را امتحان کنید

  1. در برنامه وب Gemini Enterprise، با نماینده تازه ایجاد شده چت کنید:
  2. روی منو ☰ > نمایندگان کلیک کنید.
  3. نماینده مورد نظر را از قسمت «نمایندگان شما» انتخاب کنید.
  4. در پایین صفحه‌ی پیام چت جدید، روی آیکون Connectors کلیک کنید، سپس روی Enable actions for Mail کلیک کنید و دستورالعمل‌ها را برای تأیید نماینده دنبال کنید.
  5. در چت، عبارت « Send an email to someone@example.com saying I'll see them at Cloud Next, generate some subject and body yourself و enter را بزنید. می‌توانید ایمیل نمونه را با آدرس ایمیل خود جایگزین کنید.
  6. برای ارسال ایمیل، روی ✔️ کلیک کنید.

60e62437ce29a818.png

d4fb65d14fdf27da.png

۴. عامل سفارشی پروکد

این عامل به کاربران اجازه می‌دهد تا با استفاده از ابزارها و قوانین سفارشی، داده‌ها را جستجو کرده و اقداماتی را برای Workspace به زبان طبیعی خود انجام دهند. این عامل بر عناصر زیر متکی است:

این برنامه با استفاده از ویژگی «آوردن به خانه» در Gemini Enterprise ادغام خواهد شد، بنابراین باید مراحل استقرار، ثبت و پیکربندی را طی کنیم.

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

هوش مصنوعی ورتکس

ورتکس ای‌آی هر آنچه را که برای ساخت و استفاده از هوش مصنوعی مولد نیاز دارید، از جمله راه‌حل‌های هوش مصنوعی، جستجو و مکالمه، بیش از ۱۳۰ مدل پایه و یک پلتفرم هوش مصنوعی یکپارچه، ارائه می‌دهد.

4670fcf7a826af4d.png

کیت توسعه عامل (ADK)

کیت توسعه عامل (ADK) مجموعه‌ای تخصصی از ابزارها و چارچوب‌ها است که برای ساده‌سازی ایجاد عامل‌های هوش مصنوعی مستقل با ارائه ماژول‌های از پیش ساخته شده برای استدلال، مدیریت حافظه و ادغام ابزار طراحی شده است.

مدل زمینه پروتکل (MCP)

پروتکل زمینه مدل (MCP) یک استاندارد باز است که برای ایجاد یکپارچه‌سازی یکپارچه و ایمن بین برنامه‌های هوش مصنوعی و منابع داده یا ابزارهای مختلف از طریق یک رابط جهانی "plug-and-play" طراحی شده است.

ابزار عملکرد

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

بررسی معماری راهکار

۴۳df337e0f3d64e8.png

بررسی کد منبع

عامل.py

...
MODEL = "gemini-2.5-flash"

# Gemini Enterprise authentication injects a bearer token into the ToolContext state.
# The key pattern is "GE_AUTH_NAME_<random_digits>".
# We dynamically parse this token to authenticate our MCP and API calls.
GE_AUTH_NAME = "enterprise-ai"

VERTEXAI_SEARCH_TIMEOUT = 15.0

def get_project_id():
    """Fetches the consumer project ID from the environment natively."""
    _, project = google.auth.default()
    if project:
        return project
    raise Exception(f"Failed to resolve GCP Project ID from environment.")

def find_serving_config_path():
    """Dynamically finds the default serving config in the engine."""
    project_id = get_project_id()
    engines = discoveryengine_v1.EngineServiceClient().list_engines(
        parent=f"projects/{project_id}/locations/global/collections/default_collection"
    )
    for engine in engines:
        # engine.name natively contains the numeric Project Number
        return f"{engine.name}/servingConfigs/default_serving_config"
    raise Exception(f"No Discovery Engines found in project {project_id}")

def _get_access_token_from_context(tool_context: ToolContext) -> str:
    """Helper method to dynamically parse the intercepted bearer token from the context state."""
    escaped_name = re.escape(GE_AUTH_NAME)
    pattern = re.compile(fr"^{escaped_name}_\d+$")
    # Handle ADK varying state object types (Raw Dict vs ADK State)
    state_dict = tool_context.state.to_dict() if hasattr(tool_context.state, 'to_dict') else tool_context.state
    matching_keys = [k for k in state_dict.keys() if pattern.match(k)]
    if matching_keys:
        return state_dict.get(matching_keys[0])
    raise Exception(f"No bearer token found in ToolContext state matching pattern {pattern.pattern}")

def auth_header_provider(tool_context: ToolContext) -> dict[str, str]:
    token = _get_access_token_from_context(tool_context)
    return {"Authorization": f"Bearer {token}"}

def send_direct_message(email: str, message: str, tool_context: ToolContext) -> dict:
    """Sends a Google Chat Direct Message (DM) to a specific user by email address."""
    chat_client = chat_v1.ChatServiceClient(
        credentials=Credentials(token=_get_access_token_from_context(tool_context))
    )

    # 1. Setup the DM space or find existing one
    person = chat_v1.User(
        name=f"users/{email}",
        type_=chat_v1.User.Type.HUMAN
    )
    membership = chat_v1.Membership(member=person)
    space_req = chat_v1.Space(space_type=chat_v1.Space.SpaceType.DIRECT_MESSAGE)
    setup_request = chat_v1.SetUpSpaceRequest(
        space=space_req,
        memberships=[membership]
    )
    space_response = chat_client.set_up_space(request=setup_request)
    space_name = space_response.name
    
    # 2. Send the message
    msg = chat_v1.Message(text=message)
    message_request = chat_v1.CreateMessageRequest(
        parent=space_name,
        message=msg
    )
    message_response = chat_client.create_message(request=message_request)
    
    return {"status": "success", "message_id": message_response.name, "space": space_name}

vertexai_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://discoveryengine.googleapis.com/mcp",
        timeout=VERTEXAI_SEARCH_TIMEOUT,
        sse_read_timeout=VERTEXAI_SEARCH_TIMEOUT
    ),
    tool_filter=['search'],
    # The auth_header_provider dynamically injects the bearer token from the ToolContext
    # into the MCP call for authentication.
    header_provider=auth_header_provider
)

# Answer nicely the following user queries:
#  - Please find my meetings for today, I need their titles and links
#  - What is the latest Drive file I created?
#  - What is the latest Gmail message I received?
#  - Please send the following message to someone@example.com: Hello, this is a test message.

root_agent = LlmAgent(
    model=MODEL,
    name='enterprise_ai',
    instruction=f"""
        You are a helpful assistant that always uses the Vertex AI MCP search tool to answer the user's message, unless the user asks you to send a message to someone.
        If the user asks you to send a message to someone, use the send_direct_message tool to send the message.
        You MUST unconditionally use the Vertex AI MCP search tool to find answer, even if you believe you already know the answer or believe the Vertex AI MCP search tool does not contain the data.
        The Vertex AI MCP search tool accesses the user's data through datastores including Google Drive, Google Calendar, and Gmail.
        Only use the Vertex AI MCP search tool with servingConfig and query parameters, do not use any other parameters.
        Always use the servingConfig {find_serving_config_path()} while using the Vertex AI MCP search tool.
    """,
    tools=[vertexai_mcp, FunctionTool(send_direct_message)]
)

فعال کردن APIها

این راهکار نیاز به فعال‌سازی APIهای اضافی دارد:

  1. در کنسول Google Cloud ، رابط‌های برنامه‌نویسی Vertex AI، Cloud Resource Manager و Google Chat را فعال کنید:

4f02a36b050bab00.png

  1. روی منو ☰ > APIها و خدمات > APIها و خدمات فعال‌شده کلیک کنید و سپس تأیید کنید که Vertex AI API ، Cloud Resource Manager API و Google Chat API در لیست هستند.

این راهکار نیاز به دسترسی به داده‌های اضافی دارد:

  1. در کنسول گوگل کلود ، روی منو ☰ > پلتفرم گوگل آث > دسترسی به داده‌ها کلیک کنید.

  1. روی افزودن یا حذف محدوده‌ها کلیک کنید.
  2. محدوده‌های زیر را کپی کرده و در فیلد «افزودن دستی محدوده‌ها» قرار دهید.
  3. روی افزودن به جدول ، سپس به‌روزرسانی و در نهایت ذخیره کلیک کنید.
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/chat.messages.create
https://www.googleapis.com/auth/chat.spaces.create
  1. روی افزودن به جدول ، سپس به‌روزرسانی و در نهایت ذخیره کلیک کنید.

56fbba733139acfe.png

به‌روزرسانی اعتبارنامه‌های کلاینت OAuth

این راهکار به یک URI ریدایرکت مجاز اضافی نیاز دارد:

  1. در کنسول گوگل کلود ، روی منو ☰ > پلتفرم گوگل آث > کلاینت‌ها کلیک کنید.

  1. روی نام کلاینت codelab کلیک کنید.
  2. در بخش Authorized redirect URIs ، روی Add URI کلیک کنید و https://vertexaisearch.cloud.google.com/static/oauth/oauth.html را وارد کنید.
  3. روی ذخیره کلیک کنید.

سند597aa54fec91.png

فعال کردن جستجوی هوش مصنوعی Vertex در MCP

  1. در یک ترمینال، اجرا کنید:
gcloud beta services mcp enable discoveryengine.googleapis.com \
     --project=$(gcloud config get-value project)

پیکربندی برنامه چت

  1. در کنسول گوگل کلود ، در قسمت جستجوی گوگل کلود، Google Chat API را جستجو کنید، روی Google Chat API کلیک کنید، روی Manage کلیک کنید و در نهایت روی Configuration کلیک کنید.

  1. نام و توضیحات برنامه را روی Gemini Enterprise تنظیم کنید.
  2. آدرس اینترنتی آواتار را روی https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png تنظیم کنید.
  3. گزینه‌ی «فعال کردن ویژگی‌های تعاملی» را از حالت انتخاب خارج کنید و سپس در پنجره‌ی محاوره‌ای ظاهر شده، روی «غیرفعال کردن» کلیک کنید.
  4. برای ثبت وقایع، گزینه ثبت خطاها را انتخاب کنید.
  5. روی ذخیره کلیک کنید.

90cb612e51bce4e6.png

استقرار عامل در موتور عامل هوش مصنوعی Vertex

  1. این مخزن گیت‌هاب را دانلود کنید.

  1. در یک ترمینال، دایرکتوری solutions/enterprise-ai-agent را باز کنید و سپس دستور زیر را اجرا کنید:
# 1. Create and activate a new virtual environment
python3 -m venv .venv
source .venv/bin/activate

# 2. Install poetry and project dependencies
pip install poetry
poetry install

# 3. Deploy the agent
adk deploy agent_engine \
  --project=$(gcloud config get-value project) \
  --region=us-central1 \
  --display_name="Enterprise AI" \
  enterprise_ai

eafd2f9c4fbf305.png

  1. وقتی خط Deploying to agent engine... را در لاگ‌ها مشاهده کردید، یک ترمینال جدید باز کنید و دستور زیر را برای اضافه کردن مجوزهای لازم به Vertex AI Reasoning Engine Service Agent اجرا کنید:
# 1. Get the current Project ID
PROJECT_ID=$(gcloud config get-value project)

# 2. Extract the Project Number for that ID
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

# 3. Construct the Service Account name
SERVICE_ACCOUNT="service-${PROJECT_NUMBER}@gcp-sa-aiplatform-re.iam.gserviceaccount.com"

# 4. Apply the IAM policy binding
gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member="serviceAccount:$SERVICE_ACCOUNT" \
     --role="roles/discoveryengine.viewer"
  1. منتظر بمانید تا دستور adk deploy تکمیل شود، سپس نام منبع عامل تازه مستقر شده را از خروجی دستور با رنگ سبز کپی کنید.

d098fe1347d6581b.png

ثبت نماینده در Gemini Enterprise

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

  1. روی برنامه‌ای به نام codelab کلیک کنید.
  2. در منوی ناوبری، روی «نمایندگی‌ها» کلیک کنید.
  3. روی + افزودن نماینده کلیک کنید.
  4. برای افزودن نماینده سفارشی از طریق موتور عامل ، روی «افزودن» کلیک کنید. بخش «مجوزها» نمایش داده می‌شود.
  5. روی افزودن مجوز کلیک کنید.
  6. نام مجوز را روی enterprise-ai تنظیم کنید. یک شناسه بر اساس نام ایجاد می‌شود و در زیر فیلد نمایش داده می‌شود، آن را کپی کنید.
  7. شناسه کلاینت را روی همان مقداری که کلاینت OAuth در مراحل قبلی ایجاد و به‌روزرسانی شده بود، تنظیم کنید.
  8. مقدار Client secret را برابر با مقدار OAuth client ایجاد شده و به‌روزرسانی شده در مراحل قبلی قرار دهید.
  9. آدرس توکن (Token URI) را روی https://oauth2.googleapis.com/token تنظیم کنید.
  10. پس از جایگزینی <CLIENT_ID> با شناسه کلاینت OAuth که در مراحل قبلی ایجاد و به‌روزرسانی شده است، مقدار Authorization URI را به صورت زیر تنظیم کنید.
https://accounts.google.com/o/oauth2/v2/auth?client_id=<CLIENT_ID>&redirect_uri=https%3A%2F%2Fvertexaisearch.cloud.google.com%2Fstatic%2Foauth%2Foauth.html&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.calendars%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.events%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.send%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fchat.messages.create%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fchat.spaces.create&include_granted_scopes=true&response_type=code&access_type=offline&prompt=consent
  1. روی «انجام شد» و سپس «بعدی» کلیک کنید. بخش «پیکربندی» نمایش داده می‌شود.
  2. نام عامل و توضیحات عامل را روی Enterprise AI تنظیم کنید.
  3. موتور استدلال Agent Engine را روی نام منبع موتور استدلال که در مراحل قبلی کپی شده است، تنظیم کنید. این موتور دارای فرمت زیر است:
projects/<PROJECT_ID>/locations/<LOCATION>/reasoningEngines/<REASONING_ENGINE_ID>
  1. روی ایجاد کلیک کنید. عامل تازه اضافه شده اکنون در زیر Agents فهرست شده است.

عامل را امتحان کنید

  1. در برنامه وب Gemini Enterprise، با نماینده تازه ثبت شده گپ بزنید:
  2. روی منو ☰ > نمایندگان کلیک کنید.
  3. عامل را در قسمت « از سازمان شما» انتخاب کنید.
  4. در چت، عبارت Please find my meetings for today, I need their titles and links تایپ کنید و enter بزنید.
  5. روی «مجوز دادن» کلیک کنید، سپس مراحل مجوزدهی را دنبال کنید.

ed61cf654cbcd76c.png

  1. عامل با فهرستی از رویدادهای تقویم (بسته به حساب کاربر) پاسخ می‌دهد.
  2. در چت، عبارت Please send a Chat message to someone@example.com with the following text: Hello! و کلید enter فشار دهید.
  3. نماینده با یک پیام تأیید پاسخ می‌دهد.

1647ebff031c42e7.png

a8087d2351e77fb4.png

۵. عامل پیش‌فرض به عنوان افزونه‌ی Google Workspace

این عامل به کاربران اجازه می‌دهد تا داده‌ها را برای Workspace به زبان طبیعی خود در زمینه رابط‌های کاربری برنامه Workspace جستجو کنند. این عامل به عناصر زیر متکی است:

  • مدل: جمینی.
  • داده‌ها: داده‌های Gemini Enterprise برای Google Workspace (تقویم، جیمیل، درایو، NotebookLM)، جستجوی گوگل ذخیره می‌شوند.
  • میزبان نماینده: شرکت جمینی انترپرایز
  • رابط کاربری: افزونه‌ی Google Workspace برای چت و جیمیل (به راحتی قابل گسترش به تقویم، درایو، اسناد، برگه‌ها و اسلایدها).
  • افزونه‌ی Google Workspace: اسکریپت برنامه‌ها، رابط‌های برنامه‌نویسی Gemini Enterprise و Vertex AI، زمینه‌ای (فراداده‌ی کاربر، پیام Gmail انتخاب‌شده).

افزونه‌ی Google Workspace با استفاده از StreamAssist API به Gemini Enterprise متصل خواهد شد.

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

افزونه‌ی گوگل ورک اسپیس

افزونه‌ی Google Workspace یک برنامه‌ی سفارشی است که یک یا چند برنامه‌ی Google Workspace (Gmail، Chat، Calendar، Docs، Drive، Meet، Sheets و Slides) را گسترش می‌دهد.

اسکریپت برنامه‌ها

Apps Script یک پلتفرم جاوا اسکریپت مبتنی بر ابر است که توسط گوگل درایو پشتیبانی می‌شود و به شما امکان می‌دهد وظایف را در محصولات گوگل ادغام و خودکارسازی کنید.

چارچوب کارت فضای کاری گوگل

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

بررسی معماری راهکار

1798c39f7aaed8fc.png

بررسی کد منبع

appsscript.json

...
"addOns": {
    "common": {
      "name": "Enterprise AI",
      "logoUrl": "https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png"
    },
    "chat": {},
    "gmail": {
      "contextualTriggers": [
        {
          "unconditional": {},
          "onTriggerFunction": "onAddonEvent"
        }
      ]
    }
  },
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/discoveryengine.assist.readwrite",
    "https://www.googleapis.com/auth/gmail.addons.execute",
    "https://www.googleapis.com/auth/gmail.addons.current.message.readonly"
  ]
...

چت.gs

...
// Service that handles Google Chat operations.

// Handle incoming Google Chat message events, actions will be taken via Google Chat API calls
function onMessage(event) {
  if (isInDebugMode()) {
    console.log(`MESSAGE event received (Chat): ${JSON.stringify(event)}`);
  }
  // Extract data from the event.
  const chatEvent = event.chat;
  setChatConfig(chatEvent.messagePayload.space.name);

  // Request AI agent to answer the message
  requestAgent(chatEvent.messagePayload.message);
  // Respond with an empty response to the Google Chat platform to acknowledge execution
  return null; 
}

// --- Utility functions ---

// The Chat direct message (DM) space associated with the user
const SPACE_NAME_PROPERTY = "DM_SPACE_NAME"

// Sets the Chat DM space name for subsequent operations.
function setChatConfig(spaceName) {
  const userProperties = PropertiesService.getUserProperties();
  userProperties.setProperty(SPACE_NAME_PROPERTY, spaceName);
  console.log(`Space is set to ${spaceName}`);
}

// Retrieved the Chat DM space name to sent messages to.
function getConfiguredChat() {
  const userProperties = PropertiesService.getUserProperties();
  return userProperties.getProperty(SPACE_NAME_PROPERTY);
}

// Finds the Chat DM space name between the Chat app and the given user.
function findChatAppDm(userName) {
  return Chat.Spaces.findDirectMessage(
    { 'name': userName },
    {'Authorization': `Bearer ${getAddonCredentials().getAccessToken()}`}
  ).name;
}

// Creates a Chat message in the configured space.
function createMessage(message) {
  const spaceName = getConfiguredChat();
  console.log(`Creating message in space ${spaceName}...`);
  return Chat.Spaces.Messages.create(
    message,
    spaceName,
    {},
    {'Authorization': `Bearer ${getAddonCredentials().getAccessToken()}`}
  ).name;
}

نوار کناری.gs

...
// Service that handles Gmail operations.

// Triggered when the user opens the Gmail Add-on or selects an email.
function onAddonEvent(event) {
  // If this was triggered by a button click, handle it
  if (event.parameters && event.parameters.action === 'send') {
    return handleSendMessage(event);
  }

  // Otherwise, just render the default initial sidebar
  return createSidebarCard();
}

// Creates the standard Gmail sidebar card consisting of a text input and send button.
// Optionally includes an answer section if a response was generated.
function createSidebarCard(optionalAnswerSection) {
  const card = CardService.newCardBuilder();
  const actionSection = CardService.newCardSection();

  // Create text input for the user's message
  const messageInput = CardService.newTextInput()
    .setFieldName("message")
    .setTitle("Message")
    .setMultiline(true);

  // Create action for sending the message
  const sendAction = CardService.newAction()
    .setFunctionName('onAddonEvent')
    .setParameters({ 'action': 'send' });

  const sendButton = CardService.newTextButton()
    .setText("Send message")
    .setTextButtonStyle(CardService.TextButtonStyle.FILLED)
    .setOnClickAction(sendAction);

  actionSection.addWidget(messageInput);
  actionSection.addWidget(CardService.newButtonSet().addButton(sendButton));

  card.addSection(actionSection);

  // Attach the response at the bottom if we have one
  if (optionalAnswerSection) {
    card.addSection(optionalAnswerSection);
  }

  return card.build();
}

// Handles clicks from the Send message button.
function handleSendMessage(event) {
  const commonEventObject = event.commonEventObject || {};
  const formInputs = commonEventObject.formInputs || {};
  const messageInput = formInputs.message;

  let userMessage = "";
  if (messageInput && messageInput.stringInputs && messageInput.stringInputs.value.length > 0) {
    userMessage = messageInput.stringInputs.value[0];
  }

  if (!userMessage || userMessage.trim().length === 0) {
    return CardService.newActionResponseBuilder()
      .setNotification(CardService.newNotification().setText("Please enter a message."))
      .build();
  }

  let finalQueryText = `USER MESSAGE TO ANSWER: ${userMessage}`;

  // If we have an email selected in Gmail, append its content as context
  if (event.gmail && event.gmail.messageId) {
    try {
      GmailApp.setCurrentMessageAccessToken(event.gmail.accessToken);
      const message = GmailApp.getMessageById(event.gmail.messageId);

      const subject = message.getSubject();
      const bodyText = message.getPlainBody() || message.getBody();

      finalQueryText += `\n\nEMAIL THE USER HAS OPENED ON SCREEN:\nSubject: ${subject}\nBody:\n---\n${bodyText}\n---`;
    } catch (e) {
      console.error("Could not fetch Gmail context: " + e);
      // Invalidate the token explicitly so the next prompt requests the missing scopes
      ScriptApp.invalidateAuth();

      CardService.newAuthorizationException()
        .setResourceDisplayName("Enterprise AI")
        .setAuthorizationUrl(ScriptApp.getAuthorizationUrl())
        .throwException();
    }
  }

  try {
    const responseText = queryAgent({ text: finalQueryText, forceNewSession: true });

    // We leverage the 'showdown' library to parse the LLM's Markdown output into HTML
    // We also substitute markdown listings with arrows and adjust newlines for clearer rendering in the sidebar
    let displayedText = substituteListingsFromMarkdown(responseText);
    displayedText = new showdown.Converter().makeHtml(displayedText).replace(/\n/g, '\n\n');

    const textParagraph = CardService.newTextParagraph();
    textParagraph.setText(displayedText);

    const answerSection = CardService.newCardSection()
      .addWidget(textParagraph);

    const updatedCard = createSidebarCard(answerSection);

    return CardService.newActionResponseBuilder()
      .setNavigation(CardService.newNavigation().updateCard(updatedCard))
      .build();

  } catch (err) {
    return CardService.newActionResponseBuilder()
      .setNotification(CardService.newNotification().setText("Error fetching response: " + err.message))
      .build();
  }
}
...

AgentHandler.gs

...
// Service that handles Gemini Enterprise AI Agent operations.

// Submits a query to the AI agent and returns the response string synchronously
function queryAgent(input) {
  const isNewSession = input.forceNewSession || !PropertiesService.getUserProperties().getProperty(AGENT_SESSION_NAME);
  const sessionName = input.forceNewSession ? createAgentSession() : getOrCreateAgentSession();

  let systemPrompt = "SYSTEM PROMPT START Do not respond with tables but use bullet points instead.";
  if (input.forceNewSession) {
    systemPrompt += " Do not ask the user follow-up questions or converse with them as history is not kept in this interface.";
  }
  systemPrompt += " SYSTEM PROMPT END\n\n";

  const queryText = isNewSession ? systemPrompt + input.text : input.text;

  const requestPayload = {
    "session": sessionName,
    "userMetadata": { "timeZone": Session.getScriptTimeZone() },
    "query": { "text": queryText },
    "toolsSpec": { "vertexAiSearchSpec": { "dataStoreSpecs": getAgentDataStores().map(ds => { dataStore: ds }) } },
    "agentsSpec": { "agentSpecs": [{ "agentId": getAgentId() }] }
  };

  const responseContentText = UrlFetchApp.fetch(
    `https://${getLocation()}-discoveryengine.googleapis.com/v1alpha/${getReasoningEngine()}/assistants/default_assistant:streamAssist?alt=sse`,
    {
      method: 'post',
      headers: { 'Authorization': `Bearer ${ScriptApp.getOAuthToken()}` },
      contentType: 'application/json',
      payload: JSON.stringify(requestPayload),
      muteHttpExceptions: true
    }
  ).getContentText();

  if (isInDebugMode()) {
    console.log(`Response: ${responseContentText}`);
  }

  const events = responseContentText.split('\n').map(s => s.replace(/^data:\s*/, '')).filter(s => s.trim().length > 0);
  console.log(`Received ${events.length} agent events.`);

  let answerText = "";
  for (const eventJson of events) {
    if (isInDebugMode()) {
      console.log("Event: " + eventJson);
    }
    const event = JSON.parse(eventJson);

    // Ignore internal events
    if (!event.answer) {
      console.log(`Ignored: internal event`);
      continue;
    }

    // Handle text replies
    const replies = event.answer.replies || [];
    for (const reply of replies) {
      const content = reply.groundedContent.content;
      if (content) {
        if (isInDebugMode()) {
          console.log(`Processing content: ${JSON.stringify(content)}`);
        }
        if (content.thought) {
          console.log(`Ignored: thought event`);
          continue;
        }
        answerText += content.text;
      }
    }

    if (event.answer.state === "SUCCEEDED") {
      console.log(`Answer text: ${answerText}`);
      return answerText;
    } else if (event.answer.state !== "IN_PROGRESS") {
      throw new Error("Something went wrong, check the Apps Script logs for more info.");
    }
  }
  return answerText;
}

// Gets the list of data stores configured for the agent to include in the request.
function getAgentDataStores() {
  const responseContentText = UrlFetchApp.fetch(
    `https://${getLocation()}-discoveryengine.googleapis.com/v1/${getReasoningEngine().split('/').slice(0, 6).join('/')}/dataStores`,
    {
      method: 'get',
      // Use the add on service account credentials for data store listing access
      headers: { 'Authorization': `Bearer ${getAddonCredentials().getAccessToken()}` },
      contentType: 'application/json',
      muteHttpExceptions: true
    }
  ).getContentText();
  if (isInDebugMode()) {
    console.log(`Response: ${responseContentText}`);
  }
  const dataStores = JSON.parse(responseContentText).dataStores.map(ds => ds.name);
  if (isInDebugMode()) {
    console.log(`Data stores: ${dataStores}`);
  }
  return dataStores;
}
...

شروع حساب کاربری سرویس

در کنسول گوگل کلود ، مراحل زیر را دنبال کنید:

  1. روی منو ☰ > مدیریت و دسترسی > حساب‌های سرویس > + ایجاد حساب سرویس کلیک کنید.

  1. نام حساب سرویس را روی ge-add-on تنظیم کنید.

d44d6aae29e2464c.png

  1. روی ایجاد کلیک کنید و ادامه دهید .
  2. نقش Discovery Engine Viewer را در مجوزها اضافه کنید.

f1374efa4f326ef5.png

  1. روی ادامه و سپس انجام شد کلیک کنید. شما به صفحه حساب‌های سرویس هدایت می‌شوید و می‌توانید حساب سرویسی را که ایجاد کرده‌اید مشاهده کنید.

b9496085f1404c5c.png

  1. حساب کاربری سرویس تازه ایجاد شده و سپس تب Keys را انتخاب کنید.
  2. روی افزودن کلید و سپس ایجاد کلید جدید کلیک کنید.
  3. JSON را انتخاب کنید و سپس روی ایجاد کلیک کنید.

f4280f5533a08821.png

  1. پنجره بسته می‌شود و جفت کلید عمومی/خصوصی تازه ایجاد شده شما به طور خودکار به عنوان یک فایل JSON در محیط محلی شما دانلود می‌شود.

ایجاد و پیکربندی پروژه اسکریپت برنامه‌ها

  1. برای باز کردن پروژه‌ی افزونه‌ی Enterprise AI در Apps Script، روی دکمه‌ی زیر کلیک کنید:

  1. روی نمای کلی > ایجاد یک کپی کلیک کنید.
  2. در پروژه Apps Script خود، برای افزودن ویژگی‌های اسکریپت، روی تنظیمات پروژه > ویرایش ویژگی‌های اسکریپت > افزودن ویژگی اسکریپت کلیک کنید.
  3. مقدار REASONING_ENGINE_RESOURCE_NAME را برابر با نام منبع برنامه Gemini Enterprise قرار دهید. این نام دارای فرمت زیر است:
# 1. Replace PROJECT_ID with the Google Cloud project ID.
# 2. Replace GE_APP_ID with the codelab app ID found in Google Cloud console > Gemini Enterprise > Apps.

projects/<PROJECT_ID>/locations/global/collections/default_collection/engines/<GE_APP_ID>
  1. مقدار APP_SERVICE_ACCOUNT_KEY را روی کلید JSON از فایل حساب سرویس دانلود شده در مراحل قبلی تنظیم کنید.
  2. روی ذخیره ویژگی‌های اسکریپت کلیک کنید

به Gmail و Chat منتقل شوید

در پروژه Apps Script خود، این مراحل را دنبال کنید:

  1. روی Deploy > Test deployments و سپس Install کلیک کنید. اکنون در Gmail در دسترس است.
  2. روی کپی در زیر شناسه استقرار سر (Head Deployment ID) کلیک کنید.

2ed2df972ad92715.png

در کنسول گوگل کلود ، مراحل زیر را دنبال کنید:

  1. در فیلد جستجوی Google Cloud، Google Chat API را جستجو کنید، روی Google Chat API کلیک کنید، روی Manage و در نهایت روی Configuration کلیک کنید.

  1. فعال کردن ویژگی‌های تعاملی را انتخاب کنید.
  2. گزینه «پیوستن به فضاها و مکالمات گروهی» را از حالت انتخاب خارج کنید.
  3. در بخش تنظیمات اتصال ، گزینه Apps Script را انتخاب کنید.
  4. شناسه استقرار (Deployment ID) را روی شناسه استقرار اصلی (Head Deployment ID) که در مراحل قبلی کپی شده بود، تنظیم کنید.
  5. در قسمت «قابلیت مشاهده» ، گزینه «این برنامه چت را برای افراد و گروه‌های خاص در دامنه فضای کاری خود در دسترس قرار دهید» را انتخاب کنید و آدرس ایمیل خود را وارد کنید.
  6. روی ذخیره کلیک کنید.

3b7d461c423f7c51.png

افزونه را امتحان کنید

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

  1. با برنامه چت Gemini Enterprise یک فضای پیام مستقیم باز کنید.

3da8690d19baf2d0.png

  1. روی پیکربندی کلیک کنید و مراحل احراز هویت را طی کنید.
  2. عبارت « What are my meetings for today? را تایپ کنید و enter بزنید. برنامه چت Gemini Enterprise باید نتایج را نمایش دهد.

c8c63fb3f324fecf.png

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

  1. برای خودتان ایمیلی بفرستید که موضوع آن « We need to talk و متن آن Are you available today between 8 and 9 AM?
  2. پیام ایمیل تازه دریافت شده را باز کنید.
  3. افزونه‌ی Enterprise AI را در نوار کناری باز کنید.
  4. پیام را روی « Am I? تنظیم کنید.
  5. روی ارسال پیام کلیک کنید.
  6. پاسخ بعد از دکمه نمایش داده می‌شود.

d33b8cb50ee251b7.png

۶. تمیز کردن

حذف پروژه گوگل کلود

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

در کنسول گوگل کلود ، مراحل زیر را دنبال کنید:

  1. روی منو ☰ > مدیریت و شناسه کاربری > تنظیمات کلیک کنید.

  1. روی خاموش کردن کلیک کنید.
  2. شناسه پروژه را وارد کنید.
  3. روی «در هر صورت خاموش شو» کلیک کنید.

3b9492d97f771b2c.png

۷. تبریک

تبریک! شما راهکارهایی ساخته‌اید که قدرت نزدیک‌تر کردن Gemini Enterprise و Google Workspace را برای کارمندان به کار می‌گیرد!

بعدش چی؟

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

  • از ابزارهای توسعه‌دهنده مبتنی بر هوش مصنوعی مانند Gemini CLI و Antigravity استفاده کنید.
  • با سایر چارچوب‌ها و ابزارهای عامل مانند MCPهای سفارشی، فراخوانی‌های تابع سفارشی و رابط‌های کاربری مولد ادغام شود.
  • با سایر مدل‌های هوش مصنوعی، از جمله گمرک، که در پلتفرم‌های اختصاصی مانند Vertex AI میزبانی می‌شوند، ادغام شوید.
  • با سایر نمایندگان، که در پلتفرم‌های اختصاصی مانند Dialogflow یا توسط اشخاص ثالث از طریق Cloud Marketplace میزبانی می‌شوند، ادغام شوید.
  • برای توانمندسازی تیم‌ها، سازمان‌ها یا کاربران عمومی، عامل‌ها را در بازار ابری منتشر کنید.

بیشتر بدانید

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