۱. مرور کلی
آخرین بهروزرسانی: 2023-08-07
آنچه خواهید ساخت
در این آزمایشگاه کد، شما یک عامل مجازی ساده را در Dialogflow CX خواهید ساخت، مستقر و پیکربندی کنید تا به غواصان اسکوبا در رزروهای گروهی و چارترهای خصوصی کمک کند. این عامل مجازی از هوش مصنوعی مولد و جدیدترین مدلهای زبان بزرگ مولد (LLM) گوگل برای تولید پاسخهای عامل مجازی استفاده خواهد کرد.
آنچه یاد خواهید گرفت
- نحوه فعال کردن API های مربوطه
- چگونه Dialogflow به طور خودکار مقادیر پارامترهای فرم صفحه را از پارامترهای intent از قبل پر میکند
- نحوه پیکربندی کنترلکنندههای رویداد در Dialogflow
- نحوه فعال کردن پشتیبان مولد در کنترلکنندههای رویداد بدون تطابق که در جریانها و هنگام پر کردن پارامتر استفاده میشوند
- چگونه پیام متنی خود را برای مدیریت موقعیتهای مکالمهای پایه و همچنین موقعیتهای مکالمهای خاص اپراتور پیکربندی کنید
- نحوه نوشتن توضیحات خوب برای intent و پارامترها برای تولید کنترلکنندههای reprompt برای پارامترهای مورد نیاز (علاوه بر reprompt های تعریف شده توسط کاربر)
- چگونه کارشناس خود را آزمایش کنید و سوالات مشتری را که باعث ایجاد پاسخهای جایگزین میشوند، شبیهسازی کنید
آنچه نیاز دارید
- یک پروژه ابری گوگل
- یک مرورگر مثل کروم
۲. راهاندازی
قبل از اینکه بتوانید از ویژگی generative fallback در Dialogflow CX استفاده کنید، باید Dialogflow API را فعال کنید.
فعال کردن Dialogflow API با استفاده از Cloud Console
- کنسول گوگل کلود را در مرورگر خود باز کنید.
- در کنسول گوگل کلود، به کتابخانه API بروید تا APIها و سرویسهایی را که میتوانند فعال شوند، مرور کنید.
- با استفاده از نوار جستجو در بالای صفحه کتابخانه API، عبارت
Dialogflow APIرا جستجو کنید، سپس روی سرویس نمایش داده شده کلیک کنید. - برای فعال کردن Dialogflow API در پروژه Google Cloud خود، روی دکمه Enable کلیک کنید.
استفاده از رابط خط فرمان gcloud (جایگزین)
به عنوان یک روش جایگزین، API را میتوان با استفاده از دستور gcloud زیر فعال کرد:
gcloud services enable dialogflow.googleapis.com
اگر API با موفقیت فعال شده باشد، باید پیامی مشابه پیام زیر را مشاهده کنید:
Operation "operations/..." finished successfully.
کد را دریافت کنید
شما عامل مجازی را از ابتدا ایجاد نخواهید کرد، ما عاملی را در اختیار شما قرار میدهیم که باید آن را از کنسول Dialogflow CX بازیابی کرده و سپس بهبود بخشید.
برای دانلود کد منبع:
- یک تب جدید در مرورگر باز کنید، به مخزن agent بروید و آن را از طریق خط فرمان کلون کنید.
- عامل اولیه به صورت یک بسته JSON صادر شده است. فایل را از حالت فشرده خارج کنید، تنظیمات عامل را بررسی کنید، به تعریف جریان
Liveaboards.jsonنگاهی بیندازید و در نهایت صفحات جریان، اهداف و موجودیتها را مرور کنید.
۳. یک عامل جدید ایجاد کنید
کنسول Dialogflow را باز کنید
شما از کنسول Dialogflow CX به همراه پروژه Google Cloud خود برای انجام مراحل باقی مانده در این codelab استفاده خواهید کرد.
- در مرورگر خود، به کنسول Dialogflow CX بروید.
- پروژه Google Cloud مورد نظر خود را انتخاب کنید، یا یک پروژه جدید برای استفاده ایجاد کنید.
- شما باید لیستی از Agentها را در کنسول Dialogflow CX مشاهده کنید.
اگر این اولین بار است که از Dialogflow CX استفاده میکنید، برای اطلاعات بیشتر در مورد پیکربندی پروژه و تنظیمات بسته به نیاز خود، به مستندات Dialogflow CX مراجعه کنید.
یک عامل جدید Dialogflow CX ایجاد کنید
- برای بازیابی عامل دانلود شده از مخزن گیتهاب، باید یک عامل جدید ایجاد کنید. از کنسول Dialogflow CX، روی ایجاد عامل جدید در گوشه سمت راست بالای صفحه کلیک کنید.

