-
المساهمات
0 -
تاريخ الانضمام
-
تاريخ آخر زيارة
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Taha Alselwi
-
سنشرح في هذا المقال طريقة بناء أداة ذكية للبحث داخل محادثات واتساب الخاصة بنا بعد تخزينها على هيئة ملفات PDF، تساعدنا هذه الأداة على البحث في محادثاتنا الشخصية و الوصول إلى معلومات محددة فيها بسرعة وكفاءة. سنوضح خطوة بخطوة طريقة استخراج النصوص من المحادثات وتحليلها، ثم تقسيمها إلى أجزاء صغيرة وتحويلها إلى تمثيلات رقمية Embeddings باستخدام نماذج ذكاء اصطناعي متقدمة مفتوحة المصدر لمعالجة اللغة الطبيعية يمكنها فهم السياق اللغوي حيث سنعتمد في أداتنا على نموذج BERT الذي يوفر إصدارات تدعم اللغة العربية لفهم وتحليل النصوص، وعلى نموذج Qwen لتوليد النصوص والردود التفاعلية، كما سنعتمد على قاعدة بيانات FAISS لنخزن التمثيلات الرقيمة لنصوص المحادثات وتمكين البحث السريع فيها، ونستخدم تقنية التوليد المعزز بالاسترجاع RAG للمساعدة في العثور على المعلومات المهمة في هذه المحادثات كالبحث عن مواعيد الاجتماعات والحجوزات، وتحديثات المشاريع بسرعة دون البحث المطول في سجل المحادثات. أخيرًا، سنوضح كيفية إنشاء واجهة تفاعلية سهلة الاستخدام تتيح لنا البحث في المحادثات والتفاعل معها بأمان، دون الحاجة إلى رفع بياناته إلى أي خوادم خارجية، مما يضمن الحفاظ على الخصوصية. متطلبات العمل أهم المتطلبات اللازمة لتنفيذ هذا المقال بنجاح: الحصول على مفتاح الوصول Token لاستخدام واجهة برمجة التطبيقات API الخاصة بمنصة Hugging Face معرفة أساسية بلغة البرمجة بايثون تثبيت Python على الجهاز مع محرر أكواد مناسب مثل Jupyter Notebook أو Visual Studio Code خطوات التطبيق العملي لنستعرض بالتفصيل خطوات التطبيق العملي لأداتنا الذكية للتفاعل مع رسائل واتساب. الخطوة 1: حفظ محادثات واتساب كملف PDF في البداية، نحتاج إلى تصدير محادثات واتساب الخاصة بنا وحفظها بصيغة PDF لتسهيل تحليلها لاحقًا. يتيح تطبيق WhatsApp ميزة تصدير الدردشة، والتي تمكننا من حفظ المحادثات كنصوص. بعد نجاح عملية التصدير، سنحويل المحادثات إلى تنسيق PDF لاستخدامها في التطبيق. لتصدير المحادثة، نفتح المحادثة المطلوبة، ثم ننقر على قائمة الخيارات أعلى يسار الدردشة ونختار المزيد، ثم نقل الدردشة من القائمة، ونحدد خيار -بدون وسائط- لحفظ النصوص فقط. بعد ذلك، يمكن فتح الملف الناتج بصيغة txt في أي تطبيق محرر نصوص مثل Microsoft Word أو Google Docs وتحويله إلى تنسيق pdf. الخطوة 2: استخراج النصوص من ملف PDF بعد حفظ محادثات واتساب بصيغة PDF، نحتاج إلى استخراج النصوص منها لمعالجتها وتحليلها. يمكننا تحقيق ذلك باستخدام مكتبة PyMuPDF مع LangChain، حيث تتيح لنا استخراج النصوص بسهولة من جميع صفحات ملف PDF على النحو التالي: # تثبيت المكتبات اللازمة !pip install langchain_community !pip install pymupdf # لتحميل الملف PyMuPDFLoader استيراد from langchain.document_loaders import PyMuPDFLoader # PDF تحميل ملف loader = PyMuPDFLoader("اسم الملف.pdf") # استخراج محتوى الملف pdf_text = loader.load() # دمج النصوص المستخرجة من جميع الصفحات في متغير واحد text = " ".join(page.page_content for page in pdf_text) يعمل الكود أعلاه على تثبيت المكتبات اللازمة وهي المكتبة langchain_community و pymupdf ثم يستخدم الصنف PyMuPDFLoader لتحميل ملف pdf واستخراج محتوياته، حيث يجمع النصوص من جميع صفحات الملف ويخزنها في المتغير text لاستخدامه لاحقًا في معالجة النصوص والبحث فيها. الخطوة 3: تقسيم النصوص إلى أجزاء صغيرة بعد استخراج النصوص من ملف pdf، سنحتاج إلى تقسيمها إلى أجزاء أصغر لتحسين كفاءة معالجتها وتحليلها. يساعد هذا التقسيم على تحسين أداء البحث والاسترجاع، كما يسهل على نماذج الذكاء الاصطناعي فهم البيانات بدقة أكبر. سنستخدم أداة CharacterTextSplitter من LangChain لتقسيم النص إلى مقاطع صغيرة بناءً على معايير مثل حجم الجزء، والفاصل بين الأجزاء، ومدى التداخل بينها. # استيراد أداة تقسيم النصوص from langchain.text_splitter import CharacterTextSplitter # إعداد معلمات تقسيم النصوص text_splitter = CharacterTextSplitter( separator="\n", chunk_size=500, chunk_overlap=100, length_function=len ) # تقسيم النص إلى أجزاء chunks = text_splitter.split_text(text) # طباعة عدد الأجزاء print(f"عدد الأجزاء: {len(chunks)}") يقسم الكود السابق النص text لأجزاء صغيرة باستخدام الصنف CharacterTextSplitter من LangChain، حيث حددنا هنا الفاصل separator الذي يحدد أماكن تقسيم النص ليكون فاصل الأسطر n\، مع ضبط الحد الأقصى لحجم كل جزء من النص أو عدد الأحرف في كل مقطع chunk_size ليكون 500 وحددنا عدد الأحرف المتداخلة بين الأجزاء chunk_overlap بقيمة 100 لضمان الاحتفاظ بالسياق، واستخدمنا الدالة length_function لحساب طول كل جزء، ثم طباعة عدد الأجزاء الناتجة. الخطوة 4: تحويل النصوص لتمثيلات رقمية Embeddings بعد تقسيم النصوص إلى أجزاء صغيرة، نحتاج إلى تحويلها إلى تضمينات أو تمثيلات رقمية Embeddings لنساعد النموذج على فهم السياق والعلاقات بين الكلمات والجمل. تلعب هذه التمثيلات الرقمية Embeddings دورًا أساسيًا في تحسين البحث داخل النصوص وتسمح لنا باسترجاع المعلومات الأكثر صلة بالاستفسارات. سنستخدم في هذه الخطوة مكتبة Sentence-Transformers لتحويل الأجزاء النصية إلى تمثيلات رقمية Embeddings. وسنختار نموذج AraBERT، لأنه مُدّرب خصيصًا على اللغة العربية ويوفّر تمثيلات دقيقة للنصوص العربية ويهدف إلى تحسين أداء المهام اللغوية المختلفة باللغة العربية مثل تصنيف النصوص، وتحليل المشاعر، والترجمة الآلية، والتعرف على الكيانات المُسماة NER. ولكونه مدُرّبًا باستخدام مجموعة ضخمة من النصوص العربية، فهو قادر على فهم التراكيب النحوية والدلالية الخاصة بالعربية بكفاءة. # SentenceTransformer استيراد from sentence_transformers import SentenceTransformer # تحميل نموذج يدعم العربية model = SentenceTransformer('aubmindlab/bert-base-arabertv02') # تحويل الأجزاء النصية إلى تمثيلات رقمية embeddings = model.encode(chunks, convert_to_tensor=True) يعمل الكود على تحميل نموذج BERT الداعم للغة العربية، ثم يحوّل قائمة chunks التي تحتوي على الأجزاء النصية إلى تمثيلات رقمية Embedding Vectors مع تمكين تحويل النتائج إلى موترات أو تنسورات Tensors لتحسين الأداء في العمليات الحسابية، فالتعلمية convert_to_tensor=True تجعل الخرج كائنًا من نوع Tensor بدلًا من مصفوفة NumPy، مما يسهل التعامل معه عند استخدام مكتبات مثل PyTorch. الخطوة 5: بناء قاعدة بيانات للبحث السريع باستخدام FAISS بعد تحويل النصوص إلى تمثيلات رقمية Embeddings، نحتاج إلى تخزينها بطريقة تتيح البحث السريع واسترجاع النصوص الأكثر تطابقًا مع استفسارات المستخدم. لتحقيق ذلك، سنستخدم مكتبة FAISS وهي اختصار لعبارة Facebook AI Similarity Search والتي تعد مكتبة قوية مفتوحة المصدر طورتها ميتا لتسهيل البحث السريع عن العناصر الأكثر تشابهًا داخل مجموعات بيانات ضخمة من المتجهات vectors. # FAISS تثبيت مكتبة pip install faiss-cpu # استيراد المكتبات اللازمة import faiss import numpy as np # تحديد أبعاد التمثيلات الرقمية embedding_dim = embeddings.shape[1] # إنشاء قاعدة البيانات index = faiss.IndexFlatL2(embedding_dim) # إضافة التمثيلات الرقمية إلى قاعدة البيانات index.add(np.array(embeddings.cpu())) في هذا الكود ننشئ قاعدة بيانات باستخدام مكتبة FAISS، بهدف تنفيذ عمليات بحث فعّالة عن التشابه بين التمثيلات الرقمية، فبعد تثبيت المكتبة نستوردها إلى جانب استيراد المكتبة numpy. بعد ذلك، نحدد عدد أبعاد التمثيلات الرقمية embedding_dim الناتجة من النموذج وننشئ من خلال التعليمة (faiss.IndexFlatL2(embedding_dimفهرسًا أو قاعدة بيانات تستخدم مربع المسافة الإقليدية Squared Euclidean Distance لمقارنة التمثيلات والعثور على النصوص الأكثر تشابهًا ثم نضيف التمثيلات embeddings إلى قاعدة البيانات مع تحويلها لصيغة مصفوفة NumPy لاستخدامها في البحث السريع عن النصوص. الخطوة 6: البحث عن المعلومات باستخدام RAG بعد إنشاء قاعدة البيانات باستخدام FAISS، يمكننا الآن البحث داخل محادثات WhatsApp بطريقة ذكية باستخدام التوليد المعزز بالاسترجاع RAG. تساعد هذه التقنية على استرجاع النصوص الأكثر صلة بالاستفسار، مما يؤدي إلى توليد إجابات دقيقة بناءً على البيانات المخزنة. # دالة البحث عن المعلومات داخل قاعدة البيانات def search_query(query, top_k=3): # تحويل الاستفسار إلى تمثيلات رقمية query_embedding = model.encode([query], convert_to_tensor=True).cpu().numpy() # البحث عن أقرب النصوص في قاعدة البيانات distances, indices = index.search(query_embedding, top_k) # استرجاع النصوص الأكثر صلة بالاستفسار results = [chunks[i] for i in indices[0]] return results # مثال على البحث داخل المحادثات query = "السؤال ؟" related_texts = search_query(query) # طباعة النتائج for text in related_texts: print(text) يبحث هذا الكود عن النصوص الأكثر صلة بالاستفسار داخل قاعدة البيانات حيث يحول في البداية الاستفسار query إلى تمثيل رقمي. بعد ذلك، يبحث عن أقرب النصوص المخزنة في قاعدة البيانات بناءً على هذا التمثيل الرقمي. وأخيرًا، يعرض لنا أفضل ثلاث نتائج تتطابق مع الاستفسار وبهذا يمكننا العثور على المعلومات المطلوبة بسرعة من مجموعة كبيرة من النصوص. الخطوة 7: توليد الإجابة باستخدام نموذج الذكاء الاصطناعي التوليدي بعد استرجاع النصوص ذات الصلة من قاعدة البيانات، يمكننا الآن استخدام نموذج ذكاء اصطناعي توليدي لإنشاء إجابة دقيقة بناءً على الاستفسار والمعلومات المسترجعة من قاعدة البيانات. سنعتمد في هذه الخطوة على نموذج Qwen. Qwen هو سلسلة من نماذج اللغات الكبيرة LLMs التي طورتها Alibaba Cloud، وتحديدًا من قبل فريق Alibaba DAMO Academy. يعد Qwen من النماذج مفتوحة المصدر، وتم إصداره بعدة أحجام مختلفة لتناسب احتياجات متعددة، بدءًا من النماذج الصغيرة التي يمكن تشغيلها على الأجهزة الشخصية، وصولًا إلى النماذج الضخمة المناسبة للخوادم والسحابة. import requests # Hugging Face رابط واجهة النموذج على API_URL = "https://api-inference.huggingface.co/models/Qwen/Qwen2.5-Coder-32B-Instruct" # Hugging Face نستبدل المفتاح التالي بمفتاح من headers = {"Authorization": "Bearer hf_XXXXXXXXXXXXXXXXXXXX"} # إعداد الموجه prompt = f""" [SYSTEM]: أنت نموذج ذكاء اصطناعي متخصص في اللغة العربية. سيتم إعطاؤك أسئلة مع معلومات ذات صلة. مهمتك هي الإجابة عن الأسئلة بناءً على المعلومات المعطاة فقط. [USER]: السؤال: {query} المعلومات المعطاة: {related_texts} [ASSISTANT]: """ # دالة لإرسال الطلب إلى النموذج واستقبال الرد def query(payload): response = requests.post(API_URL, headers=headers, json=payload) return response.json() # استدعاء الدالة للحصول على الاستجابة من النموذج output = query({"inputs": prompt}) # استخراج النص الناتج من الرد generated_answer = output[0]['generated_text'].split("[ASSISTANT]:")[1] # طباعة النتائج print(generated_answer) يتواصل هذا الكود مع نموذج Qwen عبر الواجهة البرمجية Hugging Face API ويرسل موجه prompt للنموذج ليطلب منه الإجابة بناءً على المعلومات المعطاة فقط وكما نلاحظ يتضمن الموجه الأقسام [SYSTEM]و [USER] و [ASSISTANT] لتحديد أدوار المحادثة، بعد ذلك ينشئ دالةquery لإرسال الطلب إلى النموذج وإرجاع نص يتضمن الإجابة المستندة إلى المعلومات المتوفرة فقط، دون إضافة أي بيانات خارجية وطباعتها. ملاحظة: تقسم المحادثة مع نموذج الذكاء الاصطناعي إلى ثلاثة أقسام وهي: [SYSTEM] لتحديد التعليمات والنظام، و [USER]لعرض السؤال والمعلومات المقدمة للنموذج، و [ASSISTANT]لتحديد المكان الذي يبدأ فيه النموذج بتوليد إجابته. وهذا يساعد على تنظيم الحوار وتوجيه النموذج بحيث يفصل بين السؤال والمعلومات والإجابة، مما يضمن أن يقتصر الرد على الجزء المطلوب دون الخلط مع باقي النص. بناء أداة للتفاعل مع رسائل WhatsApp بعد أن تعرفنا على الخطوات الأساسية للتفاعل مع نماذج الذكاء الاصطناعي،سنعمل الآن على تطوير أداة تفاعلية تعتمد على هذه النماذج لتحليل محادثات WhatsApp المخزنة في ملفات PDF، مما يتيح لنا البحث داخل محادثاتنا والحصول على إجابات ذكية بناءً على استفساراتنا. نبدأ بتحميل ملف PDF الخاص بالمحادثات، ثم استخراج النصوص باستخدام PyMuPDF، وتقسيمها إلى مقاطع صغيرة بواسطة CharacterTextSplitter لضمان تحليل دقيق. بعد ذلك، تحول النصوص إلى تمثيلات رقمية Embeddings باستخدام نموذج AraBERT المخصص للغة العربية، ثم تخزنها في قاعدة بيانات FAISS للبحث السريع عن النصوص ذات الصلة. عند إدخال استفسار، تعمل الأداة على البحث عن المقاطع الأكثر صلة بالاستفسار، داخل قاعدة البيانات، ثم ترسلها إلى نموذج Qwen لإنشاء إجابة ذكية تعتمد على البيانات المخزنة، ثم تعرضها عبر واجهة مستخدم تفاعلية مبنية باستخدام مكتبة بايثون تسمى Gradio وهي مكتبة مفتوحة المصدر لإنشاء واجهات مستخدم تفاعلية لنماذج التعلم الآلي والذكاء الاصطناعي تتيح لنا تصميم واجهات سهلة الاستخدام عبر متصفح الويب وتسهل علينا استفساراتنا والحصول على نتائج النموذج بشكل مباشر، دون الحاجة لكتابة أكواد معقدة. فيما يلي الكود الكامل لبناء واجهة مستخدم تفاعلية مبنية باستخدام مكتبة Gradio تسمح لنا بتحميل ملف pdf المتضمن لمحادثاتنا على الوتساب ومعالجته بنماذج الذكاء الاصطناعي والتفاعل معه وعرض النتيجة. import requests import faiss import numpy as np import gradio as gr from sentence_transformers import SentenceTransformer from langchain.document_loaders import PyMuPDFLoader from langchain.text_splitter import CharacterTextSplitter # تحميل نموذج تحويل النصوص إلى تمثيلات رقمية model = SentenceTransformer('aubmindlab/bert-base-arabertv02') # نموذج الذكاء الاصطناعي التوليدي API_URL = "https://api-inference.huggingface.co/models/Qwen/Qwen2.5-Coder-32B-Instruct" # Hugging Face نستبدل المفتاح التالي بمفتاح من headers = {"Authorization": "Bearer hf_XXXXXXXXXXXXXXXXXXXX"} # دالة معالجة الملف وتحويله إلى تمثيلات رقمية def process_pdf(pdf_file): loader = PyMuPDFLoader(pdf_file.name) pages = loader.load() text = "\n".join([page.page_content for page in pages]) # تقسيم النص إلى أجزاء صغيرة text_splitter = CharacterTextSplitter(separator="\n", chunk_size=500, chunk_overlap=100, length_function=len) chunks = text_splitter.split_text(text) # تحويل الأجزاء إلى تمثيلات رقمية embeddings = model.encode(chunks, convert_to_tensor=True).cpu().numpy() # إنشاء قاعدة بيانات embedding_dim = embeddings.shape[1] index = faiss.IndexFlatL2(embedding_dim) index.add(embeddings) return index, chunks # دالة البحث داخل المحادثات def search_query(query, index, documents, top_k=3): query_embedding = model.encode([query], convert_to_tensor=True).cpu().numpy() distances, indices = index.search(query_embedding, top_k) results = [documents[i] for i in indices[0]] return results # دالة استدعاء النموذج التوليدي def generate_answer(pdf_file, query): index, documents = process_pdf(pdf_file) related_texts = search_query(query, index, documents) prompt = f""" [SYSTEM]: أنت نموذج ذكاء اصطناعي متخصص في اللغة العربية. سيتم إعطاؤك أسئلة مع معلومات ذات صلة. مهمتك هي الإجابة عن الأسئلة بناءً على المعلومات المعطاة فقط. [USER]: السؤال: {query} المعلومات المعطاة: {related_texts} [ASSISTANT]: """ response = requests.post(API_URL, headers=headers, json={"inputs": prompt}) output = response.json() return output[0]['generated_text'].split("[ASSISTANT]:")[1] # Gradio إنشاء واجهة تفاعلية باستخدام with gr.Blocks() as app: gr.Markdown("# 📂 WhatsApp أداة للتفاعل مع محادثات 🔍") pdf_input = gr.File(label="📄 PDF تحميل ملف المحادثة بصيغة ") user_input = gr.Textbox(label="📝 أدخل سؤالك هنا") search_button = gr.Button("🔎 بحث وتحليل") output_box = gr.Textbox(label="🤖 الإجابة:") search_button.click(generate_answer, inputs=[pdf_input, user_input], outputs=output_box) # تشغيل التطبيق app.launch() إذا شغلنا الكود أعلاه سنحصل على النتيجة التالية: تطبيقات عملية للأداة يمكننا الاستفادة من هذه الأداة الذكية في تطبيقات متعددة، لنستعرض بعضًا منها: استرجاع المواعيد والمهام المجدولة يمكن استخدام هذه الأداة لاسترجاع المواعيد والمهام المجدولة داخل محادثات واتساب بسهولة، حيث يمكن البحث عن التواريخ أو الأحداث المهمة داخل محادثاتنا باستخدام استعلامات بسيطة، مما يسهل تنظيم المهام اليومية والوصول إلى المعلومات بسرعة دون الحاجة إلى التمرير يدويًا عبر المحادثات الطويلة. في المثال التالي، لدينا مجموعة لطلاب جامعيين، ونريد أن نعرف موعد الاختبار. يمكن ببساطة إدخال استعلام مثل: البحث السريع عن المعلومات المهمة وتلخيص أهم المواضيع تتيح لنا الأداة للمستخدمين البحث بسرعة عن المعلومات المهمة داخل محادثات WhatsApp المخزنة، بالإضافة إلى تلخيص أهم المواضيع التي تمت مناقشتها. فعند إدخال استعلام مثل: البحث في المحادثات القانونية تساعد هذه الأداة في البحث داخل المحادثات القانونية لاستخراج المعلومات المهمة بسرعة، مما يسهل على المستخدمين العثور على النصوص المتعلقة بالاستشارات القانونية السابقة دون الحاجة إلى البحث اليدوي. على سبيل المثال، إذا كان هناك محادثة مع محامٍ، وأراد المستخدم معرفة معلومة معينة مثل: البحث في المحادثات الطبية يمكن استخدام هذه الأداة للبحث داخل المحادثات الطبية مع الأطباء أو الصيادلة لاستخراج المعلومات المهمة حول الأدوية والجرعات والإرشادات الطبية. على سبيل المثال، إذا أراد المستخدم معرفة: البحث في محادثات العمل تساعد هذه الأداة في البحث داخل محادثات العمل لاستخراج آخر التحديثات حول المشاريع والمهام الجارية. على سبيل المثال، إذا أراد المستخدم معرفة: نصائح لتحسين وتطوير الأداة استخدام طرق أخرى لقراءة ملفات PDF تواجه بعض المكتبات في لغة Python تحديات في التعامل مع النصوص باللغة العربية، حيث يمكن أن يحدث فقدان في الحروف أو التنسيق عند استخراج النصوص من ملفات PDF. لتحسين ذلك، يمكن تجربة مكتبات أخرى مثل pdfplumber أو PyPDF2 التي قد توفر دقة أكبر في استخراج النصوص العربية. بالإضافة إلى ذلك، يمكن دمج تقنيات التعرف على النصوص OCR في حالة الملفات التي تحتوي على صور نصية، مما يضمن استخراج النصوص بدقة أعلى. استخدام نماذج تضمين أفضل Embeddings لتحسين دقة تمثيلات النصوص، يمكن استخدام نماذج تضمين Embeddings مختلفة، أو تحسين النموذج الحالي عبر التدريب المستمر باستخدام بيانات محلية. هذا سيساعد في تخصيص النموذج بشكل أفضل للمجال المطلوب، مما يعزز التفاعل مع النصوص العربية ويزيد من دقة استرجاع المعلومات. تجربة نماذج توليدية مختلفة من أجل توليد إجابات دقيقة وواقعية، يمكن تجربة نماذج توليدية مختلفة مثل Llama أو GPT-3. كما يمكن النظر في استخدام نماذج متخصصة في مجالات معينة مثل الاستفسارات القانونية أو الاستشارات الطبية، لتحسين جودة الإجابات في تلك المجالات. تحسين إعدادات النماذج أو إعادة تدريبها باستخدام بيانات محلية سيسهم في تحسين الأداء العام. تحميل رسائل WhatsApp بطريقة تلقائية لتسريع عملية تحميل الرسائل، يمكن تطوير أداة تلقائية لتحميل المحادثات مباشرة من WhatsApp. يمكن أن توفر هذه الطريقة تحديثات مباشرة للمحادثات، مما يسهل الوصول إلى الملفات بسرعة ومرونة أكبر. كما يمكن أتمتة عملية التحميل بشكل دوري لضمان تحديث البيانات بشكل مستمر. ربط الأداة بأدوات أخرى لزيادة فعالية الأداة، يمكن دمجها مع أدوات أخرى مثل أداة التذكير بالمواعيد أو أداة متابعة المهام. على سبيل المثال، يمكن ربط الأداة بتقويم شخصي لتنبيه المستخدم بشأن المواعيد أو الاجتماعات المستخلصة من المحادثات. كما يمكن دمج الأداة مع أنظمة إدارة المشاريع مثل Trello للاستفادة من الذكاء الاصطناعي في تتبع المهام والتحديثات، مما يعزز إنتاجية المستخدم ويسهل إدارة العمل بشكل متكامل. الخاتمة في هذا المقال، استعرضنا كيفية بناء أداة ذكية تعتمد على الذكاء الاصطناعي لمعالجة وتحليل محادثات WhatsApp المخزنة في ملفات PDF، باستخدام تقنية التوليد المعزز بالاسترجاع RAG لاسترجاع المعلومات بدقة وتقديم إجابات فعالة. كما ناقشنا التطبيقات العملية للأداة في مجالات متنوعة، مثل الاستشارات القانونية وتحليل المحادثات الطبية، مما يبرز إمكانياتها في تحسين الوصول إلى المعلومات المهمة بسرعة وسهولة، كما استعرضنا طرقًا متعددة لتحسين الأداة، مثل تحسين استخراج النصوص من ملفات PDF باللغة العربية، وتجربة نماذج تضمين أكثر دقة، وتطوير حلول لتحميل المحادثات بشكل تلقائي. ندعوكم لتجربة تطوير أداة خاصة بكم تساعدكم على التفاعل مع بياناتكم الشخصية بأمان وفعالية، وتعزز إنتاجيتكم وتوفر وقتكم، ولو كان لديكم أية تساؤلات أو أفكار تطويرية على الأداة يمكنكم تركها في قسم التعليقات أسفل المقال. اقرأ أيضًا بناء تطبيق بايثون يجيب على أسئلة ملف PDF باستخدام الذكاء الاصطناعي بناء روبوت دردشة باستخدام بايثون و OpenAI API كتابة استعلامات SQL بسهولة باستخدام الذكاء الاصطناعي استخدام نموذج الذكاء الاصطناعي Code Llama لكتابة وتصحيح أكواد CSS
-
أصبح الذكاء الاصطناعي أداةً قويةً لمساعدة المطورين في كتابة الأكواد البرمجية بسرعة ودقة، لا سيما بعد ظهور نماذج متخصصة مدرّبة على المحتوى البرمجي. سنشرح في مقال اليوم طريقة الاستفادة من نموذج كود لاما Code Llama القوي لكتابة أكواد SQL متنوعة بسهولة باستخدام أوامر بلغة طبيعية، مما يعزز الإنتاجية ويوفر وقت المطورين، وختامًا سنوضح أهم التحديات التي ستواجهنا عند الاعتماد على الذكاء الاصطناعي لكتابة الكود البرمجي وكيفية التعامل معها. ما هو Code Llama كود لاما Code Llama هو نموذج ذكاء اصطناعي مفتوح المصدر طورته شركة Meta في أغسطس 2023، وهو يعتمد على نموذج Llama 2 مع تحسينات مخصصة لمعالجة وتوليد الأكواد البرمجية. فقد دُرّب هذا النموذج على مجموعات بيانات كبيرة في مختلف مجالات البرمجة، ما جعل منه أداة قوية لدعم المطورين في كتابة الأكواد وتحسينها وتسريع عمليات التطوير، يعتمد هذا النموذج على بنية المحوّلات Transformer لفهم السياق الكامل للكود البرمجي بدقة، ومعرفة العلاقة بين كل كلمة أو جزء في الكود، مما يساعده على إنشاء أكواد برمجية متوافقة مع مختلف المتطلبات. يدعم نموذج Code Llama تطوير البرمجيات باستخدام عدة لغات برمجة من بينها بايثون وجافا و PHP و Bash و SQL وغيرها، مما يجعله مناسبًا لمجالات وتطبيقات متنوعة كما يستطيع فهم المدخلات النصية، بما في ذلك تعليمات مكتوبة بلغة طبيعية على غرار: اكتب لي استعلام بلغة SQL يجلب جميع المستخدمين الذين سجلوا في الدورات خلال الشهر الماضي، كما يمكن أن نوفر للنموذج أجزاء من كود SQL غير مكتمل ونطلب منه إكماله بطريقة صحيحة، أو تحسينه وجعله أكثر احترافية. إصدارات Code Llama يوفر Code Llama عدة إصدارات لتلبية احتياجات مختلفة في مجال البرمجة وفيما يلي شرح موجز لكل إصدار: Code Llama: الإصدار الأساسي العام المصمم لتوليد الأكواد البرمجية بمختلف لغات البرمجة Code Llama - Python: إصدار متخصص في لغة كتابة أكواد للغة بايثون Python Code Llama - Instruct: إصدار مُدرَّب لفهم التعليمات النصية الطبيعية بدقة كبيرة توضح الصورة التالية مراحل تدريب وتطوير الإصدارات المختلفة لنموذج Code Llama بالاعتماد على Llama 2 كنموذج أساسي، واستخدم أحجام معاملات parameters مختلفة. سنشرح في الفقرات التالية خطوات استخدام نموذج Code Llama لتوليد أكواد SQL، مع توفير أمثلة عملية توضح حالات استخدامه. طريقة إعداد واستخدام Code Llama يمكن تشغيل نموذج كود لاما Code Llama محليًا على جهازنا، ومن الجدير بالذكر أن تشغيل النموذج قد يتطلب موارد حاسوبية عالية، لذا إذا كان جهازنا المحلي لا يدعم ذلك، فيمكننا استخدام منصات سحابية مثل Google Colab أو Kaggle Notebook والتي توفر بيئة عمل بموارد قوية. كما يمكننا الاستعانة بالواجهة البرمجية التي توفرها منصة Hugging Face والتي تتيح لنا استخدام نماذج الذكاء الاصطناعي لتوليد وتحسين الأكواد البرمجية بسهولة وفعالية كما سنوضح في الفقرات التالية. استخدام Code Llama عبر Hugging Face API يمكننا استخدام النموذج بسهولة من خلال الواجهة البرمجية Hugging Face API التي تتيح استدعاء النموذج وتوليد الأكواد المطلوبة. لإعداد واستخدام Hugging Face API، نحتاج بدايةً للحصول على مفتاح الوصول Token من منصة Hugging Face. لذا ننتقل إلى صفحة Hugging Face Tokens، ثم نضغط على Create new token كما توضح في الصورة التالية: بعد ذلك، نحدد الصلاحية Read ثم نُدخل اسمًا مخصصًا في خانة Token name كما يلي: بعد ذلك نضغط على زر Create token لتوليد مفتاح الواجهة البرمجية، وننسخه بالنقر على زر Cpoy ونحفظ المفتاح الناتج في مكان آمن. ملاحظة: من الضروري عدم مشاركة هذا المفتاح مع أي شخص لضمان أمان حسابنا. بعد الحصول على المفتاح API Token، يمكننا الآن إرسال طلب إلى الواجهة البرمجية، سنستخدم على سبيل المثال مكتبة requests في بايثون لنرسل طلب POST متضمنًا المُوجّه prompt المطلوب. كما نحتاج لتحديد عنوان النموذج الذي سنرسل إليه الطلب API_URL، مع تضمين مفتاح الوصول في الطلب كما يلي: # استيراد المكتبة import requests # رابط النموذج API_URL = "https://api-inference.huggingface.co/models/codellama/CodeLlama-34b-Instruct-hf" # نستبدل المفتاح التالي بالمفتاح الذي حصلنا عليه headers = {"Authorization": "Bearer hf_XXXXXXXXXXXXXXXXXXXX"} بعد ذلك، سنُعرّف المُوجّه prompt الذي سنرسله للنموذج والمكتوب بلغة طبيعية كي ينتج لنا استعلام بلغة SQL. على سبيل المثال سنجرب كتابة استعلام SQL يجلب لنا جميع المستخدمين المسجلين في الأيام السبعة الأخيرة، مع ترتيبهم تنازليًا حسب تاريخ التسجيل على النحو التالي: prompt = """ [SYSTEM]: أنت نموذج ذكاء اصطناعي متخصص في تحويل استعلامات اللغة الطبيعية إلى SQL. سيتم إعطاؤك استفسارات بلغة طبيعية، ومهمتك هي توليد استعلام SQL. [USER]: لدي قاعدة بيانات تحتوي على جدول باسم users به الأعمدة التالية: - user_id - user_name - email - created_at اكتب استعلام يجلب جميع المستخدمين المسجلين في آخر 7 أيام، مع ترتيبهم حسب تاريخ التسجيل من الأحدث إلى الأقدم. [ASSISTANT]: """ لإرسال هذا الطلب إلى النموذج واستقبال الرد، سننشئ دالة query تتضمن المُوجّه ثم تعيد الاستجابة: # دالة لإرسال الطلب إلى النموذج واستقبال الرد def query(payload): response = requests.post(API_URL, headers=headers, json=payload) return response.json() # استدعاء الدالة والحصول على الاستجابة output = query({"inputs": prompt}) output = output[0]['generated_text'] # طباعة الكود الذي تم توليده print(output.split("[ASSISTANT]:")[1]) بعد إرسال الطلب، سيُحلل النموذج الطلب ويُولد لنا استعلام SQL كما في المثال التالي: SELECT * FROM users WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY) ORDER BY created_at DESC; توضح الصورة التالية نتيجة تنفيذ الكود ضمن المنصة السحابية Kaggle Notebook: استخدام Code Llama عبر التثبيت المباشر يمكننا الاستفادة من إمكانيات النموذج واستخدامه مباشرةً دون الحاجة إلى الاتصال بواجهة برمجية خارجية مما يضمن لنا التحكم الكامل بالنموذج وضبطه بالطريقة المناسبة لنا. سنحتاج أولًا لاستيراد المكتبات اللازمة لتحميل واستخدام النموذج، حيث سنستخدم هنا النموذج CodeLlama-7b-Instruct-hf، ثم سنعرّف كائن tokenizer لتحميل محوًلات للنموذج المدرب كما يلي: # استيراد المكتبات اللازمة import torch import transformers from transformers import AutoTokenizer # تحديد اسم النموذج المراد تحميله model = "codellama/CodeLlama-7b-Instruct-hf" # تحميل المحول الخاص بالنموذج tokenizer = AutoTokenizer.from_pretrained(model) الخطوة التالية هي إنشاء خط أنابيب pipeline لإعداد نموذجنا واستخدامه في توليد الأكواد. سنحدد بدايةً المهمة الأساسية التي نريد من النموذج تنفيذها وهي توليد النصوص text-generation، ثم نحدد ما النموذج المراد استخدامه، ونستخدم بيانات بدقة منخفضة float16 لتسريع الحسابات وتقليل استهلاك الذاكرة، ونقرر ما هو الجهاز المناسب الذي سيعمل عليه النموذج مثل GPU أو CPU كما يلي: pipeline = transformers.pipeline( "text-generation", model=model, torch_dtype=torch.float16, device_map="auto", ) ملاحظة: تعني القيمة auto الممررة إلى نوع الجهاز device_map بأن النظام هو من سيحدد الجهاز الأفضل بشكل تلقائي بناءً على الموارد المتاحة. لنحدد الآن المُوجّه الذي سنمرره للنموذج كما يلي: prompt = ''' [SYSTEM]: أنت نموذج ذكاء اصطناعي متخصص في تحويل استعلامات اللغة الطبيعية إلى SQL. سيتم إعطاؤك استفسارات بلغة طبيعية، ومهمتك هي توليد استعلام SQL الصحيح. لا تضف أي معلومات أخرى بعد توليد الاستعلام [USER]: لدي قاعدة بيانات تحتوي على جدول باسم orders به الأعمدة التالية: - order_id - user_id - product_name - order_date - quantity اكتب استعلامًا يعرض مجموع الكميات المطلوبة لكل منتج، مرتبة حسب الكمية من الأكبر إلى الأصغر. [ASSISTANT]: ''' ثم نكتب كود يستخدم خط الأنابيب pipeline لتنفيذ النموذج: # تنفيذ النموذج لتوليد الأكواد بناءً على المُوجّه المعطى sequences = pipeline( text_inputs=prompt, do_sample=True, top_k=1, temperature=0.1, top_p=1, num_return_sequences=1, eos_token_id=tokenizer.eos_token_id, max_length=1000, ) استخدمنا في الكود السابق عدة معاملات لضبط النموذج، دعونا نشرح دور كل متغير وأهميته لتوليد استعلام SQL: text_inputs=prompt: تمرير الموجّه المكتوب بلغة طبيعية للنموذج لتحويله إلى استعلام SQL do_sample=True: تمكين التوليد العشوائي للنصوص لتوليد استعلامات متنوعة top_k=1: اختيار أعلى احتمالية للكلمة التالية temperature=0.1: تقليل العشوائية لجعل النتائج أكثر دقة top_p=1: استخدام طريقة التصفية العليا لضبط التوليد، وهو يساعد في اختيار الكلمات الأكثر احتمالاً بناءً على المعطيات num_return_sequences=1: تعيين عدد النصوص أو الاستجابات المولدة eostokenid=tokenizer.eostokenid: تحديد رمز نهاية الجملة لمنع التوليد غير المحدود للنصوص max_length=1000: يحدد الحد الأقصى لطول النص المولد أخيرًا لنطبع الأكواد المولدة بكتابة الكود التالي: for seq in sequences: output = seq['generated_text'].split("[ASSISTANT]:")[1] print(output) سيولد النموذج استعلام SQL بناءً على المُوجّه prompt المُمرّر له كما يلي: SELECT product_name, SUM(quantity) AS total_quantity FROM orders GROUP BY product_name ORDER BY total_quantity DESC; فيما يلي صورة توضح نتيجة التنفيذ: توليد استعلامات SQL وتنفيذها على قاعد بيانات حقيقية دعونا الآن نستخدم Code Llama عبر الواجهة البرمجية Hugging Face API لتحويل استفسارات اللغة الطبيعية إلى استعلامات SQL، ثم تنفيذها على قاعدة بيانات حقيقية. سنبدأ بتنزيل قاعدة بيانات Chinook من GitHub، ومن ثم سنستخرج معلومات الجداول المتوفرة. بعد ذلك، سنُمرّر هيكل قاعدة البيانات مع استفسار محدد إلى النموذج، والذي سيعمل على توليد استعلام SQL تلقائيًا. أخيرًا، سننفذ الاستعلام على قاعدة البيانات ونستعرض النتائج. في البداية، سنثبت المكتبات الضرورية: !pip install langchain_community بعدها، سنعمل على إعداد Code Llama عبر Hugging Face API: # استيراد المكتبة import requests # رابط النموذج API_URL = "https://api-inference.huggingface.co/models/codellama/CodeLlama-34b-Instruct-hf" # استبدل المفتاح التالي بالمفتاح الذي حصلت عليه API_KEY = "hf_XXXXXXXXXXXXXXXXXXXX" headers = {"Authorization": f"Bearer {API_KEY}"} # دالة لاستدعاء النموذج عبر API def query_llama(prompt): response = requests.post(API_URL, headers=headers, json={"inputs": prompt}) return response.json()[0]['generated_text'] نبدأ بعدها بإعداد قاعدة البيانات واستخراج هيكلها: # استيراد المكتبات اللازمة import requests from langchain_community.utilities import SQLDatabase # رابط قاعدة البيانات على GitHub url = "https://github.com/lerocha/chinook-database/raw/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite" # تحديد مسار حفظ قاعدة البيانات db_path = "/content/Chinook.db" # تنزيل قاعدة البيانات من GitHub response = requests.get(url) if response.status_code == 200: with open(db_path, "wb") as f: f.write(response.content) # الاتصال بقاعدة البيانات عبر LangChain db = SQLDatabase.from_uri(f"sqlite:///{db_path}") # عرض أسماء الجداول المتاحة print("📌 الجداول المتاحة في قاعدة البيانات:") print(db.get_usable_table_names()) # استخراج معلومات الجداول من قاعدة البيانات db_schema = db.table_info سنحصل على الجداول التالية: 📌 الجداول المتاحة في قاعدة البيانات: ['Album', 'Artist', 'Customer', 'Employee', 'Genre', 'Invoice', 'InvoiceLine', 'MediaType', 'Playlist', 'PlaylistTrack', 'Track'] نحن جاهزون الأن لتوليد استعلام SQL وتطبيقه على قاعدة البيانات: # تحديد الإدخال الذي سيتم تمريره للنموذج user_query = "اكتب استعلامًا يجلب أسماء 5 عملاء من قاعدة البيانات" prompt = f''' [SYSTEM]: أنت نموذج ذكاء اصطناعي متخصص في تحويل استعلامات اللغة الطبيعية إلى SQL. سيتم إعطاؤك استفسارات بلغة طبيعية، ومهمتك هي توليد استعلام SQL. [USER]: لدي قاعدة بيانات تحتوي على {db_schema} {user_query} [ASSISTANT]: ''' # توليد استعلام SQL sql_query = query_llama(prompt) sql_query = sql_query.split("[ASSISTANT]:")[1] print("🔹 الاستعلام الذي تم توليده:") print(sql_query) # تنفيذ الاستعلام على قاعدة البيانات result = db.run(sql_query) print("\n🔹 النتيجة:\n") print(result) سنحصل على استعلام بلغة SQL يعرض أول خمسة أسماء من جدول العملاء، وتعرض النتيجة الموافقة لهذا الاستعلام وفق قاعدة البيانات: 🔹 الاستعلام الذي تم توليده: SELECT firstname FROM customer LIMIT 5; 🔹 النتيجة: [('Luís',), ('Leonie',), ('François',), ('Bjørn',), ('František',)] نلاحظ في الصورة التالية نتيجة التنفيذ بالكامل: تحديات وحلول توليد استعلامات SQL بالذكاء الاصطناعي يواجه توليد استعلامات SQL باستخدام تقنيات الذكاء الاصطناعي عددًا من التحديات، ولكن يمكن تجاوزها من خلال تبني حلول مبتكرة وتخصيص النموذج وفقًا للمتطلبات. فيما يلي أبرز التحديات والحلول المقترحة: تنوع صياغة SQL توجد بعض الاختلافات في أسلوب كتابة أكواد SQL المستخدمة في أنظمة إدارة قواعد البيانات العلاقية مثل MySQL وOracle وPostgreSQL، لذا نحتاج لتخصيص عملية توليد الاستعلامات بحيث تتناسب مع النظام المستهدف، وتلتزم باستخدام الصيغة الصحيحة. يمكن تحقيق ذلك من خلال تدريب النماذج على عينات من كل صيغة، أو إضافة مدخلات سياقية تحدد النظام المطلوب. نقص في سياق البيانات تفتقر بعض الاستعلامات المولدة من إدخالات اللغة الطبيعية إلى المعلومات السياقية الضرورية، مثلًا لو طلبنا كتابة استعلام عن المبيعات لهذا العام فقد لا يعرف النموذج ما هو اسم جدول المبيعات بالضبط، واسم العمود الذي يحتوي على إجمالي المبيعات، ولحل هذه المشكلة، يمكن تعزيز السياق عن طريق إدراج معلومات إضافية مثل البيانات الوصفية لقاعدة البيانات metadata وسجل جلسة المستخدم لمساعدة النموذج على فهم السياق وتوليد استعلامات صحيحة. معالجة الأخطاء من المحتمل أن ينتج عن توليد استعلامات SQL بعض الأخطاء في الكود، مما يتطلب وجود آلية لتقديم تغذية راجعة للمستخدم لتصحيحها. لحل هذه المشكلة، يمكن إنشاء واجهة مستخدم تفاعلية تشرح الأخطاء المحتملة وتقدم اقتراحات للتصحيح. بالإضافة إلى ذلك، يمكن استخدام ملاحظات المستخدم لتحسين النموذج وتدريبه على تجنب الأخطاء في المستقبل. الخاتمة إلى هنا نكون قد وصلنا لنهاية مقالنا الذي شرحنا فيه كيف يمكن للذكاء الاصطناعي من خلال نموذج Code Llama، أن يسهم في تبسيط وتسريع عملية كتابة استعلامات SQL بدقة وكفاءة عالية. واستعرضنا كيفية إعداد النموذج سواء عبر واجهة برمجة التطبيقات API أو بالتثبيت المباشر على الأجهزة أو عبر بيئات الحوسبة السحابية، مما يوفر مرونة كبيرة للمطورين في اختيار البيئة التي تناسب احتياجاتهم. كما ناقشنا التحديات المتعلقة بتنوع لهجات SQL وتعقيد الاستعلامات، وكيف يمكن تجاوزها باستخدام أساليب متقدمة لتخصيص الاستعلامات ومعالجة الأخطاء. اقرأ أيضًا استخدام الذكاء الاصطناعي لكتابة وتصحيح أكواد CSS كيف أستخدم تقنيات الذكاء الاصطناعي في عملي؟ تعزيز إنتاجية المطورين باستخدام الذكاء الاصطناعي التوليدي بناء روبوت دردشة باستخدام بايثون و OpenAI API
-
سنتعرف في هذا المقال على كيفية استخدام نموذج الذكاء الاصطناعي Code Llama في كتابة وتحسين أكواد CSS ونوضح كيفية توليد الأكواد باستخدام أوامر مكتوبة بلغة طبيعية، بالإضافة إلى تصحيح الأخطاء الشائعة وتحسين الأداء. كما سنستعرض عدة أمثلة عملية توضح كيفية دمج Code Llama في حالات عديدة تفيد مطوري الواجهة الأمامية في عملهم. ما هو Code Llama؟ Code Llama هو نموذج ذكاء اصطناعي مفتوح المصدر طورته شركة ميتا في أغسطس 2023، وهو مبني على نموذج Llama 2 مع تحسينات مخصصة لمعالجة وتوليد الأكواد البرمجية. دُرّب النموذج على مجموعات بيانات متخصصة في البرمجة، مما جعله أداة قوية لمساعدة المطورين في كتابة الأكواد، وتصحيحها، وتحسينها، بالإضافة إلى تسريع عمليات التطوير. المتطلبات نحتاج المتطلبات التالية لتنفيذ خطوات هذا المقال: معرفة أساسية بلغات تطوير الويب HTML و CSS معرفة بأساسيات لغة بايثون تثبيت بايثون على الجهاز المحلي تثبيت محرر أكواد بايثون مثل Jupyter Notebook أو Visual Studio Code جهاز حاسوب بمواصفات جيدة، يجب أن لا تقل الذاكرة RAM عن 8 جيجابايت ويفضل أن تكون 16 جيجابايت تثبيت Code Llama واستخدامه محليًا سنعمل على تثبيت Code Llama واستخدامه محليًا عن طريق Ollama و LangChain يُعد Ollama أداة قوية لإدارة النماذج اللغوية الذكية وتشغيلها محليًا وتقدم Ollama مجموعة من النماذج اللغوية التي يمكن تنزيلها وتشغيلها بسهولة، من بينها Code Llama و Deepseek-r1 و Llama 3.3. بالإضافة إلى النسخ الأساسية التي توفرها الشركات المنتجة للنماذج، كما تقدم أيضًا نسخًا محسَّنة باستخدام تقنيات التكميم Quantization لجعل النماذج أكثر كفاءة وأقل استهلاكًا للذاكرة، مع الحفاظ على أداء جيد. لتثبيت Code Llama واستخدامه محليًا عن طريق Ollama، علينا أولًا تثبيت Ollama على حاسوبنا، ثم تثبيت النموذج الذي نرغب في استخدامه وهو في حالتنا Code Llama كما سنشرح في الفقرات التالية. تثبيت Ollama لتثبيت Ollama على جهازنا المحلي، نذهب إلى رابط تحميل Ollama ونختار النسخة المناسبة لنظام تشغيلنا. في حالتنا سننزل الملف OllamaSetup.exe لنظام تشغيل ويندوز ثم نثبت Ollama عبر تشغيل هذا الملف. بعد اكتمال التثبيت، سيكون Ollama جاهزًا للاستخدام. تثبيت وتشغيل Code Llama يمكننا تحميل وتشغيل Code Llama بسهولة من خلال Ollama. للقيام بذلك نذهب إلى رابط نموذج Code Llama على موقع Ollama، ثم نختار النسخة المناسبة. يمكن عرض جميع النسخ المتاحة عبر النقر على View all كما توضح الصورة التالية: بعد اختيار النسخة المناسبة، ننسخ كود تثبيت النموذج الظاهر أعلى يمين الصفحة، ثم نفتح الطرفية، وننفّذ الكود لتثبيت النموذج باستخدام Ollama. بهذا نكون قد نجحنا في تشغيل Code Llama على جهازنا، ويمكننا الاستفادة من إمكانياته في كتابة وتحسين أكواد CSS. قبل استعراض أمثلة عملية لاستخدام النموذج دعونا نستعرض أهم الأوامر التي توفرها Ollama للتعامل مع نماذج الذكاء الاصطناعي. أوامر مهمة لاستخدام Ollama فيما يلي مجموعة أوامر Ollama تساعدنا في التعامل مع نماذج الذكاء الاصطناعي: الأمر الوظيفة ollama run تشغيل النموذج وإذا لم يكن مثبتًا، سيجري تنزيله تلقائيًا ollama pull تنزيل وتثبيت النموذج ollama rm حذف النموذج من الجهاز ollama list عرض جميع النماذج المثبتة ollama ps عرض قائمة بالنماذج التي تعمل حاليًا استخدام LangChain بعد تثبيت Ollama وتشغيل Code Llama، يمكننا الاستفادة من LangChain لتسهيل التعامل مع النموذج وإدارته برمجيًا داخل التطبيقات. حيث يعد LangChain إطار عمل متكامل مصمم لتبسيط استخدام النماذج اللغوية داخل المشاريع البرمجية، وهو يوفر أدوات مرنة تتيح للمطورين التفاعل مع هذه النماذج بطريقة منظمة ويتيح لنا دمج النماذج الذكية بسهولة داخل التطبيقات دون الحاجة إلى تشغيل أوامر معقدة يدويًا عبر الطرفية Terminal، مما يسهل التشغيل التلقائي للمهام، ويسرّع عملية التطوير ويعزز الإنتاجية. لتشغيل Code Llama باستخدام LangChain نحتاج أولًا إلى تثبيت لغة بايثون على الجهاز، بالإضافة إلى تثبيت محرر أكواد أو بيئة عمل مناسبة لتشغيل الأوامر البرمجية، سنستخدم في مقالنا Jupyter Notebook وهي بيئة عمل تفاعلية شائعة تتيح تنفيذ الأوامر البرمجية وتجربة النماذج الذكية بسلاسة. بعد تجهيز بيئة العمل، سنبدأ بتثبيت المكتبات الأساسية التي نحتاجها لتشغيل LangChain و Ollama باستخدام الأوامر التالية: !pip install langchain !pip install langchain_community !pip install ollama بعد ذلك، يمكننا استدعاء النموذج المطلوب من خلال Ollama بمساعدة LangChain: from langchain_community.llms import Ollama codellama = Ollama(model="codellama:7b-instruct-q2_K") يمكننا استخدام الأمر invoke لتوليد الكود وعرضه مرة واحدة: response = codellama.invoke("اكتب كود CSS يقوم بجعل جميع عناصر <p> في الصفحة بمحاذاة وسطية مع تغيير لون النص إلى الأحمر") print(response) بدلاً من انتظار توليد الكود دفعة واحدة، يمكننا استخدام الأمر stream لعرض الكود بشكل تدريجي أثناء التوليد: for chunk in codellama.stream("اكتب كود CSS يقوم بجعل جميع عناصر <p> في الصفحة بمحاذاة وسطية مع تغيير لون النص إلى الأحمر"): print(chunk, end = "") عند تشغيل أحد الأوامر السابقة، سيُولد النموذج كود مشابه لما يلي: p { text-align: center; color: red; } نلاحظ في بعض الأحيان عند توليد الكود أن النموذج قد يضيف تعليقات أو شروحات باللغة الإنجليزية، أو يقدم لنا أكثر من طريقة لكتابة الكود، لاحظ الصورة التالية: في الخطوات القادمة، سنعمل على ضبط النموذج لتوليد الأكواد بدقة وتحكم أكبر. حالات مختلفة لتوليد أكواد CSS باستخدام Code Llama يمكننا استخدام Code Llama لإنشاء أكواد CSS بعدة طرق كما في الأمثلة التالية: توليد أكواد HTML مع CSS للاستفادة المثلى من نموذج Code Llama سنطلب منه مساعدتنا في توليد كود HTML و CSS بناءً على وصف نصي بسيط.على سبيل المثال، يمكننا إعطاء وصف بسيط للعنصر الذي نريد تصميمه مثل زر أو بطاقة، وسيُولد النموذج الكود المطلوب. في المثال التالي، سنطلب من Code Llama توليد كود HTML و CSS لإنشاء زر بتنسيق معين. سنرسل المُوجّه prompt التالي للنموذج: # تحديد المُوجّه prompt = """ [system] أنت مساعد ذكي متخصص في كتابة أكواد HTML و CSS بطريقة منظمة ومفهومة. [user] أريد منك إنشاء كود HTML و CSS لزر أزرق بنص أبيض، وعند تمرير الفأرة عليه يصبح لونه أخضر. """ # تنفيذ الطلب وطباعة الكود الناتج for chunk in codellama.stream(prompt): print(chunk, end = "") سيُولد النموذج كود مشابه لما يلي: HTML: <button class="my-button">Click me</button> CSS: .my-button { background-color: #2277ff; color: #fff; } .my-button:hover { background-color: #339900; color: #fff; } يمكننا ضبط المُوجّه بالشكل الذي نرغب فيه حتى نصل للنتيجة المطلوبة، لنلاحظ المثال التالي: prompt = """ [system] أنت مساعد ذكي متخصص في كتابة أكواد HTML و CSS بطريقة منظمة ومفهومة. يجب أن تلتزم بمعايير كتابة الكود النظيف وتوفير التعليقات التوضيحية داخل الأكواد. [user] أريد منك إنشاء كود HTML و CSS لزر أزرق بنص أبيض، وعند تمرير الفأرة عليه يصبح لونه أخضر. """ توليد كود CSS لتنسيق كود HTML في هذا المثال، سنعرض كيف يمكن لكود Code Llama توليد كود CSS لينسق كود HTML موجود مسبقًا. سنبدأ بتهيئة النموذج: # Code Llama تهيئة نموذج from langchain_community.llms import Ollama codellama = Ollama(model="codellama:7b-instruct-q2_K") ثم نجهز كود HTML الذي سنرسله للنموذج: # HTML كود html_code = """ <div class="card"> <img src="profile.jpg" alt="Profile Image"> <h2>John Doe</h2> <p>Web Developer</p> </div> """ بعد ذلك، نحدد المُوجّه ونضيف إليه كود HTML: # تحديد المُوجّه prompt = f""" [system] أنت مساعد ذكاء اصطناعي متخصص في CSS. مهمتك هي توليد كود CSS بناءً على كود HTML المقدم لك. يجب أن يكون الكود متجاوبًا ويستخدم Flexbox لتنظيم العناصر. [user] هذا هو كود HTML: {html_code} قم بإنشاء كود CSS مناسب لهذا الهيكل. """ وأخيرًا، نرسل المُوجّه للنموذج: # تنفيذ الطلب وطباعة الكود الناتج for chunk in codellama.stream(prompt): print(chunk, end = "") سيُولد النموذج كودًا مشابهًا لهذا: * { box-sizing: border-box; } body { font-family: Arial, sans-serif; margin: 0; padding: 0; } .card { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 200px; background-color: #f7f7f7; border: 1px solid #ddd; border-radius: 5px; padding: 10px; } .card img { width: 100%; height: auto; margin-bottom: 20px; } .card h2 { font-size: 18px; margin: 0; padding: 0; } .card p { font-size: 14px; margin-top: 5px; padding-left: 20px; padding-right: 20px; } تصحيح أكواد CSS باستخدام Code Llama إذا كان لدينا كود CSS يحتوي على أخطاء، يمكننا استخدام Code Llama لاكتشاف الأخطاء وتصحيحها. يمكن أن يشمل ذلك تصحيح الأخطاء النحوية في CSS مثل نسيان فاصلة منقوطة أو أقواس، وإصلاح القيم غير الصحيحة للخصائص. على سبيل المثال سنقدّم للنموذج كود CSS يضم مجموعة من الخصائص التي تتضمن بعض الأخطاء، وذلك لاختبار قدرته على تصحيحها. #Code Llama تهيئة نموذج from langchain_community.llms import Ollama codellama = Ollama(model="codellama:7b-instruct-q2_K") # كود يحتوي على أخطاء css_code_with_errors = """ .card { width: 300px background-color: white; border-radius: 10px; box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1) text-align: center; display: flex; flex-direction: column; align-items: center; color: 100px; } """ # إعداد المُوجّه prompt = f""" [system] أنت مساعد برمجي متخصص في CSS. مهمتك هي تصحيح وتحسين كود CSS المقدم من المستخدم. [user] هذا هو كود CSS الخاص بي، لكنه يحتوي على بعض الأخطاء. الرجاء تصحيحه وتحسينه: {css_code_with_errors} """ # تنفيذ الطلب وطباعة الكود الناتج for chunk in codellama.stream(prompt): print(chunk, end = "") سيُولد النموذج كود صحيح مشابه لما يلي: .card { width: 300px; /* ; وضع */ background-color: white; border-radius: 10px; box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); text-align: center; display: flex; flex-direction: column; align-items: center; color: black; /* تغيير خاصية اللون بقيمة صحيحة*/ } نلاحظ أن النموذج قد أضاف الفاصلة المنقوطة ; في نهاية كل خاصية، كما صحح اسم اللون حيث استبدل التعليمة color: 100px بالتعليمة التالية color: black. تحسين أكواد CSS باستخدام Code Llama إلى جانب تصحيح الأخطاء، يمكن استخدام Code Llama لتحسين أكواد CSS وجعلها أكثر كفاءة وقابلة للصيانة وذلك من خلال إزالة الأكواد غير الضرورية، ودمج الخصائص المتكررة، واستخدام المتغيرات، وجعل التصميم متجاوب مع مختلف الشاشات في المثال التالي، سنطلب من النموذج استخدام المتغيرات لتعزيز قابلية إعادة الاستخدام، وتسهيل تعديل القيم عبر الكود: # Code Llama تهيئة نموذج from langchain_community.llms import Ollama codellama = Ollama(model="codellama:7b-instruct-q2_K") # CSS كود css_code = """ .card-title { font-size: 16px; font-weight: bold; color: black; } .card-content { font-size: 16px; color: black; } """ # إعداد المُوجّه prompt = f""" [system] أنت مساعد برمجي متخصص في CSS. مهمتك هي تحسين أكواد CSS [user] هذا هو كود CSS الرجاء تحسينه عن طريق استخدام CSS Variables {css_code} """ # تنفيذ الطلب وطباعة الكود الناتج for chunk in codellama.stream(prompt): print(chunk, end = "") سيُولد النموذج كود صحيح مشابه لما يلي: :root { --font-size: 16px; --font-weight: bold; --color: black; } .card-title { font-size: var(--font-size); font-weight: var(--font-weight); color: var(--color); } .card-content { font-size: var(--font-size); color: var(--color); } تحويل كود CSS إلى SCSS أو LESS إحدى الميزات المفيدة لنموذج Code Llama قدرته على تحويل الأكواد البرمجية من تنسيق إلى آخر، مما يسهل على المطورين العمل مع أطر عمل مختلفة أو تحويل التنسيقات حسب الحاجة. على سبيل المثال، يمكن استخدام Code Llama لتحويل كود CSS إلى SCSS أو LESS للاستفادة من ميزات مثل المتغيرات والخصائص المدمجة والدوال المساعدة. على سبيل المثال سنطلبن من النموذج تحويل كود CSS إلى SCSS كما يلي: # Code Llama تهيئة نموذج from langchain_community.llms import Ollama codellama = Ollama(model="codellama:7b-instruct-q2_K") # CSS كود css_code = """ .button { background-color: blue; color: white; padding: 10px 20px; border-radius: 5px; border: none; } .button:hover { background-color: darkblue; } """ # إعداد المُوجّه prompt = f""" [system] أنت مساعد برمجي متخصص في CSS. [user] أريد تحويل كود CSS إلى SCSS {css_code} """ # تنفيذ الطلب وطباعة الكود الناتج for chunk in codellama.stream(prompt): print(chunk, end = "") سنحصل على النتيجة التالية: $primary-color: #337ab7; $secondary-color: #23527c; $padding: 10px 20px; $border-radius: 5px; $border: none; .button { background-color: $primary-color; color: white; padding: $padding; border-radius: $border-radius; border: $border; } .button:hover { background-color: darken($primary-color, 10%); } شرح أكواد CSS باستخدام Code Llama من المميزات المفيدة التي يمكن أن يوفرها Code Llama شرح الأكواد البرمجية لمساعدة المطورين أو المتعلمين على فهمها بسهولة. إذ يمكننا إرسال كود برمجي مثل CSS أو HTML إلى النموذج وطلب شرح الغرض من الكود أو توفير توضيح مفصل لكل سطر كما في المثال التالي: # Code Llama تهيئة نموذج from langchain_community.llms import Ollama codellama = Ollama(model="codellama:7b-instruct-q2_K") # CSS كود css_code = """ .card-title { font-size: 16px; font-weight: bold; color: black; } .card-content { font-size: 16px; color: black; } """ # إعداد المُوجّه prompt = f""" [system] أنت مساعد برمجي متخصص في CSS. مهمتك هي شرح كل سطر من الأكواد المقدمة، مع توضيح دور كل خاصية وكيف تؤثر على التصميم. [user] هذا هو كود CSS الخاص بي، الرجاء شرحه بالكامل: الرجاء تقديم شرح مفصل للأكواد باللغة العربية {css_code} """ # تنفيذ الطلب وطباعة الكود الناتج for chunk in codellama.stream(prompt): print(chunk, end = "") نلاحظ من خلال النتائج السابقة أن جودة الشرح باللغة الإنجليزية أفضل من جودة الشرح باللغة العربية. يعود ذلك إلى أن النموذد دُرّب بشكل أساسي على معلومات باللغة الإنجليزية، مما يجعل قدرته على معالجة اللغة الإنجليزية أفضل مقارنة باللغات الأخرى. توضح الصورة التالية شرح الكود باللغة الإنجليزية: وتوضح الصورة التالية شرح الكود باللغة العربية: بناء أداة تفاعلية لتوليد وتحسين أكواد CSS سنعمل في هذه الفقرة على تطوير أداة تفاعلية تعتمد على نموذج Code Llama لمساعدة المطورين في توليد وتصحيح وتحسين وشرح أكواد CSS بفعالية وسلاسة. سنستخدم LangChain للتفاعل مع النموذج، كما سنستخدم Gradio لإنشاء واجهة مستخدم سهلة الاستخدام. تتضمن الأداة أربع وظائف رئيسية وهي: توليد كود CSS بناءً على وصف نصي للمستخدم تصحيح الأكواد التي تحتوي على أخطاء تحسين الأكواد لجعلها أكثر كفاءة شرح الأكواد لتعزيز فهمها ومعرفة مكوناتها ووظائفها سنستدعي نموذج Code Llama عبر Ollama و LangChain، ليولّد لنا النتائج بناءً على مدخلات المستخدم. ستُنفَّذ كل عملية من خلال دوال مخصصة داخل الكود، مع واجهة مستخدم تفاعلية أُنشئت باستخدام Gradio لتوفير تفاعل سريع وسهل. # تثبيت المكتبات الأساسية #!pip install langchain #!pip install langchain_community #!pip install ollama #!pip install gradio # استدعاء المكتبات اللازمة import gradio as gr from langchain_community.llms import Ollama # Code Llama تهيئة نموذج codellama = Ollama(model="codellama:7b-instruct-q2_K") # دالة توليد الأكواد def generate_code(prompt): system_prompt = "[system] أنت مساعد برمجي متخصص في CSS. مهمتك هي توليد كود نظيف ومفهوم بناءً على وصف المستخدم." full_prompt = f"{system_prompt}\n[user] {prompt}" return codellama.invoke(full_prompt) # دالة تصحيح الأكواد def fix_css(css_code): system_prompt = "[system] أنت مساعد متخصص في تصحيح أكواد CSS. قم بإصلاح الأخطاء في الكود التالي." full_prompt = f"{system_prompt}\n[user] كود CSS به أخطاء:\n{css_code}" return codellama.invoke(full_prompt) # دالة تحسين الأكواد def improve_css(css_code): system_prompt = "[system] أنت مساعد خبير في تحسين أكواد CSS. قم بتحسين الكود ليصبح أكثر كفاءة." full_prompt = f"{system_prompt}\n[user] كود CSS يحتاج تحسينًا:\n{css_code}" return codellama.invoke(full_prompt) # دالة شرح الأكواد def explain_css(css_code): system_prompt = "[system] أنت مساعد متخصص في شرح أكواد CSS بطريقة مفهومة." full_prompt = f"{system_prompt}\n[user] أريد شرحًا لهذا الكود:\n{css_code}" return codellama.invoke(full_prompt) # إنشاء واجهة المستخدم with gr.Blocks() as demo: gr.Markdown("# 🖥️ مساعد الذكاء الاصطناعي لـ CSS🚀") with gr.Tab("📝 CSS توليد كود "): prompt_input = gr.Textbox(label="أدخل وصفًا لما تريد توليده", placeholder="مثال: زر أزرق بتأثير عند التحويم") generate_btn = gr.Button("🔹 توليد الكود") generated_code_output = gr.Code(label="الكود الناتج") generate_btn.click(generate_code, inputs=prompt_input, outputs=generated_code_output) with gr.Tab("✅ CSS تصحيح كود "): css_input = gr.Code(label="أدخل كود يحتوي على أخطاء", language="css") fix_btn = gr.Button("🔹 تصحيح الكود") fixed_css_output = gr.Code(label="الكود المصحح") fix_btn.click(fix_css, inputs=css_input, outputs=fixed_css_output) with gr.Tab("🚀 CSS تحسين كود"): css_input_improve = gr.Code(label="أدخل كود لتحسينه", language="css") improve_btn = gr.Button("🔹 تحسين الكود") improved_css_output = gr.Code(label="الكود المحسن") improve_btn.click(improve_css, inputs=css_input_improve, outputs=improved_css_output) with gr.Tab("📖 CSS شرح كود "): css_input_explain = gr.Code(label="أدخل كود لشرحه", language="css") explain_btn = gr.Button("🔹 شرح الكود") explained_output = gr.Textbox(label="الشرح الناتج") explain_btn.click(explain_css, inputs=css_input_explain, outputs=explained_output) # تشغيل التطبيق demo.launch() فيما يلي صورة واجهة Gradio التفاعلية: نصائح لتحسين أداء نتائج نموذج Code Llama فيما يلي عدة نصائح للحصول على أفضل النتائج من استخدام Code Llama لكتابة أكواد CSS: كتابة موجه دقيق وواضح من أهم الخطوات لتحسين نتائج النماذج اللغوية تقديم موجّه prompt دقيق. كلما كانت التعليمات واضحة، كانت الاستجابة أكثر دقة وفعالية. لذا يجب أن نكون محددين في طلبنا مثل: أريد كود CSS لزر أزرق يتحول إلى اللون الأحمر عند التحويم أو تمرير مؤشر الفأرة فوقه، بدلاً من قول: أريد كود CSS لزر. فهذا التحديد يساعد النموذج على فهم المتطلبات بشكل أفضل وتوليد نتائج أكثر تطابقًا مع ما نحتاجه. الانتباه للأخطاء التي ينتجها النموذج وتكرار المحاولة على الرغم من قوة Code Llama، قد تظهر بعض الأخطاء في الأكواد المُولدة، مثل التنسيق غير الصحيح أو الأكواد غير المحسنة. من الضروري ملاحظة هذه الأخطاء وتصحيحها يدويًا أو باستخدام النموذج نفسه لإعادة التصحيح. كما يمكن تكرار المحاولة باستخدام موجّه prompt مختلف أو تحسين التعليمات المقدمة للنموذج للحصول على نتائج أكثر دقة وجودة. استخدام نموذج أكبر في حال لم تكن النتائج مرضية بالنموذج المستخدم مثل 7b-instruct-q2_K، يمكن أن نجرب نموذجًا أكبر إذا كان متاحًا، حيث أن النماذج الأكبر تتمتع بقدرة أكبر على معالجة طلبات أكثر تعقيدًا. كما أنها تستطيع تقديم أكواد دقيقة وأكثر تنوعًا، مما يعزز من فعالية الاستجابة وجودتها. إعادة ضبط وتدريب النموذج قد نحتاج إلى إعادة تدريب النموذج أو ضبطه fine-tuning إذا كان لدينا مجموعة بيانات خاصة أو سيناريوهات دقيقة. فعلى الرغم من أن Code Llama نموذج قوي وفعال، إلا أن بعض الحالات قد تتطلب تخصيص النموذج لاحتياجات محددة. استخدام اللغة الإنجليزية للحصول على أفضل النتائج، يفضل استخدام اللغة الإنجليزية عند كتابة الموجهات prompts للنموذج. ففي العديد من النماذج، قد تؤدي الكتابة باللغة الإنجليزية إلى فهم أفضل وتوفير استجابات أكثر دقة، بينما يمكن أن تواجه النماذج صعوبة في التعامل مع بعض اللغات الأخرى. استخدام جهاز قوي للحصول على أداء أسرع تعتمد سرعة استجابة النموذج على قوة الجهاز المستخدم. لذا، يفضل تشغيل Code Llama على أجهزة ذات قدرات معالجة عالية، كما يمكن استخدام وحدة معالجة رسومية GPU قوية للحصول على أداء أسرع وكفاءة أعلى. الخاتمة استعرضنا في هذا المقال كيفية استخدام Code Llama لتوليد و تصحيح وتحسين وشرح أكواد CSS. وتعلمنا أهمية استخدام Ollama و LangChain لتشغيل النموذج محليًا، بالإضافة إلى شرح كيفية بناء واجهة تفاعلية باستخدام Gradio. نرجو أن نكون قد وضحنا لك كافة إمكانيات النموذج ودوره في تسريع عملية البرمجة وتحسين أكواد CSS وتصحيح أخطائها. ومن المفيد اتباع النصائح التي وفرناها في الختام للحصول على أفضل أداء من نموذج Code Llama وتحقيق نتائج مرضية. اقرأ أيضًا بناء روبوت دردشة باستخدام بايثون و OpenAI API أفضل ممارسات هندسة المُوجِّهات Prompt Engineering: نصائح وحيل وأدوات طريقة الصقل Fine-Tune لنموذج ذكاء اصطناعي مُدرَّب مُسبقًا أفكار مشاريع ذكاء اصطناعي تناسب المبتدئين