آموزش هوش مصنوعی

ساخت چت‌بات هوش مصنوعی با پایتون؛ از طراحی تا سنجش کیفیت

متوسط مطالعه در ۱۳ دقیقه بخش ۴ از ۵۰ در مسیر عملی هوش مصنوعی؛ از پرامپت تا ایجنت
mahdyar
· به‌روزرسانی
ساخت چت‌بات هوش مصنوعی با پایتون؛ از طراحی تا سنجش کیفیت

ساخت چت‌بات هوش مصنوعی فقط وصل‌کردن یک مدل زبانی به یک جعبه‌ی متن نیست. چت‌بات خوب باید گفت‌وگو را دنبال کند، رفتار قابل‌پیش‌بینی داشته باشد، برای همه قابل استفاده باشد و کیفیتش پس از راه‌اندازی هم سنجیده شود. احتمالاً همین هفته از یکی از همین دستیارها کمک گرفته‌اید؛ از پشتیبانی فروشگاه گرفته تا راهنمای فنی یک سرویس.

در قسمت قبل برنامه‌ای ساختیم که یک پرامپت می‌گرفت و یک پاسخ می‌داد. در این قسمت از مجموعه‌ی «از پرامپت تا دستیار هوش مصنوعی» آن را به چت‌بات تبدیل می‌کنیم. بعد سراغ طراحی تجربه‌ی کاربری، شخصی‌سازی، فاین‌تیون و معیارهای کیفیت می‌رویم.

چت‌بات یا برنامه‌ی گفت‌وگوی هوشمند؟

پیش از ساختن، بهتر است دو مفهوم را از هم جدا کنیم. چت‌بات معمولاً برای یک کار مشخص ساخته می‌شود؛ مثل پاسخ به پرسش‌های متداول یا پیگیری سفارش. چت‌بات کلاسیک شبیه منوی تلفنی بانک است: «برای موجودی ۱ را بزنید». برنامه‌ی گفت‌وگوی مبتنی بر هوش مصنوعی مولد، دامنه‌ی بازتری دارد و می‌تواند درباره‌ی موضوعات مختلف گفت‌وگوی طبیعی داشته باشد.

با این حال، در عمل مرز این دو کم‌رنگ شده است. بسیاری از برنامه‌های گفت‌وگو چند چت‌بات تخصصی را در خودشان جا می‌دهند. جدول زیر تفاوت‌های اصلی را نشان می‌دهد.

چت‌بات کلاسیکبرنامه‌ی گفت‌وگوی هوش مصنوعی مولد
متمرکز بر یک کار و مبتنی بر قاعدهآگاه به زمینه‌ی گفت‌وگو
معمولاً بخشی از یک سیستم بزرگ‌ترمی‌تواند میزبان یک یا چند چت‌بات باشد
محدود به کارهای برنامه‌ریزی‌شدهمجهز به مدل زبانی مولد
گفت‌وگوی ساختاریافته و تخصصیتوانایی گفت‌وگو در موضوعات باز

ساخت چت‌بات هوش مصنوعی با پایتون

قبل از ساختن هر قابلیتی از صفر، بررسی کنید چه ابزارهای آماده‌ای وجود دارد. SDKها و APIهای معتبر، زمان توسعه را کم می‌کنند و مقیاس‌پذیری و نگه‌داری را ساده‌تر می‌کنند. به این ترتیب وقت شما صرف منطق اصلی برنامه می‌شود.

چرا از SDK و API آماده استفاده کنیم؟

وقتی قابلیتی را خودتان از صفر می‌سازید، دیر یا زود با این پرسش روبه‌رو می‌شوید که اگر ناگهان هزاران کاربر بیایند چه می‌شود؟ خوشبختانه کتابخانه‌های پرکاربرد معمولاً راه‌حل این مسائل را از قبل دارند. علاوه بر این، به‌روزرسانی هم معمولاً با یک دستور نصب نسخه‌ی جدید انجام می‌شود.

مزیت دیگر، دسترسی به مدل‌هایی است که روی داده‌های عظیم آموزش دیده‌اند. شما فقط با یک کلید دسترسی از توانایی زبانی آن‌ها استفاده می‌کنید. همان کلید API که در قسمت قبل گرفتیم، اینجا هم کافی است.

حلقه‌ی گفت‌وگو با حافظه

مدل زبانی خودش حافظه ندارد. هر درخواست برای مدل یک درخواست تازه است. مدل را مثل پیشخدمتی تصور کنید که هیچ‌چیز را به خاطر نمی‌سپارد؛ برنامه‌ی شما دفترچه‌ی سفارش‌ها را نگه می‌دارد و هر بار کل دفترچه را جلویش می‌گذارد.

بنابراین برای اینکه چت‌بات گفت‌وگو را به خاطر بسپارد، برنامه باید فهرست پیام‌ها را نگه دارد و هر بار همه را همراه پیام جدید بفرستد. پیش از اجرا، pip install openai را بزنید و کلید را در متغیر محیطی OPENAI_API_KEY بگذارید:

python
from openai import OpenAI

client = OpenAI()
history = [{"role": "system", "content": "تو دستیار پاسخ‌گوی دوره‌های آموزشی هستی. کوتاه و دقیق جواب بده."}]

while True:
    question = input("شما: ")
    if question.strip() == "خروج":
        break
    history.append({"role": "user", "content": question})
    response = client.responses.create(model="gpt-5-mini", input=history, store=False)
    answer = response.output_text
    history.append({"role": "assistant", "content": answer})
    print("دستیار:", answer)

در واقع همین چند خط یک چت‌بات کامل است. کاربر می‌تواند بپرسد «دوره‌ی پایتون چند جلسه است؟» و بعد بپرسد «قیمتش چقدر است؟». مدل از روی تاریخچه می‌فهمد منظور کدام دوره است.

البته تاریخچه نمی‌تواند بی‌نهایت بزرگ شود. هر پیام توکن مصرف می‌کند و مدل سقف مشخصی برای طول ورودی دارد. در گفت‌وگوهای طولانی، پیام‌های قدیمی را خلاصه یا حذف کنید. ساده‌ترین راه این است که پیام سیستمی را نگه دارید و فقط چند پیام آخر را بفرستید؛ این دو خط را درست پیش از client.responses.create اضافه کنید:

python
MAX_TURNS = 10  # تعداد پیام‌های اخیری که نگه می‌داریم
history = [history[0]] + history[1:][-MAX_TURNS:]

عیب این روش این است که جزئیات ابتدای گفت‌وگو فراموش می‌شود. اگر آن جزئیات مهم است، به‌جای حذف، پیام‌های قدیمی را با یک درخواست جداگانه خلاصه کنید. اگر هنوز کلید API نگرفته‌اید یا محیط پایتون را آماده نکرده‌اید، مراحل در قسمت قبل آمده است.

بیشتر بخوانید: ساخت برنامه تولید متن با هوش مصنوعی؛ آموزش عملی با پایتون

تجربه‌ی کاربری در چت‌بات هوش مصنوعی

اصول عمومی تجربه‌ی کاربری در چت‌بات هم صدق می‌کند. اما چون پای مدل زبانی در میان است، چند نکته‌ی تازه اهمیت پیدا می‌کند. این نکته‌ها تفاوت یک چت‌بات آزاردهنده با یک دستیار دوست‌داشتنی را می‌سازند.

ابهام، حافظه و حریم خصوصی

مدل گاهی پاسخ مبهم می‌دهد. به همین دلیل کاربر باید بتواند راحت توضیح بیشتر بخواهد یا سؤالش را اصلاح کند. دکمه‌هایی مثل «توضیح بیشتر» یا «ساده‌تر بگو» همین کار را انجام می‌دهند.

از سوی دیگر، حافظه‌ی گفت‌وگو تجربه را بهتر می‌کند، اما خطر نگه‌داری اطلاعات حساس را هم دارد. تعیین کنید اطلاعات گفت‌وگو چه مدت نگه داشته شود و به کاربر اجازه دهید تاریخچه را پاک کند. یک سیاست نگه‌داری روشن، میان نیاز به زمینه و حفظ حریم خصوصی تعادل ایجاد می‌کند.

شخصی‌سازی پاسخ‌ها

چت‌باتی که کاربر را می‌شناسد، پاسخ مرتبط‌تری می‌دهد. نمونه‌ی آشنای آن بخش Custom instructions در ChatGPT است. کاربر درباره‌ی خودش و نوع پاسخی که می‌خواهد توضیح می‌دهد و این اطلاعات به همه‌ی گفت‌وگوهایش اضافه می‌شود.

در تصویر زیر، کاربر نوشته است که برنامه‌نویس باتجربه و مدرس پاره‌وقت علوم کامپیوتر است. همچنین خواسته است با نام خودش صدا زده شود.

