Gemini Enterprise Agents'ı Google Workspace ile entegre etme

1. Başlamadan önce

83e1c1629d14fb31.png

Gemini Enterprise nedir?

Gemini Enterprise, Google Yapay Zeka'nın en iyi özelliklerini her çalışanın her iş akışında kullanabileceği gelişmiş bir temsilci platformudur. Bu platform sayesinde ekipler yapay zeka ajanlarını güvenli tek bir ortamda keşfedip oluşturabilir, paylaşabilir ve çalıştırabilir.

  • Gelişmiş modellere erişim: Kullanıcılar, karmaşık iş sorunlarıyla başa çıkmak için Gemini dahil olmak üzere Google'ın en güçlü çok formatlı yapay zekasına anında erişebilir.
  • Özel temsilcilerden yararlanma: Pakette, anında değer sağlamak için araştırma, kodlama ve not alma gibi işlemlerde kullanıma hazır Google temsilcileri bulunur.
  • Her çalışana güç verin: Kodsuz ve profesyonel kod seçenekleri, tüm departmanlardaki personelin iş akışı otomasyonu için kendi özel temsilcilerini oluşturup yönetmesine olanak tanır.
  • Temsilcileri verilerle destekleyin: Temsilciler, yanıtlarının bağlama uygun olmasını sağlamak için şirket içi verilere ve üçüncü taraf uygulamalarına güvenli bir şekilde bağlanabilir.
  • Merkezi yönetim: Yöneticiler, kuruluşun katı güvenlik ve uygunluk standartlarını karşılamasını sağlamak için tüm aracı etkinliklerini görselleştirebilir ve denetleyebilir.
  • Ekosistemlerle genişletme: Platform, otomasyonu farklı sistemlere yaymak için geniş bir iş ortağı uygulamaları ve hizmet sağlayıcı ağıyla entegre olur.

127f2ed7d484722c.png

Google Workspace nedir?

Google Workspace, bireyler, okullar ve işletmeler için tasarlanmış bulut tabanlı üretkenlik ve ortak çalışma çözümlerinden oluşan bir pakettir:

  • İletişim: Profesyonel e-posta hizmetleri (Gmail), video konferans (Meet) ve ekip mesajlaşması (Chat).
  • İçerik Oluşturma: Doküman yazma (Dokümanlar), e-tablo oluşturma (E-Tablolar) ve sunu tasarlama (Slaytlar) araçları.
  • Düzenleme: Paylaşılan takvimler (Takvimler) ve dijital not alma (Keep).
  • Depolama: Dosyaları güvenli bir şekilde kaydetmek ve paylaşmak için merkezi bulut alanı (Drive).
  • Yönetim: Kullanıcıları ve güvenlik ayarlarını yönetmek için yönetim denetimleri (Workspace Yönetici Konsolu).

Ne tür özel entegrasyonlar?

Google Workspace ve Gemini Enterprise, Workspace'in gerçek zamanlı veriler ve ortak çalışma bağlamı sağladığı, Gemini Enterprise'ın ise akıllı iş akışlarını otomatik hale getirmek için gereken modelleri, ajan tabanlı muhakemeyi ve düzenlemeyi sunduğu güçlü bir geri bildirim döngüsü oluşturur.

  • Akıllı bağlantı: Google tarafından yönetilen veri depoları, API'ler ve MCP sunucuları (Google tarafından yönetilen ve özel) sayesinde temsilciler, Workspace verilerine güvenli ve sorunsuz bir şekilde erişebilir ve kullanıcılar adına işlem yapabilir.
  • Özel temsilciler: Ekipler, kod kullanmayan tasarımcıları veya profesyonel kod çerçevelerini kullanarak yönetici tarafından yönetilen Workspace verilerine ve işlemlerine dayalı özel temsilciler oluşturabilir.
  • Yerel entegrasyon: Workspace eklentileri, özel kullanıcı arayüzü bileşenleri veya arka plan işlemleri aracılığıyla yapay zeka sistemleri ile Chat ve Gmail gibi uygulamalar arasındaki boşluğu doldurur. Bu sayede temsilciler, anında ve bağlama uygun yardım için kullanıcılarla bulundukları yerde buluşabilir.

Google Workspace'in güçlü üretkenlik ekosistemini Gemini Enterprise'ın gelişmiş temsilci gücüyle birleştiren kuruluşlar, ekiplerinin her gün kullandığı araçlarda doğrudan karmaşık iş akışlarını otomatik hale getiren özel, veriye dayalı yapay zeka temsilcileri aracılığıyla operasyonlarını dönüştürebilir.

Ön koşullar

Tüm adımları kendi ortamınızda uygulamak istiyorsanız şunlara ihtiyacınız vardır:

Oluşturacağınız içerik

Bu codelab'de, Google Workspace ile sıkı bir şekilde entegre edilmiş Gemini Enterprise yapay zeka temsilcileriyle üç çözüm oluşturuyoruz. Veriler, işlemler ve kullanıcı arayüzleriyle etkileşim kurmak için kullanılabilecek mimari kalıpları gösterirler.

