از آمازون لکس تا GPT-4: چگونه با داده های خود یک ربات بسازیم؟

ChatGPT و سایر مدلهای OpenAI در حال حاضر پرفروش هستند. اما آنها تنها راه حل موجود نیستند. یا آنها هستند؟ بیایید سعی کنیم امروز آن را بدون کد، فقط مفاهیم کلی، درد و رنج کشف کنیم.
تصور کنید که باید یک ربات چت ایجاد کنید که بتواند به سوالات کاربران بر اساس دادههای شما پاسخ دهد: محصولات موجود در یک فروشگاه آنلاین، پایگاه دانش یک سرویس پشتیبانی، مقالات بازاریابی، و غیره یا لیستی از کافهها و فضاهای همکاری، در مورد من. .
تا همین اواخر، چنین دیالوگ هایی به انتخاب از “آیا به این موضوع علاقه دارید؟ – اینجا کلیک کنید. به چیز دیگری علاقه دارید؟ – آنجا را کلیک کنید. چیزی نفهمیدی؟ – منتظر اپراتور باشید“. نه خیلی دوستانه، اما گاهی کاملا قابل پیش بینی و قابل درک است، فقط ایجاد چنین منطق پیچیده ای زمان زیادی می برد.
خوب، بیایید کمی دوستی اضافه کنیم و یک “رابط زبان طبیعی” مانند “10 کافه با سوکت نزدیک به من در لندن را به من نشان دهید(اگر بازاریابان را باور کنیم، مردم چیزهای احمقانه تری می نویسند، فقط برای اینکه آنچه را که به دنبالش هستند بیابند).
یکی از اولین “شناسایی زبان انسان” مانند این، سرویس آمازون لکس (و همچنین Google Dialogflow و ده ها مورد دیگر) بود.
Amazon Lex V2 یک سرویس AWS برای ساخت رابط های مکالمه برای برنامه های کاربردی با استفاده از صدا و متن است. Amazon Lex V2 عملکرد عمیق و انعطافپذیری درک زبان طبیعی (NLU) و تشخیص خودکار گفتار (ASR) را ارائه میدهد تا بتوانید تجربههای بسیار جذابی برای کاربر با تعاملات واقعی و محاورهای ایجاد کنید و دستهبندیهای جدیدی از محصولات ایجاد کنید.
Amazon Lex V2 هر توسعه دهنده ای را قادر می سازد تا ربات های مکالمه را به سرعت بسازد. با آمازون Lex V2، هیچ تخصص یادگیری عمیق لازم نیست – برای ایجاد یک ربات، شما جریان اصلی مکالمه را در کنسول آمازون Lex V2 مشخص میکنید. Amazon Lex V2 گفتگو را مدیریت می کند و به صورت پویا پاسخ ها را در مکالمه تنظیم می کند. با استفاده از کنسول، می توانید چت ربات متنی یا صوتی خود را بسازید، آزمایش کنید و منتشر کنید. سپس میتوانید رابطهای مکالمه را به رباتهای دستگاههای تلفن همراه، برنامههای کاربردی وب و پلتفرمهای چت (به عنوان مثال، فیسبوک مسنجر) اضافه کنید.
عالی به نظر می رسد: می تواند موجودیت ها را از متن ساده استخراج کرده و به API داده منتقل کند.
برای مثال بالا، مجبور شدم یک جمله بنویسم “به من نشان بده {شمردن} {نوع} با {پریز برق} نزدیک به من در {منطقه}“و نهادها را توصیف کنید. پس از آن، JSON {count: 10, type: cafe, sockets: many, region: London}
از عبارت اصلی بدست آمد.
اما مشکل اینجاست، برای عبارت مشابه “به من 10 کار مشترک در ریگا بدهید“، یک بیان کاملا متفاوت مورد نیاز است، و برای ساده ترین پرس و جو”5 محل کار در نزدیکی“، سومی مورد نیاز است. 🤷♂️ به طور کلی، من بعد از چند صد جابهجایی کلمه احمقانه متوقف شدم. اجرای تمام تستها حدود یک ساعت طول کشید.
درد دیگر دیالوگ هاست. برای مثال، درخواست دوم جستجوگر فضاهای کاری ممکن است “کافه ها چطور؟در Lex، متن را می توان به سه طریق، اما به تعداد محدود و فقط از طریق کد (توابع آمازون لامبدا) منتقل کرد.
Lex همچنین راه دیگری برای استفاده دارد: آموزش بر روی مجموعه دادهای از صدها هزار پرسش و پاسخ، و پاسخهای خودکار بیشتر. احتمالا برای مراکز تماس با سوالات مشابه مناسب است.
خب بریم سراغ ChatGPT و قابلیت هایی که شایعه شده
افسانههای رد کردن: مدلهای موجود از طریق API «احمقتر» از رابط وب چت هستند، زیرا حافظه یا زمینه ندارند 🤦♂️
بنابراین، برای کار با یک کاتالوگ محصول، باید کل کاتالوگ را در هر درخواست ارسال کنید، که حتی در حد 32 هزار توکن گران ترین مدل gpt-4-32k قرار نمی گیرد. و با هر پیام، باید تمام درخواستها و پاسخهای قبلی را برای حفظ متن ارسال کنید.
تقریباً 99.9 (9)٪ از رباتهای معمولی که از پاسخ دهم (مثلاً) شروع به شارژ کردن کاربران میکنند، اینگونه کار میکنند. پرده می افتد.
به طور کلی، گزینه دوم برای پیاده سازی ایده، نشانه گذاری و برداری متون منبع، مقالات یا کاتالوگ محصولات است. توکن سازی و بردارسازی پرس و جو کاربر و یافتن نزدیکترین بردارهای مناسب بر اساس شباهت کسینوس.
جستجوی معنایی ساده شده به این صورت است و نیازی به مدلهای چت ندارد. با این حال، برای “دوستانه” گفتگو و پاسخ ها، می توان از مدل های چت استفاده کرد و بردارهای یافت شده و متن های اصلی مربوط به آنها را می توان همراه با پرس و جو منتقل کرد.
در اینجا چند مقاله در مورد آن و کمی بیشتر وجود دارد.
همه اقدامات را میتوان بر روی مدلهای خود، مدلهای OpenAI (مانند text-embedding-ada-002) از طریق API، و هر مدل در دسترس عموم، مانند ابر NLP، انجام داد. وکتورها را می توان در فایل های CSV ذخیره کرد، اما بهتر است از پایگاه های داده برداری تخصصی مانند Qdrant استفاده کنید.
امروزه، این رویکرد در حال تبدیل شدن به یک استاندارد واقعی است و اکثر افزونه های جستجو برای ChatGPT بر اساس آن هستند.
چندین مزیت وجود دارد:
- هزینه کم برداری (این فقط زمانی انجام می شود که داده های منبع آپلود یا اصلاح شوند) و ذخیره سازی، به ویژه در یک پایگاه داده محلی
- برخی امکان برای حفظ زمینه با حمل کل گفتگو با هر درخواست به مدل چت
همچنین برخی از معایب وجود دارد:
- داده های منبع باید مبتنی بر متن یا به طور دقیق تر، توصیفی باشند (کاتالوگ کافه من که از پارامترهای enum در قالب JSON ساخته شده است کار نمی کند)
- باید تعداد زیادی از آنها وجود داشته باشد
سرویسهایی قبلاً ظاهر شدهاند که اجرای کل پشته را از آمادهسازی داده تا دریافت کد چت برای وبسایت شما ساده میکنند. برای مثال Databerry و Spellbook. و همچنین مدل های جایگزین خوبی مانند Vicuna وجود دارد.
پس از آزمایشهای برداری، به گزینه سوم تغییر کردم – ترجمه درخواستهای انسانی به JSON با استفاده از مدل چت
این ساده ترین، ارزان ترین و سریع ترین راه برای اجرای ایده اولیه من بود.
این مدل با دستورالعمل هایی همراه است که همراه با درخواست کاربر ارسال می شود.
Convert the question below to JSON data.
Mostly questions are related to cafes and coworkings with different amenities.
Use only following parameters.
Skip unknown parameters and parameters that not in question.
Just output JSON data without explanation, notes or error messages!
Parameters
"""
- count: integer from 0 to 5
- type: one of "Cafe", "Coworking" and "Anticafe"
- region: any city
- sockets: one of "None", "Few" and "Many"
- noise: one of "Quiet", "Medium" and "Noisy"
- size: one of "Small", "Average" and "Big"
- busyness: one of "Low", "Average" and "High"
- view: one of "Street", "Roofs" and "Garden"
- cuisine: one of "Coffee & snacks" and "Full"
- roundclock: one of true and false
در بیشتر موارد، یک پاسخ JSON کاملاً عادی مانند {count: 5, type: cafe, sockets: many, region: London}
برگردانده می شود، که می تواند به API میکروسرویس منتقل شود.
اما یک مدل تولید متن، مدل تولید متن نخواهد بود اگر همیشه یکسان پاسخ دهد (حتی زمانی که با temperature=0
). تقریباً 10٪ مواقع، “گیر می کند” و پارامترهای موجود را اضافه می کند یا فراموش می کند که JSON را ببندد، و یک درخواست تکراری مشابه به طور معمول پردازش می شود.
مبارزه با این موضوع بیهوده است، اما میتوانید پارامترهای موجود یا مقادیر نامعتبر را با اعتبارسنجی پاسخ در برابر طرح JSON حذف کنید و همچنین پیشنهاد کنید که کاربر دوباره از ربات بپرسد.
به هر حال، آخرین مدل gpt-4 “هوشمندتر”، قابل پیش بینی تر است و پارامترهای تصادفی اضافه نمی کند، اما هزینه آن 6 برابر بیشتر است. ما منتظر gpt-4-turbo هستیم.
میتوانید از ربات بهدستآمده در اینجا بپرسید @WorkplacesDigitalBot، بودجه آن 10 دلار در ماه است تا زمانی که شروع به کسب درآمد کند، و هیچ پساندازی در زمینه وجود ندارد.