أتمتة المهام اليومية (RPA) بدمج الذكاء الاصطناعي التوليدي مع سكربتات Selenium

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

ما المقصود بأتمتة RPA عند دمجها مع الذكاء الاصطناعي التوليدي؟

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

عند دمج Selenium مع نموذج توليدي، يصبح السكربت قادراً على:

  • قراءة محتوى الصفحة وتلخيصه قبل اتخاذ الإجراء.
  • استخراج حقول مهيكلة من نصوص فوضوية.
  • توليد ردود أو تعليقات أو رسائل بريد مخصصة.
  • اختيار المسار المناسب وفق حالة الصفحة الحالية.

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

المعمارية الهندسية للنظام: من المتصفح إلى القرار الذكي

أفضل طريقة لبناء نظام مستقر هي الفصل بين ثلاث طبقات: طبقة الأتمتة، وطبقة الفهم، وطبقة التحكم. في طبقة الأتمتة يتولى Selenium فتح الصفحات، الضغط، إدخال النصوص، والتقاط عناصر DOM. في طبقة الفهم يقوم LLM بتحليل النص الخام وتحويله إلى نية أو قرار أو بيانات مهيكلة. أما طبقة التحكم فهي التي تفرض قواعد الأمان والتحقق وتمنع التنفيذ العشوائي.

تدفق البيانات الاحترافي يكون كالتالي:

  • جمع نص الصفحة أو أجزاء محددة منها عبر XPath أو CSS Selectors.
  • تنظيف النص وإزالة الضجيج مثل القوائم المكررة أو عناصر التنقل.
  • إرسال السياق إلى النموذج مع برومبت مقيد وواضح.
  • استقبال النتيجة بصيغة مهيكلة مثل JSON.
  • التحقق من النتيجة قبل تحويلها إلى نقرات أو إدخالات فعلية داخل الواجهة.

وهنا تظهر أهمية مقال استخراج بيانات مهيكلة (Output Parsers): إجبار الذكاء الاصطناعي على الرد بصيغة JSON فقط، لأن أي نظام RPA ذكي يجب أن يعتمد على مخرجات قابلة للتحقق آلياً.

متى نستخدم Selenium وحده ومتى نضيف LLM؟

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

هذا المنهج قريب من فكرة العملاء الأذكياء AI Agents التي شرحناها في مقدمة في العملاء الأذكياء (AI Agents): الذكاء الاصطناعي الذي يتخذ القرارات، لكن مع فرق مهم: في أتمتة الأعمال يجب أن يكون القرار أكثر تقييداً وأقل حرية من الوكيل العام.

بناء خط معالجة عملي باستخدام Python

قبل البدء، احرص على إعداد البيئة البرمجية كما في إعداد بيئة العمل الذكية: تثبيت مكتبات Python الأساسية للتعامل مع الذكاء الاصطناعي، ثم فعّل مفتاح الواجهة البرمجية كما في الاتصال الأول: جلب مفاتيح API (Gemini / OpenAI) وكتابة أول سكربت اتصال.

1) قراءة محتوى الصفحة وإرساله للنموذج

import json
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from openai import OpenAI

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

driver = webdriver.Chrome()
driver.get("https://example.com/support/tickets")

page_title = driver.title
ticket_elements = driver.find_elements(By.CSS_SELECTOR, ".ticket-row")

tickets = []
for item in ticket_elements[:5]:
    tickets.append({
        "subject": item.find_element(By.CSS_SELECTOR, ".subject").text,
        "message": item.find_element(By.CSS_SELECTOR, ".message").text,
        "priority": item.find_element(By.CSS_SELECTOR, ".priority").text
    })

prompt = f"""
You are an automation classifier.
Return JSON only.
Classify each ticket into:
reply_needed, escalation_needed, or ignore.

Input:
{json.dumps(tickets, ensure_ascii=False)}
"""

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": prompt}],
    temperature=0
)

result_text = response.choices[0].message.content
print(result_text)

هذا المثال يوضح الفكرة الأساسية: Selenium يجمع البيانات، وLLM يصدر قراراً منظماً. ولضبط سلوك الإبداع بدقة في مثل هذه المهام، راجع التحكم في إبداع الذكاء الاصطناعي: فهم وإعداد معاملات Temperature و Top-K برمجياً.

2) استخدام برومبت مقيد يمنع التفسير الفضفاض

أنت محرك تصنيف داخل نظام أتمتة. مهمتك تحليل التذكرة وإرجاع JSON فقط دون أي شرح. إذا احتوت الرسالة على غضب العميل أو تهديد بإلغاء الخدمة فاختر escalation_needed. إذا كانت مجرد استفسار قابل للرد الآلي فاختر reply_needed. إذا كانت الرسالة دعائية أو غير مفهومة فاختر ignore.

صياغة البرومبت بهذه الطريقة تقلل الهلوسة وتزيد قابلية الدمج مع الكود. وإذا أردت بناء قوالب متغيرة باحتراف، فمقال هندسة الأوامر (Prompt Engineering) داخل الكود: قوالب النصوص المتغيرة (F-Strings) مناسب جداً هنا.

دمج LangChain لتنظيم التدفق

كلما كبر المشروع، يصبح فصل البرومبتات، أدوات التحقق، وسلاسل التنفيذ أمراً ضرورياً. هنا يفيد مقدمة في إطار عمل LangChain: ثورة ربط وتطوير تطبيقات الذكاء الاصطناعي وإنشاء أول سلسلة (Chain) باستخدام LangChain لتمرير البيانات تلقائياً. بدلاً من كتابة منطق متناثر، يمكن بناء Chain تستقبل محتوى الصفحة وتعيد قراراً جاهزاً للتنفيذ.

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser

llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

prompt = ChatPromptTemplate.from_template("""
You are a browser automation planner.
Return valid JSON only with keys:
action, reason, target_text

Page content:
{page_text}
""")

parser = JsonOutputParser()

chain = prompt | llm | parser

decision = chain.invoke({
    "page_text": "Button: Submit report | Alert: Missing required invoice number"
})

print(decision)

ميزة هذا التصميم أنه يسهّل إضافة طبقات لاحقة مثل الذاكرة، المراقبة، أو التقييم الآلي.

إضافة الذاكرة والسياق عند تكرار المهام

بعض عمليات الأتمتة ليست لحظية، بل تمتد على جلسات متكررة: متابعة العملاء، مراجعة الطلبات، أو استكمال نماذج متقطعة. هنا تصبح الذاكرة مهمة، سواء كذاكرة قصيرة أو محفوظة في قاعدة بيانات. يمكن الاستفادة من الذاكرة في الذكاء الاصطناعي: لماذا ينسى الـ API المحادثات السابقة وكيف نعالج ذلك؟ أو حفظ واسترجاع ذاكرة المحادثات من قاعدة بيانات (SQLite / Redis) عند الحاجة لمعرفة ما إذا كان النظام قد رد سابقاً على نفس العميل أو اتخذ إجراءً مشابهاً.

متى نحتاج RAG داخل الأتمتة؟

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

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

اعتبارات الأمان والجودة في أنظمة الأتمتة الذكية

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

خلاصة هندسية لبناء نظام قابل للتوسع

الدمج بين Selenium وGenerative AI ليس مجرد إضافة نموذج إلى سكربت متصفح، بل هو إعادة تصميم لسير العمل نفسه. اجعل المتصفح مسؤولاً عن التنفيذ، والنموذج مسؤولاً عن الفهم، وطبقة التحكم مسؤولة عن السلامة والالتزام. ابدأ بحالات استخدام ضيقة مثل تصنيف التذاكر أو صياغة الردود أو اختيار الإجراء التالي، ثم وسّع النظام تدريجياً عبر LangChain، أو RAG، أو الذاكرة، حسب تعقيد العملية.

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

1 comment

اترك تعليقاً

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