Kodsuz özel temsilci

Bu temsilci, kullanıcıların doğal dillerinde Workspace verilerini aramasına ve Workspace'te işlem yapmasına olanak tanır. Aşağıdaki öğelerden yararlanır:

  • Model: Gemini
  • Veriler ve işlemler: Google Workspace (Takvim, Gmail, Drive, NotebookLM) ve Google Arama için Gemini Enterprise veri depoları.
  • Temsilci oluşturma araçları: Gemini Enterprise Temsilci Tasarımcısı.
  • Aracı ana makinesi: Gemini Enterprise.
  • Kullanıcı arayüzü: Gemini Enterprise web uygulaması.

90e42539e5959634.png

60e62437ce29a818.png

Profesyonel kodlama ile oluşturulan özel temsilci

Bu aracı, kullanıcıların özel araçlar ve kurallar kullanarak doğal dilde Workspace verilerini aramasına ve Workspace'te işlem yapmasına olanak tanır. Aşağıdaki öğelerden yararlanır:

  • Model: Gemini
  • Veriler ve işlemler: Google Workspace (Takvim, Gmail, Drive, NotebookLM), Google Arama, Google tarafından yönetilen Vertex AI Search Model Context Protocol (MCP) sunucusu, Google Chat mesajları göndermek için özel araç işlevi (Google Chat API aracılığıyla) için Gemini Enterprise veri depoları.
  • Temsilci oluşturma araçları: Temsilci Geliştirme Kiti (ADK).
  • Aracı ana makinesi: Vertex AI Agent Engine.
  • Kullanıcı arayüzü: Gemini Enterprise web uygulaması.

1647ebff031c42e7.png

a8087d2351e77fb4.png

Varsayılan aracı olarak Google Workspace eklentisi

