یک سال پیش، بخش HR محبوب ما از ما خواست تا یک ربات چت بنویسیم که به سازگاری تازه واردان با شرکت کمک کند.
بیایید رزرو کنیم که محصولات خود را توسعه نمی دهیم، اما طیف کاملی از خدمات توسعه را به مشتریان ارائه می دهیم. داستان در مورد پروژه داخلی ما خواهد بود، که مشتری آن یک شرکت شخص ثالث نیست، بلکه منابع انسانی خود ما است. و وظیفه اصلی با توجه به محدودیت در دسترس بودن افراد، منابع و زمان، تکمیل پروژه به موقع و عرضه محصول است.
ابتدا، بیایید مشکلاتی را که باید حل می شدند، شرح دهیم.
توسعه دهندگان بیشتر افراد درون گرا هستند و دوست ندارند صحبت کنند؛ نوشتن سوال خود در یک چت ایمیلی بسیار ساده تر است. با یک ربات، لازم نیست به این فکر کنید که از چه کسی بپرسید، با چه کسی تماس بگیرید، کجا بروید، و به طور کلی، کجا به دنبال اطلاعات بگردید و آیا مرتبط است یا خیر.
مشکل دوم اطلاعات است - تعداد زیادی از آنها وجود دارد، در منابع مختلف وجود دارد، همیشه در دسترس نیست و نیاز به افزودن و به روز رسانی مداوم دارد.
این شرکت تقریباً 500 کارمند دارد، آنها در دفاتر مختلف، مناطق زمانی، شهرهای روسیه و حتی خارج از کشور قرار دارند، معمولاً سؤالات زیادی وجود دارد، بنابراین وظیفه دیگر کاهش بار پرسنل منابع انسانی مرتبط با متداول ترین سؤالات است. توسط کارکنان
همچنین لازم بود فرآیندهای: پیوستن تازه واردان به شرکت، ارسال پیام به مدیران و مربیان تازه واردان، ارسال یادآوری خودکار در مورد دوره ها و آزمون هایی که یک تازه وارد برای سازگاری موفق باید طی کند، خودکار شود.
الزامات فنی بر اساس الزامات تجاری شکل گرفت.
ربات باید بر اساس اسکایپ کار کند (از لحاظ تاریخی، آنها از آن در شرکت استفاده می کنند)، بنابراین سرویس Azura انتخاب شد.
برای محدود کردن دسترسی به آن، ما شروع به استفاده از مکانیسم مجوز از طریق اسکایپ کردیم.
کتابخانه ParlAI برای تشخیص متن استفاده شد
یک پورتال وب اداری نیز برای پیکربندی، آموزش، اشکال زدایی، راه اندازی پست ها و سایر وظایف مورد نیاز است.
در حین کار بر روی پروژه، با مشکلات و مشکلات متعددی مواجه شدیم.
برای مثال، مشکلات فنی در حساب Azure وجود داشت. مایکروسافت به دلیل برخی مشکلات فنی در سرویس خود نمی خواست اشتراک ما را فعال کند. تقریباً به مدت دو ماه نتوانستیم کاری در مورد آن انجام دهیم؛ پشتیبانی مایکروسافت در نهایت دست خود را بالا برد و ما را به شرکای خود فرستاد که با موفقیت همه چیز را راهاندازی کردند و یک حساب کاربری به ما دادند.
سخت ترین مرحله شروع پروژه بود، زمانی که شما باید انتخاب کنید که ما از چه چیزی استفاده کنیم، معماری چه خواهد بود، چگونه و کجا داده ها را ذخیره کنیم، و اجزا و ماژول های سیستم چگونه با یکدیگر تعامل خواهند داشت.
در مورد ما، اساساً مشکلات معمولی شروع هر پروژه با کارمندان پیچیده تر شد. ویژگی های کسب و کار ما به گونه ای است که بر خلاف موارد تجاری، پروژه های داخلی اغلب توسط توسعه دهندگانی که دانش کافی در زمینه های مورد نیاز ندارند کار می کنند - آنها به سادگی، به اراده سرنوشت، روی نیمکت در انتظار بعدی هستند. پروژه بزرگ تجاری جالب منطقی است که در چنین شرایطی کارها با انگیزه نیز بسیار سخت بود. بهره وری پایین می آید، تیم اغلب بیکار است و در نتیجه باید فرد را متقاعد کنید (انگیزه دهید) یا تغییر دهید. هنگام تغییر توسعه دهندگان، باید آموزش انجام دهید، دانش را انتقال دهید و اساسا پروژه را دوباره شروع کنید. هر توسعهدهنده جدید معماری را به روش خود میدید و قبلیها را به خاطر تصمیمهایی که میگرفتند و کد دیگران سرزنش میکرد. بازنویسی از ابتدا شروع شد.
این حدود شش ماه ادامه داشت. ما فقط زمان را علامت گذاری می کردیم، کد را مجدداً فاکتور می کردیم و چیز جدیدی نمی نوشتیم.
همچنین، در پروژه های داخلی، به عنوان یک قاعده، تقریبا هیچ سندی وجود ندارد، و درک آنچه باید در هر مقطع زمانی انجام شود، و اولویت های فعلی چه هستند، دشوار بود. ایجاد یک تیم دائمی، ایجاد فرآیندها و انجام برنامه ریزی و ارزیابی برای حداقل سه ماه ضروری بود. اما وقتی پروژه تجاری نیست، چگونه می توان این کار را انجام داد، به این معنی که شما باید حداقل ساعت کاری سرمایه گذاری کنید، و در عین حال نتیجه بدتر از یک مشتری خارجی نیست؟
ما مجموعه ای از منابع را شناسایی کرده ایم که در توسعه پروژه مشارکت داشته اند، با آن آشنا هستند و می خواهند روی آن کار کنند. ما برنامه ای برای استخدام افراد در پروژه ها تنظیم کردیم. ما کار را ارزیابی و هماهنگ کردیم و این آثار را در "حفره" بین پروژه های اصلی قرار دادیم. پس از 4 ماه ما یک نمونه اولیه کاربردی از برنامه دریافت کردیم.
حالا بیایید با جزئیات بیشتری در مورد عملکرد، معماری و راه حل های فنی ربات صحبت کنیم.
یکی از الزامات اصلی HR تشخیص متن نوشته شده توسط کاربر برای پاسخ صحیح به سوال بود. شما می توانید برای او بنویسید - من می خواهم به تعطیلات بروم، می خواهم به تعطیلات بروم یا می خواهم به تعطیلات بروم، و او متوجه می شود و پاسخ می دهد. یا ناگهان صندلی کارمندی می شکند و می خواهد بنویسد "صندلی شکسته است" یا "صندلی من ترک خورده است" یا "پشت صندلی افتاده است"؛ با آموزش مناسب، ربات چنین درخواست هایی را تشخیص می دهد. کیفیت تشخیص متن به آموزش ربات بستگی دارد که بعداً در مورد آن صحبت خواهیم کرد.
نیاز بعدی و بخشی از عملکرد، سیستم گفتگوی ربات است. سیستمی توسعه داده شد که در آن ربات می تواند گفت و گو انجام دهد و زمینه موضوع فعلی را درک کند. در پاسخ به سوال شما، اگر ربات را برای انجام این کار آموزش داده باشیم، ممکن است هرگونه سوال روشنگری بپرسد و به گفتگو ادامه دهد. اسکایپ از گزینه های منوی ساده پشتیبانی می کند تا کاربران را در مورد گزینه های ادامه مکالمه راهنمایی کند. همچنین، اگر ما در حال گفتگو بودیم، اما ناگهان تصمیم گرفتیم یک سوال خارج از موضوع بپرسیم، ربات نیز این را میفهمد.
این ربات امکان ارسال مصنوعات مختلف را بر اساس اطلاعات شخصی کاربر برای او فراهم می کند. مثلاً در محل او. فرض کنید اگر شخصی بخواهد توالتی پیدا کند، نقشه دفتری به او نشان داده می شود که او را به سمت توالت می برد. و بسته به اینکه کارمند در کدام دفتر شرکت واقع شده است، کارت انتخاب می شود.
یکی از مهمترین وظایف محافظت از اطلاعات شخصی کاربران است. ما نمیتوانیم به هر شخصی اجازه دسترسی به دادههای حساسی که ربات ما کار میکند داشته باشد. نیاز به مجوز برای چنین رباتی بخشی جدایی ناپذیر از آن است. ربات از کاربر می خواهد که قبل از اینکه بتواند با او گفتگو کند، احراز هویت کند. این اولین باری است که یک کارمند با ربات تماس می گیرد. خود مجوز کاربر را به صفحه مربوطه هدایت می کند، جایی که کاربر رمزی را دریافت می کند و سپس آن را در پیام اسکایپ وارد می کند. اگر مجوز موفقیت آمیز باشد، می توانید با ربات ارتباط برقرار کنید.
مجوز از طریق Skype انجام می شود - سرویس مجوز پورتال، شبکه شرکتی و LDAP. بنابراین، مجوز به داده های کاربر فعلی در شبکه شرکت بستگی دارد.
در فرآیند توسعه ربات، متوجه شدیم که به نوعی سیستم تعبیه شده در عملکرد پورتال نیاز داریم که بتواند به HR کمک کند تا ربات را به سرعت اشکالزدایی کند. ما یک صفحه پورتال اضافه کردهایم که در آن HR میتواند خطاهای ثبت شده توسط کاربران را هنگام کار با ربات ببیند و با استفاده از آموزش مجدد آنها را حل کند یا برای توسعهدهندگان بگذارد.
امکان آموزش مستقیم ربات در پورتال از همان ابتدا وجود نداشت. در طول فرآیند توسعه، متوجه شدیم که آموزش ربات رایجترین وظیفهای است که کارکنان بخش منابع انسانی هنگام کار با آن انجام میدهند و ارسال فایلهای متنی برای توسعهدهندگان برای آموزش تکمیلی ربات کاملاً غیرقابل قبول است. این کار زمان زیادی را می خورد و خطاها و مشکلات زیادی ایجاد می کند.
ما یک UI در پورتال برای آموزش کاربر پسند ربات نوشتیم. این به HR اجازه می دهد تا آموزش فعلی ربات را ببیند، آن را بیشتر آموزش دهد و تنظیماتی را در آموزش فعلی انجام دهد. آموزش با ساختار درختی نشان داده می شود که در آن گره ها، یعنی شاخه ها، ادامه گفتگو با ربات هستند. شما می توانید پرسش و پاسخ های ساده ایجاد کنید، یا می توانید دیالوگ های سنگین ایجاد کنید، همه اینها به منابع انسانی و نیازهای آنها بستگی دارد.
چند کلمه در مورد معماری راه حل.
معماری راه حل مدولار است. این شامل خدماتی است که وظایف مختلفی را بر عهده دارند، از جمله:
• سرویس ربات اسکایپ در Azure - درخواست های کاربر را می پذیرد و پردازش می کند. این یک سرویس نسبتاً ساده است که برای اولین بار درخواست دریافت می کند و پردازش اولیه آن را انجام می دهد.
• پورتال مدیریت - سرویسی که یک رابط وب برای راه اندازی پورتال و برای خود ربات فراهم می کند. ربات همیشه ابتدا با پورتال تماس می گیرد و پورتال تصمیم می گیرد که با درخواست چه کاری انجام دهد.
• سرویس مجوز - مکانیزم های احراز هویت را برای ربات و پورتال مدیریت فراهم می کند. مجوز از طریق پروتکل Oauth2 انجام می شود. با مجوز مثبت، سرویس مجوز را در شبکه شرکتی مطابق با داده های معتبر کاربر انجام می دهد، به طوری که سیستم می تواند خطاهای مرتبط با داده های خارج از همگام را کنترل کند.
• ماژول تشخیص متن AI، نوشته شده در پایتون و با استفاده از چارچوب ParlAI برای تشخیص خود متن. این یک شبکه عصبی حداقل در اجرای فعلی آن است. برای درک سوالات از الگوریتم tfDiff استفاده می کنیم. این ماژول یک API برای برقراری ارتباط با آن و یادگیری فراهم می کند.
در خاتمه میخواهم بگویم که این اولین تجربه ما در ایجاد ربات چت است و سعی کردیم سیستم را تا حد امکان ساده و در عین حال کاربردی و با حداقل هزینههای نیروی کار بر روی آن بسازیم. من فکر می کنم ما یک محصول بسیار جالب داریم. با سیستم آموزشی خاص خود، ثبت خطا، ارسال اعلان، همچنین می تواند با هر پیام رسان دیگری ادغام شود.
منبع: www.habr.com