- گزینه ساخت عامل خودتان را انتخاب کنید.

- فرم را با تنظیمات نماینده زیر تکمیل کنید و برای ایجاد نماینده روی ایجاد کلیک کنید.
- به عنوان نام نمایشی،
Divebookerرا انتخاب کنید. - به عنوان مکان انتخاب کنید:
us-central1 - منطقه زمانی دلخواه خود را انتخاب کنید
- انتخاب
en - Englishبه عنوان زبان پیشفرض
- Dialogflow به طور خودکار عامل را برای شما باز میکند. کار ما هنوز تمام نشده است!
بازیابی عامل Divebooker
- به صفحه فهرست نمایندگان برگردید، نمایندهای را که تازه ایجاد کردهاید شناسایی کنید. روی گزینه
و سپس روی دکمه بازیابی کلیک کنید. - گزینه آپلود را انتخاب کنید و سپس فایل زیپی که قبلاً از مخزن گیتهاب دانلود کردهاید را انتخاب یا رها کنید.
- برای وارد کردن عاملی که ارائه دادهایم، روی دکمهی بازیابی (Restore) کلیک کنید.

آفرین! شما ساخت نماینده مجازی رزرو غواصی خود را که آماده کمک به مشتریانتان است، به پایان رساندید. در بخش بعدی، آن را آزمایش خواهید کرد و خواهید دید که در پاسخ به سوالات کاربران و کمک به درخواستهای رزرو چقدر خوب عمل میکند.
۴. عامل را آزمایش کنید
Dialogflow یک شبیهساز داخلی برای چت با عاملهای شما و کشف اشکالات فراهم میکند. برای هر نوبت، میتوانید مقادیر صحیح برای هدف فعالشده، پاسخ عامل، صفحه فعال و پارامترهای جلسه را تأیید کنید.
ما چند سناریو را آزمایش خواهیم کرد و برای هر سناریو، دلیل اینکه عامل پاسخ خاصی میدهد را بررسی خواهیم کرد. بیایید با سناریوی اول شروع کنیم.
قصد حل نشده
- در کنسول Dialogflow و از درون agent خود، روی Test Agent کلیک کنید تا Simulator باز شود.

- یک پیام خوشامدگویی برای عامل خود مانند
Helloتایپ کنید و بپرسیدwhat is a liveaboard?. سوال با هیچ یک از intent ها مطابقت ندارد، یک پیام عمومی مانند "متاسفم، مطمئن نیستم چگونه کمک کنم" نمایش داده می شود. می توانید با بررسی پاسخ اصلی در شبیه ساز، بررسی کنید که آیا رویداد داخلی sys.no-match-default فراخوانی شده است یا خیر.

تقریباً تا انتهای پاسخ JSON به پایین اسکرول کنید. توجه داشته باشید که هنگام جستجوی یک هدف منطبق، Dialogflow متوجه میشود که این یک NO_MATCH است و یک رویداد عدم تطابق را ایجاد میکند.

- به برگه ساخت (Build) بروید و صفحه شروع (Start Page) جریان Liveaboards را باز کنید.

به طور پیشفرض، هر جریان دارای کنترلکنندههای رویداد برای رویدادهای داخلی بدون تطابق و بدون ورودی است. این کنترلکنندههای رویداد به طور خودکار هنگام ایجاد یک جریان ایجاد میشوند و قابل حذف نیستند.
- روی رویداد sys.no-match-default کلیک کنید و به بخش پاسخهای Agent بروید. Dialogflow فهرستی از پاسخهای جایگزین را ارائه میدهد، اما میتوانید انواع مختلفی از پیامهای پاسخ را نیز تعریف کنید تا به کاربر نهایی چیزی بیش از پاسخهای متنی ارائه دهید.

بیایید اکنون به مسیر شاد برویم!
مسیر شاد
در این مورد دوم، وانمود کنید غواصی هستید که میخواهد برای یک گروه ۱۲ نفره در ماه جولای سال آینده، یک سفر دریایی غواصی به جزایر گالاپاگوس رزرو کند.
- در پنل شبیهساز، روی آیکون تنظیم مجدد (Reset) کلیک کنید تا مکالمه جدیدی با عامل (Agent) آغاز شود.


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

- صفحه شروع (Start Page) را باز کنید و روی مسیر head.send.group.request کلیک کنید. به پایین اسکرول کنید تا به بخش Transition برسید که به Dialogflow میگوید وقتی این هدف (Intent) مطابقت پیدا کرد، صفحه را به چه حالتی منتقل کند.

- تعریف مسیر را ببندید و صفحه «جمعآوری اطلاعات بیشتر» را باز کنید. به تکمیل ورودی و لیست پارامترها توجه کنید.

برای هر صفحه در Dialogflow CX میتوانید یک فرم تعریف کنید که فهرستی از پارامترهایی است که باید از کاربر نهایی برای صفحه جمعآوری شوند. توجه داشته باشید که عامل مقصد سفر را درخواست نکرده است زیرا ما آن را به عنوان بخشی از ورودی اولیه ارسال کردهایم و مقصد نیز یک پارامتر intent است. هنگامی که یک صفحه در ابتدا فعال میشود و در طول دوره فعال بودن آن، هر پارامتر فرم با نام مشابه پارامتر intent به طور خودکار روی مقدار پارامتر session تنظیم میشود و اعلان مربوطه نادیده گرفته میشود.
- به برگه مدیریت بروید و روی هدف درخواست گروه head.send در بخش اهداف کلیک کنید. به عبارات آموزشی ارائه شده برای این هدف و بخشهای حاشیهنویسی شده عبارات آموزشی نگاه کنید.

- عبارت آموزشی «من باید یک سفر به کاستاریکا برای ۱۵ غواص ترتیب دهم» را در نظر بگیرید. «کاستاریکا» با مقصد و «۱۵» با تعداد مهمانان حاشیهنویسی شده است. وقتی بخشهایی از یک عبارت آموزشی را حاشیهنویسی میکنید، Dialogflow تشخیص میدهد که این بخشها فقط نمونههایی از مقادیر واقعی هستند که توسط کاربران نهایی در زمان اجرا ارائه میشوند. به همین دلیل است که برای ورودی اولیه «آیا شما به جزایر گالاپاگوس چارتر ارائه میدهید؟» Dialogflow پارامتر مقصد را از «جزایر گالاپاگوس» استخراج کرد.
در ادامه بررسی خواهیم کرد که اگر هنگام درخواست پر کردن پارامتر فرم، ورودی معتبری به عامل ارائه ندهیم، چه اتفاقی میافتد.
ورودی نامعتبر
- در پنل شبیهساز، روی آیکون تنظیم مجدد (Reset) کلیک کنید تا مکالمه جدیدی با عامل (Agent) آغاز شود.
- قصد خود را برای رزرو گروهی ابراز کنید، این بار به متصدی نگویید کجا میخواهید بروید و وقتی از شما مقصد پرسیده شد، با یک مقدار تصادفی پاسخ دهید که کاستاریکا، گالاپاگوس یا مکزیک نباشد.

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

- برای اطلاع از اینکه موجودیت با چه مقادیری مطابقت دارد، روی موجودیت مقصد کلیک کنید. «اروپا» جزو ورودیها نیست و مترادف آن نیز نیست.
- در نمودار جریان، صفحه « جمعآوری اطلاعات بیشتر» را که حاوی پارامترهای فرم است، باز کنید. روی پارامتر مقصد کلیک کنید.
- در پنل پارامترها، به پایین اسکرول کنید تا به بخش Reprompt event handlers برسید، سپس روی No-match default event handler کلیک کنید.
این کنترلکننده رویداد سطح پارامتر به طور خاص برای مدیریت ورودی نامعتبر کاربر نهایی در هنگام پر کردن فرم در نظر گرفته شده است. از آنجا که "Europe" یک ورودی غیرمنتظره است، یک رویداد sys.no-match-default فراخوانی شد و کنترلکننده reprompt مربوطه که برای این رویداد تعریف شده است، فراخوانی شد. بخشی که Agent میگوید، دو پیام reprompt جایگزین را فهرست میکند.

