import streamlit as st from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import FAISS from langchain.prompts import PromptTemplate from langchain.chains import RetrievalQA from langchain.chat_models import ChatOpenAI from langchain.schema import Document import os import pickle from pathlib import Path # تحميل API Key @st.cache_data def load_api_key(): if "OPENROUTER_API_KEY" in os.environ: return os.getenv("OPENROUTER_API_KEY") raise ValueError("API key not found in environment variables") # تحويل النص إلى لغة فصيحة @st.cache_resource def load_translator_model(): return ChatOpenAI( base_url="https://openrouter.ai/api/v1", api_key=load_api_key(), model="mistralai/mistral-7b-instruct", temperature=0.1 ) def translate_to_fusha(text): translator = load_translator_model() prompt = f""" قم بتحويل الجملة التالية من اللهجة العامية إلى اللغة العربية الفصحى مع الحفاظ على المعنى: النص الأصلي: {text} النص المترجم: """ try: response = translator.predict(prompt) return response.strip() except Exception as e: st.error(f"خطأ في التحويل إلى الفصحى: {str(e)}") return text # العودة للنص الأصلي في حالة الخطأ # مسارات تخزين البيانات EMBEDDINGS_PATH = "embeddings_cache.pkl" VECTORDB_PATH = "faiss_vectorstore" # تحميل أو إنشاء الـ embeddings و vectorstore @st.cache_resource def load_or_create_embeddings(): # تحميل البيانات faq_data =[ { "question": "ما هي الخدمات التي تقدمها شركة اتصالات المستقبل؟", "answer": "نقدم خدمات الاتصالات الهاتفية، الإنترنت، والجيل الخامس (5G)، بالإضافة إلى خدمات الترفيه عبر الإنترنت مثل البث المباشر والتلفزيون الذكي." }, { "question": "هل تقدمون خدمة الإنترنت فائق السرعة؟", "answer": "نعم، نقدم خدمات الإنترنت فائق السرعة عبر شبكات الجيل الرابع والجيل الخامس." }, { "question": "ما هي الباقات المتاحة للإنترنت المنزلي؟", "answer": "لدينا عدة باقات تبدأ من 50 ميجابت في الثانية حتى 1 جيجابت في الثانية، مع خيارات لا محدودية للباقات." }, { "question": "هل توفر اتصالات المستقبل خدمات الهاتف المحمول؟", "answer": "نعم، نقدم خدمات الهاتف المحمول مع خيارات مختلفة للباقات الصوتية والبيانات." }, { "question": "هل يوجد تطبيق للهواتف الذكية لإدارة حساباتي؟", "answer": "نعم، لدينا تطبيق مخصص يتيح لك إدارة حسابك، دفع الفواتير، ومتابعة استهلاك البيانات." }, { "question": "ما هي خطط اتصالات المستقبل لتوسيع خدماتها في المناطق الريفية؟", "answer": "نحن نعمل حالياً على توسيع شبكة الجيل الخامس لتشمل المناطق الريفية، بهدف توفير اتصال أسرع وأكثر استقرارًا." }, { "question": "هل تقدمون خدمات خاصة للشركات؟", "answer": "نعم، نقدم خدمات مخصصة للأعمال والشركات مثل حلول الاتصالات الموحدة، الإنترنت المخصص، وحلول الأمن السيبراني." }, { "question": "هل هناك خصومات أو عروض خاصة للطلاب؟", "answer": "نعم، نقدم خصومات خاصة للطلاب على باقات الإنترنت والمكالمات." }, { "question": "هل تقدمون خدمات الدفع عبر الهاتف؟", "answer": "نعم، يمكن للعملاء الدفع باستخدام الهاتف عبر خدمة 'محفظتي' المتاحة عبر التطبيق." }, { "question": "ما هو نظام الفواتير في اتصالات المستقبل؟", "answer": "لدينا نظام فواتير شهري مرن، حيث يمكن للعملاء اختيار الدفع المسبق أو الفواتير الشهرية." }, { "question": "هل تقدمون خدمات الإنترنت للمنزل والأعمال؟", "answer": "نعم، نقدم خدمات الإنترنت بسرعات عالية للأفراد والشركات مع دعم فني متميز." }, { "question": "ما هي الميزات الخاصة لباقات الجيل الخامس التي تقدمها الشركة؟", "answer": "توفر باقات الجيل الخامس سرعة إنترنت غير محدودة تقريباً، مع تحسينات كبيرة في الاتصال بالإنترنت للأجهزة المتعددة." }, { "question": "هل يمكن للعملاء تحويل رصيدهم بين الأرقام؟", "answer": "نعم، توفر اتصالات المستقبل خدمة تحويل الرصيد بين الأرقام عبر التطبيق أو الرسائل النصية." }, { "question": "هل توجد خدمات إضافية مثل المكالمات الدولية؟", "answer": "نعم، لدينا باقات للمكالمات الدولية بأسعار تنافسية لعدة وجهات حول العالم." }, { "question": "كيف يمكنني الاشتراك في أحد باقات الإنترنت؟", "answer": "يمكنك الاشتراك عبر التطبيق أو من خلال زيارة أحد فروعنا أو عبر موقعنا الإلكتروني." }, { "question": "هل يوجد دعم للعملاء على مدار الساعة؟", "answer": "نعم، نحن نقدم دعمًا على مدار الساعة عبر الهاتف، الدردشة المباشرة، والبريد الإلكتروني." }, { "question": "هل تقدمون خدمة 'الواي فاي' في الأماكن العامة؟", "answer": "نعم، لدينا خدمة واي فاي مجانية في العديد من الأماكن العامة مثل المولات والمطارات." }, { "question": "كيف يمكنني إلغاء خدمة اشتراك تلقائي؟", "answer": "يمكنك إلغاء الاشتراك من خلال التطبيق أو بالاتصال بخدمة العملاء." }, { "question": "ما هي خطة 'اتصالات المستقبل' لتقديم خدمات الإنترنت عبر الأقمار الصناعية؟", "answer": "نحن نعمل على تطوير خدمة الإنترنت عبر الأقمار الصناعية لتوفير الاتصال في المناطق التي يصعب الوصول إليها." }, { "question": "هل توجد خيارات مختلفة لتخصيص باقات البيانات؟", "answer": "نعم، يمكنك تخصيص باقات البيانات حسب احتياجاتك، سواء للاستخدام الشخصي أو للأعمال." }, { "question": "هل تقدمون خدمات الترفيه مثل الألعاب عبر الإنترنت؟", "answer": "نعم، نقدم مجموعة واسعة من الألعاب عبر الإنترنت بالتعاون مع شركات ترفيه عالمية." }, { "question": "هل تقدمون خدمات التلفزيون الرقمي؟", "answer": "نعم، نقدم خدمة 'اتصالات المستقبل' للبث المباشر والمحتوى الرقمي مع قنوات محلية وعالمية." }, { "question": "هل توفرون خيارات مرنة للدفع؟", "answer": "نعم، نحن نوفر عدة خيارات للدفع، بما في ذلك الدفع عبر الإنترنت، الدفع عبر الهاتف المحمول، وطرق الدفع التقليدية." }, { "question": "كيف يمكنني التحقق من رصيدي وبيانات استهلاكي؟", "answer": "يمكنك التحقق من رصيدك واستهلاكك عبر تطبيق الهاتف المحمول أو عبر موقعنا الإلكتروني." }, { "question": "هل تقدمون خدمات خاصة لذوي الاحتياجات الخاصة؟", "answer": "نعم، نقدم حلولًا خاصة لذوي الاحتياجات الخاصة مثل المترجمين الفوريين وتطبيقات قراءة الشاشة." }, { "question": "ما هي الحلول التي تقدمها اتصالات المستقبل للأمن السيبراني؟", "answer": "نحن نقدم حلولاً متكاملة لحماية البيانات والخصوصية للشركات والأفراد، بما في ذلك خدمات المراقبة والتشفير." }, { "question": "هل تقدمون برامج شراكة للمؤسسات؟", "answer": "نعم، لدينا برامج شراكة للأعمال التجارية تشمل عروضًا مخصصة وخدمات متميزة." }, { "question": "هل تقدمون خدمات الإنترنت المحمول لمناطق غير مغطاة؟", "answer": "نعم، نعمل على تطوير حلول لتوصيل الإنترنت المحمول في المناطق النائية عبر تقنيات جديدة." }, { "question": "هل تقدمون باقات مشتركة للعائلة؟", "answer": "نعم، لدينا باقات عائلية توفر مميزات مشتركة للإنترنت والمكالمات بأسعار منافسة." }, { "question": "هل تقدمون عروضًا للعملاء الجدد؟", "answer": "نعم، نقدم عروضًا خاصة للعملاء الجدد تشمل خصومات على أول فاتورة أو ترقية مجانية للباقات." }, { "question": "ما هي أبرز مميزات شبكة الجيل الخامس في اتصالات المستقبل؟", "answer": "توفر الشبكة سرعة عالية جداً، زمن استجابة منخفض، ودعماً أكبر للأجهزة المتصلة." }, { "question": "هل يمكنني ترقية خطتي إلى باقة أكبر في أي وقت؟", "answer": "نعم، يمكنك ترقية خطتك في أي وقت عبر التطبيق أو من خلال خدمة العملاء." }, { "question": "هل تقدمون خدمات 'الواي فاي' في الفنادق والمطاعم؟", "answer": "نعم، نقدم خدمات واي فاي مدفوعة أو مجانية في العديد من الفنادق والمطاعم." }, { "question": "هل يمكنني إلغاء اشتراكي في الخدمات قبل نهاية الفترة؟", "answer": "نعم، يمكنك إلغاء الاشتراك في الخدمات وفقًا لشروط وأحكام محددة عبر خدمة العملاء." }, { "question": "هل تقدمون خدمات الدعم الفني للمشاكل التقنية؟", "answer": "نعم، لدينا فريق دعم فني متخصص يقدم المساعدة في حل المشاكل التقنية المتعلقة بالشبكة أو الأجهزة." }, { "question": "هل توفرون حلولاً خاصة للمؤسسات الحكومية؟", "answer": "نعم، نقدم حلولاً متخصصة للمؤسسات الحكومية تشمل الأمن السيبراني والبنية التحتية للاتصالات." }, { "question": "هل تقدمون خدمات إضافية مثل التخزين السحابي؟", "answer": "نعم، نقدم خدمات تخزين سحابي للعملاء لتخزين البيانات والملفات بشكل آمن." }, { "question": "كيف يمكنني استعادة الرقم أو الحساب بعد فقده؟", "answer": "يمكنك استعادة الرقم أو الحساب عن طريق التحقق من هويتك عبر خدمة العملاء أو التطبيق." }, { "question": "هل تقدمون خصومات للأعمال التجارية؟", "answer": "نعم، نقدم خصومات وخدمات مخصصة للأعمال التجارية، بما في ذلك حلول الاتصال السحابية." }, { "question": "هل يمكنني إضافة أفراد عائلتي إلى خطتي؟", "answer": "نعم، يمكنك إضافة أفراد عائلتك إلى خطتك واختيار باقات مشتركة." }, { "question": "هل تقدمون خططًا خاصة لرجال الأعمال؟", "answer": "نعم، نقدم خططًا مخصصة لرجال الأعمال تشمل بيانات غير محدودة وخدمات متميزة." }, { "question": "ما هي مزايا الاشتراك في خدمة الإنترنت عبر الألياف الضوئية؟", "answer": "خدمة الإنترنت عبر الألياف الضوئية توفر سرعة عالية جداً وثباتاً في الاتصال." }, { "question": "هل يوجد خصومات للمتقاعدين؟", "answer": "نعم، نقدم خصومات خاصة للمتقاعدين على بعض الخدمات." }, { "question": "هل تقدمون خدمات مشتركين دوليين؟", "answer": "نعم، نقدم خدمات مخصصة للمشتركين الدوليين مثل المكالمات الدولية بأسعار مخفضة." }, { "question": "هل يمكنني تغيير باقتي أثناء السفر خارج البلاد؟", "answer": "نعم، يمكنك تغيير باقتك بسهولة عبر التطبيق لتناسب احتياجاتك أثناء السفر." }, { "question": "هل يوجد خطط مخصصة للأشخاص الذين يستخدمون الإنترنت بشكل كبير؟", "answer": "نعم، نقدم خطط مخصصة للعملاء الذين يستخدمون الإنترنت بشكل كبير تشمل بيانات غير محدودة." }, { "question": "هل تقدمون خدمات لأصحاب المشاريع الصغيرة؟", "answer": "نعم، نقدم حلولاً مخصصة لأصحاب المشاريع الصغيرة تشمل الإنترنت عالي السرعة وخدمات الاتصالات." }, { "question": "هل تقدمون حلول ترفيهية لمستخدمي الإنترنت المنزلي؟", "answer": "نعم، نقدم حلولاً ترفيهية مثل اشتراكات في منصات بث الفيديو والألعاب عبر الإنترنت." }, { "question": "كيف يمكنني تحديث بياناتي الشخصية؟", "answer": "يمكنك تحديث بياناتك الشخصية بسهولة عبر التطبيق أو عبر زيارة أحد فروعنا." }, { "question": "هل تقدمون ضمانًا لجودة الشبكة؟", "answer": "نعم، نقدم ضمانًا لجودة الشبكة مع التعويضات في حال حدوث انقطاعات طويلة." }, { "question": "متى تم إنشاء شركة اتصالات المستقبل؟", "answer": "تم إنشاء شركة 'اتصالات المستقبل' في عام 2025 في مصر على يد مجموعة من الخبراء." }, { "question": "ما هي أسعار باقات الإنترنت المنزلي الأساسية؟", "answer": "تبدأ أسعار باقات الإنترنت المنزلي من 250 جنيهًا شهريًا للباقة 50 ميجابت/ثانية، وتصل إلى 750 جنيهًا للباقة 1 جيجابت/ثانية." }, { "question": "كم تبلغ تكلفة باقات الجيل الخامس للهواتف المحمولة؟", "answer": "تبدأ باقات الجيل الخامس من 150 جنيهًا (10 جيجابايت) وتصل إلى 500 جنيهًا (باقة غير محدودة بسرعات فائقة)." }, { "question": "ما هي أسعار باقات الإنترنت للأعمال؟", "answer": "تبدأ باقات الإنترنت للأعمال من 500 جنيه شهريًا (100 ميجابت/ثانية) وتصل إلى 2000 جنيه (1 جيجابت/ثانية مع خوادم مخصصة)." }, { "question": "هل تختلف أسعار الباقات حسب المنطقة؟", "answer": "نعم، قد تختلف الأسعار قليلاً حسب المنطقة بسبب اختلاف البنية التحتية، مع وجود خصومات تصل إلى 20% في بعض المناطق النائية." }, { "question": "ما هي أسعار الباقات العائلية؟", "answer": "الباقات العائلية تبدأ من 600 جنيه (4 خطوط بإنترنت مشترك 200 جيجابايت) مع خصم 15% على الخطوط الإضافية." }, { "question": "كم سعر ترقية الباقة إلى سرعة أعلى؟", "answer": "ترقية الباقة تكلف 50 جنيهًا للترقية بين المستويات، مع وجود عرض ترقية مجانية كل 6 أشهر للعملاء الدائمين." }, { "question": "ما هي أسعار باقات البيانات الإضافية؟", "answer": "حزم البيانات الإضافية تبدأ من 20 جنيهًا (2 جيجابايت) وتصل إلى 100 جنيه (20 جيجابايت) صالحة لمدة 30 يومًا." }, { "question": "هل هناك عروض خاصة على أسعار الباقات الجديدة؟", "answer": "نعم، حالياً يوجد خصم 25% على أول 3 أشهر للباقات الجديدة، بالإضافة إلى شهر مجاني عند الاشتراك السنوي." }, { "question": "ما هي سرعات باقات الإنترنت المنزلي المتاحة؟", "answer": "السرعات المتاحة: 50، 100، 200، 500 ميجابت/ثانية، و1 جيجابت/ثانية مع خيارات محدودة وغير محدودة." }, { "question": "ما هي أحجام البيانات في باقات الهاتف المحمول؟", "answer": "أحجام البيانات: 5، 10، 20، 50 جيجابايت للباقات الشهرية، مع وجود باقات يومية وأسبوعية أيضًا." }, { "question": "ما الفرق بين باقات السرعة الثابتة والمتغيرة؟", "answer": "الباقات الثابتة تحافظ على السرعة المعلنة طوال الوقت بسعر أعلى قليلاً، بينما المتغيرة قد تقل السرعة في أوقات الذروة بخصم 30% على السعر." }, { "question": "ما هي باقة الإنترنت الأكثر مبيعاً؟", "answer": "الباقة 200 ميجابت/ثانية بسعر 400 جنيه شهرياً هي الأكثر طلباً لأنها توازن بين السعر والسرعة المناسبة لمعظم الأسر." }, { "question": "هل توجد باقات إنترنت ليلية بأسعار مخفضة؟", "answer": "نعم، لدينا باقة ليلية غير محدودة من الساعة 12 مساءً حتى 6 صباحًا بسعر 100 جنيه فقط شهريًا." }, { "question": "ما هي مدة صلاحية باقات البيانات؟", "answer": "معظم الباقات شهرية، لكن لدينا باقات أسبوعية (صلاحية 7 أيام) ويومية (24 ساعة) بأسعار تبدأ من 10 جنيهات." }, { "question": "كم تبلغ سرعة باقة 500 ميجابت/ثانية الفعلية؟", "answer": "سرعة الباقة 500 ميجابت/ثانية تصل فعلياً إلى 480-490 ميجابت/ثانية في الظروف المثالية، مع ضمان عدم انخفاضها عن 400 ميجابت/ثانية." }, { "question": "ما هي الباقات الموصى بها للألعاب عبر الإنترنت؟", "answer": "نوصي بباقة 1 جيجابت/ثانية للألعاب (زمن استجابة أقل من 10ms) أو باقة 500 ميجابت/ثانية مع خوادم ألعاب مخصصة." }, { "question": "هل توجد باقات إنترنت للطلاب بأسعار خاصة؟", "answer": "نعم، باقات الطلاب تبدأ من 150 جنيه (100 ميجابت/ثانية) مع اشتراط تقديم إثبات دراسة صالح." }, { "question": "ما هي تكلفة إعدادات الإنترنت الأولية؟", "answer": "رسوم الإعداد 200 جنيه لمرة واحدة، لكننا نقدمها مجاناً حالياً مع أي باقة سنوية." }, { "question": "كم عدد الأجهزة التي يمكن توصيلها بباقة 1 جيجابت؟", "answer": "باقة 1 جيجابت/ثانية تدعم حتى 50 جهازاً متصلاً في نفس الوقت دون تأثر الأداء." }, { "question": "ما هي باقات الإنترنت المؤقتة للزوار؟", "answer": "لدينا باقات زوار لمدة 7 أيام (100 جيجابايت) بسعر 150 جنيه، أو 30 يومًا (300 جيجابايت) بـ 300 جنيه." }, { "question": "هل تختلف أسعار الباقات بين الفروع والموقع الإلكتروني؟", "answer": "الأسعار واحدة، لكن قد تجد عروضاً حصرية على الموقع الإلكتروني أو في بعض الفروع حسب المنطقة." }, { "question": "ما هي باقات الإنترنت للشركات الصغيرة؟", "answer": "باقات الشركات الصغيرة تبدأ من 300 جيجابايت شهرياً بـ 600 جنيه مع عنوان IP ثابت وخدمة دعم متميزة." }, { "question": "هل توجد باقات إنترنت بدون حدود استهلاك؟", "answer": "نعم، الباقات غير المحدودة تبدأ من 600 جنيه شهرياً (200 ميجابت/ثانية) مع استهلاك عادل يصل إلى 1 تيرابايت." } ] # تحقق من وجود تخزين مسبق if Path(EMBEDDINGS_PATH).exists() and Path(VECTORDB_PATH).exists(): try: with open(EMBEDDINGS_PATH, "rb") as f: embeddings = pickle.load(f) vectorstore = FAISS.load_local(VECTORDB_PATH, embeddings) return vectorstore.as_retriever() except Exception as e: st.warning(f"خطأ في تحميل البيانات المحفوظة: {str(e)}. سيتم إنشاء بيانات جديدة.") # إنشاء بيانات جديدة إذا لم توجد documents = [Document(page_content=f"سؤال: {faq['question']} جواب: {faq['answer']}") for faq in faq_data] embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/paraphrase-multilingual-mpnet-base-v2") # حفظ الـ embeddings للاستخدام المستقبلي with open(EMBEDDINGS_PATH, "wb") as f: pickle.dump(embeddings, f) # إنشاء وحفظ vectorstore vectorstore = FAISS.from_documents(documents, embeddings) vectorstore.save_local(VECTORDB_PATH) return vectorstore.as_retriever() # 3. LLM model @st.cache_resource def load_model(): return ChatOpenAI( base_url="https://openrouter.ai/api/v1", api_key=load_api_key(), model="mistralai/mistral-7b-instruct", temperature=0.3 ) # 4. Prompt Engineering template = """ أنت مساعد ذكي متخصص في خدمات شركة "اتصالات المستقبل". يجب عليك الالتزام الصارم بالقواعد التالية: 1. استخدم فقط المعلومات المقدمة في قسم 'السياق' أدناه للإجابة. 2. إذا لم تجد الإجابة في السياق، قل: "عذراً، لا يمكنني الإجابة على هذا السؤال حالياً. يرجى الاتصال بخدمة العملاء على الرقم 00000 للمساعدة." 3. حافظ على نفس لغة السؤال (عربية/إنجليزية) في ردك. السياق: {context} السؤال: {question} الإجابة: """ prompt = PromptTemplate( input_variables=["context", "question"], template=template, ) # 5. Rag @st.cache_resource def create_qa_chain(_llm, _retriever): return RetrievalQA.from_chain_type( llm=_llm, retriever=_retriever, chain_type="stuff", chain_type_kwargs={"prompt": prompt}, return_source_documents=False, ) # UI def main(): # أسلوب CSS مخصص للدردشة st.markdown(""" """, unsafe_allow_html=True) # رأس الصفحة st.markdown('