شخصی‌سازی پاسخ‌ها در ساخت چت‌بات هوش مصنوعی؛ تنظیم Custom instructions در ChatGPT

پیام سیستمی مؤثر

پیام سیستمی مهم‌ترین ابزار شما برای تعیین رفتار چت‌بات است. آن را مثل شرح وظایفی بدانید که روز اول به کارمند تازه‌وارد یک فروشگاه می‌دهید: چه کسی هستی، با مشتری چطور حرف بزنی و درباره‌ی چه چیزهایی نظر ندهی. راهنمای مایکروسافت برای نوشتن آن چهار بخش پیشنهاد می‌کند:

  1. تعیین نقش مدل، مخاطب، توانایی‌ها و محدودیت‌هایش.
  2. مشخص‌کردن قالب خروجی.
  3. آوردن چند نمونه از رفتار مطلوب.
  4. تعیین مرزهای رفتاری؛ مثلاً موضوعاتی که نباید درباره‌شان پاسخ دهد.

وقتی همان کاربر تصویر قبل درخواست طرح درس «لیست پیوندی» را می‌دهد، ChatGPT با توجه به سابقه‌اش طرح درسی عمیق‌تر از حالت عادی می‌نویسد. پیام سیستمی و اطلاعات شخصی‌سازی دقیقاً همین تأثیر را دارند. برای نمونه، پیام سیستمی دستیار دوره‌ها با هر چهار بخش می‌تواند این شکل باشد:

txt
تو دستیار پاسخ‌گوی دوره‌های یک آموزشگاه آنلاین هستی و به مبتدی‌ها کمک می‌کنی.
پاسخ را حداکثر در سه جمله و به زبان ساده بده.
نمونه: «دوره‌ی پایتون چند جلسه است؟» → «دوره‌ی مبانی پایتون ۱۲ جلسه است.»
فقط درباره‌ی دوره‌ها حرف بزن؛ اگر دوره‌ای در فهرست نبود، صادقانه بگو نمی‌دانی.

هر خط این پیام یکی از چهار بخش را پوشش می‌دهد. اگر پاسخ‌ها از مرز بیرون زدند، اول همین بخش آخر را دقیق‌تر کنید.

چهار بخش پیام سیستمی در ساخت چت‌بات هوش مصنوعی؛ نقش، قالب، نمونه و مرز رفتاری

دسترس‌پذیری برای همه‌ی کاربران

چت‌بات خوب باید برای همه قابل استفاده باشد. برای کاربران کم‌بینا، تم پرکنتراست، امکان بزرگ‌کردن متن و سازگاری با صفحه‌خوان ضروری است. برای کاربران کم‌شنوا، تبدیل گفتار به متن و نشانه‌های تصویری به‌جای هشدار صوتی کمک می‌کند.

همچنین کاربرانی که محدودیت حرکتی دارند، به ناوبری کامل با صفحه‌کلید و فرمان صوتی نیاز دارند. برای کاربرانی که با متن پیچیده مشکل دارند هم گزینه‌ی «زبان ساده» بسیار مفید است. این گزینه را می‌توانید با یک خط در پیام سیستمی فعال کنید.

شخصی‌سازی مدل برای یک حوزه‌ی تخصصی

فرض کنید چت‌باتی می‌خواهید که اصطلاحات شرکت شما را بفهمد و پرسش‌های رایج کاربرانتان را پیش‌بینی کند. برای این کار دو رویکرد اصلی وجود دارد: استفاده از مدل تخصصی یک حوزه یا فاین‌تیون یک مدل عمومی.

مدل‌های تخصصی حوزه

مدل تخصصی حوزه (DSL Model) روی متن‌های یک صنعت یا موضوع خاص آموزش دیده یا تنظیم شده است. چنین مدلی مفاهیم و سناریوهای آن حوزه را بهتر می‌شناسد و پاسخ‌های مرتبط‌تری می‌دهد.

برای استفاده از این مدل‌ها چند راه دارید. اول اینکه می‌توانید یکی را از صفر آموزش دهید که پرهزینه است. دوم، می‌توانید از مدل‌های آماده از طریق API استفاده کنید. سوم اینکه یک مدل عمومی را برای حوزه‌ی خودتان فاین‌تیون کنید.

فاین‌تیون؛ مثال یک دستیار پزشکی

فاین‌تیون (Fine-tuning، تنظیم دقیق) یعنی آموزش بیشتر یک مدل آماده با داده‌های تخصصی خودتان. فاین‌تیون مثل دوره‌ی تخصص برای یک پزشک عمومی است؛ در حالی که اتصال به اسناد مثل گذاشتن یک کتاب مرجع روی میز همان پزشک است. این کار وقتی لازم می‌شود که مدل عمومی در یک حوزه‌ی تخصصی کم می‌آورد. مثال درسنامه یک دستیار پزشکی است که به پزشکان در مرور دستورالعمل‌های درمان و تداخل دارویی کمک می‌کند.

مدل عمومی برای پرسش‌های ساده‌ی پزشکی کافی است. اما وقتی یک متخصص مغز و اعصاب درباره‌ی بهترین روش مدیریت صرع مقاوم به دارو در کودکان می‌پرسد، مدل عمومی ممکن است پاسخ دقیق و به‌روزی نداشته باشد. فاین‌تیون با داده‌ی تخصصی می‌تواند این شکاف را کم کند؛ به شرطی که داده‌ی کافی و باکیفیت در اختیار داشته باشید.

پیش از فاین‌تیون، راه‌های ساده‌تر را امتحان کنید. پیام سیستمی دقیق و اتصال چت‌بات به اسناد خودتان، که در قسمت ششم به آن می‌پردازیم، اغلب همان نتیجه را با هزینه‌ی کمتری می‌دهند.

سنجش کیفیت چت‌بات هوش مصنوعی

راه‌اندازی چت‌بات پایان کار نیست. کیفیت باید به‌طور مداوم سنجیده شود؛ هم از نظر فنی و هم از نظر کیفیت پاسخ و رضایت کاربر. این کار شبیه معاینه‌ی دوره‌ای خودرو است؛ ماشینی که روز خرید سالم بوده، بدون سرویس منظم سالم نمی‌ماند.

دو اصطلاح جدول شاید ناآشنا باشد. «دقت» (Precision) می‌گوید از پاسخ‌هایی که چت‌بات درست دانسته، چند درصد واقعاً درست بوده‌اند. «بازخوانی» (Recall) می‌گوید از همه‌ی پاسخ‌های درستی که باید می‌داد، چند درصد را واقعاً داده است. جدول زیر مهم‌ترین معیارها را همراه پرسشی که هر تیم باید از خودش بپرسد نشان می‌دهد.

معیارچه چیزی را می‌سنجدپرسش کلیدی
زمان دسترس‌پذیریمدتی که برنامه در دسترس کاربر استزمان قطعی را چطور کم می‌کنیم؟
زمان پاسخفاصله‌ی پرسش کاربر تا پاسخپردازش را چطور سریع‌تر کنیم؟
دقت و بازخوانیدرستی پاسخ‌ها و پوشش پاسخ‌های درستدقت را چطور اعتبارسنجی می‌کنیم؟
نرخ خطامیزان اشتباه در فهم یا پاسخبرای کاهش خطا چه برنامه‌ای داریم؟
رضایت کاربربرداشت کاربر از کیفیت گفت‌وگوهر چند وقت بازخورد می‌گیریم؟
تشخیص ناهنجاریرفتارهای غیرعادی و غیرمنتظرهدر برابر ناهنجاری چه واکنشی داریم؟

اصول هوش مصنوعی مسئولانه در چت‌بات

مایکروسافت شش اصل را برای توسعه‌ی مسئولانه‌ی هوش مصنوعی معرفی کرده است. رعایت این اصول هم اعتماد کاربر را می‌سازد و هم ریسک حقوقی را کم می‌کند:

  • انصاف: چت‌بات نباید بر اساس اطلاعات کاربر تبعیض قائل شود.
  • قابلیت اطمینان و ایمنی: آزمون و سازوکار جلوگیری از خطا را از ابتدا طراحی کنید.
  • حریم خصوصی و امنیت: داده‌های کاربر را رمزنگاری و محافظت کنید.
  • فراگیری: رابط کاربری را برای مخاطبان متنوع ساده و دسترس‌پذیر بسازید.
  • شفافیت: به کاربر بگویید با هوش مصنوعی صحبت می‌کند و پاسخ‌ها چطور تولید می‌شوند.
  • پاسخ‌گویی: فرایند روشنی برای بازبینی و اصلاح تصمیم‌های چت‌بات داشته باشید.

این شش اصل فهرستی برای یک بار تیک‌زدن نیستند. در عوض، هر بار که قابلیت تازه‌ای اضافه می‌کنید، دوباره آن را با همین اصول بسنجید.

تمرین عملی؛ دستیار دوره‌ها با حافظه

کد حلقه‌ی گفت‌وگو را اجرا کنید و آن را به دستیار دوره‌های پروژه‌ی مشترک تبدیل کنید:

  1. فهرست پنج دوره را با نام، سطح و مدت در پیام سیستمی بگذارید.
  2. هر چهار بخش پیام سیستمی را بنویسید؛ از جمله اینکه اگر دوره‌ای در فهرست نبود، صادقانه بگوید.
  3. یک گفت‌وگوی پنج‌پیامی انجام دهید و بررسی کنید آیا دستیار زمینه را درست دنبال می‌کند.

در پایان، سه معیار از جدول کیفیت را انتخاب کنید و برای هر کدام یک روش ساده‌ی اندازه‌گیری بنویسید. این معیارها در قسمت ارزیابی ایجنت دوباره به کارمان می‌آیند.

سخن پایانی

ساخت چت‌بات هوش مصنوعی با یک حلقه‌ی ساده و یک فهرست پیام شروع می‌شود. اما آنچه یک چت‌بات را قابل‌اعتماد می‌کند، چیزهای دیگری است: پیام سیستمی دقیق، تجربه‌ی کاربری سنجیده، احترام به حریم خصوصی و پایش مداوم کیفیت. بنابراین پیش از فاین‌تیون یا ابزارهای پیچیده، همین پایه‌ها را محکم کنید. چت‌بات شما اولین بار در کدام گفت‌وگو زمینه را گم می‌کند؟ همین را آزمایش کنید.

در قسمت پنجم سراغ جست‌وجوی معنایی می‌رویم تا دستیار بتواند محتوای مرتبط را بر اساس معنا پیدا کند، نه فقط کلمه‌ها.

این آموزش بر پایه‌ی درس Building Generative AI-Powered Chat Applications از مجموعه‌ی آزاد Generative AI for Beginners مایکروسافت (مجوز MIT) به فارسی بازنویسی و تکمیل شده است.

برای مطالعه بیشتر

برای دنبال کردن عمیق‌تر این بحث، منابع زیر را به ترتیب از ساده به تخصصی بخوانید.

پرسش‌های پرتکرار

چت‌بات چطور گفت‌وگوهای قبلی را به خاطر می‌سپارد؟

مدل زبانی خودش حافظه ندارد. برنامه تاریخچه‌ی پیام‌ها را نگه می‌دارد و در هر درخواست همه‌ی پیام‌های قبلی را همراه پیام جدید می‌فرستد. برای گفت‌وگوهای طولانی، پیام‌های قدیمی خلاصه یا حذف می‌شوند.

پیام سیستمی چت‌بات باید شامل چه چیزهایی باشد؟

چهار بخش پیشنهادی مایکروسافت؛ نقش و محدودیت‌های دستیار، قالب خروجی، چند نمونه از رفتار درست و مرزهای رفتاری مثل موضوعاتی که نباید درباره‌شان پاسخ دهد.

برای چت‌بات تخصصی فاین‌تیون لازم است؟

همیشه نه. اول با پیام سیستمی دقیق و اتصال به اسناد (RAG) شروع کنید. فاین‌تیون وقتی ارزش دارد که مدل عمومی حتی با زمینه‌ی کافی هم در اصطلاحات و الگوهای یک حوزه‌ی تخصصی ضعیف باشد و داده‌ی آموزشی مناسب داشته باشید.

کیفیت چت‌بات را با چه معیارهایی بسنجیم؟

ترکیبی از معیارهای فنی مثل زمان پاسخ و دسترس‌پذیری، معیارهای کیفیت پاسخ مثل نرخ خطا و دقت، و رضایت کاربر. همه را به‌طور منظم پایش کنید، نه فقط هنگام راه‌اندازی.

دیدگاه‌ها

هنوز دیدگاهی ثبت نشده است. شروع‌کننده باشید — پرسش و اصلاح را با آغوش باز می‌پذیریم.

دیدگاه بگذارید

برای **پررنگ**، *مورب*، `کد` و لینک از Markdown استفاده کنید. لینک‌ها nofollow هستند.

پنج رقم داخل تصویر را وارد کنید. اعداد فارسی و انگلیسی پذیرفته می‌شوند.

تصویر کد امنیتی پنج‌رقمی

در حال دریافت کد امنیتی…

مهلت کد تمام شد. روی «کد جدید» بزنید.