عالی بود! این موارد آزمایشی، سناریوهای رایجی را نشان میدهند که انتظار میرود عامل به طور مناسب آنها را مدیریت کند. اغلب کاربران سوالاتی میپرسند که رباتها قادر به پاسخگویی به آنها نیستند یا درخواستهایی میکنند که رباتها قادر به انجام آنها نیستند. طراحی برای دنباله بلند (long tail) به معنای خارج از مسیرهای معمول و رایجی که اکثر کاربران دنبال میکنند، بسیار پیچیده است. به تمام چیزهایی که میتواند در یک مکالمه اشتباه پیش برود و تمام مسیرهای غیرمنتظره یا پشتیبانی نشدهای که کاربران ممکن است طی کنند، فکر کنید.
پیشرفت در تشخیص خودکار گفتار (ASR) به این معنی است که ما تقریباً همیشه دقیقاً میدانیم کاربران چه گفتهاند. با این حال، تعیین منظور کاربران هنوز یک چالش است. گفتارها اغلب به صورت جداگانه قابل درک نیستند؛ آنها فقط در متن قابل درک هستند. در بخش بعدی این آزمایشگاه کد، بررسی خواهیم کرد که چگونه جدیدترین مدلهای زبان بزرگ تولیدی (LLM) گوگل میتوانند به بازگرداندن گفتگو به مسیر اصلی و پیشبرد مکالمه کمک کنند.
۵. فعال کردن پشتیبان مولد
ویژگی پشتیبان مولد چیست؟
ویژگی پشتیبان مولد، یک ویژگی Dialogflow CX است که از مدلهای زبانی بزرگ (LLM) گوگل برای تولید پاسخهای عامل مجازی استفاده میکند.
چطور کمک میکند؟
در بین موارد استفاده کلیدی، تعدادی درخواست نسبتاً رایج از سوی کاربران وجود دارد، مانند تکرار آنچه اپراتور گفته در صورتی که کاربر متوجه نشده باشد، نگه داشتن خط تلفن هنگام درخواست کاربر و خلاصه کردن مکالمه. در اولین آزمایشی که انجام دادیم، اپراتور نتوانست به سوال «لیوابورد چیست؟» پاسخ دهد، زیرا ما برای آن هدفی ایجاد نکرده بودیم و جریان را برای رسیدگی به این نوع سوالات عمومی مربوط به غواصی اسکوبا و لیوابوردها طراحی نکرده بودیم.
حتی با وجود نیتهای قوی، هنوز هم جایی برای خطا وجود دارد. کاربران ممکن است با سکوت (خطای بدون ورودی) یا گفتن چیزی غیرمنتظره (خطای بدون تطابق) از اسکریپت خارج شوند. اگرچه جلوگیری از وقوع خطا بهتر از مدیریت خطاها پس از وقوع است، اما نمیتوان از خطاها به طور کامل اجتناب کرد. پیامهای عمومی مانند "ببخشید، مطمئن نیستم که چگونه کمک کنم" یا راهحلهای مشابه با حداقل کارایی، اغلب به اندازه کافی خوب نیستند. پیامهای خطا باید از اصل همکاری الهام گرفته شوند که طبق آن، ارتباط کارآمد بر این فرض استوار است که یک جریان پنهانی از همکاری بین شرکتکنندگان در مکالمه وجود دارد.
در بخش بعدی، به چگونگی پیکربندی ویژگی generative fallback برای افزایش پوشش هدف و سادهسازی مدیریت خطا برای تجربه بهتر مشتری خواهیم پرداخت.
فعال کردن پشتیبان مولد برای رویداد عدم تطابق کل جریان
شما میتوانید قابلیت generative fallback را برای کنترلکنندههای رویداد بدون تطابق که در جریانها، صفحات یا در طول پر کردن پارامتر استفاده میشوند، فعال کنید. هنگامی که generative fallback برای یک رویداد بدون تطابق فعال میشود، هر زمان که آن رویداد فعال شود، Dialogflow سعی میکند یک پاسخ تولید شده تولید کند که به کاربر بازگردانده میشود. اگر تولید پاسخ ناموفق باشد، پاسخ عامل تعیینشدهی معمول به جای آن صادر میشود.
شما میتوانید در عامل خود، در کنترلکنندههای رویداد بدون تطابق، قابلیت generative fallback را فعال کنید که میتواند در جریان، صفحه یا تکمیل پارامتر مورد استفاده قرار گیرد.
ما شروع به فعال کردن generative fallback برای کل رویداد no-match-default جریان Liveaboards خواهیم کرد.
- صفحه شروع جریان را باز کنید.
- در قسمت Event handlers روی sys.no-match-default کلیک کنید.
- گزینه Enable generative fallback را در قسمت Agent responses تیک بزنید، سپس روی ذخیره کلیک کنید.


فعال کردن پشتیبان مولد در رویدادهای خاص بدون تطابق
اکنون میخواهیم یک تابع بازگشتی مولد (generative fallback) را فعال کنیم تا وقتی عامل تعداد مسافران را میپرسد، ورودیهای نامعتبر را مدیریت کند:
- صفحه «جمعآوری اطلاعات بیشتر» را که حاوی پارامترهای فرم است، باز کنید. روی پارامتر «تعداد مهمانان» کلیک کنید.
- به کنترلکننده رویداد بدون تطابق هدف بروید (به پایین بروید تا به بخش کنترلکنندههای رویداد Reprompt برسید، سپس روی کنترلکننده رویداد پیشفرض بدون تطابق کلیک کنید)

- گزینه Enable generative fallback را در قسمت Agent responses فعال کنید.

