एलएलएम के साथ अमेज़ॅन लेक्स को बढ़ाएं और यूआरएल अंतर्ग्रहण का उपयोग करके एफएक्यू अनुभव में सुधार करें | अमेज़न वेब सेवाएँ

एलएलएम के साथ अमेज़ॅन लेक्स को बढ़ाएं और यूआरएल अंतर्ग्रहण का उपयोग करके एफएक्यू अनुभव में सुधार करें | अमेज़न वेब सेवाएँ

आज की डिजिटल दुनिया में, अधिकांश उपभोक्ता व्यवसायों और/या सेवा प्रदाताओं तक पहुंचने के लिए समय निकालने के बजाय अपने ग्राहक सेवा प्रश्नों के उत्तर स्वयं ढूंढना पसंद करेंगे। यह ब्लॉग पोस्ट प्रश्न और उत्तर चैटबॉट बनाने के लिए एक अभिनव समाधान की खोज करता है अमेज़न लेक्स जो आपकी वेबसाइट से मौजूदा FAQ का उपयोग करता है। यह एआई-संचालित टूल वास्तविक दुनिया की पूछताछ के लिए त्वरित, सटीक प्रतिक्रिया प्रदान कर सकता है, जिससे ग्राहक को सामान्य समस्याओं को स्वतंत्र रूप से जल्दी और आसानी से हल करने की अनुमति मिलती है।

एकल यूआरएल अंतर्ग्रहण

कई उद्यमों के पास अपने ग्राहकों के लिए अक्सर पूछे जाने वाले प्रश्नों के उत्तरों का एक प्रकाशित सेट उनकी वेबसाइट पर उपलब्ध है। इस मामले में, हम ग्राहकों को एक चैटबॉट प्रदान करना चाहते हैं जो हमारे प्रकाशित FAQs से उनके प्रश्नों का उत्तर दे सके। शीर्षक वाले ब्लॉग पोस्ट में एलएलएम का उपयोग करके बातचीत संबंधी एफएक्यू सुविधाओं के साथ अमेज़ॅन लेक्स को बेहतर बनाएं, हमने प्रदर्शित किया कि आप अपने मौजूदा ज्ञान स्रोतों, जैसे पीडीएफ या वर्ड दस्तावेजों द्वारा संचालित चैटबॉट बनाने के लिए अमेज़ॅन लेक्स और लामाइंडेक्स के संयोजन का उपयोग कैसे कर सकते हैं। FAQs की एक वेबसाइट के आधार पर, एक सरल FAQ का समर्थन करने के लिए, हमें एक अंतर्ग्रहण प्रक्रिया बनाने की आवश्यकता है जो वेबसाइट को क्रॉल कर सके और एम्बेडिंग बना सके जिसका उपयोग LlamaIndex द्वारा ग्राहकों के सवालों के जवाब देने के लिए किया जा सके। इस मामले में, हम इसमें बनाए गए बॉट पर निर्माण करेंगे पिछले ब्लॉग पोस्ट, जो उपयोगकर्ता के कथन के साथ उन एम्बेडिंग पर सवाल उठाता है और वेबसाइट FAQs से उत्तर देता है।

निम्नलिखित चित्र दिखाता है कि अंतर्ग्रहण प्रक्रिया और अमेज़ॅन लेक्स बॉट हमारे समाधान के लिए एक साथ कैसे काम करते हैं।

एलएलएम के साथ अमेज़ॅन लेक्स को बढ़ाएं और यूआरएल अंतर्ग्रहण का उपयोग करके एफएक्यू अनुभव में सुधार करें | अमेज़ॅन वेब सेवाएँ प्लेटोब्लॉकचेन डेटा इंटेलिजेंस। लंबवत खोज. ऐ.

समाधान वर्कफ़्लो में, FAQs वाली वेबसाइट को इसके माध्यम से शामिल किया जाता है AWS लाम्बा. यह लैम्ब्डा फ़ंक्शन वेबसाइट को क्रॉल करता है और परिणामी टेक्स्ट को एक में संग्रहीत करता है अमेज़न सरल भंडारण सेवा (अमेज़ॅन S3) बाल्टी। S3 बकेट फिर एक लैम्ब्डा फ़ंक्शन को ट्रिगर करता है जो Amazon S3 में संग्रहीत एम्बेडिंग बनाने के लिए LlamaIndex का उपयोग करता है। जब किसी अंतिम-उपयोगकर्ता से कोई प्रश्न आता है, जैसे कि "आपकी रिटर्न नीति क्या है?", अमेज़ॅन लेक्स बॉट LlamaIndex के साथ RAG-आधारित दृष्टिकोण का उपयोग करके एम्बेडिंग को क्वेरी करने के लिए अपने लैम्ब्डा फ़ंक्शन का उपयोग करता है। इस दृष्टिकोण और पूर्व-आवश्यकताओं के बारे में अधिक जानकारी के लिए, ब्लॉग पोस्ट देखें, एलएलएम का उपयोग करके बातचीत संबंधी एफएक्यू सुविधाओं के साथ अमेज़ॅन लेक्स को बेहतर बनाएं.

उपर्युक्त ब्लॉग से पूर्व-आवश्यकताएँ पूरी होने के बाद, पहला कदम FAQs को एक दस्तावेज़ भंडार में शामिल करना है जिसे LlamaIndex द्वारा वेक्टरकृत और अनुक्रमित किया जा सकता है। निम्नलिखित कोड दिखाता है कि इसे कैसे पूरा किया जाए:

import logging
import sys
import requests
import html2text
from llama_index.readers.schema.base import Document
from llama_index import GPTVectorStoreIndex
from typing import List logging.basicConfig(stream=sys.stdout, level=logging.INFO)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout)) class EZWebLoader: def __init__(self, default_header: str = None): self._html_to_text_parser = html2text() if default_header is None: self._default_header = {"User-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36"} else: self._default_header = default_header def load_data(self, urls: List[str], headers: str = None) -> List[Document]: if headers is None: headers = self._default_header documents = [] for url in urls: response = requests.get(url, headers=headers).text response = self._html2text.html2text(response) documents.append(Document(response)) return documents url = "http://www.zappos.com/general-questions"
loader = EZWebLoader()
documents = loader.load_data([url])
index = GPTVectorStoreIndex.from_documents(documents)

पिछले उदाहरण में, हम Zappos से एक पूर्वनिर्धारित FAQ वेबसाइट URL लेते हैं और इसका उपयोग करके इसे ग्रहण करते हैं EZWebLoader कक्षा। इस कक्षा के साथ, हमने यूआरएल पर नेविगेट किया है और पेज में मौजूद सभी प्रश्नों को एक इंडेक्स में लोड किया है। अब हम एक प्रश्न पूछ सकते हैं जैसे "क्या ज़ैप्पोस के पास उपहार कार्ड हैं?" और उत्तर सीधे वेबसाइट पर हमारे अक्सर पूछे जाने वाले प्रश्नों से प्राप्त करें। निम्नलिखित स्क्रीनशॉट अमेज़ॅन लेक्स बॉट परीक्षण कंसोल को अक्सर पूछे जाने वाले प्रश्नों के उस प्रश्न का उत्तर दिखाता है।

एलएलएम के साथ अमेज़ॅन लेक्स को बढ़ाएं और यूआरएल अंतर्ग्रहण का उपयोग करके एफएक्यू अनुभव में सुधार करें | अमेज़ॅन वेब सेवाएँ प्लेटोब्लॉकचेन डेटा इंटेलिजेंस। लंबवत खोज. ऐ.

हम इसे हासिल करने में सक्षम थे क्योंकि हमने पहले चरण में यूआरएल को क्रॉल किया था और एम्बेडिंग बनाई थी जिसका उपयोग LlamaIndex हमारे प्रश्न का उत्तर खोजने के लिए कर सकता था। हमारे बॉट का लैम्ब्डा फ़ंक्शन दिखाता है कि जब भी फ़ॉलबैक इरादा लौटाया जाता है तो यह खोज कैसे चलाई जाती है:

import time
import json
import os
import logging
import boto3
from llama_index import StorageContext, load_index_from_storage logger = logging.getLogger()
logger.setLevel(logging.DEBUG) def download_docstore(): # Create an S3 client s3 = boto3.client('s3') # List all objects in the S3 bucket and download each one
try: bucket_name = 'faq-bot-storage-001' s3_response = s3.list_objects_v2(Bucket=bucket_name) if 'Contents' in s3_response: for item in s3_response['Contents']: file_name = item['Key'] logger.debug("Downloading to /tmp/" + file_name) s3.download_file(bucket_name, file_name, '/tmp/' + file_name) logger.debug('All files downloaded from S3 and written to local filesystem.') except Exception as e: logger.error(e)
raise e #download the doc store locally
download_docstore() storage_context = StorageContext.from_defaults(persist_dir="/tmp/")
# load index
index = load_index_from_storage(storage_context)
query_engine = index.as_query_engine() def lambda_handler(event, context): """
Route the incoming request based on intent.
The JSON body of the request is provided in the event slot. """ # By default, treat the user request as coming from the America/New_York time zone. os.environ['TZ'] = 'America/New_York' time.tzset() logger.debug("===== START LEX FULFILLMENT ====") logger.debug(event) slots = {} if "currentIntent" in event and "slots" in event["currentIntent"]: slots = event["currentIntent"]["slots"] intent = event["sessionState"]["intent"] dialogaction = {"type": "Delegate"} message = [] if str.lower(intent["name"]) == "fallbackintent": #execute query from the input given by the user response = str.strip(query_engine.query(event["inputTranscript"]).response) dialogaction["type"] = "Close" message.append({'content': f'{response}', 'contentType': 'PlainText'}) final_response = { "sessionState": { "dialogAction": dialogaction, "intent": intent }, "messages": message } logger.debug(json.dumps(final_response, indent=1)) logger.debug("===== END LEX FULFILLMENT ====") return final_response

यह समाधान तब अच्छा काम करता है जब एक ही वेबपेज पर सभी उत्तर हों। हालाँकि, अधिकांश FAQ साइटें एक पृष्ठ पर नहीं बनाई गई हैं। उदाहरण के लिए, हमारे ज़ैप्पोस उदाहरण में, यदि हम प्रश्न पूछते हैं "क्या आपके पास मूल्य मिलान नीति है?", तो हमें कम-से-संतोषजनक उत्तर मिलता है, जैसा कि निम्नलिखित स्क्रीनशॉट में दिखाया गया है।

एलएलएम के साथ अमेज़ॅन लेक्स को बढ़ाएं और यूआरएल अंतर्ग्रहण का उपयोग करके एफएक्यू अनुभव में सुधार करें | अमेज़ॅन वेब सेवाएँ प्लेटोब्लॉकचेन डेटा इंटेलिजेंस। लंबवत खोज. ऐ.

पिछली बातचीत में, मूल्य-मिलान नीति उत्तर हमारे उपयोगकर्ता के लिए उपयोगी नहीं है। यह उत्तर संक्षिप्त है क्योंकि संदर्भित FAQ मूल्य मिलान नीति के बारे में एक विशिष्ट पृष्ठ का लिंक है और हमारा वेब क्रॉल केवल एक पृष्ठ के लिए था। बेहतर उत्तर प्राप्त करने का अर्थ इन लिंकों को क्रॉल करना भी होगा। अगला भाग दिखाता है कि उन प्रश्नों के उत्तर कैसे प्राप्त करें जिनके लिए पृष्ठ गहराई के दो या अधिक स्तरों की आवश्यकता होती है।

एन-लेवल क्रॉलिंग

जब हम FAQ ज्ञान के लिए किसी वेब पेज को क्रॉल करते हैं, तो हम जो जानकारी चाहते हैं वह लिंक किए गए पेजों में समाहित हो सकती है। उदाहरण के लिए, हमारे ज़ैप्पोस उदाहरण में, हम प्रश्न पूछते हैं "क्या आपके पास मूल्य मिलान नीति है?" और उत्तर है “हां, कृपया आएं।” अधिक जानने के लिए।" यदि कोई पूछता है "आपकी मूल्य मिलान नीति क्या है?" तो हम नीति के साथ पूरा जवाब देना चाहते हैं. इसे प्राप्त करने का मतलब है कि हमें अपने अंतिम उपयोगकर्ता के लिए वास्तविक जानकारी प्राप्त करने के लिए लिंक को पार करने की आवश्यकता है। अंतर्ग्रहण प्रक्रिया के दौरान, हम अपने वेब लोडर का उपयोग अन्य HTML पृष्ठों के एंकर लिंक ढूंढने और फिर उन्हें पार करने के लिए कर सकते हैं। हमारे वेब क्रॉलर में निम्नलिखित कोड परिवर्तन हमें उन पृष्ठों में लिंक ढूंढने की अनुमति देता है जिन्हें हम क्रॉल करते हैं। इसमें सर्कुलर क्रॉलिंग से बचने और उपसर्ग द्वारा फ़िल्टर की अनुमति देने के लिए कुछ अतिरिक्त तर्क भी शामिल हैं।

import logging
import requests
import html2text
from llama_index.readers.schema.base import Document
from typing import List
import re def find_http_urls_in_parentheses(s: str, prefix: str = None): pattern = r'((https?://[^)]+))' urls = re.findall(pattern, s) matched = [] if prefix is not None: for url in urls: if str(url).startswith(prefix): matched.append(url) else: matched = urls return list(set(matched)) # remove duplicates by converting to set, then convert back to list class EZWebLoader: def __init__(self, default_header: str = None): self._html_to_text_parser = html2text if default_header is None: self._default_header = {"User-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36"} else: self._default_header = default_header def load_data(self, urls: List[str], num_levels: int = 0, level_prefix: str = None, headers: str = None) -> List[Document]: logging.info(f"Number of urls: {len(urls)}.") if headers is None: headers = self._default_header documents = [] visited = {} for url in urls: q = [url] depth = num_levels for page in q: if page not in visited: #prevent cycles by checking to see if we already crawled a link logging.info(f"Crawling {page}") visited[page] = True #add entry to visited to prevent re-crawling pages response = requests.get(page, headers=headers).text response = self._html_to_text_parser.html2text(response) #reduce html to text documents.append(Document(response)) if depth > 0: #crawl linked pages ingest_urls = find_http_urls_in_parentheses(response, level_prefix) logging.info(f"Found {len(ingest_urls)} pages to crawl.") q.extend(ingest_urls) depth -= 1 #reduce the depth counter so we go only num_levels deep in our crawl else: logging.info(f"Skipping {page} as it has already been crawled") logging.info(f"Number of documents: {len(documents)}.") return documents url = "http://www.zappos.com/general-questions"
loader = EZWebLoader()
#crawl the site with 1 level depth and prefix of "/c/" for customer service root
documents = loader.load_data([url], num_levels=1, level_prefix="https://www.zappos.com/c/")
index = GPTVectorStoreIndex.from_documents(documents)

पूर्ववर्ती कोड में, हम एन स्तरों को गहराई तक क्रॉल करने की क्षमता का परिचय देते हैं, और हम एक उपसर्ग देते हैं जो हमें क्रॉलिंग को केवल उन चीजों तक सीमित करने की अनुमति देता है जो एक निश्चित यूआरएल पैटर्न से शुरू होती हैं। हमारे ज़ैप्पोस उदाहरण में, सभी ग्राहक सेवा पृष्ठ यहीं से रूट किए गए हैं zappos.com/c, इसलिए हम अपने क्रॉल को छोटे और अधिक प्रासंगिक उपसमूह तक सीमित करने के लिए इसे एक उपसर्ग के रूप में शामिल करते हैं। कोड दिखाता है कि हम दो स्तरों तक गहराई तक कैसे निगल सकते हैं। हमारे बॉट का लैम्ब्डा तर्क वही रहता है क्योंकि कुछ भी नहीं बदला है सिवाय इसके कि क्रॉलर अधिक दस्तावेज़ों को निगल लेता है।

अब हमारे पास सभी दस्तावेज़ अनुक्रमित हैं और हम अधिक विस्तृत प्रश्न पूछ सकते हैं। निम्नलिखित स्क्रीनशॉट में, हमारा बॉट "क्या आपके पास मूल्य मिलान नीति है?" प्रश्न का सही उत्तर प्रदान करता है।

एलएलएम के साथ अमेज़ॅन लेक्स को बढ़ाएं और यूआरएल अंतर्ग्रहण का उपयोग करके एफएक्यू अनुभव में सुधार करें | अमेज़ॅन वेब सेवाएँ प्लेटोब्लॉकचेन डेटा इंटेलिजेंस। लंबवत खोज. ऐ.

अब हमारे पास मूल्य मिलान के बारे में हमारे प्रश्न का संपूर्ण उत्तर है। केवल यह कहे जाने के बजाय कि "हाँ हमारी नीति देखें", यह हमें दूसरे स्तर के क्रॉल से विवरण देता है।

क्लीन अप

भविष्य में होने वाले खर्चों से बचने के लिए, इस अभ्यास के हिस्से के रूप में तैनात किए गए सभी संसाधनों को हटाने के लिए आगे बढ़ें। हमने सेजमेकर एंडपॉइंट को शानदार तरीके से बंद करने के लिए एक स्क्रिप्ट प्रदान की है। उपयोग विवरण README में हैं। इसके अतिरिक्त, अन्य सभी संसाधनों को हटाने के लिए आप चला सकते हैं cdk destroy अन्य सीडीके के समान निर्देशिका में आपके स्टैक के सभी संसाधनों का प्रावधान रद्द करने का आदेश देता है।

निष्कर्ष

चैटबॉट में अक्सर पूछे जाने वाले प्रश्नों के एक सेट को शामिल करने की क्षमता आपके ग्राहकों को सीधे, प्राकृतिक भाषा प्रश्नों के साथ अपने प्रश्नों के उत्तर ढूंढने में सक्षम बनाती है। LlamaIndex जैसे RAG समाधान के साथ फ़ॉलबैक हैंडलिंग के लिए Amazon Lex में अंतर्निहित समर्थन को जोड़कर, हम अपने ग्राहकों को अक्सर पूछे जाने वाले प्रश्नों के संतोषजनक, क्यूरेटेड और अनुमोदित उत्तर प्राप्त करने के लिए एक त्वरित मार्ग प्रदान कर सकते हैं। हमारे समाधान में एन-लेवल क्रॉलिंग को लागू करके, हम उन उत्तरों की अनुमति दे सकते हैं जो संभवतः कई FAQ लिंक को फैला सकते हैं और हमारे ग्राहकों के प्रश्नों के गहन उत्तर प्रदान कर सकते हैं। इन चरणों का पालन करके, आप अपने अमेज़ॅन लेक्स चैटबॉट में शक्तिशाली एलएलएम-आधारित क्यू और ए क्षमताओं और कुशल यूआरएल अंतर्ग्रहण को सहजता से शामिल कर सकते हैं। इसके परिणामस्वरूप उपयोगकर्ताओं के साथ अधिक सटीक, व्यापक और प्रासंगिक रूप से जागरूक बातचीत होती है।


लेखक के बारे में

एलएलएम के साथ अमेज़ॅन लेक्स को बढ़ाएं और यूआरएल अंतर्ग्रहण का उपयोग करके एफएक्यू अनुभव में सुधार करें | अमेज़ॅन वेब सेवाएँ प्लेटोब्लॉकचेन डेटा इंटेलिजेंस। लंबवत खोज. ऐ.मैक्स हेन्केल-वालेस AWS Lex में सॉफ़्टवेयर डेवलपमेंट इंजीनियर हैं। ग्राहकों की सफलता को अधिकतम करने के लिए प्रौद्योगिकी का लाभ उठाकर काम करने में उन्हें आनंद आता है। काम के अलावा उसे खाना पकाने, दोस्तों के साथ समय बिताने और बैकपैकिंग करने का शौक है।

एलएलएम के साथ अमेज़ॅन लेक्स को बढ़ाएं और यूआरएल अंतर्ग्रहण का उपयोग करके एफएक्यू अनुभव में सुधार करें | अमेज़ॅन वेब सेवाएँ प्लेटोब्लॉकचेन डेटा इंटेलिजेंस। लंबवत खोज. ऐ.गीत फेंग एडब्ल्यूएस एआई लैब्स में एक वरिष्ठ एप्लाइड वैज्ञानिक हैं, जो प्राकृतिक भाषा प्रसंस्करण और आर्टिफिशियल इंटेलिजेंस में विशेषज्ञता रखते हैं। उनका शोध दस्तावेज़-आधारित संवाद मॉडलिंग, कार्य-उन्मुख संवादों के लिए तर्क और मल्टीमॉडल डेटा का उपयोग करके इंटरैक्टिव टेक्स्ट पीढ़ी सहित इन क्षेत्रों के विभिन्न पहलुओं की पड़ताल करता है।

एलएलएम के साथ अमेज़ॅन लेक्स को बढ़ाएं और यूआरएल अंतर्ग्रहण का उपयोग करके एफएक्यू अनुभव में सुधार करें | अमेज़ॅन वेब सेवाएँ प्लेटोब्लॉकचेन डेटा इंटेलिजेंस। लंबवत खोज. ऐ.जॉन बेकर एडब्ल्यूएस में एक प्रिंसिपल एसडीई हैं जहां वह प्राकृतिक भाषा प्रसंस्करण, बड़े भाषा मॉडल और अन्य एमएल/एआई संबंधित परियोजनाओं पर काम करते हैं। वह 9+ वर्षों से अमेज़न के साथ हैं और उन्होंने AWS, Alexa और Amazon.com पर काम किया है। अपने खाली समय में, जॉन पूरे प्रशांत नॉर्थवेस्ट में स्कीइंग और अन्य बाहरी गतिविधियों का आनंद लेते हैं।

समय टिकट:

से अधिक AWS मशीन लर्निंग