1. Genel Bakış
Günümüzün hızlı tempolu perakende ortamında, kişiselleştirilmiş alışveriş deneyimlerini mümkün kılarken olağanüstü müşteri hizmetleri sunmak çok önemlidir. Müşteri sorularını yanıtlamak, ürün keşfine rehberlik etmek ve arama sonuçlarını özelleştirmek için tasarlanmış bilgi odaklı bir sohbet uygulamasının oluşturulmasıyla ilgili teknik bir yolculuğa çıkacağız. Bu yenilikçi çözüm; veri depolama için AlloyDB'nin gücünü, bağlamsal anlayış için şirket içi bir analiz motorunu, alaka düzeyi doğrulaması için Gemini'ı (Büyük Dil Modeli) ve akıllı bir sohbet asistanını hızlıca başlatmak için Google'ın Agent Builder'ını bir araya getirir.
Zorluk: Günümüzün perakende müşterileri anında yanıtlar ve benzersiz tercihlerine uygun ürün önerileri bekliyor. Geleneksel arama yöntemleri genellikle bu düzeyde bir kişiselleştirme sunamaz.
Çözüm: Bilgiye dayalı sohbet uygulamamız bu zorluğun üstesinden geliyor. Müşteri amacını anlamak, akıllıca yanıt vermek ve son derece alakalı sonuçlar sunmak için perakende verilerinizden elde edilen zengin bir bilgi bankasından yararlanır.
Ne oluşturacaksınız?
Bu laboratuvarın (2. Bölüm) bir parçası olarak şunları yapacaksınız:
- Vertex AI Oluşturucu temsilcisi oluşturma
- AlloyDB aracını aracıyla entegre edin
Şartlar
2. Mimari
Veri akışı: Verilerin sistemimizde nasıl hareket ettiğine daha yakından bakalım:
Besleme:
Perakende verileri (envanter, ürün açıklamaları, müşteri etkileşimleri) AlloyDB'ye sürekli olarak yüklenir.
Analytics Engine:
Aşağıdaki işlemleri gerçekleştirmek için analiz motoru olarak AlloyDB'yi kullanacağız:
- Bağlam Çıkarma: Motor, ürünler, kategoriler, müşteri davranışı vb. arasındaki ilişkileri anlamak için AlloyDB'de depolanan verileri analiz eder.
- Yerleştirme Oluşturma: Hem kullanıcının sorgusu hem de AlloyDB'de depolanan bilgiler için yerleştirmeler (metnin matematiksel temsilleri) oluşturulur.
- Vector Search: Motor, sorgu yerleştirmesini ürün açıklamalarının, yorumların ve diğer alakalı verilerin yerleştirmeleriyle karşılaştırarak benzerlik araması yapar. Bu, en alakalı 25 "en yakın komşuyu" tanımlar.
Gemini Doğrulaması:
Bu olası yanıtlar değerlendirilmek üzere Gemini'a gönderilir. Gemini, bu yanıtların kullanıcıyla paylaşılmaya uygun ve güvenli olup olmadığını belirler.
Yanıt Üretme:
Doğrulanmış yanıtlar bir JSON dizisi olarak yapılandırılır ve motorun tamamı, Agent Builder'dan çağrılan sunucusuz bir Cloud Run işlevi olarak paketlenir.
Yukarıdaki adımlar, laboratuvarın 1. bölümünde ele alınmıştır.
Akıllı alışveriş asistanımıza güç veren bilgiye dayalı bir analiz motoru oluşturmanın teknik ayrıntılarını ele aldık. Şimdi de bu motoru bir sohbet arayüzünde hayata geçirmek için Agent Builder'ın sihrinden nasıl yararlandığımıza bakalım. 2. bölüme başlamadan önce uç nokta URL'sinin hazır olduğundan emin olun. Bu laboratuvarda ele alacağımız sonraki adım şudur:
Etkileşimli Sohbet:
Agent Builder, yanıtları kullanıcıya doğal dil biçiminde sunarak karşılıklı diyaloğu kolaylaştırır.
3. Başlamadan önce
Proje oluşturma
- Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
- Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Bir projede faturalandırmanın etkin olup olmadığını kontrol etmeyi öğrenin .
- bq'nun önceden yüklendiği, Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. Google Cloud Console'un üst kısmından Cloud Shell'i etkinleştir'i tıklayın.

- Cloud Shell'e bağlandıktan sonra aşağıdaki komutu kullanarak kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını kontrol edin:
gcloud auth list
- gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud config list project
- Projeniz ayarlanmamışsa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
- Gerekli API'leri etkinleştirin. Gcloud komutuna alternatif olarak, her ürünü arayarak veya bu bağlantıyı kullanarak konsolu kullanabilirsiniz.
Herhangi bir API atlanırsa uygulama sırasında istediğiniz zaman etkinleştirebilirsiniz.
gcloud komutları ve kullanımı için belgelere bakın.
Önemli Not: Bu bölümü tamamlamak için laboratuvarın 1. BÖLÜMÜ'nü de tamamladığınızdan emin olun.
4. Aracı Oluşturma
Agent Builder ile tanışın
Agent Builder, etkileşimli ajanları hızlı ve verimli bir şekilde oluşturmamızı sağlayan güçlü ve az kodlu bir araçtır. Diyalog akışları tasarlama, bilgi tabanlarını entegre etme ve harici API'lere bağlanma sürecini kolaylaştırır. Bu örnekte, 1. bölümde oluşturduğumuz Cloud Functions işlevi uç noktasına sorunsuz şekilde bağlanmak için Agent Builder'ı kullanacağız. Böylece alışveriş asistanımız, perakende bilgi bankamıza erişip müşteri sorgularını akıllıca yanıtlayabilecek.
Aracıyı oluşturma
Kullanıcıların giyim ürünleriyle ilgili sorularını yanıtlamak için bu yeni temsilciyi oluşturmaya başlayalım.
- Agent Builder platformunda oturum açarak başlayın. API'yi etkinleştirmeniz istenirse DEVAM ET VE API'Yİ ETKİNLEŞTİR'i tıklayın.
- "CREATE APP" (UYGULAMA OLUŞTUR) seçeneğini tıklayın ve aracınıza açıklayıcı bir ad verin (ör. "Perakende Alışveriş Asistanı").
- Uygulama Türü "Aracı"yı tıklayın.

- . Temsilcinize "Perakende Alışveriş Asistanı" gibi açıklayıcı bir ad verin ve bölgeyi us-central1 olarak ayarlayın.

- Temsilciyle ilgili ayrıntıları girin:
- Temsilci adını "Perakende Alışveriş Temsilcisi" olarak değiştirin.
- Aşağıdaki "Hedef"i ekleyin:
You are a shopping assistant agent! Your job is to help the customer search for their ideal apparels, allow them to add items to their cart, remove items from their cart, and review items in their cart. Once a user is done searching, open the search results in a user friendly html page.

- Bu noktada kaydedin ve talimatları şimdilik boş bırakın.
- Ardından, gezinme menüsünden Araçlar'ı ve Oluştur'u tıklayın.

