آموزش ساخت چت بات در پایتون
این آموزش یکی از پستهای زیرمجموعه آموزشهای مرتبط با پایتون میباشد، که به آموزش ساخت چت بات در پایتون میپردازد. در صورتی که تمایل دارید کل آموزشهای مرتبط با پایتون را مشاهده کنید، از این لینک استفاده کنید. در ضمن اگه حوصله خوندن متن ندارید، میتونید از ویدیو آخر این پست استفاده کنید و از متن صرف نظر کنید. همچنین اگه با خواندن این مطلب سوالی برای شما پیش اومد، خوشحال میشم که اون را از طریق راههای ارتباطی که در همین وبسایت موجوده، باهام مطرح کنید.
پیشنیاز این آموزش تسلط بر پایتون هست.
چت بات چیه؟
تا حالا از ChatGPT استفاده کردید؟ اگه کردید، پس میدونید چت بات چیه! چت بات به نرمافزاری گفته میشه که میتونه با شما چت کنه، در حقیقت یک طرف این گفتگو انسان و طرف دیگر ربات هست!
کاربرد و مزیت چت بات
فرض کنید شما یک وبسایت دارید و در طول روز افرادی از طریق چت آنلاین وبسایت، به شما پیام میدهند، خب قطعا اگر تعداد پیامها یا حجم کار شما بالا باشه، مجبور میشید که یک نفر را مسئول پاسخ دادن به این پیامها کنید و حتی اگر شما به این فرد حقوق ناچیز و مسخره اداره کار را پرداخت کنید، باز هم باید برای جواب دادن به این پیامها، ماهیانه کلی هزینه کنید. حالا فرض کنید یک ربات با هزینه ناچیز این کار را برای شما میکنه، یعنی جواب سوالات مشتریان را میده! این تقریبا اصلیترین کاربرد چت بات بود.
آیا چت بات قابلیت یادگیری داره؟
بستگی به نحوه کدنویسی چت بات داره ولی چت باتی که در ادامه آموزش میدهم، بله! این چت بات اگه جواب سوالی را ندونه، ازتون درخواست میکنه که جواب را بهش بگید و در صورتی که شما بهش جواب بدید، از اون لحظه دیگه اون سوال و سوالات مشابه را میتونه پاسخ بده.
آیا چت بات هوش داره؟
بازم بسته به نحوه کدنویسی چت بات داره ولی چت باتی که در ادامه آموزش میدهم، بله! این چت بات اگه سوال شما اشتباه تایپی داشته باشه، بازم میتونه تشخیص بده که چی پرسیدهاید. مورد دیگه هم اینه که دقت این ربات قابل تنظیمه و هر چی دیتا بیشتر بشه، میتونید دقت ربات را بیشتر کنید.
ساخت چت بات با پایتون
به دو تا فایل نیاز داریم، یک فایل json که دادههای چت بات را داخل خودش ذخیره میکنه و یک فایل py که کدهای چت بات را داره. (من از vscode به عنوان محیط کدنویسی دارم استفاده میکنم). در ضمن اگه حوصله خوندن متن ندارید، میتونید از ویدیو آخر این پست استفاده کنید و متن را صرف نظر کنید.
من نام فایل حاوی دیتا را data.json گذاشتم، شما هر اسمی دوست داشتید میتونید روی این فایل بگذارید (هر اسمی که اینجا گذشتید، بعدا در کد هم از همون اسم استفاده کنید) ولی نوع فایل حتما باید json باشد. برای شروع محتویات این فایل را به صورت زیر قرار بدید:
{
"questions": [
]
}
مشخصه که یک دیکشنری با کلید questions ایجاد کردم و داخل دیکشنری یک لیست خالی قرار دادم که این لیست را ربات پر میکنه و هر چی هم که ربات بیشتر آموزش ببینه این دیتا بیشتر میشه.
مرحله بعدی محتویات فایل main.py است:
import json
from difflib import get_close_matches
#Load Data
def load_data(filePath : str):
with open(filePath , 'r') as dataFile:
data = json.load(dataFile)
return data
#Save Data
def save_data(filePath : str , data : dict):
with open(filePath , 'w') as dataFile:
json.dump(data , dataFile , indent=2)
#Find The Best Match
def find_best_question(userQuestion : str , questions : list[str]):
matches = get_close_matches(userQuestion , questions , n=1 , cutoff=0.6)
return matches[0] if matches else None
#Load Answer
def find_best_answer(question : str , data : dict):
for q in data["questions"]:
if q["question"] == question:
return q["answer"]
#Start
def chatBot():
data = load_data('data.json')
while True:
userInput = input("You: ").lower()
if userInput == "quit":
break
bestMatch = find_best_question(userInput , [q["question"] for q in data["questions"]])
if bestMatch:
answer = find_best_answer(bestMatch , data)
print(f"Bot: {answer}")
else:
print("I don't the answer, Can you teach me?")
newAnswer = input("Type the answer or 'Skip' to skip: ").lower()
if newAnswer != "skip":
newData = {"question": userInput , "answer": newAnswer}
data["questions"].append(newData)
save_data('data.json' , data)
print("Bot: Thank you! I learned a new response.")
if __name__ == "__main__":
chatBot()
- خط اول کتابخانه json را وارد کردم که بتونم با فایل json حاوی دیتا ربات کار کنم.
- خط دوم کلاس get_close_matches وارد کردم، این کلاس به من کمک میکنه ک سوالی که کاربر از ربات کرده را با سوالهای موجود در فایل json مقایسه کنم و نزدیکترین سوال را به سوال کاربر را به من بر میگردونه. (حواستون باشه که اگه این کتابخونه را نصب نکردهاید، از طریق pip اونا را نصب کنید)
- تابع load_data کل دیتا موجود در فایل json را به من برمیگردونه.
- تابع save_data وظیقه ذخیره سازی دیتای جدید در فایل json را داره.
- تابع find_best_question سوالی که کاربر کرده را با سوالات موجود در دیتا (فایل json) مقایسه میکنه و بهترین جواب را برمیگردونه و اگه چیزی پیدا نکرد None را برگردونه. نکته مهم اینه که من با استفاده از پارامتر cutoff تابع get_close_matches میتونم دقت ربات را تنظیم کنم، الان چون هنوز دیتای زیادی این ربات نداره، من این دقت را روی 0.6 تنظیم کردهام ولی بعدا که دیتا بیشتر شد، من دقت را افزایش میدهم.
- تابع find_best_answer سوالی را در دیتا جستجو کرده و جواب مرتبط با اون را برمیگردونه.
- تابع chatBot وظیفه شروع ربات را بعهده داره، اول دیتا را با استفاده از تابع load_data میخونه و بعد سوال کاربر را میگیره و اگه سوال یا سول مشابهی در دیتا پیدا کرد، جواب اون را به کاربر نشون میده ولی اگه پیدا نکرد از کاربر درخواست میکنه که جواب سوال را بهش بده و بعدش سوال و جواب جدید را در دیتا ذخیره میکنه.
ویدیو آموزش ساخت چت بات در پایتون
قبل اینکه ویدیو را ببینید، بگم که من ویدیوها را در چنل یوتوب خودم هم آپلود میکنم، خیلی خوشحال میشم که اونجا هم من را دنبال کنید.