- در نهایت روی ذخیره کلیک کنید
- اکنون مراحل دقیق را برای فعال کردن پشتیبان مولد برای مقصد و آدرس ایمیل تکرار کنید
عالی بود! شما قابلیت generative fallback را برای مدیریت intentهای غیرمنتظره و مقادیر پارامتر نامعتبر فعال کردهاید. در ادامه، به نحوه پیکربندی ویژگی generative fallback با یک اعلان متنی که به LLM نحوه پاسخگویی را آموزش میدهد، خواهیم پرداخت.
۶. پیکربندی پشتیبان مولد
ویژگی پشتیبان مولد، درخواستی را به یک مدل زبانی بزرگ ارسال میکند تا پاسخ تولید شده را تولید کند. این درخواست به شکل یک پیام متنی است که ترکیبی از زبان طبیعی و اطلاعات مربوط به وضعیت فعلی عامل و مکالمه است. این ویژگی را میتوان به روشهای مختلفی پیکربندی کرد:
- یک اعلان خاص (از قبل تعریف شده) را برای استفاده در تولید پاسخ انتخاب کنید.
- یک اعلان سفارشی تعریف کنید.
یک اعلان از قبل تعریف شده را انتخاب کنید
- در کنسول Dialogflow CX روی تنظیمات عامل (Agent Settings) کلیک کنید.

- به برگه ML و سپس زیربرگه Generative AI بروید.

این ویژگی با دو الگوی اعلان از جعبه خارج میشود، الگوی پیشفرض (که قابل مشاهده نیست) و الگوی نمونه که شما را در نوشتن الگوهای دلخواهتان راهنمایی میکند.
- الگوی Example را انتخاب کنید و برای بررسی آن، روی دکمه Edit در سمت راست منوی کشویی کلیک کنید.
با استفاده از دستورالعمل از پیش تعریف شده، عامل مجازی میتواند موقعیتهای مکالمهای پایه را مدیریت کند. برای مثال:
- به کاربر سلام و احوالپرسی کنید و خداحافظی کنید.
- آنچه را که نماینده گفته است تکرار کنید تا در صورتی که کاربر متوجه نشده باشد، متوجه منظور او شوید.
- وقتی کاربر درخواست کرد، خط را نگه دارید.
- مکالمه را خلاصه کنید.
بیایید سعی کنیم یک پیام متنی خاص برای عامل Divebooker تعریف کنیم!
۷. سوال خودتان را تعریف کنید
- متن زیر را کپی کرده و در قسمت متن پیست کنید
You are a friendly agent that likes helping traveling divers.
You are under development and you can only help
$flow-description
At the moment you can't help customers with land-based diving and courses. You cannot recommend local dive shops and diving resorts.
Currently you can $route-descriptions
The conversation between the human and you so far was:
${conversation USER:"Human:" AGENT:"AI"}
Then the human asked:
$last-user-utterance
You say:
- برای ذخیره اعلان جدید به عنوان یک الگوی جدید، گزینه «ذخیره به عنوان یک الگوی جدید» را انتخاب کنید (یک نام الگوی جدید انتخاب کنید) و در گوشه پایین سمت راست پنل، روی «ذخیره» کلیک کنید.

- برای اینکه اعلان جدید ایجاد شده را به اعلان فعال تبدیل کنید، باید تنظیمات را نیز ذخیره کنید .

هنگام نوشتن متن سوال خود، واضح، مختصر و تجویزی باشید. نحوهی نگارش سوال برای LLM میتواند تا حد زیادی بر کیفیت پاسخ LLM تأثیر بگذارد. LLMها آموزش دیدهاند که از دستورالعملها پیروی کنند، و بنابراین هرچه سوال شما بیشتر شبیه یک دستورالعمل دقیق باشد، احتمالاً نتایج بهتری خواهید گرفت. یک سوال بنویسید و بر اساس نتایجی که به دست میآورید، سپس برای بهبود آن تکرار کنید.
برای ایجاد پیامهای مؤثر، از بهترین شیوههای زیر پیروی کنید:
- شرح واضح و مختصری از وظیفهای که میخواهید LLM انجام دهد، ارائه دهید. نه بیشتر، نه کمتر. آن را کامل و کوتاه نگه دارید.
- علاوه بر این، درخواست باید خاص و کاملاً تعریف شده باشد و از زبان مبهم یا دوپهلو پرهیز شود.
- وظایف پیچیده را به قطعات کوچکتر و قابل مدیریتتر تقسیم کنید. با تقسیم وظیفه به مراحل کوچکتر، میتوانید به مدل کمک کنید تا در هر زمان روی یک چیز تمرکز کند و احتمال خطا یا سردرگمی را کاهش دهد.
- برای بهبود کیفیت پاسخ، مثالهایی را در درخواست خود اضافه کنید. LLM از مثالها در متن یاد میگیرد که چگونه پاسخ دهد.
هنگام ایجاد یک اعلان، علاوه بر توصیف زبان طبیعی از نوع زمینهای که باید ایجاد شود، میتوان از متغیرهای زیر نیز استفاده کرد:
-
$conversationمکالمه بین عامل و کاربر، به استثنای آخرین گفته کاربر. میتوانید پیشوندهای نوبت (مثلاً: "انسان"، "هوش مصنوعی" یا "شما"، "عامل") را در اعلان متن تطبیق دهید. -
$last-user-utteranceکاربر. -
$flow-descriptionشرح جریان مربوط به جریان فعال. -
$route-descriptionsتوضیحات مربوط به اینتنتهای فعال.
حالا که یک متن اولیه برای اعلان داریم، وظیفه بعدی این است که مطمئن شویم جریان و اهداف، توضیحات خوبی دارند.
۸. توضیحات جریان و قصد را اضافه کنید
شرح جریان را اضافه کنید
- برای افزودن توضیح به جریان Liveaboards ، با نگه داشتن ماوس روی جریان در بخش Flows ، به تنظیمات جریان دسترسی پیدا کنید.

- روی گزینهها کلیک کنید
دکمه - تنظیمات جریان (Flow settings) را انتخاب کنید و توضیحات زیر (یا توضیحاتی مشابه) را اضافه کنید:
search, find and book liveaboards).

- روی ذخیره کلیک کنید
توضیحات هدف را اضافه کنید
- حالا بیایید یک توضیح خوب به intent مربوط به head.send.group.request اضافه کنیم. به تب Manage بروید، در قسمت Resources گزینه Intents را انتخاب کنید و intent مربوط به head.send.group.request را انتخاب کنید.
- توضیحات زیر را اضافه کنید:
assist users with group or full charter reservations. Initially collect travel details including departure period, destination, number of guests (min 4 max 15 people), contact details. The destination must be one of the following in the Pacific: Costa Rica, Mexico, Galapagos Islands
توجه داشته باشید که این توضیحات شامل اطلاعات مهمی مانند حداقل و حداکثر تعداد مسافران مجاز در یک قایق است. این را در نظر داشته باشید!
- روی ذخیره کلیک کنید
و کار تمام است! شما قابلیت generative fallback را روی کنترلکنندههای رویداد بدون تطابق، هم برای اجرای جریان و هم برای تکمیل پارامتر فعال کردهاید. همچنین اعلان متنی خودتان را تعریف کردهاید که ویژگی generative fallback آن را به یک مدل زبانی بزرگ منتقل میکند تا پاسخهای generative تولید کند.
در بخش بعدی، شما عامل خود را دوباره آزمایش خواهید کرد تا ببینید چگونه میتواند به همان سؤالات چالشبرانگیز قبلی پاسخ دهد.
۹. کارگزار خود را دوباره آزمایش کنید
اکنون که قابلیت generative fallback را روی عامل مجازی پیکربندی و فعال کردهاید، میتوانید سوالات چالشبرانگیز مشابهی بپرسید و ببینید که چگونه پاسخها را مدیریت میکند.
برای باز کردن دوباره شبیهساز، روی Test Agent کلیک کنید.

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

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

درست است، در حال حاضر ما نماینده را برای کمک به دورههای غواصی طراحی نکردهایم. نماینده از کجا این را میداند؟ در متن درخواست، به وضوح مشخص کردهایم که نماینده در چه مواردی میتواند و نمیتواند کمک کند. " در حال حاضر شما نمیتوانید به مشتریان در زمینه غواصی و دورههای غواصی زمینی کمک کنید. شما نمیتوانید فروشگاههای غواصی محلی و استراحتگاههای غواصی را توصیه کنید."
حالا سناریوی شاد را دوباره آزمایش کنید و گفتگو را غنیتر کنید. بیایید ببینیم تجربه چگونه تغییر کرده است.


وقتی Dialogflow با یک هدف مطابقت دارد یا سعی میکند پارامتری را طبق طراحی جریان جمعآوری کند، برآوردهایی را که در زمان طراحی تعریف شدهاند نمایش میدهد. وقتی کاربر از اسکریپت خارج میشود و درخواست خلاصهای از جزئیات سفر میکند یا پیشنهاد میدهد شماره تلفن خود را ارائه دهد، ویژگی generative fallback وارد عمل میشود.
عالی بود! شما سناریوی شاد را دوباره امتحان کردید و امیدوارم مکالمهای دلپذیر و طبیعی با کارشناس داشته باشید، تا حد امکان شبیه به تجربهای که با یک کارشناس حضوری خواهید داشت.
متأسفانه، ممکن است در یک مکالمه همه چیز اشتباه پیش برود. بیایید آزمایش متفاوتی انجام دهیم، این بار وقتی از شما تعداد مهمانان پرسیده شد، عددی بیشتر از ۱۵ را بگویید.