Araç Adını Girin: Perakende Alışveriş Aracı
Araç Açıklaması Girin:
This tool refers to the dataset in the backend as the context information for product inventory. It takes as input the user's search text summarized by the agent and matches with the most appropriate list of items and returns as an array of items.
Şema girin: YAML biçiminde OpenAPI:
Bu bölümde, aracıyı desteklemek için arka uç uç noktasını kullanıyoruz. Aşağıdaki OpenAPI spesifikasyonunu kopyalayın ve URL yer tutucusunu (köşeli parantez içinde) Cloud Functions uç noktanızla değiştirin:
openapi: 3.0.0
info:
title: AlloyDB Product Matcher
description: A Cloud Function to query AlloyDB for product matches based on user search text.
version: 1.0.0
servers:
- url: <<https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/alloy-gem>>
paths:
/:
post:
summary: Find matching products based on search text.
operationId: apparelSearch
requestBody:
description: JSON object containing the search text.
required: true
content:
application/json:
schema:
type: object
properties:
search:
type: string
description: The user's search query for product matching.
responses:
'200':
description: Successful response with a JSON array of matching products.
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: string
description: Product ID.
category:
type: string
description: Product category.
sub_category:
type: string
description: Product sub-category.
uri:
type: string
description: Product URI or URL.
description:
type: string
description: Product description.
literature:
type: object
description: JSON object containing match information from the ML model.
properties:
MATCH:
type: string
description: Whether the product matches the search query (YES/NO).
PERCENTAGE:
type: string
description: Percentage of match.
DIFFERENCE:
type: string
description: Description of differences between the search and product.
'500':
description: Internal server error.
Diğer yapılandırmaları varsayılan değerlerinde bırakın ve "Kaydet"i tıklayın.
- "Araç" yapılandırmasını temsilcinin "Talimatlar"ına eklemek istediğimiz için bu noktada temsilciye geri dönün. Aşağıdaki bilgileri talimat yer tutucusuna ekleyin (Girintilerin akışı tanımlamada önemli olduğunu unutmayın):
- Greet the user and answer their question to the best of your knowledge.
- Summarize the user's request and ask them to confirm that you understood correctly.
- Check if the request has details like gender, color, material, style and other key apparel details already.
- If not, seek clarifying details.
- If the search request is very broad, then ask the user to narrow down the request with specific details that you believe could be personal preferences.
- Once all the necessary details are met, summarize your final understanding of the request with the user.
- Use ${TOOL: Retail Shopping Tool} to help the user with their task.
- If the request has unrelated input text, gracefully convey that you don't have information on that topic.
- Do not give product availability information outside the source that is provided to you in ${TOOL: Retail Shopping Tool}.
- Do not assist with any information unless you are certain that you know the answer and it is grounded in the source of truth.
- Thank the user for their business and say goodbye.
"Kullanılabilir Araçlar" bölümünde "Perakende Alışveriş Aracı"nın seçili olduğundan emin olun ve ardından temsilciyi tekrar kaydedin.
5. Aracıyı test etme
Sağ bölmede, temsilcinizi test etmenize olanak tanıyan Temsilciyi Önizle bölümünü görürsünüz.
Aşağıdaki ekran görüntüsünde görebileceğiniz gibi, kullanıcı olarak selam verdim ve mavi desenli beyaz gömlek isteğiyle sohbetimi başlattım:

JSON yanıtı:

Bu, AlloyDB Similarity Search'ü işleyen Cloud Functions işlevinden alınan ham JSON sonucudur. İşte bu kadar. Müşteri temsilcisiyle ilgili işlemlerimiz tamamlandı.
6. Örnek İleti Dizisi Akışı
Bu noktada, diyalog (konuşma) aracınızın akışını test edip yineleyebilirsiniz:
User: I'm looking for women's boots for winter.
Agent: (OpenAPI call to Cloud Function that works with AlloyDB Similarity Search)
Cloud Function: (Processes query, returns JSON array)
Agent: Based on your preferences, here are some options: [Product 1, Product 2, Product 3]. Would you like to see more details about any of these?
User: No, That is all. Bye!
Agent: Have a good day!
Az örnekli istemler
Şimdi de sonucu, resimler ve bağlantılar da dahil olmak üzere belirli bir grafik biçiminde etkileşimli temsilcide görmek istediğinizi varsayalım. Bunu, Few Shot Prompting olarak da bilinen ileti dizisi örneklerini kullanarak yapacağız.
Bu, tutarlı bir sonuç biçimi elde etmek için aracı oluşturucuya birkaç örnek eklemek istediğimiz anlamına gelir.
"Test the Agent" (Aracı Test Etme) bölümündeki önceki ekran görüntülerimizden birinde, aracının yanıtını "Anlıyorum. Mavi desenli beyaz bir gömlek arıyorum." İlgili yanıta gidin veya aracının sağ bölmesinden yeni bir test görüşmesi oluşturun:
- "Kullanıcı Girişi Girin" bölümüne aşağıdakileri yazın:

Şuna benzer bir yanıt görürsünüz:

Ayrıca API uç noktası tarafından döndürülen JSON dizisini de görürsünüz.
- Şimdi önizleme bölümünün kenar boşluğundan Temsilci Adı'nı (aşağıdaki resimde kırmızı onay işaretiyle vurgulanmış olarak gösterilmiştir) tıkladığınızda sohbet önizleme bölümündeki tüm sekmeleriniz vurgulanır. Şimdi önizleme bölümünün sağ üst köşesindeki "Save Example" (Örneği Kaydet) seçeneğini tıklayın. Bu arayüz şöyle görünür:

- Yazışmayı "Resimlerle yanıt" gibi bir görünen adla kaydedip "Oluştur"u tıklayın.
- Şimdi yukarıdaki resimde siyah onay işaretiyle vurgulanan yanıt sekmesine gidin ve "Anlıyorum. Sarı sandalet arıyorsunuz. Bu doğru mu?" ile değiştirin.
I see you are looking for yellow sandals. Here are a few options for you:
<!DOCTYPE html>
<html>
<body>
<h2>Featured Sandals</h2>
<table style="overflow-x: auto; white-space: nowrap;">
<tr>
<td>
<img src="https://assets.myntassets.com/v1/images/style/properties/d27dbd8e9666b9af2d72fbfde315f76d_images.jpg" alt="Yellow sandals from Estd. 1977" width="300">
</td>
<td>
<img src="https://assets.myntassets.com/v1/images/style/properties/b7a479fe5f56457e930541a789c5df68_images.jpg" alt="Yellow sandals from Gliders" width="300">
</td>
<td>
<img src="https://assets.myntassets.com/v1/images/style/properties/b6c813734b29b89d1055fd000ea50743_images.jpg" alt="Yellow sandals from Rocia" width="300">
</td>
<td>
<img src="https://assets.myntassets.com/v1/images/style/properties/ee0e918c229e76e0e7e61712e9d2ecb3_images.jpg" alt="Yellow flip flops from Numero Uno" width="300">
</td>
<td>
<img src="https://assets.myntassets.com/v1/images/style/properties/5bdd4c9e739205e28ee134ff7849bc60_images.jpg" alt="Yellow flip flops from Numero Uno" width="300">
</td>
</tr>
</table>
</body>
</html>
- Üst kısımdaki "Kaydet"i tıklayın.
Farklı varyasyonlar ve sohbet akışlarıyla istediğiniz kadar örnek için bu işlemi tekrarlayın.
Şimdi bir kullanıcı girişiyle test edin:

Diğer bazı yanıt türleri:

Bu kadar basit. Perakende uygulamamız için başarıyla bir Sohbet Temsilcisi oluşturup test ettik.
7. Dağıtım ve Entegrasyon
Temsilcinizden memnun kaldığınızda, Temsilci Oluşturucu'nun entegrasyonlarını kullanarak temsilcinizi çeşitli kanallara kolayca dağıtabilirsiniz. Bu API'yi web sitenize yerleştirebilir, popüler mesajlaşma platformlarıyla entegre edebilir ve hatta özel bir mobil uygulama oluşturabilirsiniz. Ayrıca, Agent Builder API'yi doğrudan web istemci uygulamalarımızda da kullanabiliriz. Bu konuyu blogumuzda ele aldık.
8. Temizleme
Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:
9. Tebrikler
Tebrikler! Özel olarak geliştirilmiş analiz motorumuzun gücünü Agent Builder'ın sezgisel arayüzüyle entegre ederek kişiselleştirilmiş deneyimler sunan, soruları doğru şekilde yanıtlayan ve sonuç olarak müşteri memnuniyetini ve satışları artıran akıllı bir perakende alışveriş asistanı oluşturduk. AlloyDB, Vertex AI ve Vector Search'ün özelliklerini birleştirerek bağlamsal ve vektör aramalarını erişilebilir, verimli, gerçekten anlam odaklı ve ajan tabanlı hale getirme konusunda büyük bir adım attık.