Bu aracı, kullanıcıların Workspace uygulaması kullanıcı arayüzleri bağlamında doğal dillerini kullanarak Workspace verilerinde arama yapmasına olanak tanır. Aşağıdaki öğelerden yararlanır:

  • Model: Gemini
  • Veriler: Google Workspace (Takvim, Gmail, Drive, NotebookLM) ve Google Arama için Gemini Enterprise veri depoları.
  • Aracı ana makinesi: Gemini Enterprise.
  • Kullanıcı arayüzü: Chat ve Gmail için Google Workspace eklentisi (Takvim, Drive, Dokümanlar, E-Tablolar ve Slaytlar'a kolayca genişletilebilir).
  • Google Workspace eklentisi: Apps Komut Dosyası, Gemini Enterprise ve Vertex AI API'leri, bağlamsal (kullanıcı meta verileri, seçilen Gmail mesajı).

c8c63fb3f324fecf.png

d33b8cb50ee251b7.png

Öğrenecekleriniz

  • Gemini Enterprise ile Google Workspace arasındaki, veri ve işlemleri etkinleştiren entegrasyon noktaları.
  • Gemini Enterprise'da barındırılan özel temsilciler oluşturmak için kod gerektirmeyen ve profesyonel kodlama seçenekleri.
  • Kullanıcıların Gemini Enterprise web uygulamasından ve Google Workspace uygulamalarından aracılara erişebileceği yöntemler.

2. Hazırlanın

Kavramları inceleme

Gemini Enterprise uygulaması

Gemini Enterprise uygulaması, son kullanıcılarınıza arama sonuçları, işlemler ve ajanlar sunar. API'ler bağlamında uygulama terimi, motor terimiyle birbirinin yerine kullanılabilir. Arama sonuçları, yanıtlar veya işlemler sunmak için verilerin kullanılabilmesi için uygulamanın bir veri deposuna bağlı olması gerekir.

Gemini Enterprise web uygulaması

Gemini Enterprise web uygulaması, Gemini Enterprise uygulamasıyla ilişkilendirilir. Çalışanların, tek bir sohbet arayüzü kullanarak izole edilmiş şirket verileri arasında arama yapabildiği, karmaşık iş akışları için özel yapay zeka temsilcileri çalıştırabildiği ve kurumsal düzeyde gizlilikle profesyonel kalitede içerik oluşturabildiği merkezi bir yapay zeka üssü olarak işlev görür.

Kaynakları başlatma ve kaynaklara erişme

Bu bölümde, tercih ettiğiniz web tarayıcısından aşağıdaki kaynaklara erişip bunları yapılandıracaksınız.

Gemini Enterprise uygulaması

Google Cloud Console'u yeni bir sekmede açın ve şu adımları uygulayın:

  1. Projenizi seçin.
  2. Google Cloud arama alanında Gemini Enterprise'ı arayıp seçin, ardından + Uygulama oluştur'u tıklayın. Gemini Enterprise lisansınız yoksa 30 günlük ücretsiz deneme lisansını etkinleştirmeniz istenir.

  1. Uygulama adını codelab olarak ayarlayın.
  2. Ada göre bir kimlik oluşturulur ve alanın altında gösterilir. Bu kimliği kopyalayın.
  3. Çok bölgeli'yi global (Global) olarak ayarlayın.
  4. Oluştur'u tıklayın.

8712ada39377205e.png

  1. Uygulama oluşturulur ve otomatik olarak Gemini Enterprise > Genel Bakış'a yönlendirilirsiniz.
  2. Tam erişim elde edin bölümünde Kimliği ayarlayın'ı tıklayın.
  3. Yeni ekranda Google kimliğini kullan'ı seçin ve İş gücü kimliğini onayla'yı tıklayın.

3209c156eff4ba43.png

  1. Yapılandırma kaydedilir ve otomatik olarak Gemini Enterprise > Genel bakış'a yönlendirilirsiniz.
  2. Yapılandırmalar'a gidin.
  3. Özellik Yönetimi sekmesinde Enable agent designer'ı (Aracı tasarımcısını etkinleştir) açın ve Save'i (Kaydet) tıklayın.

f0cd9da419b41cb6.png

Gemini Enterprise web uygulaması

Cloud Console'da yeni bir sekmede Gemini Enterprise'ı açın ve şu adımları uygulayın:

  1. codelab adlı uygulamayı tıklayın.
  2. Görünen URL'yi kopyalayın. Bu URL, sonraki adımlarda Gemini Enterprise web uygulamasına gitmek için kullanılacaktır.

b46ee6176744565d.png

3. Kodsuz özel temsilci

Bu temsilci, kullanıcıların doğal dillerinde Workspace verilerini aramasına ve Workspace'te işlem yapmasına olanak tanır. Aşağıdaki öğelerden yararlanır:

  • Model: Gemini
  • Veriler ve işlemler: Google Workspace (Takvim, Gmail, Drive, NotebookLM) ve Google Arama için Gemini Enterprise veri depoları.
  • Temsilci oluşturma araçları: Gemini Enterprise Temsilci Tasarımcısı.
  • Aracı ana makinesi: Gemini Enterprise.
  • Kullanıcı arayüzü: Gemini Enterprise web uygulaması.

Kavramları inceleme

Gemini

Gemini, Google'ın çok formatlı bir LLM'sidir. Kullanıcıların hayal güçlerini artırmalarına, meraklarını genişletmelerine ve üretkenliklerini geliştirmelerine yardımcı olarak potansiyellerini ortaya çıkarmalarını sağlar.

Gemini Enterprise veri deposu

Gemini Enterprise veri deposu, Google Workspace gibi bir birinci taraf veri kaynağından veya Jira ya da Salesforce gibi üçüncü taraf uygulamalarından alınan verileri içeren bir varlıktır. Üçüncü taraf uygulamalarından gelen verileri içeren veri depolarına veri bağlayıcılar da denir.

Gemini Enterprise Agent Designer

Gemini Enterprise Agent Designer, Gemini Enterprise'da tek ve çok adımlı temsilciler oluşturmak, yönetmek ve başlatmak için kullanılan, kod gerektirmeyen etkileşimli bir platformdur.

Çözüm mimarisini inceleme

e77aafb772502aaf.png

API'leri etkinleştirme

Gemini Enterprise Workspace veri depoları için şu API'lerin etkinleştirilmesi gerekir:

  1. Google Cloud Console'da Takvim, Gmail ve People API'lerini etkinleştirin:

573322606b715a69.png

  1. Menü ☰ > API'ler ve Hizmetler > Etkin API'ler ve Hizmetler'i tıklayın ve Google Calendar API, Gmail API ve People API'nin listede olduğunu doğrulayın.

Gemini Enterprise Workspace Takvim ve Gmail işlemleri için izin ekranı yapılandırması gerekir:

  1. Google Cloud Console'da Menü ☰ > Google Auth platform > Markalama'yı tıklayın.

  1. Başlayın'ı tıklayın.
  2. Uygulama Bilgileri bölümünde Uygulama adı'nı Codelab olarak ayarlayın .
  3. Kullanıcı destek e-postası bölümünde, kullanıcıların rızalarıyla ilgili soruları olduğunda sizinle iletişime geçebileceği bir destek e-posta adresi seçin.
  4. İleri'yi tıklayın.
  5. Kitle bölümünde Şirket içi'ni seçin.
  6. İleri'yi tıklayın.
  7. İletişim bilgileri bölümünde, projenizde yapılan değişikliklerle ilgili bildirim alabileceğiniz bir e-posta adresi girin.
  8. İleri'yi tıklayın.
  9. Bitir bölümünde Google API Hizmetleri Kullanıcı Verileri Politikası'nı inceleyin ve kabul ediyorsanız Google API Hizmetleri: Kullanıcı Verileri Politikası'nı kabul ediyorum'u seçin.
  10. Devam'ı, ardından Oluştur'u tıklayın.

578c2b38219b2f7b.png

  1. Yapılandırma kaydedilir ve otomatik olarak Google Auth Platform > Overview'a (Google Kimlik Doğrulama Platformu > Genel Bakış) yönlendirilirsiniz.
  2. Veri Erişimi'ne gidin.
  3. Kapsam ekle veya kaldır'ı tıklayın.
  4. Aşağıdaki kapsamları kopyalayıp Kapsamları manuel olarak ekle alanına yapıştırın.
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. Tabloya ekle'yi, ardından Güncelle'yi ve Kaydet'i tıklayın.

874b1dda14e8f379.png

Daha fazla bilgi için OAuth iznini yapılandırma başlıklı kılavuzun tamamını inceleyin.

OAuth istemci kimlik bilgileri oluşturma

Kullanıcıların kimliğini doğrulamak için Gemini Enterprise'a yönelik yeni bir OAuth istemcisi oluşturun:

  1. Google Cloud Console'da Menü ☰ > Google Auth platform > Clients'ı (İstemciler) tıklayın.

.

  1. + İstemci oluştur'u tıklayın.
  2. Uygulama türü için Web uygulaması'nı seçin.
  3. Name'i (Ad) codelab olarak ayarlayın.
  4. Yetkilendirilmiş JavaScript kaynakları'nı atlayın.
  5. Yetkilendirilmiş yönlendirme URI'leri bölümünde URI ekle'yi tıklayın ve https://vertexaisearch.cloud.google.com/oauth-redirect girin.
  6. Oluştur'u tıklayın.
  7. Yeni oluşturulan OAuth istemci kimliğiniz ve gizli anahtarınızın yer aldığı bir iletişim kutusu gösterilir. Bu bilgileri güvenli bir yerde saklayın.

a46e5ebfb851aea5.png

Veri depoları oluşturma

Cloud Console'dan yeni bir sekmede Gemini Enterprise'ı açın ve şu adımları uygulayın:

  1. codelab adlı uygulamayı tıklayın.
  2. Gezinme menüsünde Bağlı veri depoları'nı tıklayın.
  3. + Yeni veri deposu'nu tıklayın.
  4. Kaynak bölümünde Google Takvim'i arayın ve Seç'i tıklayın.
  5. İşlemler bölümünde, önceki adımlarda kaydedilen İstemci Kimliği ve İstemci Gizli Anahtarı'nı girin, ardından Kimlik Doğrulamayı Onayla'yı tıklayın ve OAuth istemcisinin kimliğini doğrulayıp yetkilendirmek için adımları uygulayın.
  6. Takvim etkinliği oluştur ve Takvim etkinliğini güncelle işlemlerini etkinleştirin.
  7. Devam'ı tıklayın.

a1d76e70edec0cf.png

  1. Yapılandırma bölümünde Veri bağlayıcısı adı'nı calendar olarak ayarlayın.
  2. Oluştur'u tıklayın.
  3. Yeni eklenen veri deposunu görebileceğiniz Bağlı veri depoları'na otomatik olarak yönlendirilirsiniz.

Google Gmail veri deposunu oluşturun:

  1. + Yeni veri deposu'nu tıklayın.
  2. Kaynak bölümünde Google Gmail'i arayın ve Seç'i tıklayın.
  3. İşlemler bölümünde, önceki adımlarda kaydedilen İstemci Kimliği ve İstemci Gizli Anahtarı'nı girin, ardından Yetkilendirmeyi Doğrula'yı tıklayın.
  4. E-posta gönder işlemini etkinleştirin.
  5. Devam'ı tıklayın.
  6. Yapılandırma bölümünde Veri bağlayıcısı adı'nı gmail olarak ayarlayın.
  7. Oluştur'u tıklayın.
  8. Yeni eklenen veri deposunu görebileceğiniz Bağlı veri depoları'na otomatik olarak yönlendirilirsiniz.

Google Drive veri deposunu oluşturun:

  1. + Yeni veri deposu'nu tıklayın.
  2. Kaynak bölümünde Google Drive'ı arayın ve Seç'i tıklayın.
  3. Veri bölümünde Tümü'nü seçip Devam'ı tıklayın.
  4. Yapılandırma bölümünde Veri bağlayıcısı adı'nı drive olarak ayarlayın.
  5. Oluştur'u tıklayın.
  6. Yeni eklenen veri deposunu görebileceğiniz Bağlı veri depoları'na otomatik olarak yönlendirilirsiniz.

NotebookLM veri deposunu oluşturun:

  1. + Yeni veri deposu'nu tıklayın.
  2. Kaynak bölümünde NotebookLM'i arayın ve Seç'i tıklayın.
  3. Yapılandırma bölümünde Veri bağlayıcısı adı'nı notebooklm olarak ayarlayın.
  4. Oluştur'u tıklayın.
  5. Yeni eklenen veri deposunu görebileceğiniz Bağlı veri depoları'na otomatik olarak yönlendirilirsiniz.

Birkaç dakika sonra, bağlı tüm veri deposu durumları (NotebookLM hariç) Etkin olur. Hata görürseniz hata ayrıntılarını görüntülemek için veri kaynağını tıklayabilirsiniz.

ceba9eb2480a2696.png

Test veri depoları

Daha önce kopyaladığımız Gemini Enterprise web uygulaması URL'sini açın:

  1. Menü ☰ > Yeni sohbet'i tıklayın.
  2. Yeni sohbet mesajı alanının altbilgisinde Bağlayıcılar simgesini tıklayın ve tüm bağlayıcıları etkinleştirin.
  3. Artık bağlayıcılarla ilgili istemlerle denemeler yapabilirsiniz. Örneğin, sohbette Do I have any meetings today? yazıp enter tuşuna basın.
  4. Ardından How many emails did I receive today? yazıp enter tuşuna basın.
  5. Son olarak Give me the title of the last Drive file I created yazıp enter tuşuna basın.

90e42539e5959634.png

Özel temsilci oluşturma

Gemini Enterprise web uygulamasında, Temsilci Tasarımcısı'nı kullanarak yeni bir temsilci oluşturun:

  1. Menü ☰ > + Yeni temsilci'yi tıklayın.
  2. Sohbette An agent that always sends pirate-themed emails but use normal English otherwise yazıp enter tuşuna basın.

2803c1dedd20433e.png

  1. Temsilci Tasarlayıcı, isteme göre temsilci taslağı oluşturur ve düzenleyicide açar.
  2. Oluştur'u tıklayın

Özel temsilciyi deneyin

  1. Gemini Enterprise web uygulamasında yeni oluşturulan temsilciyle sohbet edin:
  2. Menü ☰ > Temsilciler'i tıklayın.
  3. Temsilcileriniz bölümünde temsilciyi seçin.
  4. Yeni sohbet mesajı alanının altbilgisinde Bağlayıcılar simgesini, ardından Posta için İşlemleri etkinleştir'i tıklayın ve aracı yetkilendirmek için talimatları uygulayın.
  5. Sohbette Send an email to someone@example.com saying I'll see them at Cloud Next, generate some subject and body yourself yazıp enter tuşuna basın. Örnek e-posta adresini kendi e-posta adresinizle değiştirebilirsiniz.
  6. E-postayı göndermek için ✔️ simgesini tıklayın.

60e62437ce29a818.png

d4fb65d14fdf27da.png

4. Profesyonel kodlama ile özel temsilci

Bu aracı, kullanıcıların özel araçlar ve kurallar kullanarak doğal dilde Workspace verilerini aramasına ve Workspace'te işlem yapmasına olanak tanır. Aşağıdaki öğelerden yararlanır:

  • Model: Gemini
  • Veriler ve işlemler: Google Workspace (Takvim, Gmail, Drive, NotebookLM), Google Arama, Google tarafından yönetilen Vertex AI Search Model Context Protocol (MCP) sunucusu, Google Chat mesajları göndermek için özel araç işlevi (Google Chat API aracılığıyla) için Gemini Enterprise veri depoları.
  • Temsilci oluşturma araçları: Temsilci Geliştirme Kiti (ADK).
  • Aracı ana makinesi: Vertex AI Agent Engine.
  • Kullanıcı arayüzü: Gemini Enterprise web uygulaması.

Bu özellik, kendi özelliğini getirme kullanılarak Gemini Enterprise'a entegre edilecek. Bu nedenle dağıtım, kayıt ve yapılandırma adımlarını tamamlamamız gerekiyor.

Kavramları inceleme

Vertex AI

Vertex AI; yapay zeka çözümleri, arama ve sohbet, 130'dan fazla temel model ve birleşik yapay zeka platformu dahil olmak üzere üretken yapay zeka oluşturmak ve kullanmak için ihtiyacınız olan her şeyi sunar.

4670fcf7a826af4d.png

Agent Development Kit (ADK)

Agent Development Kit (ADK), akıl yürütme, bellek yönetimi ve araç entegrasyonu için önceden oluşturulmuş modüller sağlayarak bağımsız yapay zeka aracı oluşturmayı basitleştirmek üzere tasarlanmış özel bir araç ve çerçeve paketidir.

Model Bağlam Protokolü (MCP)

Model Context Protocol (MCP), evrensel bir "tak ve çalıştır" arayüzü aracılığıyla yapay zeka uygulamaları ile çeşitli veri kaynakları veya araçlar arasında sorunsuz ve güvenli entegrasyon sağlamak için tasarlanmış açık bir standarttır.

İşlev Aracı

İşlev aracı, yapay zeka modelinin belirli işlemleri gerçekleştirmek veya harici sistemlerden gerçek zamanlı verileri almak için tetikleyebileceği, önceden tanımlanmış bir yürütülebilir rutindir. Bu araç, yapay zeka modelinin yeteneklerini basit metin oluşturmanın ötesine taşır.

Çözüm mimarisini inceleme

43df337e0f3d64e8.png

Kaynak kodunu inceleme

agent.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'leri etkinleştirme

Çözüm için ek API'lerin etkinleştirilmesi gerekir:

  1. Google Cloud Console'da Vertex AI, Cloud Resource Manager ve Google Chat API'lerini etkinleştirin:

4f02a36b050bab00.png

  1. Menü ☰ > API'ler ve Hizmetler > Etkin API'ler ve Hizmetler'i tıklayın ve Vertex AI API, Cloud Resource Manager API ve Google Chat API'nin listede olduğunu doğrulayın.

Çözüm için ek veri erişimi gerekir:

  1. Google Cloud Console'da Menü ☰ > Google Auth platform > Data Access'i (Veri Erişimi) tıklayın.

  1. Kapsam ekle veya kaldır'ı tıklayın.
  2. Aşağıdaki kapsamları kopyalayıp Kapsamları manuel olarak ekle alanına yapıştırın.
  3. Tabloya ekle'yi, ardından Güncelle'yi ve Kaydet'i tıklayın.
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/chat.messages.create
https://www.googleapis.com/auth/chat.spaces.create
  1. Tabloya ekle'yi, ardından Güncelle'yi ve Kaydet'i tıklayın.

56fbba733139acfe.png

OAuth istemcisi kimlik bilgilerini güncelleme

Çözüm için ek bir yetkilendirilmiş yönlendirme URI'si gerekir:

  1. Google Cloud Console'da Menü ☰ > Google Auth platform > Clients'ı (İstemciler) tıklayın.

.

  1. Müşteri adını tıklayın codelab.
  2. Yetkilendirilmiş yönlendirme URI'leri bölümünde URI ekle'yi tıklayın ve https://vertexaisearch.cloud.google.com/static/oauth/oauth.html girin.
  3. Kaydet'i tıklayın.

deed597aa54fec91.png

Vertex AI Search MCP'yi etkinleştirme

  1. Terminalde şunu çalıştırın:
gcloud beta services mcp enable discoveryengine.googleapis.com \
     --project=$(gcloud config get-value project)

Chat uygulamasını yapılandırma

  1. Google Cloud Console'da Google Cloud arama alanına Google Chat API yazın, Google Chat API'yi, Yönet'i ve Yapılandırma'yı tıklayın.

  1. Uygulama adı ve Açıklama'yı Gemini Enterprise olarak ayarlayın.
  2. Avatar URL'sini https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png olarak ayarlayın.
  3. Etkileşimli özellikleri etkinleştir'in seçimini kaldırın ve açılan modal iletişim kutusunda Devre dışı bırak'ı tıklayın.
  4. Günlük hatalarını Logging'e seçeneğini belirleyin.
  5. Kaydet'i tıklayın.

90cb612e51bce4e6.png

Vertex AI Agent Engine'de temsilci dağıtma

  1. Bu GitHub deposunu indirin.

  1. Bir terminalde solutions/enterprise-ai-agent dizinini açın ve şu komutu çalıştırın:
# 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. Günlüklerde Deploying to agent engine... (Aracı motoruna dağıtılıyor...) satırını gördüğünüzde yeni bir terminal açın ve Vertex AI Reasoning Engine Service Agent'a gerekli izinleri eklemek için aşağıdaki komutu çalıştırın:
# 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 komutunun tamamlanmasını bekleyin, ardından yeni dağıtılan aracının kaynak adını komut çıkışındaki yeşil renkteki kısımdan kopyalayın.

d098fe1347d6581b.png

Gemini Enterprise'da aracı kaydetme

Cloud Console'da yeni bir sekmede Gemini Enterprise'ı açın ve şu adımları uygulayın:

  1. codelab adlı uygulamayı tıklayın.
  2. Gezinme menüsünde Aracılar'ı tıklayın.
  3. + Temsilci ekle'yi tıklayın.
  4. Agent Engine aracılığıyla özel aracı için Ekle'yi tıklayın. Yetkilendirmeler bölümü gösterilir.
  5. Yetkilendirme ekle'yi tıklayın.
  6. Yetkilendirme adını enterprise-ai olarak ayarlayın. Ada göre bir kimlik oluşturulur ve alanın altında gösterilir. Bu kimliği kopyalayın.
  7. İstemci kimliğini, önceki adımlarda oluşturulan ve güncellenen OAuth istemcisiyle aynı değere ayarlayın.
  8. İstemci gizli anahtarını, önceki adımlarda oluşturulan ve güncellenen OAuth istemcisiyle aynı değere ayarlayın.
  9. Jeton URI'sini https://oauth2.googleapis.com/token olarak ayarlayın.
  10. <CLIENT_ID> değerini önceki adımlarda oluşturulan ve güncellenen OAuth istemci kimliğiyle değiştirdikten sonra Authorization URI'yi aşağıdaki değere ayarlayın.
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. Bitti'yi, ardından Sonraki'yi tıklayın. Yapılandırma bölümü gösterilir.
  2. Aracı adı ve Aracı açıklaması'nı Enterprise AI olarak ayarlayın.
  3. Agent Engine akıl yürütme motorunu önceki adımlarda kopyalanan akıl yürütme motoru kaynak adına ayarlayın. Şu biçimdedir:
projects/<PROJECT_ID>/locations/<LOCATION>/reasoningEngines/<REASONING_ENGINE_ID>
  1. Oluştur'u tıklayın. Yeni eklenen temsilci artık Temsilciler altında listelenir.

Temsilciyi deneyin

  1. Gemini Enterprise web uygulamasında yeni kaydedilen temsilciyle sohbet edin:
  2. Menü ☰ > Temsilciler'i tıklayın.
  3. Kuruluşunuzdan bölümünde temsilciyi seçin.
  4. Sohbette Please find my meetings for today, I need their titles and links yazıp enter tuşuna basın.
  5. Yetkilendir'i tıklayın ve yetkilendirme akışını takip edin.

ed61cf654cbcd76c.png

  1. Aracı, kullanıcının hesabına bağlı olarak Takvim etkinliklerinin listesiyle yanıt verir.
  2. Sohbette Please send a Chat message to someone@example.com with the following text: Hello! yazıp enter tuşuna basın.
  3. Temsilci, onay mesajıyla yanıt verir.

1647ebff031c42e7.png

a8087d2351e77fb4.png

5. Google Workspace eklentisi olarak varsayılan aracı

Bu aracı sayesinde kullanıcılar, Workspace uygulaması kullanıcı arayüzleri bağlamında doğal dillerini kullanarak Workspace verilerinde arama yapabilir. Aşağıdaki öğelerden yararlanır:

  • Model: Gemini
  • Veriler: Google Workspace (Takvim, Gmail, Drive, NotebookLM) ve Google Arama için Gemini Enterprise veri depoları.
  • Aracı ana makinesi: Gemini Enterprise.
  • Kullanıcı arayüzü: Chat ve Gmail için Google Workspace eklentisi (Takvim, Drive, Dokümanlar, E-Tablolar ve Slaytlar'a kolayca genişletilebilir).
  • Google Workspace eklentisi: Apps Komut Dosyası, Gemini Enterprise ve Vertex AI API'leri, bağlamsal (kullanıcı meta verileri, seçilen Gmail mesajı).

Google Workspace eklentisi, StreamAssist API kullanılarak Gemini Enterprise'a bağlanır.

Kavramları inceleme

Google Workspace eklentisi

Google Workspace eklentisi, bir veya daha fazla Google Workspace uygulamasını (Gmail, Chat, Takvim, Dokümanlar, Drive, Meet, E-Tablolar ve Slaytlar) genişleten özelleştirilmiş bir uygulamadır.

Apps Komut Dosyası

Apps Komut Dosyası, Google Drive tarafından desteklenen bulut tabanlı bir JavaScript platformudur. Bu platform, Google ürünlerinde görevleri entegre etmenize ve otomatikleştirmenize olanak tanır.

Google Workspace Card framework'ü

Google Workspace'teki Kart çerçevesi, geliştiricilerin zengin ve etkileşimli kullanıcı arayüzleri oluşturmasına olanak tanır. Metin, resim, düğme ve diğer widget'ları içeren düzenli ve görsel açıdan çekici kartlar oluşturulmasına olanak tanır. Bu kartlar, yapılandırılmış bilgiler sağlayarak ve doğrudan Workspace uygulamalarında hızlı işlemler yapılmasına olanak tanıyarak kullanıcı deneyimini iyileştirir.

Çözüm mimarisini inceleme

1798c39f7aaed8fc.png

Kaynak kodunu inceleme

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"
  ]
...

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

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

Hizmet hesabını başlatma

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > IAM ve Yönetici > Hizmet Hesapları > + Hizmet hesabı oluştur'u tıklayın.

  1. Hizmet hesabı adı'nı ge-add-on olarak ayarlayın.

d44d6aae29e2464c.png

  1. Oluştur ve devam et'i tıklayın.
  2. İzinlere Discovery Engine Görüntüleyici rolünü ekleyin.

f1374efa4f326ef5.png

  1. Devam'ı, ardından Bitti'yi tıklayın. Hizmet hesapları sayfasına yönlendirilirsiniz ve oluşturduğunuz hizmet hesabını görebilirsiniz.

b9496085f1404c5c.png

  1. Yeni oluşturulan hizmet hesabını ve ardından Anahtarlar sekmesini seçin.
  2. Anahtar ekle'yi ve ardından Yeni anahtar oluştur'u tıklayın.
  3. JSON'ı seçip Oluştur'u tıklayın.

f4280f5533a08821.png

  1. İletişim kutusu kapanır ve yeni oluşturulan herkese açık/özel anahtar çiftiniz JSON dosyası olarak yerel ortamınıza otomatik olarak indirilir.

Apps Komut Dosyası projesi oluşturma ve yapılandırma

  1. Enterprise AI eklentisi Apps Komut Dosyası projesini açmak için aşağıdaki düğmeyi tıklayın:

  1. Genel bakış > Kopya oluştur'u tıklayın.
  2. Apps Komut Dosyası projenizde, komut dosyası özellikleri eklemek için Proje Ayarları > Komut dosyası özelliklerini düzenle > Komut dosyası özelliği ekle'yi tıklayın.
  3. REASONING_ENGINE_RESOURCE_NAME değerini Gemini Enterprise uygulama kaynağı adı olarak ayarlayın. Şu biçimdedir:
# 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 değişkenini, önceki adımlarda indirilen hizmet hesabı dosyasındaki JSON anahtarı olarak ayarlayın.
  2. Komut dosyası özelliklerini kaydet'i tıklayın.

Gmail ve Chat'e dağıtma

Apps Komut Dosyası projenizde şu adımları uygulayın:

  1. Dağıt > Test dağıtımları'nı ve ardından Yükle'yi tıklayın. Bu özellik artık Gmail'de kullanılabilir.
  2. Ana Dağıtım Kimliği bölümünde Kopyala'yı tıklayın.

2ed2df972ad92715.png

Google Cloud Console'da şu adımları uygulayın:

  1. Google Cloud arama alanında Google Chat API ifadesini arayın, Google Chat API'yi, Yönet'i ve Yapılandırma'yı tıklayın.

  1. Etkileşimli özellikleri etkinleştir'i seçin.
  2. Alanlara ve grup görüşmelerine katıl'ın seçimini kaldırın.
  3. Bağlantı ayarları bölümünde Apps Komut Dosyası'nı seçin.
  4. Deployment ID (Dağıtım Kimliği) değerini, önceki adımlarda kopyalanan Head Deployment ID (Ana Dağıtım Kimliği) olarak ayarlayın.
  5. Görünürlük bölümünde Bu Sohbet uygulamasını Workspace alanınızdaki belirli kişiler ve gruplar için kullanılabilir hale getir'i seçip e-posta adresinizi girin.
  6. Kaydet'i tıklayın.

3b7d461c423f7c51.png

Eklentiyi deneyin

Google Chat'i yeni bir sekmede açın ve aşağıdaki adımları uygulayın:

  1. Chat uygulaması Gemini Enterprise ile doğrudan mesajlaşma alanı açın.

3da8690d19baf2d0.png

  1. Yapılandır'ı tıklayın ve kimlik doğrulama akışını tamamlayın.
  2. What are my meetings for today? yazıp enter tuşuna basın. Gemini Enterprise Sohbet uygulaması sonuçlarla yanıt vermelidir.

c8c63fb3f324fecf.png

Yeni bir sekmede Gmail'i açın ve aşağıdaki adımları uygulayın:

  1. Konu alanı We need to talk, Metin alanı Are you available today between 8 and 9 AM? olarak ayarlanmış bir e-postayı kendinize gönderin.
  2. Yeni alınan e-posta iletisini açın.
  3. Enterprise AI eklenti kenar çubuğunu açın.
  4. MesajAm I? olarak ayarlayın.
  5. İleti gönder'i tıklayın.
  6. Yanıt, düğmenin altında gösterilir.

d33b8cb50ee251b7.png

6. Temizleme

Google Cloud projesini silme

Bu codelab'de kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek istiyorsanız Google Cloud projesini silmenizi öneririz.

Google Cloud Console'da şu adımları uygulayın:

  1. Menü ☰ > IAM ve Yönetici > Ayarlar'ı tıklayın.

.

  1. Kapat'ı tıklayın.
  2. Proje kimliğini girin.
  3. Yine de kapat'ı tıklayın.

3b9492d97f771b2c.png

7. Tebrikler

Tebrikler! Gemini Enterprise ve Google Workspace'i çalışanlar için daha yakın hale getirmenin gücünden yararlanan çözümler geliştirdiniz.

Sırada ne var?

Bu codelab'de yalnızca en tipik kullanım alanlarını gösteriyoruz ancak çözümlerinizde dikkate almak isteyebileceğiniz birçok genişleme alanı var. Örneğin:

  • Gemini CLI ve Antigravity gibi yapay zeka destekli geliştirici araçlarını kullanın.
  • Özel MCP'ler, özel işlev çağrıları ve üretken kullanıcı arayüzleri gibi diğer aracı çerçeveleri ve araçlarla entegrasyon.
  • Vertex AI gibi özel platformalarda barındırılan özel modeller de dahil olmak üzere diğer yapay zeka modelleriyle entegre edin.
  • Dialogflow gibi özel platformlarda veya Cloud Marketplace üzerinden üçüncü taraflarca barındırılan diğer aracılarla entegrasyon.
  • Ekipleri, kuruluşları veya genel kullanıcıları desteklemek için Cloud Marketplace'te aracıları yayınlayın.

Daha fazla bilgi

Geliştiriciler için YouTube videoları, doküman web siteleri, kod örnekleri ve eğitimler gibi birçok kaynak mevcuttur: