Kurs
Bağlama duyarlı sohbet botları, kullanıcının önceki girdilerini takip eder ve bunları son etkileşimlerle ilişkilendirir. Bu sayede kullanıcılarla sohbet tarzında etkileşim kurarak kullanıcı deneyimini iyileştirirler. Amazon Lex, Amazon Web Services (AWS) paketinin bir parçası olan bağlama duyarlı bir sohbet botudur. 2017'de yayımlandı; geliştirilmiş sürüm Lex V2 ise 2021'de kullanıma sunuldu.
Bu eğitimde AWS Lex V2'nin temel kavramlarını tanıtıyor ve nasıl kullanılacağını gösteriyorum. Lex'in kurulum ve yapılandırmasını, ilk Lex sohbet botunuzu oluşturmayı ve harici arka uçlarla bağlantı kurmayı ele alacağım. Ayrıca Lex'in web siteleri ve mesajlaşma uygulamaları gibi üçüncü taraf platformlarla entegrasyonuna genel bir bakış sunacağım.
Amazon Lex nedir?
Amazon Lex, AWS tarafından sunulan yapay zekâ tabanlı bir sohbet motorudur. Lex, kullanıcı girdilerini ses ve metin biçiminde kabul eder. Geliştirici, konuşma akışını belirler. Buna dayanarak Lex, kullanıcı girdilerine yanıt vererek diyaloğu yönetir. Sohbet arayüzü daha sonra bir sesli bot, web uygulaması, sohbet platformu (Slack veya Facebook Messenger gibi) vb. olarak dağıtılabilir. Lex, Amazon Alexa'nın oluşturulmasında da kullanılır.
Lex iki temel işlevi birleştirir: doğal dil anlama (NLU) ve otomatik konuşma tanıma (ASR). Derin öğrenme uzmanlığı olmayan geliştiricilerin sohbet botları, sanal asistanlar ve benzeri için konuşma arayüzleri oluşturmasını sağlar.
Bir Amazon ürünü olduğundan, şu gibi diğer AWS hizmetleriyle entegre olur:
- Amazon Cognito (kimlik yönetimi için)
- Amazon CloudWatch (hizmetin izlenmesi için)
- DynamoDB (veritabanı arka ucu için)
- Amazon Lambda (Salesforce ve HubSpot gibi harici veri kaynaklarına bağlanmak için) vb.
Bu entegrasyonlar, konuşma yapay zekâsını dağıtmayı ve ölçeklendirmeyi kolaylaştırır.
Amazon Lex'i Kurma
Bu bölümde Amazon Lex'in nasıl kurulacağını gösteriyorum.
AWS kullanıcı arayüzünün sık değiştiğini unutmayın. Bu nedenle, talimatlardaki ve ekran görüntülerindeki çeşitli bölüm ve başlıkların düzeni ve metinleri zaman içinde veya bölgeden bölgeye değişebilir.
Adım 1: AWS konsoluna giriş yapın
Zaten bir AWS hesabınız olduğunu varsayıyorum. Yoksa AWS Kayıt sayfasındaki talimatları izleyerek yeni bir hesap oluşturun.
Bu kılavuzda Lex'i kurmak ve kullanmak için AWS konsolunu kullanıyoruz. AWS Lex konsoluna giriş yapmak için AWS kimlik bilgilerinizi girin ve Lex ana sayfasına gidin.
Adım 2: Yeni bir bot oluşturun
- Yeni bir bot oluşturmak için Amazon Lex konsolunu ziyaret edin.
- Get Started seçeneğini belirleyin.
Yukarıdaki adım sizi Botlar ana sayfasına (aşağıda gösterilmiştir) götürür. Bu sayfada daha önce oluşturduğunuz Botların listesi görüntülenir.

Amazon Lex Botlar ana sayfası.
- Bu sayfada Create Bot seçeneğini belirleyin.
Bu adım, yeni bir botun yapılandırma sayfasına götürür. Bot oluşturmanın iki yöntemini gösterir: Geleneksel ve Üretken Yapay Zekâ.

Yeni bir bot oluşturun.
Botları kurma ve yapılandırma sürecini öğrenmek istiyoruz. Bu nedenle Geleneksel yöntemi seçin ve boş bir botla başlayın.
- Bot adı: Bota bir ad ve açıklama verin. Bu yazıda, “CabBookBot” adlı basit bir bot oluşturuyoruz — bir taksi rezervasyonu yapmak için.
- IAM izinleri: Bot için yetkilendirme ve kimlik doğrulamayı yönetmek üzere doğru rolü seçin.
- Daha önce bot oluşturduysanız, mevcut rollerin açılır listesinden seçin.
- Bu sizin ilk botunuzsa “Create a role with basic Amazon Lex permissions” seçeneğini belirleyin.
- COPPA: Bu bot çocuklara ve küçüklere hizmet vermek üzere tasarlandıysa, Çocukların Çevrimiçi Gizliliğini Koruma Yasası'na (COPPA) tabi olduğunu belirtin. Biz “Hayır”ı seçiyoruz.
- Boşta oturum zaman aşımı: Botların, konuşma boyunca “bağlamı” korumak için kullanıcının önceki mesajlarını hatırlaması gerekir. Bir kullanıcı bir süredir yanıt vermiyorsa artık botu kullanmadığını varsayar ve yeni kullanıcı için bağlamı sıfırlarız. Bunu varsayılan değerde bırakın.
İsteğe bağlı gelişmiş ayarları güncellemeniz gerekmez; bir sonraki bölüme geçin.
Lex botları nın doğal dil işleme (NLP) temelli olması nedeniyle botun dil(ler)ini de ayarlamanız gerekir.
- Bu örnekte varsayılan İngilizce (ABD) dilini kullanıyoruz.
- Varsayılan ayarları koruyun ve Done seçeneğini belirleyin.
Ardından, Intents sayfasına yönlendirileceksiniz; bunu bir sonraki bölümde yapılandıracağız.
Temel bir bot oluşturduğumuza göre, şimdi bunu istediğimiz kullanım senaryosu olan taksi rezervasyonu için nasıl yapılandıracağımı açıklıyorum.
Adım 3: Niyetleri (intent) yapılandırın
Adından da anlaşılacağı gibi, niyetler kullanıcının amacını veya sohbetin hedefini temsil eder. Örneğin, kullanıcı bir otel veya uçak bileti rezervasyonu yapmak isteyebilir. Her bot birden fazla amaca hizmet edebilir.
Her niyet için birkaç örnek metin (örnek söyleyişler) sağlandığında, Lex NLP'yi kullanarak kullanıcının girdisini bu söyleyişlere dayanarak doğru niyetle tanır ve eşleştirir. Örneğin, bir taksi rezervasyon botu “Bir taksi ayırtmak istiyorum”, “X'ten Y'ye şu tarihte bana bir taksi ayırt” gibi örnek söyleyişlere sahip olabilir.
Önceki adımda bot oluşturma sayfasında Done seçimini yaptıktan sonra, NewIntent adlı yeni bir niyet oluşturabileceğiniz sayfaya yönlendirilirsiniz.
Niyet sayfasında:
- Üstte Conversation Flow'u bulun. Bu, her sohbet adımı için akışı ve örnek metin mesajlarını gösterir.
- Niyetin adını “CabBookIntent” gibi anlamlı bir şeyle güncelleyin ve ilgili bir açıklama girin.
Adım 4: Örnek söyleyişler ekleyin
Lex, kullanıcının ihtiyacının mevcut niyetle eşleşip eşleşmediğini tanımak için her niyet için birkaç örnek söyleyişe ihtiyaç duyar.
- Intent sayfasında, Sample utterances bölümüne gidin.
- Editor penceresini Plain Text olarak değiştirin.
- Satır başına bir tane olacak şekilde birkaç örnek söyleyiş ekleyin, örneğin:
- Bir taksi ayırtmak istiyorum
- Bana bir taksi ayırt
- Taksi rezervasyonu yapmam gerekiyor

Örnek söyleyişler.
- Kullanıcının isteğini onaylamak için “Tamam, taksi ayırtmanıza yardımcı olacağım” gibi bir Initial response ekleyin.
Bir Konuşma Akışı Oluşturma
Lex botları önceden tanımlanmış bir konuşma yapısını izler. Konuşma akışı, sohbetin bileşenlerini ana hatlarıyla belirtir ve bunlara ilişkin özellikleri tanımlar. Bu bölümde, kullanıcıyla iletişim kurmak ve isteklerini yerine getirmek için gereken bilgileri almak üzere konuşmanın nasıl tasarlanacağını açıklıyorum.
Adım 1: Kullanıcı girdisini yakalamak için slot ekleyin
Botun kullanıcıdan ilgili bilgileri istemesi gerekir. Slotlar, botun kullanıcının isteğini yerine getirmek için ihtiyaç duyduğu bilgileri içerir. Örneğin, taksi rezervasyon botu kalkış ve varış şehirlerini ve seyahat tarihini slot değerleri olarak alır.

Niyetlere slot ekleyin.
Her slot için şu parametreleri belirtmeniz gerekir:
- Slot adı: Bot, slotun değeri için bu adı yer tutucu olarak kullanır. Örneğin, botun yanıtını “{SourceCity} şehrinden seyahat etmek istiyorsunuz” şeklinde yapılandırabilir ve bot, kullanıcının girdiği
SourceCityslotunun değerini otomatik olarak buraya koyar. - Slot türü: Programlama değişkenlerine benzer şekilde, Lex slotları çeşitli türlerde olabilir.
AMAZON.City,AMAZON.Dategibi birçok hazır slot türü vardır. Özel slot türleri de ekleyebilirsiniz (ileride tartışılacaktır). - İstem (Prompt): Botun, her bir slotun değerini kullanıcıdan istemek için kullanabileceği bir metin şablonu sağlayın.
- Add Slot seçeneğini belirleyin ve aşağıdaki slotları ekleyin; bunları zorunlu olarak işaretleyin:
|
Slot adı |
Slot türü |
İstem |
|
SourceCity |
AMAZON.City |
Hangi şehirden seyahat edeceksiniz? |
|
DestinationCity |
AMAZON.City |
Hangi şehre seyahat edeceksiniz? |
|
TravelDate |
AMAZON.Date |
Hangi tarihte seyahat edeceksiniz? |
- Slot değerlerini doğrudan yakalayan birkaç ek söyleyiş ekleyin. Örneğin:
- {TravelDate} tarihinde {SourceCity} şehrinden {DestinationCity} şehrine bir taksi ayırt
- {SourceCity} - {DestinationCity} için {TravelDate} tarihinde bir taksi ayırt
Özel slotlar
Yerleşik slot türleri her kullanım senaryası için yeterli olmayabilir. Örneğin, bir taksi rezervasyon hizmetinde kullanıcının istediği araç türü (kompakt, hatchback, sedan, SUV vb.) için bir slot türü olabilir.
Özel bir slot eklemek için:
- Sol sütundaki menüden Slot types bölümüne gidin:
- CabBookBot > Bot versions > Draft version > All languages > English (US) > Slot types).
- Yeni slot türü için bir ad (ör.
CabType) ve açıklama ekleyin. - İki tür slot değeri arasından seçim yapın:
- Expand: Slot için birkaç örnek değer sağlarsınız ve Lex bunları, yeni olası değerleri öğrenmek için örnek olarak kullanır. Örneğin, bir soyadı listesi verildiğinde Lex, açıkça listelemediğiniz benzer soyadlarını kabul edecek şekilde slot türünü uyarlar.
- Restrict: Slot yalnızca sağladığınız listedeki değerleri kabul eder. Yeni değerler öğrenmez.
Bu durumda, önceden belirlenmiş birkaç araç türü var. Bu nedenle slot değerlerimizi bu türlerle sınırlandırıyoruz.
- Her değer için alternatif değerler de sağlayabilirsiniz. Örneğin, araç türü için
LimousineyerineLimokabul edilebilir bir değerdir.

Özel slotlar.
- Save Slot type seçeneğini belirleyin. Yeni slot türü, niyete slot eklerken kullanılabilir hâle gelir.
Adım 2: İstemleri ve hata yönetimini yapılandırın
Kullanıcı, bir slot değeri istemine geçersiz yanıt verdiğinde Lex istemi tekrarlar. Kullanıcı uygun bir yanıt (geçerli bir şehir adı gibi) vermekte ısrarla başarısız olursa oturum sonlandırılır.
Kullanıcı geçerli bir slot değeri vermekte art arda başarısız olursa (oturum sonlandırılmadan önce) Lex'in bir hata mesajı vermesini ayarlayın:
- Tek tek slotları seçin ve o slot için Advanced options seçeneğini belirleyin.
- Gelişmiş seçenekler penceresinde Slot capture: failure response bölümüne kadar kaydırın.
- Geçersiz giriş için uygun bir yanıt sağlayın. Örneğin, kullanıcı sürekli olarak tanınmayan bir şehir girerse bot “Üzgünüz, bu şehre hizmet vermiyoruz.” yanıtını verebilir.

Hata yönetimi ve başarısızlık yanıtı.
Tüm botlarda, kullanıcının girdisi mevcut niyetlerle eşleşmediğinde çağrılan bir FallbackIntent vardır. Bu niyet varsayılan olarak çağrıldığından, söyleyişleri özelleştirilemez.
FallbackIntentile anlamlı bir kapanış yanıtı belirtin ve konuşmayı sonlandırın.

Kapanış yanıtı.
Adım 3: Onay, yerine getirme ve kapanış
Slotlar için uygun değerleri aldıktan ve isteği yerine getirmeden önce kullanıcının niyetini onaylayın.
- Confirmation bölümünü kullanarak bir onay istemi sağlayın.
- Onay iletişim kutusu için küçük bir anahtar bulunduğunu fark edin. Bunu etkinleştirin.
Onay istemine slot değerlerini dahil etmek yaygındır. Örneğin: “{SourceCity} şehrinden {DestinationCity} şehrine {TravelDate} tarihinde rezervasyon yapmak istediğinizi (evet veya hayır) onaylayın.”
- Kullanıcı onay istemine olumsuz yanıt verirse bir Decline response sağlayın. Örneğin, “Tamam, bu rezervasyonu yapmayacağız”.

Onay istemi.
Yerine getirme (fulfillment) yanıtı, botun kullanıcının isteğini yerine getirmeye (taksi rezervasyonu) başladığını belirtir.
- Fulfillment bölümünde, istek başarıyla yerine getirildikten sonra başka bir mesaj sağlayın. Örneğin, “Tamam, bu rezervasyonu gerçekleştirdik.”
Kapanış yanıtı, kullanıcıya gönderilen son mesajdır. Örneğin, “Bizimle seyahat ettiğiniz için teşekkürler. Güvenli yolculuklar!”.
- Yanıtları güncelleyin ve Save intent seçeneğini belirleyin.

Yerine getirme ve kapanış yanıtları.
Amazon Lex Botunuzu Test Etme
Artık botu ve konuşma yapısını oluşturduğumuza göre test edebiliriz!
Adım 1: Lex konsolunda test edin
- Intents sayfasının üst kısmında Build ve Test düğmelerini bulun.
- Botu Build edin. Her değişiklikten sonra botu yeniden derlemeniz gerekir.
- Botu Lex konsolunda test etmek için Test seçeneğini belirleyin.
- Açılır sohbet penceresine ilgili mesajları girin ve botun istemlerine yanıt verin.

Amazon Lex botunu test etme.
Yaygın yapılandırma hataları
Confirmation, Fulfillment ve Closing response gibi bazı bölümler prensipte isteğe bağlıdır. Bir bölümü etkinleştirmek için anahtarı etkinleştirin.
Bazı durumlarda, bir bölümün veya yanıtın etkinleştirilmesi o bölüm için otomatik olarak bir Lambda fonksiyonunu etkinleştirir. Belirli bir bölümde Lambda fonksiyonu anahtarı “açık” durumdaysa ancak ilişkili bir Lambda fonksiyonu yoksa aşağıdakine benzer bir hata alırsınız:
Cannot call FulfillmentCodeHook for Intent CabBookIntent. BotAlias/LocaleId TestBotAlias/en_US doesn't have an associated Lambda Function.
Yukarıdaki hata Fulfillment bölümünden kaynaklanır. Çözmek için ilgili bölümdeki advanced settings'e gidin ve Lambda fonksiyonu kullanma seçeneğinin işaretini kaldırın.
Akış yanlış yapılandırıldığında benzer bir başka hata oluşur. Örneğin, derleme aşamasında şu hata mesajını düşünün:
'ElicitSlot' next step at 'InitialResponse:CodeHook:Success' in intent 'CabBookIntent' contains invalid slotToElicit setting. slotToElicit must be a required Slot within the intent. Change the slot name in slotToElicit and try your request again.
Bu hatayı çözmek için Advanced options bölümüne, Initial response için gidin. Dialog Code hook anahtarının etkin olduğunu göreceksiniz. Ancak bu aşamada, konuşmayı başlatmak için Lambda fonksiyonlarını henüz etkinleştirmedik ve yapılandırmadık. Kod kancasını devre dışı bırakın ve botu güncelleyin; normal şekilde derlenmelidir.

İlk yanıt için gelişmiş seçenekler.
Adım 2: Sesle test edin (İsteğe bağlı)
Lex botları varsayılan olarak hem metin hem sesle çalışır.
- Sesle iletişim kurmak için sohbet penceresindeki mikrofon simgesine basın.
- Girdi alanındaki yer tutucu metin “Listening…” olarak değişir.
- Niyetinizi söyleyin, örneğin “Bir taksi ayırtmak istiyorum.”
- Metin giriş alanının sağındaki onay işaretine basın.
- Lex ses girdisini kısaca yazıya döker ve sesle yanıt verir.
Amazon Polly, metni doğal konuşmaya dönüştürür. Metin okuma uygulamaları, oyunlar, botlar vb. gibi ses tabanlı uygulamalarda metinden insan benzeri konuşma üretmek için kullanılır. 2021'den beri Amazon Lex, Amazon Polly Neural Text-to-Speech (NTTS) desteğine sahiptir. Böylece Lex botu doğrudan doğal sesli yanıtlar üretebilir.
Botun sesini yapılandırmak için:
- Botun ana sayfasında View languages seçeneğini belirleyin.
- Uygun dili seçin.
- Ayrıca sol menüdeki All languages seçeneği altında ilgili dili seçebilirsiniz.
- Language details bölümünde Edit seçeneğini belirleyin.
- Bu işlem sizi Language sayfasına götürür.
- Voice bölümünde çeşitli ses örneklerini dinleyebilir ve tercih ettiğiniz metinden konuşmaya sesi seçebilirsiniz.
AWS Lambda ile Yerine Getirme Tanımlama
Pratikte bir botun diğer arka uç hizmetleriyle iletişim kurması gerekir. Örneğin, bir taksi rezervasyon botunun seyahat bilgilerini bir API uç noktasına göndermesi ve başarılı bir yanıt alması gerekir. Lambda fonksiyonları bunu yapmaya yardımcı olur.
AWS Lambda fonksiyonları, bir VPS veya hesaplama örneklerini açıkça kiralamaya gerek kalmadan sunucu tarafı mantığı yazmanın ve çalıştırmanın bir yoludur.
Lambda fonksiyonlarına başlamak için:
- AWS Lambda ana sayfasına gidin.
- Create function seçeneğini belirleyin.
- Bu örnek için, fonksiyonu sıfırdan oluşturma seçeneğini seçin.
- Dil olarak
Python 3.x(yazım anında 3.13) ve fonksiyonu çalıştırmak için işlemci olarakx86_64seçin. - Bu sizin ilk Lambda fonksiyonunuzsa yeni bir rol oluşturun. Doğru izinlere sahip olduğunu biliyorsanız mevcut rollerden birini de kullanabilirsiniz.
- Create function seçeneğini belirleyin.
- Belirli Lambda fonksiyonunun web sayfasındaki Code sekmesine fonksiyonun kodunu girin.
Aşağıda, Fulfillment bölümünde bir başarı mesajı gönderen kısa bir Lambda fonksiyonu gösteriyoruz:
import json
import urllib.request
def lambda_handler(event, context):
slots = event['sessionState']['intent']['slots']
intent = event['sessionState']['intent']['name']
if event['invocationSource'] == 'FulfillmentCodeHook':
message = "Lambda has placed your reservation"
response = {
"sessionState": {
"dialogAction": {
"type": "Close"
},
"intent": {
'name':intent,
'slots': slots,
'state':'Fulfilled'
}
},
"messages": [
{
"contentType": "PlainText",
"content": message
}
]
}
return response
Botu bu Lambda fonksiyonunu çağıracak şekilde yapılandırın:
- Botun ana sayfasına gidin. Sol menüde Aliases seçeneğini (Deployment > Aliases) seçin.
- Varsayılan olarak, TestBotAlias adlı bir takma ad (alias) zaten bulunmalıdır.
- Takma adı seçin.
- Alias sayfasında, diller altında botun dilini bulun. Bu örnek English(US) dilindedir.
- Dili seçin.
- Dil sayfasında Lambda fonksiyonu bölümünü bulun.
- Kaynak altında, Lambda fonksiyonunuzun adını seçin.
- Sürüm için varsayılan seçenek
$LATEST'tir. Bunu değiştirmeyin. - Değişiklikleri kaydedin.
Bu örnekte Lambda fonksiyonunu yerine getirme aşamasında kullanmak istiyoruz:
- Intent sayfasında, Fulfillment bölümünün altındaki Advanced options bölümüne gidin.
- Fulfillment Lambda code hook bölümünde Use a Lambda function for fulfillment etiketli onay kutusunu işaretleyin.
- Yerine getirme seçeneklerine (Update options) seçeneğini belirleyerek) yapılan değişiklikleri kaydedin.
- Niyeti kaydedin.
- Botun Intent sayfasına gidin, derleyin ve test edin.
Artık yanıt Lambda fonksiyonundan geliyor:

Lex botuyla entegre Lambda fonksiyonunu test etme.
Amazon Lex Botunuzu Dağıtma
Lex botunu oluşturup test ettikten sonra dağıtıma hazırız. Dağıtım, ayrıntıları bireysel kullanım durumuna bağlı olan karmaşık bir konudur. Bu bölümde çeşitli yaygın dağıtım yöntemlerine genel bir bakış sunuyorum.
Adım 1: Bir web veya mobil uygulamasına dağıtma
Lex, API, SDK veya hazır kitaplıklar kullanılarak web ve mobil uygulamalara entegre edilebilir:
- CloudFormation: AWS CloudFormation, kod olarak altyapı çözümüdür. YAML dosyalarını kullanarak çeşitli AWS kaynaklarını bir ürün olarak paketlemeyi, hazırlamayı, dağıtmayı ve yönetmeyi sağlar. CloudFormation, S3 kovaları, Lambda fonksiyonları, Lex botları ve daha fazlası gibi çeşitli AWS ürünlerini entegre etmek için şablonlara sahiptir. Lex botunu bir CloudFormation projesinin parçası olarak yapılandırmak için Lex YAML şablon dosyasını kullanın.
- Web sitesi entegrasyonu: AWS, bir botu bir web sitesine yüklemek için bir dizi Javascript yükleyici dosyası ve AWS SDK sağlaymıştır. Bunlar, hazır Lex UI dosyalarını ve Lex botunu yüklemek için bir yükleyici kitaplığı içerir. Bot, bağımsız bir web sayfası veya bir iframe olarak bir web sitesine entegre edilebilir.
- Mobil yerel uygulamalar: AWS Amplify, ReactJS / React Native, NextJS, Angular, Android, iOS ve daha fazlası gibi çeşitli mobil ve web ön uçlarıyla entegrasyon araçlarını içerir. Amplify belgeleri, bir Lex botunun bu SDK'larla çalışacak şekilde nasıl yapılandırılacağını açıklar.
- Lex API: Etkileşimler ve arayüz üzerinde tam denetime sahip olmak için Lex API'yi kullanabilirsiniz. API'yi kullanarak, kullanıcı ve bot mesajlarını (birbirlerine) iletirken kullanıcı deneyimi kontrolünü uygulamanız aracılığıyla elinizde tutabilirsiniz. Lex iki API sunar:
- Runtime API, yukarıda açıklandığı gibi kullanıcı etkileşimleri için kullanılır.
- Build API, GUI yerine programatik olarak Lex botunu derlemek ve yapılandırmak için kullanılır.
Aşağıdaki adımlar, sohbet botunu bir web sayfası olarak nasıl dağıtacağınıza dair bir özet sunar:
- Lex Web UI Loader kitaplığını kullanın. Bu kitaplık,
FullPageLoader()veIframeLoaderkurucularını içeren birChatBotUiLoadernesnesi oluşturur. Bu kurucularınload()fonksiyonu, sırasıyla botu sayfaya veya iFrame'e yükler. - Botu web sayfasına yüklemek için sohbet botu yapılandırmasını belirtin:
- Cognito havuzu kimliği. Botla bağlantı kurmak için bir AWS Cognito kimlik havuzuna ihtiyacınız olduğunu unutmayın. AWS Cognito konsolundan bir kimlik havuzu oluşturabilirsiniz. Cognito kimlik havuzunu Lex botuna bağlamanız gerekir.
- Lex botunun adı ve detayları.
.load()fonksiyonunu kullanarak botu yükleyin.
Aşağıdaki kod parçası, bir Lex botunu bir web sayfasına dağıtan bir JavaScript fonksiyonunun taslağını gösterir:
<!-- LexWebUi loader -->
<script src="./lex-web-ui-loader.js"></script>
<script>
// instantiate the loader
var lexWebUiLoader = new ChatBotUiLoader.FullPageLoader();
var chatbotUiconfig = {
cognito: {
poolId:
},
lex: {
initialText: 'How can I help you?',
botName: 'CabBookBot'
},
ui: {
toolbarTitle: 'Cab Booking Lex Bot',
toolbarLogo: ''
},
};
lexWebUiLoader.load(chatbotUiConfig)
.then(function () {
console.log('chatbot UI loaded');
})
.catch(function (error) {
console.error('chatbot UI failed to load', error);
});
</script>
Adım 2: Mesajlaşma platformlarıyla entegrasyon
Lex botunu Facebook Messenger, Slack ve Twilio SMS gibi üçüncü taraf mesajlaşma hizmetleriyle entegre edebilirsiniz.
Bu bölümde, Lex'i Facebook Messenger ile nasıl entegre edeceğimizi tartışıyoruz. Başlamadan önce şunlara ihtiyacınız var:
- Facebook geliştirici hesabı
- Facebook'ta bir işletme sayfası. Facebook uygulamasının, Lex ile Messaging API'sini kullanma iznine ihtiyacı olduğunu unutmayın. Yalnızca Facebook tarafından gözden geçirilip onaylanan doğrulanmış işletme uygulamalarına bu izinler verilir.
Aşağıda, Lex botunu Facebook Messenger ile entegre etmek için atılacak adımları özetliyorum; böylece Facebook sayfanıza mesaj atan kullanıcılar bottan yanıt alabilir.
- Zaten yoksa yeni bir İşletme uygulaması oluşturun.
- Uygulama kullanım durumları altında Other seçeneğini belirleyin.
- Uygulama türü olarak Business seçin.
- Her uygulamaya Messenger, Instagram vb. gibi çeşitli Facebook ürünleri ekleyebilirsiniz. Messengeri uygulamaya ekleyin ve Set up seçeneğini belirleyin.
- Messenger API Setup bölümünde:
- Facebook işletme sayfanızı bu uygulamaya bağlayın.
- Bu uygulama için yeni bir jeton oluşturun (Generate düğmesiyle). Bu jetonu bir metin düzenleyiciye kopyalayın.
- “Mesaj göndermek ve almak için pages_messaging izni isteyin.” mesajını fark edin. Gerekli izinleri istemek için Request Permission seçeneğini belirleyin.
- Uygulamanız henüz Facebook tarafından incelenip onaylanmadıysa inceleme için gönderin.
- Sol menü seçeneklerinde App Settings altından Basic seçin.
- App Secret altında Show seçeneğini belirleyin ve gizli anahtarı bir metin dosyasına kopyalayın.
Şimdi Lex konsoluna gidin ve Messenger ile entegre etmek istediğiniz botu seçin.
- Sol menü ağacında, Deployment altında Channel integrations bölümünü bulun.
- Create Channel altında Add Channel seçeneğini belirleyin:
- Platform altında Facebook'u seçin.
- Identity policies altında KMS Key seçin.
- Integration configuration altında:
- Entegrasyona bir ad verin
- Messenger ile entegre etmek istediğiniz (Lex botunun) bir alias'ını seçin
- Dili seçin.
- Additional configuration altında:
- Alias altında, Lex'i çağıran uygulamayı tanımlamak için bir dize girin. Bu dizeye daha sonra ihtiyacınız olacak.
- Page access token altında, Facebook'ta kopyaladığınız erişim jetonunu girin.
- App secret key altında, Facebook'ta kopyaladığınız gizli anahtarı girin.
- Yeni kanalı oluşturmak için Add düğmesini kullanın.
- Channel Integrations sayfasına dönün ve oluşturduğunuz kanalı seçin.
- Callback URL bölümünde Endpoint altındaki URL'yi kopyalayın.
Facebook geliştirici konsoluna geri dönün ve daha önce oluşturduğunuz uygulamayı açın.
- Sol menüden, Messenger altında Messenger API Settings seçeneğini belirleyin.
- Callback URL altında, Lex konsolunda kopyaladığınız callback URL'sini girin.
- Verify token altında, Lex konsolunda girdiğiniz alias dizesini girin.
- Verify and save değişiklikleri.
- Webhooks altında Add subscriptions seçeneğini belirleyin. Açılır pencerede messages öğesini seçin ve ardından Save seçeneğini tıklayın.
Artık Facebook sayfasına Lex botunun örnek söyleyişleriyle mesaj atabilir ve ilgili yanıtları alabilirsiniz.
Adım 3: Gelişmiş etkileşim için Lex'i AWS Lambda ile bağlama
Önceki bölümde yerine getirme kısmı için basit bir Lambda fonksiyonu yazmıştık. Sadece şu metni döndürüyordu: “Lambda rezervasyonunuzu gerçekleştirdi.” Pratikte, isteği yerine getirdikten sonra başarı mesajını göndeririz.
Örneğin, Lambda fonksiyonu, kullanıcının rezervasyon detaylarıyla arka uç API'sine bir istek gönderir; bu API rezervasyonu yapar ve ardından API'nin yanıtına göre kullanıcıya yanıt verir.
Bunu şu şekilde yaparsınız:
- Lambda fonksiyonundaki
slotsJSON nesnesi slot değerlerini içerir. kod düzenleyicisi kullanarak yapısını inceleyin ve uygun değerleri çıkarın. - Aşağıdaki kod parçası,
SourceCityiçin slot değerinin nasıl alınacağını ve bu değerin rezervasyonları yöneten bir arka uç API'sine nasıl iletileceğini gösterir. Bu kodulambda_handler()fonksiyonunun içine ekleyin:
slots = event['sessionState']['intent']['slots']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)
Şimdi Lambda fonksiyonundan API isteklerinin nasıl yapılacağını gösteriyorum. Bu örnek için, ASDFast üzerindeki sahte (dummy) API uç noktasını kullanıyoruz. Bu hizmet, bir API uç noktasına HTTP(S) istekleri göndermenize ve gerçekçi bir yanıt almanıza olanak tanır.
- Aşağıdaki kodla bu uç noktaya bir
GETisteği gönderiyoruz. Ardından, botun kullanıcıya gönderdiği mesajıGETisteğinin yanıt durum koduna göre özelleştiriyoruz:
res = urllib.request.urlopen(urllib.request.Request(
url='http://asdfast.beobit.net/api/',
headers={'Accept': 'application/json'},
method='GET'),
timeout=5)
message_success = "Lambda has placed your reservation"
message_failure = "Lambda could not place your reservation. Please retry."
message = message_success if res.status == 200 else message_failure
Tam Lambda fonksiyonu aşağıda gösterilmiştir:
import json
import urllib.request
def lambda_handler(event, context):
print("event - ", event)
slots = event['sessionState']['intent']['slots']
intent = event['sessionState']['intent']['name']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)
print("intent - ", intent)
if event['invocationSource'] == 'FulfillmentCodeHook':
print("FulfillmentCodeHook")
res = urllib.request.urlopen(urllib.request.Request(
url='http://asdfast.beobit.net/api/',
headers={'Accept': 'application/json'},
method='GET'),
timeout=5)
message_success = "Lambda has placed your reservation"
message_failure = "Lambda could not place your reservation. Please retry."
message = message_success if res.status == 200 else message_failure
#message = "Lambda has placed your reservation"
response = {
"sessionState": {
"dialogAction": {
"type": "Close"
},
"intent": {
'name':intent,
'slots': slots,
'state':'Fulfilled'
}
},
"messages": [
{
"contentType": "PlainText",
"content": message
}
]
}
return responseAmazon Lex Botları Oluşturmak İçin En İyi Uygulamalar
Lex botlarının temel ilkelerini ve pratik kullanım alanlarını tartıştıktan sonra, bu bölümde bot tasarlamak için bazı en iyi uygulamaları sunuyorum.
Açık ve özlü konuşmalar tasarlayın
Sohbet yollarınızın ve slotlarınızın net olduğundan emin olun:
- Her niyet tek bir göreve odaklanmalı ve her slot tek bir değişkene karşılık gelen değeri yakalamalıdır.
- İstem metinlerini çok uzun veya laf kalabalığı hâline getirmeyin. Diyalogları kısa tutun ve hızla hedeflenen sonuca ulaşın.
Bu yaklaşım, kullanıcıyı ve Lex'i olası yanlış anlamalardan korur.
Slot türlerini ve doğrulamayı kullanın
Botun ve ilişkili arka uç hizmetlerinin, kullanıcı gereksinimlerine dair doğru bilgilere ihtiyacı vardır. Doğru slot türlerini kullanmak bunu sağlar.
- Genel olarak, tarihler için
AMAZON.Date, şehirler içinAMAZON.Cityvb. gibi yaygın veri türleri için yerleşik slotları kullanmanızı öneririm. Bu slot türleri kapsamlı şekilde test edilmiştir ve çeşitli uygulamalarla uyumlu oldukları bilinmektedir. - İstisnai durumlarda özel slot türleri tasarlayabilirsiniz. Doğru şekilde yapılandırıldıklarından ve test edildiklerinden emin olun.
- Doğru slot türlerini kullanmaya ek olarak, kullanıcının tüm zorunlu slotlara karşılık gelen bilgileri verdiğini doğrulayın. Bu, arka uç API'sinin kullanıcının isteğini yerine getirmesini sağlar ve sorunsuz bir kullanıcı deneyimi sunar.
Çok aşamalı konuşmaları etkinleştirin
Kullanıcıların, “N kişi için Z tarih/saatinde X'ten Y'ye T tipinde araçla bir seyahat ayırt” gibi gerekli tüm bilgileri tek bir mesajda girmesi zor olabilir.
- Daha iyi bir kullanıcı deneyimi için çok aşamalı konuşmalar kullanın. Birçok modern dil modeli tabanlı araç gibi, Lex de çok aşamalı bir konuşma boyunca bağlamı koruyabilir. Bu sayede önceki istemleri ve yanıtları son etkileşimlerle ilişkilendirebilir.
- Karmaşık bir istemi bir dizi kısa soruya bölmek, konuşma akışını iyileştirir.
Performansı izleyin ve optimize edin
Üretimdeki bir bot için performansını şu gibi çeşitli metrikler üzerinden izlemek kritik önemdedir:
- Toplam sohbet sayısı.
- Ortalama sohbet süresi.
- Sohbet başına ortalama tur sayısı.
- Tespit edilen ve kaçırılan söyleyişlerin sayısı (ve oranı).
- Lambda hataları ve daha fazlası.
Bu metrikleri, kullanıcı etkileşimlerini ve botun performansını değerlendirmek için kullanın:
- Bot sayfasının sol menüsünden Analytics seçeneğini belirleyin.
- Conversation dashboard, Performance dashboard ve CloudWatch metrics bölümlerine erişerek botun performansını inceleyin.
AWS CloudWatch, AWS hizmetleri için bir izleme aracıdır. Çeşitli performans metriklerini tek bir sayfada gerçek zamanlı olarak bir araya getirir. Bu metrikleri kullanarak botun performansını iyileştirin ve ince ayar yapın.
Sonuç
Bu yazıda, AWS'nin bağlama duyarlı sohbet botu hizmeti olan Amazon Lex V2'yi inceledik. Temel bir botun oluşturulması, kullanıcılarla etkileşim kuracak şekilde yapılandırılması ve AWS Lambda kullanılarak bir arka uç API'siyle entegre edilmesi süreçlerini adım adım ele aldık. Ayrıca en iyi uygulamaları ve dağıtım seçeneklerini, botu bir web sitesine veya Facebook sayfasına gömmeyi de içerecek şekilde tartıştık.
AWS hizmetleri hakkında öğrenmeye devam ederken, bilgi birikiminizi şu kurslarla genişletmeyi düşünebilirsiniz:
- AWS Cloud Technology and Services kursuyla AWS bulut hizmetlerinde sağlam bir temel edinin.
- AWS Security and Cost Management kursunda AWS güvenliğini ve maliyetlerini etkili bir şekilde yönetmeyi öğrenin.
- Introduction to AWS Boto in Python kursunda, AWS'nin Python için SDK'sı olan Boto3 ile programatik AWS etkileşimlerini keşfedin.
Bu kaynaklardan yararlanarak, Amazon Lex tarafından desteklenen sohbet botları da dâhil olmak üzere AWS tabanlı uygulamalar oluşturma, güvenliğini sağlama ve optimize etme konusunda donanımlı olacaksınız!
SSS
Lex diğer AWS hizmetleriyle entegre olur mu?
Evet, Lex; Lambda, S3, CloudWatch ve daha fazlası gibi hizmetlerle entegre olur. Bu, botun işlevselliğini geliştirmenize, diğer ürünlerle entegre etmenize ve performansını izlemenize olanak tanır.
Lex hem ses hem metinle çalışır mı?
Evet, Lex varsayılan olarak hem ses hem metin girdilerini işleyebilir. Lex, sesli etkileşimler için çeşitli sesleri destekler. Ayrıca AWS Polly'yi kullanarak konuşma sentezleyebilir ve ses dosyasını Lex'e gönderebilirsiniz.
Lex botu için özel bir kullanıcı arayüzü kullanabilir miyim?
Evet, Lex, kullanıcı girdisini bota iletebilen ve botun yanıtlarını alabilen bir çalışma zamanı API'siyle birlikte gelir. Böylece, Lex botu özel kullanıcı arayüzü için arka uç olarak hizmet verir.
Lambda fonksiyonları olmadan Lex'i kullanabilir miyim?
Prensipte evet. Konuşmayı tamamen Lex içinde tasarlayabilirsiniz. Pratikte, bir botun kullanıcının isteğini yerine getiren (ör. bilet rezervasyonu gibi) diğer arka uç API hizmetleriyle arayüz oluşturması gerekir. Harici hizmetlerle arayüz oluşturmak için AWS Lambda'ya ihtiyacınız var.
AWS Lex'i eğitmek mümkün mü?
Sınırlı ölçüde evet. Lex'in NLU motoru, örnek söyleyişlere benzer kullanıcı girdilerini tanıyabilir. Ayrıca, birkaç örneğe dayanarak bir slot türünün geçerli değerlerini genişletebilir. Ancak bir LLM ile aynı düzeyde eğitilebilirlik beklemeyin. Lex, kapsamlı konuşmalar için değil, sınırlı ve işe özel etkileşimler için tasarlanmıştır.

