Panduan ini menjelaskan cara berintegrasi dengan Conversational API untuk memberikan pengalaman chat dinamis yang didukung AI bagi pelanggan Anda. Dengan memahami berbagai jenis kueri dan memanfaatkan respons API, Anda dapat memberikan penelusuran produk yang relevan, menjawab pertanyaan pelanggan, dan memandu pengguna akhir melalui perjalanan belanja mereka.
conversationalFilteringMode
di Conversational API memperjelas perbedaan antara agen Conversational Commerce dan pemfilteran produk percakapan.
Penyiapan
Conversational API mendukung fitur agen Conversational Commerce:
- gRPC:
conversationalSearchService
- REST:
conversationalSearch
Conversational API memungkinkan pengalaman chat di mana pengguna Anda mengirimkan kueri dan sistem menampilkan respons teks, jenis kueri yang diklasifikasikan, dan opsi penelusuran yang berpotensi lebih baik.
API ini beroperasi sebagai layanan streaming, sehingga memungkinkan deteksi awal maksud kueri. Interaksi berikutnya dalam percakapan memerlukan lampiran conversation_id
.
Untuk menampilkan hasil penelusuran, Retail API lama harus dipanggil secara paralel dengan Conversational API.
Mengirim kueri dari pengguna akhir
Bagian ini menjelaskan cara memulai pengalaman agen Conversational Commerce. Misalnya, pengguna Anda dapat memasukkan Bantu rencanakan pesta di kolom penelusuran.
Mengirim permintaan ke Vertex AI Search untuk commerce
Ada dua endpoint API yang berbeda:
- Conversational API harus digunakan untuk mengambil pengalaman percakapan.
- Search API inti harus digunakan untuk mengambil hasil penelusuran.
Endpoint 1: Permintaan API percakapan
- Anda harus membuat permintaan agen Conversational Commerce dengan menetapkan input pengguna sebagai kueri.
- Permintaan harus dikirim sebagai permintaan POST HTTP ke endpoint
projects/*/locations/*/catalogs/*/placements/*:conversationalSearch
.
Metode dan endpoint HTTP
POST https://retail.googleapis.com/v2alpha/{placement=projects/*/locations/*/catalogs/*/placements/*}:conversationalSearch
Permintaan API percakapan:
Kueri awal
{ "query": "Help me plan a party", "branch": "projects/{project_id}/locations/{location_id}/catalogs/{catalog_id}/branches/default_branch", "placement": "projects/799252947591/locations/global/catalogs/default_catalog/placements/default_search", "visitorId": "your_visitor_id", "conversationId": "", // Leave empty for the first query "searchParams": { // IMPORTANT: These search parameters should mirror the configuration // of your core Search API calls to ensure consistency between LLM answers and search results. "filter": "categories:(\"Party Supplies\" OR \"Decorations\" OR \"Food & Drink\")" }, "userInfo": { // Optional: User information for enhanced personalization // Example: "userId": "user123", "userAgent": "Chrome/120.0" }, "conversationalFilteringSpec": { // Optional: Controls conversational filtering behavior. Defaults to DISABLED if unset. // "conversational_filtering_mode": "DISABLED" - Otherwise you can also explicitly set to disabled. }
placement
: Nama resource penempatan (sepertiprojects/your-project-id/locations/global/catalogs/default_catalog/placements/default_branch
). Ini adalah parameter jalur dan wajib.-
query
: Kueri penelusuran mentah dari pengguna Anda. Kolom ini wajib diisi. -
branch
: Nama resource cabang, sepertiprojects/P/locations/L/catalogs/C/branches/B
. Jika tidak disetel,default_branch
akan digunakan. Kolom ini wajib diisi. -
visitorId
: ID unik untuk melacak pengunjung. Kolom ini wajib diisi. -
conversationId
: ID unik untuk melacak sesi percakapan. Untuk permintaan initial dalam percakapan baru, kolom ini harus kosong. Untuk permintaan berikutnya dalam percakapan yang sama, parameter ini harus ditetapkan keconversation_id
yang diterima dalamConversationalSearchResponse
sebelumnya. -
searchParams
: (Opsional) Parameter Penelusuran inti standar (misalnya,filter
,canonicalFilter
,sortBy
,boostSpec
). Parameter ini harus mencerminkan konfigurasi yang digunakan dalam panggilan Search API inti Anda untuk memastikan konsistensi antara jawaban LLM dan hasil penelusuran produk yang ditampilkan. -
userInfo
: (Opsional) Informasi pengguna untuk personalisasi yang lebih baik. Dapat menyertakanuserId
,user_agent
,direct_user_request
(boolean). -
conversationalFilteringSpec
: (Opsional) Menentukan mode pemfilteran percakapan. Jika tidak disetel, defaultnya adalah DISABLED.mode
: Integrasikan Conversational API menggunakan salah satu dari tiga mode berikut untuk mengontrol pemfilteran produk percakapan: DISABLED
: Dalam mode ini, klien hanya mengimplementasikan penelusuran agen Perdagangan Percakapan. Ini adalah mode pilihan untuk panduan penerapan ini terkait penelusuran agen Commerce Percakapan.ENABLED
: Dalam mode ini, klien mengimplementasikan semua kemampuan percakapan, yang mencakup penelusuran agen Perdagangan Percakapan dan pemfilteran produk percakapan.CONVERSATIONAL_FILTER_ONLY
: Jika dipilih, klien hanya menerapkan Pemfilteran produk percakapan. Dengan memilih mode ini, pengguna hanya akan mengalami pemfilteran produk percakapan tanpa menghasilkan jawaban LLM, klasifikasi kueri, atau kueri penelusuran yang disarankan.
Contoh permintaan API
placement: "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search" branch: "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch" query: "show me some monster energy drinks" visitor_id: "test" conversational_filtering_spec { conversational_filtering_mode: DISABLED }
Contoh respons API
user_query_types: "SIMPLE_PRODUCT_SEARCH" conversation_id: "479fd093-c701-4899-bcc3-9e711233bdf9" refined_search { query: "monster energy drinks" }
Contoh permintaan API
placement: "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search" branch: "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch" query: "show me some monster energy drinks" visitor_id: "test" conversational_filtering_spec { conversational_filtering_mode: ENABLED }
Contoh respons API
user_query_types: "SIMPLE_PRODUCT_SEARCH" conversation_id: "479fd093-c701-4899-bcc3-9e711233bdf9" refined_search { query: "monster energy drinks" } conversational_filtering_result: { followup_question{ followup_question: "What is the size?" suggested_answers { product_attribute_value { name: "size", value: "12oz" } } } }
Lihat Panduan developer filter produk percakapan untuk mengetahui informasi selengkapnya. Lihat panduan tambahan tentang cara mengintegrasikan kedua produk percakapan.
Endpoint 2: Permintaan Core Search API
Ada dua pendekatan utama untuk menampilkan hasil penelusuran di UI Anda:
Opsi 1: Selalu tampilkan hasil penelusuran
Jika desain pengalaman pengguna Anda menentukan bahwa hasil penelusuran harus selalu ditampilkan terlepas dari output percakapan, seperti di area hasil penelusuran khusus di samping chat, kirim kueri asli pengguna Anda ke Product Search API inti dengan panggilan Anda ke Conversational API. Hal ini membantu memastikan listingan produk langsung tersedia.
Opsi 2: Menampilkan hasil penelusuran berdasarkan output percakapan
Jika desain pengalaman pengguna Anda lebih dinamis dan Anda hanya ingin menampilkan hasil penelusuran bergantung pada respons Conversational API, seperti hanya untuk kueri SIMPLE_PRODUCT_SEARCH
atau setiap kali saran refined_search
diberikan, tunggu respons Conversational API sebelum mengirimkan kueri apa pun ke Product Search API inti. Jika ada respons, gunakan kueri refined_search
yang diberikan untuk mengambil hasil produk.
Terlepas dari opsi antarmuka pengguna yang Anda pilih, saat perlu mengambil hasil produk sebenarnya, Anda dapat melakukan panggilan ke Retail API. Untuk mengetahui informasi selengkapnya, lihat Langkah 2c. Pahami jenis kueri dan tindakan retailer.
Metode dan endpoint HTTP
POST https://retail.googleapis.com/v2beta/{placement=projects/*/locations/*/catalogs/*/servingConfigs/*}:search
Permintaan API Penelusuran produk inti:
Kueri awal
{ "placement": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/servingConfigs/default_search", // Or if using legacy placements: // "placement": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/placements/default_search", "query": "Help me plan a party", // This is the original user query "visitorId": "your_visitor_id", "branch": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/branches/default_branch", "pageSize": 20, // Optional: Number of results to return per page "filter": "categories:(\"Party Supplies\" OR \"Decorations\" OR \"Food & Drink\")", // Mirroring the filter from the Conversational Commerce API "orderBy": "relevance DESC", // Optional "userInfo": { // Optional: User information for enhanced personalization, should mirror Conversational Commerce API // "userId": "user123", "userAgent": "Chrome/120.0" }, "searchMode": "PRODUCT_SEARCH" // Typically for product searches }
placement
(Wajib): Nama resource konfigurasi penayangan Retail Search atau penempatan lama. Contoh:projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/servingConfigs/default_search
.query
: Wajib diisi. Kueri penelusuran. Ini dapat berupa input mentah pengguna Anda seperti Bantu saya merencanakan pesta ataurefinedSearch.query
yang lebih dioptimalkan (seperti perlengkapan perencanaan pesta, dekorasi) yang diperoleh dari respons Conversational Commerce API.visitorId
: Wajib diisi. ID unik untuk melacak pengunjung. Nilai ini harus konsisten denganvisitorId
yang dikirim ke Conversational Commerce API untuk pengguna akhir yang sama.branch
(Wajib): Nama resource cabang, sepertiprojects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/branches/default_branch
.pageSize
(Opsional): Jumlah maksimum produk yang akan ditampilkan.filter
(Opsional): Digunakan untuk memfilter hasil penelusuran. Di sinilah Anda akan menerapkan filter apa pun yang mencerminkan apa yang Anda kirim di `searchParams` ke Conversational Commerce API agar konsisten.orderBy
(Opsional): Menentukan urutan produk ditampilkan (seperti berdasarkan relevansi atau harga).userInfo
(Opsional): Informasi pengguna untuk personalisasi, harus konsisten dengan panggilan Conversational Commerce API.searchMode
(Opsional): Menentukan perilaku penelusuran.PRODUCT_SEARCH
umum untuk kueri produk umum.
Memahami respons
Contoh kode ini menunjukkan respons dari Conversational Commerce API.
Respons API (ConversationalSearchResponse
) mencakup query_types
, conversational_text_response
(jika berlaku), opsi refined_search
, dan kemungkinan followup_question
atau conversational_filtering_result
. conversation_id
sangat penting untuk melanjutkan sesi.
Respons dari Vertex AI Search untuk commerce
Contoh kode ini menunjukkan respons Conversational API:
Respons awal
{ "userQueryTypes": ["INTENT_REFINEMENT"], "conversationalTextResponse": "To plan a party, you'll need decorations, snacks, party supplies, drinks, and a cake. You can find a wide variety of decorations, snacks, and drinks. For party supplies, you can find everything from plates and cups to balloons and streamers. And for cake, you can choose from a variety of flavors and sizes.", "followupQuestion": { "followupQuestion": "What kind of party are you planning?" }, "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "refinedSearch": [ { "query": "Decorations" }, { "query": "Snacks" }, { "query": "Party Supplies" }, { "query": "Drinks" }, { "query": "Cake" } ], "state": "SUCCEEDED" }
Yang harus dilakukan retailer dengan respons (Umum)
Render kolom ini dari respons:
user_query_types
: Kolom ini memberikan klasifikasi maksud pengguna Anda. Untuk mengetahui tindakan mendetail berdasarkan jenis ini, lihat [Memahami jenis kueri dan tindakan retailer](#step-2c).conversation_id
: Anda dapat menyimpan ID unik ini di penyimpanan sesi browser atau penyimpanan sisi klien serupa untuk mempertahankan sesi percakapan dengan server. Hal ini sangat penting untuk membedakan beberapa percakapan yang sedang berlangsung untuk satu pembeli. Model Anda mempertahankan konteks untukconversation_id
tertentu. Mengirimconversation_id
baru akan memulai sesi baru. Sebaiknya tentukan durasi sesi Anda, seperti tidak ada aktivitas selama 30 menit.refined_search
: Ini adalah daftar kueri penelusuran yang disempurnakan yang diusulkan dan digunakan untuk mengambil hasil penelusuran yang relevan. UntukSIMPLE_PRODUCT_SEARCH
, selalu berupa satu kueri. Untuk kueri lain yang mencari jawaban LLM, akan ada satu atau beberapa jawaban. Kuerirefined_search
dapat digunakan untuk panggilan ke Search API inti (SearchService.Search
) atau juga dapat ditampilkan kepada pengguna Anda sebagai saran.conversational_text_response
: Menampilkan teks ini kepada pengguna Anda sebagai respons utama buatan AI terhadap kueri mereka.followup_question
: Opsional.followup_question
akan ditampilkan.state
: Bidang ini menunjukkan status pembuatan respons (STREAMING
atauSUCCEEDED
). Anda dapat menggunakan ini untuk memberikan masukan UI, seperti menampilkan indikator pemuatan hinggaSUCCEEDED
. Detail selengkapnya tentang hal ini ada di Langkah 2b. Memahami Streaming API
Memahami streaming API
Conversational Commerce API beroperasi sebagai streaming API. Artinya, pengguna Anda menerima bagian respons dalam beberapa bagian, bukan satu payload lengkap.
Chunk pertama respons mencakup kueri query_types
dan refined_search
, dan state
-nya ditunjukkan sebagai STREAMING
. Deteksi niat yang lebih awal dan ketersediaan penyempurnaan penelusuran yang langsung ini memungkinkan model Anda membuat keputusan cepat tentang cara menangani kueri pengguna dan cara mengelola pengalaman pengguna terkait latensi dari respons LLM:
- Untuk jenis kueri yang _tidak_ mengharapkan respons teks percakapan (seperti
SIMPLE_PRODUCT_SEARCH
,RETAIL_IRRELEVANT
,BLOCKLISTED
,QUERY_TYPE_UNSPECIFIED
,ORDER_SUPPORT
,DEALS_AND_COUPONS
,STORE_RELEVANT
): Karenaquery_types
berada di bagian pertama, sistem Anda langsung mengetahui bahwa tidak ada jawaban LLM yang akan muncul. Anda dapat melanjutkan penanganan yang telah ditentukan sebelumnya untuk jenis ini, seperti menampilkan pesan statis, mengalihkan ke dukungan, tanpa menunggu output percakapan lebih lanjut. - Khusus untuk
SIMPLE_PRODUCT_SEARCH
, sistem Anda dapat langsung melakukan panggilan langsung ke Search API inti menggunakan kuerirefined_search
yang diterima di bagian pertama. Hal ini membantu memastikan hasil penelusuran ditampilkan dengan penundaan minimal, yang memenuhi SLA pengalaman penelusuran umum. - Untuk jenis kueri yang mengharapkan respons teks percakapan (seperti
INTENT_REFINEMENT
,PRODUCT_DETAILS
,PRODUCT_COMPARISON
,BEST_PRODUCT
) - Anda menerima kueri
query_types
danrefined_search
di bagian awal. Anda dapat segera memulai panggilan paralel ke Search API inti menggunakan kuerirefined_search
ini untuk mulai memuat hasil produk. - Chunk berikutnya akan di-streaming, yang berisi berbagai bagian respons teks percakapan. Selama waktu ini,
state
tetap"STREAMING"
. - Terakhir, potongan terakhir mencakup respons teks percakapan yang lengkap, dan
state
-nya berubah menjadi"COMPLETED"
. - Pendekatan streaming ini memungkinkan pengalaman pengguna akhir yang lancar di mana hasil penelusuran dapat mulai dimuat saat ringkasan AI sedang dibuat. Anda dapat memilih untuk menampilkan indikator pemuatan untuk jawaban percakapan atau menampilkan jawaban percakapan setelah sepenuhnya di-streaming.
Memahami jenis kueri dan tindakan retailer
Kolom query_types
dalam respons adalah daftar yang menunjukkan klasifikasi maksud pengguna Anda. Sistem Anda harus menanganinya sebagai berikut. Perhatikan bahwa conversational_text_response
mengacu pada respons bahasa alami buatan AI dari API.
Agen Conversational Commerce menggunakan kategori kueri penelusuran untuk menentukan apakah jawaban berbasis LLM dibuat dan cara kueri pengguna akhir ditangani oleh Conversational API dan Search API untuk skenario berikut:
Kategori | Klasifikasi kueri |
---|---|
#1. Kueri tidak relevan yang tidak memerlukan jawaban LLM |
|
#2. Pertanyaan dukungan dan informasi |
|
#3. Penelusuran kata kunci yang tidak memerlukan LLM Permintaan API percakapan: Kueri awal { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch", "query": "show me some monster energy drinks", "visitorId": "test" } Respons API percakapan: Respons awal { "userQueryTypes": ["SIMPLE_PRODUCT_SEARCH"], "conversationId": "479fd093-c701-4899-bcc3-9e711233bdf9", "refinedSearch": [ { "query": "monster energy drinks" } ] } Permintaan Search API: Kueri lanjutan { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "query": "monster energy drinks", "visitorId": "test" } |
|
#4. Kueri pencarian jawaban LLM Permintaan API percakapan: Kueri awal { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch", "query": "Compare 1% milk with 2% milk", "visitorId": "test" } Respons API percakapan: Respons awal { "userQueryTypes": ["PRODUCT_COMPARISON"], "conversationalTextResponse": "1% milk contains 110 calories, 1.5 g of saturated fat, and 140 mg of sodium per cup. 2% milk is reduced fat with 37% less fat than regular milk and contains vitamins A & D.", "conversationId": "0e1cfdac-802f-422d-906e-9fc9f9d733ba", "refinedSearch": [ { "query": "1% milk" }, { "query": "2% milk" } ] } Permintaan Search API: Kueri lanjutan { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "query": "1% milk", "visitorId": "test" } |
|
#5. Penyempurnaan intent Permintaan API percakapan: Kueri awal { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch", "query": "Help me plan a party", "visitorId": "test" } Respons API percakapan: Respons awal { "userQueryTypes": ["INTENT_REFINEMENT"], "conversationalTextResponse": "To plan a party, you'll need decorations, snacks, party supplies, drinks, and a cake. You can find a wide variety of decorations, snacks, and drinks. For party supplies, you can find everything from plates and cups to balloons and streamers. And for cake, you can choose from a variety of flavors and sizes.", "followupQuestion": { "followupQuestion": "What kind of party are you planning?" }, "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "refinedSearch": [ { "query": "Decorations" }, { "query": "Snacks" }, { "query": "Party Supplies" }, { "query": "Drinks" }, { "query": "Cake" } ], "state": "SUCCEEDED" } |
|
Kategori 1. Kueri tidak relevan yang tidak memerlukan jawaban LLM
-
QUERY_TYPE_UNSPECIFIED
: - Tidak ada
conversational_text_response
yang diberikan. - Tindakan: Tangani sebagai kasus default atau error. Anda dapat meminta pengguna untuk mengklarifikasi atau mengarahkan mereka ke tempat mereka bisa mendapatkan bantuan umum.
RETAIL_IRRELEVANT
:- Tidak ada
conversational_text_response
yang diberikan. - Tindakan: Tangani hal ini dengan menampilkan pesan yang sesuai, seperti Saya tidak dapat menjawab pertanyaan itu., atau Saya adalah asisten belanja, bagaimana saya dapat membantu Anda?, sebagaimana ditentukan oleh desain aplikasi Anda.
BLOCKLISTED
:- Tidak ada
conversational_text_response
yang diberikan. - Tindakan: Tangani sesuai dengan kebijakan daftar blokir Anda, biasanya dengan menampilkan pesan tidak dapat memenuhi permintaan ini yang generik.
Kategori 2. Pertanyaan dukungan dan informasi
Untuk jenis ini, API tidak menyediakan conversational_text_response
langsung secara default, tetapi Anda memiliki opsi untuk mengarahkan ke link atau resource yang tepat.
ORDER_SUPPORT
:- Tindakan Default: Tidak ada
conversational_text_response
yang diberikan. UI Anda perlu menampilkan beberapa pesan standar, link yang relevan, atau mengalihkan kueri ke API dukungan khusus atau saluran layanan pelanggan Anda sendiri. DEALS_AND_COUPONS
:- Tindakan Default: Tidak ada
conversational_text_response
yang diberikan. UI Anda harus menampilkan beberapa pesan standar, link yang relevan, atau mengalihkan kueri ke sistem promosi atau penawaran Anda. STORE_RELEVANT
:- Tindakan Default: Tidak ada
conversational_text_response
yang diberikan. UI Anda harus menampilkan beberapa pesan standar, link yang relevan, atau mengalihkan kueri ke sistem informasi atau pencari lokasi toko Anda sendiri. RETAIL_SUPPORT
:- Tindakan Default: Tidak ada
conversational_text_response
yang diberikan. UI Anda harus menampilkan beberapa pesan standar, link yang relevan, atau mengalihkan kueri ke sistem informasi dan pertanyaan umum Anda sendiri.
Kategori 3. Penelusuran kata kunci yang tidak memerlukan jawaban LLM
SIMPLE_PRODUCT_SEARCH
:- Tidak ada respons teks percakapan yang dihasilkan.
- Tindakan: Respons API selalu menampilkan satu kueri
refined_search
. Kueri yang dipersempit ini berfungsi sebagai istilah penelusuran yang disarankan. Lakukan panggilan langsung ke Search API inti (SearchService.Search
) dan ambil hasil produk yang relevan menggunakan salah satu kueri asli atau kuerirefined_search
.refined_search.query
mungkin tidak langsung berasal dari input pengguna akhir saat ini, tetapi juga dapat berasal dari konteks histori chat, seperti jika pengguna akhir sebelumnya menyempurnakan gaun pesta menjadi gaun merah, kueri yang disempurnakan dapat menjadi gaun pesta merah. - Untuk antarmuka percakapan (seperti chatbot): Sangat direkomendasikan untuk menggunakan
refined_search.query
yang disediakan oleh API. Dalam alur percakapan, kueri bahasa alami seperti "dapatkah Anda membantu saya menemukan pisang" dioptimalkan secara otomatis oleh API menjadi istilah penelusuran produk yang tepat ("pisang"), sehingga menghasilkan hasil produk yang lebih relevan. - Untuk pengalaman penelusuran inti (seperti halaman hasil penelusuran): Anda memiliki fleksibilitas untuk menggunakan
refined_search.query
dari API atau kueri asli yang diberikan oleh pengguna akhir, karena kueri asli kemungkinan besar sudah merupakan istilah penelusuran produk yang tepat. Pilih opsi yang paling sesuai dengan strategi tampilan hasil penelusuran dan UI Anda. - Opsi pengalaman pengguna: Percakapan tidak perlu diakhiri untuk kueri
SIMPLE_PRODUCT_SEARCH
. Pengguna Anda dapat melanjutkan percakapan dengan meneruskanconversation_id
dalam permintaan berikutnya. - Opsi A: Mengakhiri UI percakapan: Banyak retailer memilih untuk mengalihkan pengguna Anda ke halaman hasil penelusuran standar setelah
SIMPLE_PRODUCT_SEARCH
terdeteksi, sehingga menutup jendela chat. Dalam skenario ini, jika pengguna akhir kemudian memasukkan kueri baru ke dalam kotak penelusuran standar tanpaconversation_id
sebelumnya, kueri tersebut akan dianggap sebagai percakapan baru yang terpisah, danconversation_id
baru akan dikeluarkan. - Opsi B: Melanjutkan UI percakapan: Retailer dapat memilih untuk tetap membuka jendela chat. Tindakan ini memungkinkan pengguna Anda kembali ke mode percakapan. Keputusan untuk menerapkan Opsi A atau B sepenuhnya bergantung pada pengalaman pengguna pilihan retailer.
- Mendapatkan
conversation_id
: Saat Anda melakukan panggilan APIconversationalSearch
,ConversationalSearchResponse.conversation_id
akan ditampilkan. - Memberi Tag Peristiwa Pengguna: Jika respons percakapan menghasilkan kueri penelusuran, seperti jika sistem Anda otomatis menjalankan penelusuran berdasarkan kueri yang disempurnakan untuk
SIMPLE_PRODUCT_SEARCH
, Anda harus memberi tag pada peristiwa pengguna penelusuran berikutnya (UserEvent
) denganconversation_id
yang sama yang diterima diConversationalSearchResponse
.
Untuk mengatribusikan kueri penelusuran secara akurat ke interaksi percakapan dan menggunakan kemampuan analisis lengkap dalam Vertex AI Search untuk commerce, pemberian tag peristiwa yang tepat sangat penting:
Dengan memberi tag UserEvent.conversation_id
dengan benar, analisis Anda dapat secara akurat mengatribusikan kueri penelusuran ke interaksi percakapan sebelumnya, sehingga memberikan insight berharga tentang perilaku dan jalur konversi pengguna Anda.
Kategori 4. Kueri LLM yang mencari jawaban
Untuk jenis kueri ini, API menghasilkan conversational_text_response
(jawaban LLM) dan mungkin juga memberikan satu atau beberapa kueri refined_search
. Percakapan tidak berakhir, dan pengguna akhir dapat melanjutkannya.
PRODUCT_DETAILS
:- Tindakan:
conversational_text_response
akan memberikan detail produk yang diminta. Sistem Anda harus menampilkan informasi ini dengan jelas kepada pengguna. - Respons juga akan menyertakan
refined_search
(satu atau beberapa kueri penelusuran yang disarankan, diurutkan dan diberi peringkat) yang harus digunakan untuk mengambil hasil penelusuran menggunakan Search API inti. PRODUCT_COMPARISON
:- Tindakan:
conversational_text_response
akan memberikan perbandingan produk yang ditentukan. Sistem Anda harus menampilkan informasi ini dengan jelas kepada pengguna. - Respons akan mencakup
refined_search
(satu atau beberapa kueri penelusuran yang disarankan, diurutkan dan diberi peringkat) yang harus digunakan untuk mengambil hasil penelusuran menggunakan Search API inti. BEST_PRODUCT
:- Tindakan:
conversational_text_response
memberikan rekomendasi atau informasi tentang produk "terbaik" berdasarkan kueri. Sistem Anda akan menampilkan informasi ini. - Respons mencakup
refined_search
(satu atau beberapa kueri penelusuran yang disarankan, diurutkan dan diberi peringkat) yang harus digunakan untuk mengambil hasil penelusuran menggunakan Search API inti.
Kategori 5. Penyempurnaan intent
INTENT_REFINEMENT
:- Tindakan: Respons akan menyertakan
conversational_text_response
,followup_question
, danrefined_search
(satu atau beberapa kueri penelusuran yang disarankan). Urutan tampilan yang direkomendasikan adalah sebagai berikut: conversational_text_response
refined_search
saran: Saran ini diurutkan dan diberi peringkat, jadi penting untuk menampilkannya dalam urutan yang sama dengan respons.Followup_question
- Respons akan mencakup
refined_search
(satu atau beberapa kueri penelusuran yang disarankan, diurutkan dan diberi peringkat) yang harus digunakan untuk mengambil hasil penelusuran menggunakan Search API inti. - Untuk interaksi berikutnya, kirim jawaban pengguna Anda bersama dengan
conversation_id
.
Menampilkan kueri yang disarankan untuk produk
Berikut cara mengonfigurasi Google Penelusuran untuk menampilkan pertanyaan dan saran produk di agen Conversational Commerce.
Saat Conversational API menampilkan kueri refinedSearch
, kueri ini memberikan peluang yang sangat baik untuk memandu pengguna akhir menuju produk yang relevan. Hal ini sangat berharga untuk Kategori 4 (kueri pencarian jawaban LLM) dan Kategori 5 (INTENT_REFINEMENT
).
Rekomendasi
- Tampilkan: Tampilkan
N
kueri teratas (1-3, menunggu pengujian tentang jumlah ideal untuk UI Anda)refinedSearch
kepada pengguna Anda. - Mekanisme: Kueri yang disarankan ini harus dijalankan melalui Search API inti (
SearchService.Search
) di latar belakang atau saat interaksi pengguna. - Presentasi: Tampilkan hasil sebagai carousel interaktif atau kartu yang dapat diklik, sehingga pengguna dapat menjelajahi kategori produk terkait atau item tertentu. Fitur ini memberikan nilai langsung dan membantu menjembatani kesenjangan antara interaksi percakapan dan penemuan produk.
Permintaan Search API:
Kueri lanjutan
{ "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "query": "Decorations", "visitorId": "test" }
Peristiwa yang akan dikirim ke Vertex AI Search untuk commerce
Penting untuk mengatribusikan kueri penelusuran secara akurat ke interaksi percakapan dan menggunakan kemampuan analisis lengkap dalam Vertex AI Search untuk commerce menggunakan pemberian tag peristiwa yang tepat:
- Mendapatkan
conversation_id
: Saat Anda melakukan panggilan APIconversationalSearch
,ConversationalSearchResponse.conversation_id
akan ditampilkan. - Memberi tag pada peristiwa pengguna: Jika respons percakapan mengarah ke kueri penelusuran, seperti dengan menampilkan saran
refined_search
yang kemudian diklik pengguna akhir, atau jika sistem Anda otomatis menjalankan penelusuran berdasarkan kueri yang disempurnakan, Anda harus memberi tag pada peristiwa pengguna penelusuran berikutnya (UserEvent
) denganconversation_id
yang sama yang diterima diConversationalSearchResponse
.
Dengan memberi tag UserEvent.conversation_id
dengan benar, analisis Anda dapat secara akurat mengatribusikan kueri penelusuran ke interaksi percakapan sebelumnya, sehingga memberikan insight berharga tentang perilaku pengguna dan jalur konversi.
Lanjutkan percakapan
Bagian ini menjelaskan cara sesi agen Conversational Commerce dipertahankan oleh Conversational API dan berlanjut di langkah terakhir ini.
Conversational API menggunakan conversation_id
untuk mengelola percakapan yang sedang berlangsung. Untuk memastikan konsistensi antara jawaban LLM dan hasil penelusuran, permintaan Conversational API
berikutnya harus menyertakan SearchParams
yang mencerminkan konfigurasi panggilan Search API inti.
Penanganan sesi
- Mulai percakapan baru:
- Deskripsi: Untuk memulai percakapan baru, klien menghilangkan
conversationId
dari permintaan API. - Kapan harus memulai percakapan baru: Klien ingin memulai percakapan baru - sehingga mendapatkan
conversationId
baru dari respons API - dalam beberapa skenario pengalaman pengguna umum:- Tab atau sesi baru: Saat pelanggan membuka situs Anda di tab browser baru atau memulai sesi yang benar-benar baru.
- Kueri asli baru: Dalam beberapa desain UX, jika pelanggan memasukkan kueri baru yang tidak terkait, Anda dapat memilih untuk memulai ulang alur percakapan untuk memastikan konteks yang paling relevan.
- Tombol mulai ulang percakapan: Jika UI Anda menyediakan tombol "Mulai Percakapan Baru" atau "Reset Percakapan" yang jelas, mengklik tombol ini akan memicu sesi percakapan baru.
- Integrasi API percakapan: Respons API akan menyertakan
conversationId
baru yang digunakan untuk permintaan berikutnya.
- Deskripsi: Untuk memulai percakapan baru, klien menghilangkan
- Lanjutkan Percakapan:
- Deskripsi:
Conversational API
menampilkanconversation_id
sebagai bagian dari respons API. ID ini harus dikirim dalam permintaan lanjutan untuk melanjutkan percakapan yang sama. Hal ini membantu memastikan bahwa agen Conversational Commerce merespons kueri pengguna Anda berdasarkan histori percakapan dalam sesi tersebut, yang mencakupquery
pengguna akhir,conversational_text_response
, danfollowup_question
. - Integrasi API Percakapan: Klien meneruskan
conversation_id
dari respons sebelumnya diConversationalSearchRequest
.
- Deskripsi:
- Pastikan konsistensi hasil penelusuran:
- Deskripsi: Untuk membantu memastikan jawaban LLM konsisten dengan hasil penelusuran yang ditampilkan kepada pengguna Anda, klien harus menggunakan
searchParams
dalam permintaanConversational API
. Parameter penelusuran ini harus memiliki konfigurasi yang sama, seperti filter, urutan pengurutan) dengan panggilanSearch API
yang dilakukan untuk mengambil hasil produk. - Integrasi API Percakapan: Objek
searchParams
dalamConversationalSearchRequest
harus diisi secara identik denganSearchRequest
yang digunakan untuk penelusuran produk inti.
- Deskripsi: Untuk membantu memastikan jawaban LLM konsisten dengan hasil penelusuran yang ditampilkan kepada pengguna Anda, klien harus menggunakan
Mengirim permintaan ke Vertex AI Search untuk commerce
Anda dapat mengambil conversation_id
dari penyimpanan sesi. Permintaan harus menyertakan query
pelanggan baru, yang mungkin berupa balasan atas pertanyaan dari respons sebelumnya. Permintaan juga harus menyertakan refined_search.query
terbaru dari respons sebelumnya jika pengguna akhir bertindak berdasarkan kueri yang disempurnakan. Jika tidak, kueri tersebut harus menyertakan kueri yang sama sekali baru dan tidak terkait, serta conversationId
. Jangan lupa untuk selalu menyertakan searchParams
.
- Skenario 1: Kotak penelusuran tunggal dan percakapan persisten: Jika antarmuka penelusuran Anda hanya memiliki satu kotak penelusuran utama atau jendela percakapan persisten, Anda tidak akan mereset
conversationId
, meskipun pengguna akhir mengetik kueri baru yang tampaknya tidak terkait. Sistem akan menggunakan histori percakapan yang ada (terkait denganconversationId
) untuk memberikan respons yang relevan secara kontekstual. - Skenario 2: Jendela percakapan dan jendela kueri terpisah: Jika antarmuka penelusuran Anda menampilkan jendela chat percakapan yang berbeda dan kotak kueri penelusuran standar yang terpisah (seperti kotak penelusuran di seluruh situs), memasukkan kueri baru ke kotak penelusuran standar dapat secara implisit menandakan niat untuk memulai penelusuran baru yang tidak terkait, sehingga berpotensi menyebabkan
conversationId
direset untuk tindakan penelusuran tertentu tersebut. Namun, di dalam jendela percakapan khusus,conversationId
harus selalu dipertahankan untuk kesinambungan.
Pada akhirnya, keputusan tentang kapan harus menggunakan kembali versus mereset conversationId
adalah pilihan desain untuk mengoptimalkan pengalaman percakapan bagi pelanggan Anda.
Metode dan endpoint HTTP (sama dengan kueri awal)
POST https://retail.googleapis.com/v2alpha/{placement=projects/*/locations/*/catalogs/*/placements/*}:conversationalSearch
Permintaan API percakapan:
Kueri lanjutan
{ "query": "A birthday party", // New query continuing the conversation from the previous turn "placement": "projects/799252947591/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/{project_id}/locations/{location_id}/catalogs/{catalog_id}/branches/default_branch", "visitorId": "test", // Or your actual visitor_id "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", // conversation_id from previous response "searchParams": { "filter": "categories:(\"Birthday Party Supplies\")" } }
Respons API percakapan:
Respons lanjutan
{ "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "userQueryTypes": ["INTENT_REFINEMENT"], "conversationalTextResponse": "Great! For a birthday party, you might be interested in specific themes or age-group appropriate items.", "followupQuestion": { "followupQuestion": "What's the age group or theme?" }, "refinedSearch": [ { "query": "Birthday party decorations" }, { "query": "Birthday party supplies" } ], "state": "SUCCEEDED" }
Contoh pengguna akhir yang terus menerima pertanyaan:
- Pertanyaan pengguna: Bantu saya merencanakan pesta
- Jawaban sistem: Pesta seperti apa yang Anda rencanakan?
- Balasan pengguna: Pesta ulang tahun
Yang harus dilakukan retailer dengan respons
Cara merender kolom mirip dengan respons awal, tetapi perhatikan perubahan yang mencerminkan percakapan yang berlanjut:
refined_search
: Kolom ini berisi kueri yang diperbarui yang menggabungkan input terbaru pengguna akhir. Anda harus memperbarui konsol klien untuk kueri saat ini dengan tepat (seperti menampilkan kueri yang ditampilkan kepada pengguna yang telah berubah dari "dekorasi" menjadi "dekorasi pesta ulang tahun" atau "perlengkapan pesta ulang tahun"). Kueri refined_search dapat digunakan untuk panggilan ke Search API inti (SearchService.Search
) atau juga dapat ditampilkan kepada pengguna akhir sebagai saran.conversational_text_response
: Menampilkan respons teks buatan AI baru yang relevan dengan giliran terakhir.followup_question
: Jika percakapan perlu dilanjutkan untuk penyempurnaan lebih lanjut,followup_question
baru akan diberikan.
Peristiwa yang akan dikirim ke Vertex AI Search untuk commerce
Pemberian tag peristiwa penting untuk mengatribusikan kueri penelusuran secara akurat ke interaksi percakapan dan menggunakan kemampuan analisis di Vertex AI Search untuk commerce.
Ada dua langkah dalam proses pemberian tag pada peristiwa:
- Mendapatkan
conversation_id
: Saat Anda melakukan panggilan APIconversationalSearch
,ConversationalSearchResponse.conversation_id
akan ditampilkan. - Memberi tag pada peristiwa pengguna: Jika respons percakapan mengarah ke kueri penelusuran, seperti dengan menampilkan saran
refined_search
, atau jika sistem Anda otomatis menjalankan penelusuran berdasarkan kueri yang disempurnakan, Anda harus memberi tag pada peristiwa pengguna penelusuran berikutnya (UserEvent
) denganconversation_id
yang sama yang diterima diConversationalSearchResponse
.
Dengan memberi tag UserEvent.conversation_id
dengan benar, analisis Anda dapat secara akurat mengatribusikan kueri penelusuran ke interaksi percakapan sebelumnya, sehingga memberikan insight berharga tentang perilaku pengguna akhir dan jalur konversi.
Pertimbangan dan praktik terbaik tambahan
Pertimbangan dan praktik terbaik tambahan harus dipertimbangkan saat menerapkan antarmuka agen Conversational Commerce Anda:
- Konsistensi ID pengunjung: Membantu memastikan bahwa
visitor_id
unik dikirim secara konsisten dengan setiap permintaan untuk pengguna akhir tertentu. Hal ini sangat penting untuk personalisasi dan pelatihan model yang akurat. ID ini idealnya tetap konsisten untuk pengguna akhir di seluruh sesi dan status login atau logout. - Pengelolaan cabang: Meskipun
default_branch
umum, pastikan Anda menggunakan ID cabang yang benar jika katalog produk Anda disusun dengan beberapa cabang. - Interaksi Search API: Untuk
SIMPLE_PRODUCT_SEARCH
dan kasus apa pun saatrefined_search
diberikan, jangan lupa untuk melakukan panggilan terpisah ke Search API inti (SearchService.Search
) menggunakanquery
dari kolomrefined_search
atau kueri asli untuk mendapatkan listingan produk yang sebenarnya. Conversational API terutama berfokus pada pengalaman percakapan dan pemahaman maksud pengguna, bukan langsung menampilkan hasil produk. - Desain antarmuka pengguna: Desain UI Anda untuk menampilkan opsi
conversational_text_response
,followup_question
, danrefined_search
dengan jelas secara intuitif untuk memandu pengguna Anda.
Langkah berikutnya
Untuk mengetahui referensi dukungan tambahan, lihat FAQ fitur percakapan.