در اینجا چند نکته قابل ذکر است:
- چرا عدد ۲۰ معتبر نیست؟ چون ما به عنوان بخشی از توضیحات intent، محدودیتی برای تعداد مهمانان مجاز تعیین کردهایم: " عامل اطلاعاتی مانند دوره حرکت، مقصد، تعداد مهمانان (حداقل ۴ نفر و حداکثر ۱۵ نفر) (*)، اطلاعات تماس* را جمعآوری میکند ". پاسخ تولیدی که LLM برگردانده است "متاسفیم، ما فقط میتوانیم در رزروهای گروهی تا ۱۵ مهمان کمک کنیم" کاملاً با محدودیتهایی که ما برای تعداد مهمانان تعیین کردهایم، مطابقت دارد. برای اجرای بیشتر این موضوع، تعداد مهمانان یک موجودیت RegExp سفارشی است که فقط با اعداد موجود در محدوده ۴ تا ۱۵ مطابقت دارد.
- مکالمه ادامه پیدا میکند زیرا در نهایت کاربر همچنان مشتاق دریافت پیشنهاد ۱۵ غواص است. این اتفاق اغلب در مکالمات طبیعی رخ میدهد، ما مرتباً نظرمان را عوض میکنیم! توجه کنید که چگونه اپراتور همکاری میکند و به آرامی کاربر را به سمت مسیر موفقیت هدایت میکند.
طراحی مکالمه شامل اسکریپتنویسی نیمی از یک دیالوگ است، به این امید که به اندازه کافی قوی باشد که هر کسی بتواند وارد شود و نیمه دیگر را اجرا کند. هنگام طراحی برای دنباله بلند، توسعهدهندگان باید روی آنچه کاربر میتواند در هر مرحله از دیالوگ شما بگوید تمرکز کنند تا مسیرها، کنترلکنندهها و پارامترهای شما را تعریف کنند. به همین دلیل است که ما ویژگی generative fallback را به Dialogflow CX اضافه کردهایم: تا به توسعهدهندگان اجازه دهیم بر اصول طراحی مکالمه تمرکز کنند و کمتر به جزئیات پیادهسازی بپردازند تا تجربیات مکالمهای قوی را برای کاربران فراهم کنند.
بیایید یک آزمایش دیگر انجام دهیم، این بار دوباره ربات را با مکانی که در فهرست مقاصد موجود مانند مالدیو نیست، به چالش بکشیم. سپس نگاهی سریع به آنچه در پشت صحنه اتفاق میافتد، خواهیم انداخت.

توجه داشته باشید که از آنجایی که ما قابلیت generative fallback را برای رویداد no-match برای پارامتر مقصد نیز فعال کردهایم، درخواستی به یک مدل زبان بزرگ ارسال میشود تا پاسخ تولید شده را تولید کند. پاسخهای از پیش تعیینشدهی منظم (تحت عنوان Agent says) نادیده گرفته میشوند.
کادرهای متنی زیر به شما کمک میکنند تا بهتر بفهمید که چگونه متغیرهای جایگذاری به شکلدهی درخواست ارسال شده به مدل زبان بزرگ کمک میکنند.
این همان متن سفارشی است که ما در Dialogflow با متغیرهایی که با حروف پررنگ مشخص شدهاند، پیکربندی کردهایم:
You are a friendly agent that likes helping traveling divers.
You are under development and you can only help
$flow-description
At the moment you can't help customers with land-based diving and courses. You cannot recommend local dive shops and diving resorts.
Currently you can $route-descriptions
The conversation between the human and you so far was:
${conversation USER:"Human:" AGENT:"AI"}
Then the human asked:
$last-user-utterance
You say:
در کادر متنی زیر، ورودی دریافتی توسط مدل زبان بزرگ و خروجی که شامل پاسخ تولید شدهای است که به کاربر بازگردانده خواهد شد، را وارد کردهام:
llm_input: You are a friendly agent that likes helping traveling divers. You are under development and you can only help search, find and book liveaboards. At the moment you can't help customers with land-based diving and courses. You cannot recommend local dive shops and diving resorts. Currently you can assist users who are looking for a group reservation or a full charter. Initially collect travel details including departure period, destination, number of guests (min 4 max 15 people), contact details. The destination must be one of the following in the Pacific: Costa Rica, Mexico, Galapagos Islands. The conversation between the human and you so far was: Human: Hi, my name's Alessia AI Hi Alessia, what can I help you with today? Human: Can you help me find a nice boat for myself and my family? AI To assist you with that I need to collect the details of your travel and then we'll get back to you with an offer shortly. Where would you like to go? We can organize a charter in Costa Rica, Galapagos Islands and several locations around Mexico Then the human asked: The kids want to go to the Maldives llm_output: You say: I'm sorry Alessia, we can only help you with liveaboards in Costa Rica, Galapagos Islands and several locations around Mexico.
مشابه آزمایشی که قبلاً انجام شد، پاسخی که به کاربر ارسال میشود توسط مدل تولید میشود و به اطلاعاتی که ما به عنوان بخشی از توضیحات هدف ارائه کردهایم، متکی است: « مقصد باید یکی از موارد زیر در اقیانوس آرام باشد: کاستاریکا، مکزیک، جزایر گالاپاگوس »
اصلاح لیست عبارات ممنوعه
ویژگی generative fallback را میتوان به چندین روش پیکربندی کرد:
- یک اعلان خاص (از قبل تعریف شده) را برای استفاده در تولید پاسخ انتخاب کنید.
- یک اعلان سفارشی تعریف کنید.
- لیست عبارات ممنوعه را تغییر دهید.
تا اینجا دو روش اول را بررسی کردیم. بیایید روش سوم را بررسی کنیم.
- در تنظیمات عامل ، به برگه ML و سپس زیربرگه Generative AI بروید.
- در بخش عبارات ممنوعه، جملات زیر را به لیست اضافه کنید:
-
Dangerous country -
Hateful place -
Medical assistance - روی ذخیره کلیک کنید.
- روی نماد تنظیم مجدد کلیک کنید و آخرین سناریو را دوباره آزمایش کنید. به جای ارائه یک مقصد غواصی زیبا در سراسر جهان، یکی از عبارات ممنوعه را وارد کنید.

اعلان و پاسخ تولید شده با لیست عبارات ممنوعه مقایسه میشوند. عبارات ممنوعه، عباراتی هستند که برای هوش مصنوعی مولد ممنوع شدهاند. اگر ورودی شامل عبارات ممنوعه یا عباراتی باشد که ناامن تلقی میشوند، تولید ناموفق خواهد بود و پاسخ تجویز شده معمول (طبق گفتههای عامل در همان اجرا) به جای آن صادر میشود.
مطالب عالی! ما مجموعهای از موقعیتهای مکالمهای را پوشش دادهایم که در آنها پاسخهای سازنده واقعاً میتوانند تفاوت ایجاد کنند. میتوانید به آزمایش ادامه دهید!
۱۰. تبریک
آفرین که آزمایشگاه کد رو تموم کردی! وقت استراحته!

شما با موفقیت یک عامل مجازی ایجاد کردهاید و قابلیت generative fallback را برای کنترلکنندههای رویداد no-match که در جریانها و در حین پر کردن پارامتر استفاده میشوند، فعال کردهاید.
ویژگی پشتیبان مولد همراه با توصیفات خوب جریان و قصد میتواند پاسخهای خاص و مشارکتی عامل را در مقابل پیامهای عمومی مانند "متاسفم، مطمئن نیستم که چگونه کمک کنم" یا "متاسفم، شما یک گزینه نامعتبر وارد کردهاید" ارائه دهد. پیامهای خطای ایجاد شده توسط مدلهای زبانی بزرگ میتوانند به آرامی کاربران را به سمت مسیرهای موفق هدایت کنند یا انتظارات آنها را در مورد آنچه ممکن است و نیست، تنظیم مجدد کنند.
در صورت تمایل میتوانید موقعیتهای مکالمهای دیگر را نیز آزمایش کنید و سایر قابلیتهای موجود مربوط به Dialogflow CX و هوش مصنوعی مولد را بررسی کنید.
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع مورد استفاده در این codelab، میتوانید مراحل پاکسازی زیر را انجام دهید:
- به کنسول Dialogflow CX بروید و تمام Agentهایی که ایجاد کردهاید را حذف کنید.
- در کنسول گوگل کلود، به صفحه APIها و سرویسها بروید و Dialogflow API را غیرفعال کنید.
مطالعه بیشتر
با استفاده از این راهنماها و منابع، به یادگیری در مورد هوش مصنوعی محاورهای و هوش مصنوعی مولد ادامه دهید:
- مستندات مربوط به Dialogflow CX
- مستندات برای پشتیبان مولد
- هوش مصنوعی مولد در گوگل کلود
- مقدمهای بر PaLM
مجوز
این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.
