مشروع التخرج (3): أتمتة الـ SEO بالكامل – Agent يدرس المنافسين ويكتب المقالات وينشرها

دقائق القراءة: 5

مشروع التخرج (3): بناء نظام نشر ذكي يقود دورة SEO كاملة

في هذا المشروع سنبني Agent هندسياً لا يكتفي بكتابة مقال، بل ينفذ خط إنتاج متكامل يبدأ من دراسة نتائج البحث، ثم تحليل بنية المنافسين، ثم توليد مخطط موضوعي، ثم كتابة المقال، ثم مراجعته، ثم تجهيزه للنشر داخل WordPress. هذا النوع من المشاريع مهم لأنه يجمع بين مفاهيم العملاء الأذكياء، وLangChain، وRAG، والتحكم في جودة المخرجات بما ينسجم مع متطلبات EEAT وسياسات المحتوى المفيد.

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

المعمارية العامة للنظام

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

  • طبقة جمع البيانات من نتائج البحث والمواقع المنافسة.
  • طبقة استخراج البنية: العناوين، الأسئلة الشائعة، الكيانات، وتكرار الموضوعات.
  • طبقة التخزين الدلالي باستخدام Vector Database وEmbeddings.
  • طبقة التخطيط التحريري عبر Planner Agent.
  • طبقة الكتابة والمراجعة عبر Writer Agent وEditor Agent.
  • طبقة النشر إلى WordPress REST API.

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

تدفق البيانات من الكلمة المفتاحية إلى المقال المنشور

عند إدخال كلمة مفتاحية، يبدأ النظام بطلب نتائج البحث عبر أداة بحث خارجية أو SERP API. بعد ذلك يتم تنزيل محتوى الصفحات الأعلى ترتيباً، تنظيف HTML، واستخراج عناوين H1/H2/H3 والفقرات المهمة. ثم تُحوّل هذه النصوص إلى تمثيلات رقمية وتُخزن في قاعدة متجهة مثل ChromaDB. لاحقاً، يستخدم النظام الاسترجاع الدلالي لاختيار أفضل المقاطع لبناء مخطط مقال جديد غير منسوخ، ثم يمر الناتج إلى مرحلة كتابة منضبطة برومبتياً، ثم إلى فاحص جودة يتحقق من الأصالة، والتغطية، والكثافة المنطقية، وأخيراً إلى وحدة النشر.

طبقة التحليل التنافسي واستخراج الإشارات المهمة

التحليل التنافسي هنا لا يعني نسخ المنافسين، بل فهم “ماذا غطوا؟” و“ما الذي تجاهلوه؟”. لهذا يجب أن نستخرج:

  • العناوين الرئيسية المتكررة بين الصفحات المتقدمة.
  • الأسئلة الفرعية التي تجيب عنها الصفحات القوية.
  • الفجوات المحتملة التي لم تُشرح بعمق.
  • النمط التحريري: تعليمي، مقارناتي، تجاري، أو تطبيقي.
  • الكيانات المرتبطة بالموضوع مثل أدوات، مكتبات، معايير، وأسماء تقنيات.

وهنا يمكن الاستفادة من Output Parsers لإجبار النموذج على إرجاع ملخصات منظمة بصيغة JSON بدلاً من فقرات حرة يصعب برمجتها.

from bs4 import BeautifulSoup
import requests

def fetch_page_structure(url: str) -> dict:
    html = requests.get(url, timeout=20).text
    soup = BeautifulSoup(html, "html.parser")
    headings = [tag.get_text(" ", strip=True) for tag in soup.find_all(["h1", "h2", "h3"])]
    paragraphs = [p.get_text(" ", strip=True) for p in soup.find_all("p")]
    return {
        "url": url,
        "headings": headings[:30],
        "paragraphs": paragraphs[:50]
    }

إدخال البيانات في قاعدة معرفية قابلة للاسترجاع

بعد جمع المحتوى، نطبّق مبدأ Text Splitters لتقسيم النصوص إلى وحدات صغيرة، ثم نحولها إلى Vectors ونخزنها. الفائدة هنا أن Agent لن يقرأ الصفحات كاملة كل مرة، بل يسترجع المقاطع الأنسب فقط. هذه هي روح دمج الاسترجاع مع التوليد لتقليل الهلوسة وتحسين الدقة.

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(chunk_size=700, chunk_overlap=120)
docs = splitter.create_documents([full_competitor_text])

vectorstore = Chroma.from_documents(
    documents=docs,
    embedding=OpenAIEmbeddings(),
    collection_name="seo_competitors"
)

retriever = vectorstore.as_retriever(search_kwargs={"k": 6})

تصميم الوكلاء: Planner وWriter وReviewer

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

  • Planner Agent: يبني مخططاً فريداً اعتماداً على البيانات المسترجعة.
  • Writer Agent: يكتب المسودة مع الالتزام بالنبرة والبنية.
  • Reviewer Agent: يفحص التكرار، ويعيد صياغة الأجزاء الضعيفة، ويتأكد من عدم وجود ادعاءات غير مدعومة.

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

أنت مخطط محتوى تقني. حلل المقاطع المسترجعة من المنافسين، ثم أنشئ مخطط مقال عربي أصلي لا يكرر ترتيبهم. المطلوب: عنوان رئيسي واحد، 4 إلى 6 عناوين فرعية، وتحت كل عنوان نقاط توضح القيمة الجديدة التي سنضيفها للقارئ. تجنب النسخ الحرفي، وركز على العمق البرمجي، والوضوح، وسهولة التحويل إلى HTML.

التحكم في الجودة ومنع إنتاج محتوى منخفض القيمة

حتى يكون المشروع متوافقاً مع جودة AdSense، يجب إضافة فلاتر صريحة قبل النشر:

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

ومن المهم أيضاً توثيق أداء النظام عبر LangSmith ومراجعة النتائج باستخدام أساليب Evaluation بدلاً من الاعتماد على الانطباع البشري فقط.

النشر التلقائي على ووردبريس

بعد اكتمال المراجعة، يحول النظام النص إلى HTML متوافق مع المحرر، ثم يرسله إلى WordPress REST API. يفضل أن يتم النشر أولاً كمسودة draft ليقوم المحرر البشري بمراجعة نهائية، خصوصاً في المواقع الربحية.

import requests

def publish_to_wordpress(title: str, content: str, wp_url: str, username: str, app_password: str):
    endpoint = f"{wp_url}/wp-json/wp/v2/posts"
    response = requests.post(
        endpoint,
        auth=(username, app_password),
        json={
            "title": title,
            "content": content,
            "status": "draft"
        },
        timeout=30
    )
    response.raise_for_status()
    return response.json()

اعتبارات الأمان والتوسعة في بيئة الإنتاج

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

الخلاصة الهندسية للمشروع

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *