كيف تبني Chatbot بالذكاء الاصطناعي باستخدام Python؟ مشروع كامل خطوة بخطوة

 

سلسلة مشاريع الذكاء الاصطناعي التطبيقية • من الفكرة إلى التطبيق
المشروع الثالث: بناء Chatbot ذكي باستخدام Python


كيف تبني Chatbot بالذكاء الاصطناعي باستخدام Python؟ مشروع كامل خطوة بخطوة

هل تريد بناء Chatbot بالذكاء الاصطناعي يستطيع التحدث مع المستخدم والاحتفاظ بسياق المحادثة بدل إعطاء إجابة واحدة فقط؟

في هذا المشروع سنبني تطبيق محادثة حقيقي باستخدام Python وStreamlit وOpenAI API.

سيكتب المستخدم رسالته داخل واجهة شبيهة بتطبيقات الدردشة، ثم يجيب الذكاء الاصطناعي وتبقى الرسائل السابقة ظاهرة داخل المحادثة.

لن نكتفي بشرح الفكرة نظريًا. سننشئ المشروع خطوة بخطوة، ثم نجمع كل شيء في كود كامل يمكنك تشغيله وتجربته بنفسك.

ماذا ستبني في هذا الدرس؟
  • واجهة Chatbot حقيقية.
  • مربعًا لإرسال الرسائل.
  • رسائل منفصلة للمستخدم والمساعد.
  • ذاكرة للمحادثة أثناء الجلسة.
  • ربط التطبيق بنموذج ذكاء اصطناعي.
  • زرًا لبدء محادثة جديدة.
  • معالجة بسيطة للأخطاء.

1. ما الفرق بين Chatbot عادي وAI Chatbot؟

قبل كتابة الكود، من المهم أن نفهم ما الذي نبنيه.

الـChatbot التقليدي يعتمد غالبًا على قواعد وإجابات محددة مسبقًا. إذا كتب المستخدم سؤالًا معروفًا، يبحث البرنامج عن الإجابة المرتبطة به.

أما AI Chatbot فيستخدم نموذج ذكاء اصطناعي لفهم رسالة المستخدم وتوليد إجابة مناسبة للسياق.

وهذا يسمح ببناء مساعد يستطيع التعامل مع عدد كبير من الأسئلة بدل كتابة إجابة يدوية لكل احتمال.

المستخدم ← Streamlit ← Python ← OpenAI API ← نموذج الذكاء الاصطناعي ← الإجابة

2. الأدوات التي سنستخدمها

المشروع يحتاج إلى عدد قليل من الأدوات:

  • Python لبرمجة التطبيق.
  • Streamlit لإنشاء واجهة Chatbot.
  • OpenAI API للاتصال بنموذج الذكاء الاصطناعي.
  • VS Code أو أي محرر أكواد تفضله.

إذا كنت قد تابعت المشاريع السابقة في هذه السلسلة، فستلاحظ أننا نستخدم الأدوات نفسها تقريبًا. وهذا مقصود، لأننا نريد الانتقال تدريجيًا من تطبيق بسيط إلى تطبيقات ذكاء اصطناعي أكثر تطورًا.

3. إنشاء مشروع Python جديد

أنشئ مجلدًا جديدًا على جهازك باسم:

ai_chatbot

ثم أنشئ بداخله ملفًا باسم:

app.py

سيحتوي هذا الملف على التطبيق الرئيسي.

4. تثبيت المكتبات

افتح Terminal داخل مجلد المشروع واكتب:

pip install streamlit openai

انتظر حتى تنتهي عملية التثبيت.

Streamlit سيتولى إنشاء واجهة المحادثة، أما مكتبة OpenAI فسنستخدمها لإرسال الرسائل إلى نموذج الذكاء الاصطناعي.

5. إعداد مفتاح OpenAI API

حتى يستطيع تطبيق Python الاتصال بالـAPI، يحتاج إلى مفتاح API صالح.

مهم جدًا:
مفتاح API معلومة سرية. لا تضع المفتاح الحقيقي داخل مقال أو صورة أو مستودع GitHub عام، ولا تشاركه مع الآخرين.

يمكنك حفظ المفتاح في متغير بيئي باسم:

OPENAI_API_KEY

وبذلك يستطيع تطبيقك استخدام المفتاح دون كتابته مباشرة داخل الكود.

6. بناء واجهة Chatbot باستخدام Streamlit

يوفر Streamlit عناصر مخصصة لتطبيقات المحادثة.

أهم عنصرين سنستخدمهما هما:

st.chat_message()
st.chat_input()

الأول يعرض رسالة داخل واجهة المحادثة، والثاني يعرض مربع الكتابة الذي يستخدمه الزائر لإرسال رسالته.

جرّب أولًا هذا المثال البسيط:

import streamlit as st

st.title("🤖 My AI Chatbot")

prompt = st.chat_input("Write your message...")

if prompt:
    with st.chat_message("user"):
        st.markdown(prompt)

هذا لا يستخدم الذكاء الاصطناعي بعد. لكنه يسمح لنا بالتأكد من أن واجهة المحادثة تعمل.

7. لماذا نحتاج إلى ذاكرة للمحادثة؟

Streamlit يعيد تشغيل السكربت عند تفاعل المستخدم مع التطبيق. لذلك نحتاج إلى مكان نحفظ فيه الرسائل السابقة.

سنستخدم:

st.session_state

وننشئ قائمة باسم messages:

if "messages" not in st.session_state:
    st.session_state.messages = []

كل رسالة سنحفظها بهذا الشكل:

{
    "role": "user",
    "content": "Hello!"
}

أما إجابة المساعد فستكون:

{
    "role": "assistant",
    "content": "Hello! How can I help you?"
}

8. عرض تاريخ المحادثة

بعد حفظ الرسائل، نحتاج إلى عرضها كلما أعاد Streamlit تشغيل الصفحة.

for message in st.session_state.messages:

    with st.chat_message(message["role"]):
        st.markdown(message["content"])

بهذه الطريقة تبقى المحادثة ظاهرة أمام المستخدم طوال الجلسة.

9. ربط Chatbot بالذكاء الاصطناعي

نبدأ باستيراد عميل OpenAI:

from openai import OpenAI

client = OpenAI()

ثم عند إرسال رسالة جديدة، سنرسل سياق المحادثة إلى النموذج حتى لا تكون كل رسالة منفصلة تمامًا عما سبقها.

10. الكود الكامل للـAI Chatbot

الآن وصلنا إلى الجزء الأهم.

استبدل محتوى ملف app.py بالكود التالي:

import streamlit as st
from openai import OpenAI

client = OpenAI()

st.set_page_config(
    page_title="AI Chatbot",
    page_icon="🤖"
)

st.title("🤖 AI Chatbot")

st.caption(
    "A simple conversational AI built with Python, "
    "Streamlit and OpenAI."
)


# Initialize chat history
if "messages" not in st.session_state:
    st.session_state.messages = []


# Display previous messages
for message in st.session_state.messages:

    with st.chat_message(message["role"]):
        st.markdown(message["content"])


# New conversation button
if st.sidebar.button("New Conversation"):

    st.session_state.messages = []
    st.rerun()


# Get user message
if prompt := st.chat_input("Ask me anything..."):

    # Save user message
    st.session_state.messages.append(
        {
            "role": "user",
            "content": prompt
        }
    )

    # Display user message
    with st.chat_message("user"):
        st.markdown(prompt)


    # Build conversation context
    conversation = [
        {
            "role": "system",
            "content":
            "You are a helpful, clear and friendly AI assistant."
        }
    ]

    conversation.extend(st.session_state.messages)


    # Generate assistant response
    with st.chat_message("assistant"):

        with st.spinner("Thinking..."):

            try:

                response = client.responses.create(
                    model="gpt-5.6",
                    input=conversation
                )

                answer = response.output_text

                st.markdown(answer)


                # Save assistant response
                st.session_state.messages.append(
                    {
                        "role": "assistant",
                        "content": answer
                    }
                )


            except Exception as error:

                st.error(
                    "An error occurred. "
                    "Check your API key and internet connection."
                )

                st.caption(str(error))

11. كيف يعمل الكود؟

قد يبدو الكود طويلًا للمبتدئ، لكن فكرته تتكون من أجزاء بسيطة.

أولًا: إنشاء عميل OpenAI

client = OpenAI()

هذا العميل هو الذي نستخدمه لإرسال الطلبات إلى OpenAI API.

ثانيًا: إنشاء سجل المحادثة

if "messages" not in st.session_state:
    st.session_state.messages = []

إذا لم تكن هناك محادثة سابقة، ننشئ قائمة فارغة.

ثالثًا: استقبال رسالة المستخدم

if prompt := st.chat_input("Ask me anything..."):

عندما يرسل المستخدم رسالة، يتم تخزينها في المتغير prompt.

رابعًا: حفظ الرسالة

st.session_state.messages.append(
    {
        "role": "user",
        "content": prompt
    }
)

نضيف الرسالة إلى تاريخ المحادثة حتى نستطيع استخدامها لاحقًا.

خامسًا: إرسال السياق إلى النموذج

