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

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

متوسط مطالعه در ۱۰ دقیقه
mahdyar

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

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

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

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

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

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

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

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

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

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

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

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

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

پیام سیستمی مهم‌ترین ابزار شما برای تعیین رفتار چت‌بات است. مایکروسافت برای نوشتن آن چهار بخش پیشنهاد می‌کند:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

سخن پایانی

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

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

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

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

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

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

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

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

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

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

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

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

دیدگاه‌ها

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

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

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

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

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

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

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