دليل شامل لدمج المنطق الرمزي مع الذكاء الاصطناعي التوليدي باستخدام برولوج وجيميني
يقدم هذا الدليل الشامل طريقة عملية لدمج قوة المنطق الرمزي مع قدرات الذكاء الاصطناعي التوليدي. سنقوم ببناء وكيل ذكي من نوع ReAct قادر على استخدام قاعدة معرفة بلغة البرمجة المنطقية برولوج مع نموذج اللغة الكبير Gemini من جوجل، وذلك عبر استخدام مكتبة LangChain و LangGraph. سيتمكن الوكيل من فهم الأسئلة بلغة طبيعية، وترجمتها إلى استفسارات دقيقة في برولوج، ثم دمج الإجابات من خطوات متعددة، وعرض النتائج بصيغة JSON منظمة.
تثبيت المكتبات اللازمة
قبل البدء، يجب عليك تثبيت المكتبات الضرورية باستخدام الأمرين التاليين:
apt-get install swi-prolog -y
pip install pyswip langchain-google-genai langgraph langchain-core
هذه الأوامر ستقوم بتثبيت:
- SWI-Prolog: مُفسّر لغة البرمجة المنطقية برولوج.
- PySwip: واجهة برمجة تطبيقات (API) لتوصيل بايثون مع برولوج.
- langchain-google-genai: واجهة LangChain للتعامل مع نموذج جيميني.
- LangGraph: مكتبة لبناء وكلاء ReAct.
- langchain-core: مكتبة LangChain الأساسية.
إنشاء واجهة متقدمة لبرولوج
سنقوم بإنشاء فئة AdvancedPrologInterface لتسهيل التفاعل مع قاعدة معرفة برولوج:
import os
from pyswip import Prolog
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.messages import HumanMessage
from langchain_core.tools import tool
from langgraph.prebuilt import create_react_agent
import json
GOOGLE_API_KEY = "استبدل هذا بالمفتاح الخاص بك" # ضع مفتاح API الخاص بك هنا
os.environ["GOOGLE_API_KEY"] = GOOGLE_API_KEY
llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash", temperature=0)
class AdvancedPrologInterface:
def __init__(self):
self.prolog = Prolog()
self._load_knowledge_base()
def _load_knowledge_base(self):
# تحميل قاعدة معرفة برولوج الشاملة
rules = [
# ... (قواعد العلاقات الأسرية، والعمليات الحسابية، وقواعد أخرى) ...
"parent(john, mary, alice)",
"parent(john, mary, bob)",
# ... (بقية القواعد) ...
"aquatic_mammal(X) :- mammal(X), can_swim(X)"
]
for rule in rules:
try:
self.prolog.assertz(rule)
except Exception as e:
print(f"تحذير: تعذر إضافة القاعدة '{rule}': {e}")
def query(self, query_string):
try:
results = list(self.prolog.query(query_string))
return results if results else [{"result": "لم يتم العثور على حلول"}]
except Exception as e:
return [{"error": f"فشل الاستعلام: {str(e)}"}]
prolog_interface = AdvancedPrologInterface()
هذه الفئة تقوم بتحميل قاعدة معرفة تحتوي على قواعد للعلاقات الأسرية، وبعض العمليات الحسابية (مثل حساب مضروب العدد)، بالإضافة إلى قواعد أخرى. وتقدم دالة query لإرسال الاستفسارات إلى برولوج والحصول على النتائج بصيغة JSON.
إنشاء أدوات LangChain
سنقوم بإنشاء أدوات LangChain لتغليف استفسارات برولوج:
@tool
def family_relationships(query: str) -> str:
results = prolog_interface.query(query)
return json.dumps(results, indent=2)
@tool
def mathematical_operations(operation: str, number: int) -> str:
# ... (تنفيذ العمليات الحسابية) ...
@tool
def advanced_queries(query_type: str, entity: str = "") -> str:
# ... (تنفيذ استفسارات متقدمة) ...
tools = [family_relationships, mathematical_operations, advanced_queries]
agent = create_react_agent(llm, tools)
هذه الأدوات تسمح للوكيل بالتفاعل مع قاعدة معرفة برولوج من خلال استدعاءات بسيطة.
تشغيل الوكيل والاختبار
بعد ذلك، سنقوم بتشغيل الوكيل واختباره من خلال بعض الأمثلة:
# ... (دوال run_family_analysis, demonstrate_complex_reasoning, interactive_prolog_session) ...
if __name__ == "__main__":
# ... (شفرة التنفيذ) ...
هذه الدوال توفر طرقًا مختلفة لاختبار الوكيل، بدءًا من استفسارات بسيطة إلى استفسارات معقدة تتطلب خطوات متعددة. كما توفر دالة interactive_prolog_session بيئة تفاعلية لاختبار الوكيل.
هذا الدليل يوضح كيفية دمج المنطق الرمزي مع الذكاء الاصطناعي التوليدي لبناء وكيل ذكي قادر على فهم اللغة الطبيعية والتفكير المنطقي. يمكنك توسيع هذا النظام بإضافة المزيد من القواعد والمعارف إلى قاعدة بيانات برولوج، أو استخدام نماذج لغة كبيرة أخرى.





اترك تعليقاً