response = client.responses.create(
    model="gpt-5.6",
    input=conversation
)

هنا تحدث عملية الذكاء الاصطناعي الفعلية.

نرسل المحادثة إلى النموذج، ثم نستخرج النص الناتج:

answer = response.output_text

12. تشغيل Chatbot

احفظ الملف ثم افتح Terminal واكتب:

streamlit run app.py

إذا لم يعمل الأمر، جرب:

python -m streamlit run app.py

سيظهر عنوان محلي في Terminal ويفتح التطبيق في المتصفح.

13. تجربة حقيقية للمحادثة

لا نريد الاكتفاء برؤية الواجهة. يجب أن نتأكد أن Chatbot يفهم السياق.

جرّب مثلًا:

أنت:

My name is Omar and I am learning Python.

Chatbot:

Nice to meet you, Omar! Python is a great language to learn. How can I help you with it?

أنت:

What programming language did I say I was learning?

Chatbot:

You said you are learning Python.

إذا أجاب عن السؤال الثاني اعتمادًا على الرسالة الأولى، فهذا يعني أن سياق المحادثة يعمل.

14. إضافة زر New Conversation

أضفنا داخل الكود:

if st.sidebar.button("New Conversation"):

    st.session_state.messages = []
    st.rerun()

عند الضغط على الزر نحذف تاريخ المحادثة من Session State ثم نعيد تشغيل التطبيق.

وبذلك يبدأ المستخدم محادثة جديدة.

15. هل ذاكرة Chatbot دائمة؟

لا.

في مشروعنا الحالي، الذاكرة مرتبطة بجلسة Streamlit. وهذا مناسب لتعلم كيفية بناء Chatbot وإدارة سياق الحوار، لكنه ليس نظام ذاكرة دائمًا.

إذا أردت لاحقًا أن يتذكر التطبيق المستخدم بعد إغلاق الصفحة والعودة إليها، فسنحتاج إلى نظام تخزين مثل قاعدة بيانات.

انتبه:
وجود تاريخ المحادثة داخل الواجهة لا يعني تلقائيًا أن النموذج يتذكر المستخدم إلى الأبد. في هذا المشروع نحن نتحكم في السياق الذي يتم إرساله إلى النموذج.

16. كيف تجعل Chatbot متخصصًا؟

حتى الآن المساعد عام. لكن يمكننا تغيير شخصيته بسهولة.

مثلًا، إذا أردنا مساعدًا لتعليم Python:

{
    "role": "system",
    "content":
    "You are a Python tutor for beginners. "
    "Explain programming concepts simply, "
    "use short examples, and encourage the learner "
    "to understand the code instead of copying it."
}

وبذلك يصبح المشروع أقرب إلى منتج حقيقي له وظيفة محددة.

يمكن استخدام الفكرة نفسها لبناء:

  • مساعد لتعلم البرمجة.
  • Chatbot لخدمة العملاء.
  • مساعد للدراسة.
  • مساعد للكتابة.
  • Chatbot لموقع إلكتروني.
  • مساعد داخلي لشركة.

17. أخطاء شائعة وحلولها

OpenAI API Key غير موجود

إذا ظهرت رسالة تتعلق بالمصادقة، تحقق من إعداد:

OPENAI_API_KEY

ModuleNotFoundError

إذا لم يجد Python مكتبة OpenAI أو Streamlit:

pip install openai streamlit

Streamlit لا يعمل

جرب:

python -m streamlit run app.py

المساعد لا يتذكر الرسائل السابقة

تأكد من أنك لا تعيد إنشاء:

st.session_state.messages

في كل مرة يتم فيها تشغيل السكربت. يجب تهيئتها فقط إذا لم تكن موجودة.

18. تحسينات يمكنك إضافتها لاحقًا

بعد تشغيل النسخة الأساسية، يمكنك تحويلها إلى مشروع أكثر احترافية.

  • إضافة اسم وشعار للمساعد.
  • السماح للمستخدم باختيار النموذج.
  • إضافة Streaming للإجابة أثناء توليدها.
  • رفع ملفات PDF وطرح أسئلة عنها.
  • إضافة تسجيل دخول.
  • حفظ المحادثات في قاعدة بيانات.
  • إضافة زر حذف المحادثة.
  • دعم لغات متعددة.
  • إنشاء مساعد متخصص في مجال واحد.

19. تحدٍ عملي

جرب بنفسك:

حوّل Chatbot العام الذي بنيناه إلى Python Learning Assistant.

يجب أن يقوم المساعد بـ:

  • شرح Python للمبتدئين.
  • إعطاء أمثلة قصيرة.
  • طرح سؤال صغير بعد الشرح.
  • تصحيح الأخطاء دون إعطاء الحل مباشرة من البداية.

حاول تنفيذ ذلك بتغيير رسالة النظام فقط.

إذا نجحت في ذلك، فقد فهمت فكرة مهمة جدًا: أحيانًا يمكن تحويل تطبيق AI من منتج عام إلى أداة متخصصة بتغيير التعليمات والسياق، دون إعادة بناء التطبيق من الصفر.

20. أسئلة شائعة حول بناء Chatbot باستخدام Python

هل يمكنني بناء Chatbot باستخدام Python؟

نعم. Python من أكثر اللغات استخدامًا في مشاريع الذكاء الاصطناعي، ويمكن دمجها مع Streamlit لإنشاء واجهة محادثة بسهولة.

هل أحتاج إلى معرفة متقدمة في الذكاء الاصطناعي؟

لا تحتاج إلى تدريب نموذج من الصفر لهذا المشروع. لكن من المفيد أن تكون لديك معرفة بأساسيات Python وفهم فكرة API والطلبات والاستجابات.

كيف أجعل Chatbot يتذكر المحادثة؟

في هذا المشروع استخدمنا st.session_state لتخزين الرسائل أثناء جلسة المستخدم، ثم نرسل سياق المحادثة إلى النموذج عند إنشاء الإجابة.

هل يمكن نشر Chatbot على الإنترنت؟

نعم. بعد اختبار التطبيق محليًا يمكن نشر تطبيق Streamlit على خدمة استضافة متوافقة، مع حفظ مفتاح API بطريقة آمنة بدل وضعه مباشرة داخل الكود.

هل Chatbot مجاني تمامًا؟

يمكن أن تكون بعض الأدوات المستخدمة في التطوير مجانية، لكن استخدام API قد تكون له تكلفة حسب النموذج والاستخدام. لذلك تحقق دائمًا من الأسعار والشروط الحالية للخدمة التي تستخدمها.

هل يمكن استخدام نفس المشروع لموقع حقيقي؟

نعم كنقطة بداية، لكن التطبيقات الموجهة للمستخدمين الحقيقيين تحتاج عادةً إلى مزيد من العمل في الأمان وإدارة المستخدمين والتكلفة والتخزين ومراقبة الأخطاء.

21. ماذا تعلمنا في هذا المشروع؟

في المشروع السابق استخدمنا الذكاء الاصطناعي لتنفيذ مهمة واحدة: تحليل كود برمجي.

أما هنا فقد انتقلنا إلى تطبيق يعتمد على سلسلة من الرسائل ويحتاج إلى الاحتفاظ بالسياق.

تعلمنا كيف نربط:

Python — منطق التطبيق
Streamlit — واجهة المحادثة
Session State — تاريخ الرسائل
OpenAI API — الذكاء الاصطناعي
Prompt / Instructions — تحديد سلوك المساعد

الخلاصة

بناء Chatbot بالذكاء الاصطناعي أصبح مشروعًا يمكن للمبرمج المبتدئ فهم مكوناته خطوة بخطوة.

في هذا الدرس لم نبن مجرد مربع يرسل سؤالًا ويحصل على إجابة، بل أنشأنا واجهة محادثة تحفظ الرسائل أثناء الجلسة، وترسل السياق إلى نموذج الذكاء الاصطناعي، وتسمح للمستخدم ببدء محادثة جديدة.

لكن هذا ليس سوى الأساس.

يمكن تطوير المشروع ليقرأ ملفات، أو يتصل بقاعدة بيانات، أو يصبح مساعدًا متخصصًا في التعليم أو البرمجة أو خدمة العملاء.

وهنا تبدأ النقلة المهمة: بدل استخدام أدوات الذكاء الاصطناعي فقط، أنت تبدأ في تعلم كيفية بناء أدوات الذكاء الاصطناعي بنفسك.

المشروع القادم في السلسلة:

كيف تبني Chatbot يقرأ ملفات PDF ويجيب عن الأسئلة باستخدام الذكاء الاصطناعي؟

في المشروع القادم سنجعل المساعد يعمل على معلومات موجودة داخل مستند حقيقي بدل الاعتماد على المحادثة وحدها.

تعليقات

المشاركات الشائعة من هذه المدونة

مخاطر تحميل التطبيقات الخبيثة وكيف تحمي بياناتك؟

الدرس 17: التعلم الموجّه (Supervised Learning) – كيف تتعلم النماذج باستخدام بيانات مُعلّمة؟

الدرس السادس : شرح Functions في Python بأسلوب مبسط مع أمثلة عملية