
كيف يتذكر الوكيل الذكي (ai agent) الاشياء؟
كيف يتذكر الوكيل الذكي (ai agent) الاشياء؟ عندما تتحدث مع مساعدٍ ذكي، قد يبدو لك وكأنه يتذكر ما قلته سابقًا. لكن نماذج اللغة الكبيرة (LLMs) في الحقيقة لا تمتلك ذاكرة خاصة بها. فهي لا تتذكر المحادثات ما لم يتم تزويدها بالمعلومات مرة أخرى. فكيف تبدو وكأنها تتذكر الأشياء؟ الإجابة تكمن في ما يُعرف بـ مخزن المتجهات (Vector Store) – وهذا ما ستتعرف عليه في هذا المقال.
Table Of Content
ما هو مخزن المتجهات؟
مخزن المتجهات (Vector Store) هو نوع خاص من قواعد البيانات. فبدلًا من تخزين النصوص أو الأرقام مثل قاعدة البيانات التقليدية، يقوم بتخزين المتجهات. المتجه (Vector) هو قائمة من الأرقام تمثل معنى جزء من النص. يتم الحصول على هذه المتجهات من خلال عملية تُعرف باسم التضمين (Embedding). يقوم النموذج بأخذ جملة وتحويلها إلى نقطة في فضاء عالي الأبعاد. في هذا الفضاء، تكون المعاني المتشابهة قريبة من بعضها البعض.

على سبيل المثال، إذا قمت بتضمين الجملة “أنا أحب فلسطين”، فقد تكون قريبة في فضاء المتجهات من الجملة “فلسطين هي دولتي المفضلة”. تساعد هذه التضمينات الوكيل الذكي (AI Agent) على العثور على أفكار مترابطة حتى لو اختلفت الكلمات المستخدمة.
كيف تعمل التضمينات (Embeddings)
لنفترض أن أحد المستخدمين قال للمساعد:
انا اعيش في مدينة نابلس
يقوم النموذج بتحويل هذه الجملة إلى متجه مثل:
[0.23، -0.41، 0.77، ...، 0.08]
هذا المتجه قد لا يعني لنا الكثير، لكنه بالنسبة للذكاء الاصطناعي وسيلة لالتقاط معنى الجملة. يتم تخزين هذا المتجه في قاعدة بيانات المتجهات، مع بعض المعلومات الإضافية – مثل الطابع الزمني أو ملاحظة بأن هذه المعلومة جاءت من هذا المستخدم.
في وقت لاحق، إذا قال المستخدم:
احجز رحلة الى مسقط رأسي
يقوم النموذج بتحويل هذه الجملة الجديدة إلى متجه آخر، ثم يبحث في قاعدة بيانات المتجهات للعثور على أكثر المتجهات تشابهًا معها. النتيجة الأقرب قد تكون الجملة: “أنا أعيش في أوستن، تكساس.” وهنا يعرف الذكاء الاصطناعي ما الذي يقصده المستخدم على الأرجح بـ “مسقط رأسي”.
هذه القدرة على استرجاع المدخلات السابقة بناءً على المعنى – وليس مجرد مطابقة الكلمات – هي ما يمنح نماذج اللغة الكبيرة (LLMs) شكلًا من أشكال الذاكرة.
لماذا تُعد مخازن المتجهات أساسية للذاكرة؟
تعالج نماذج اللغة الكبيرة اللغة من خلال نافذة السياق، وهي مقدار النص الذي يمكن للنموذج “رؤيته” في وقت واحد. في حالة GPT‑4‑turbo، يمكن للنافذة التعامل مع ما يصل إلى 128,000 رمز (Token)، ويبدو ذلك ضخمًا – لكنه يمتلئ بسرعة، ولا يمكن الاحتفاظ بكامل المحادثة هناك إلى الأبد.

لذلك، يُستخدم مخزن المتجهات كذاكرة طويلة الأمد. حيث يتم تضمين المعلومات المهمة وتخزينها. وعندما تكون هناك حاجة، يتم الاستعلام من مخزن المتجهات، واسترجاع الأجزاء الأكثر صلة، ثم إعادة إدخالها في النموذج. وبهذه الطريقة، يتذكر النموذج ما يكفي للتصرف بذكاء – من دون أن يحتفظ بكل شيء في ذاكرته قصيرة الأمد.
مخازن المتجهات الشائعة
هناك العديد من قواعد بيانات المتجهات الشائعة الاستخدام، ولكل منها نقاط قوة مميزة.
FAISS (Facebook AI Similarity Search)
FAISS هي مكتبة مفتوحة المصدر طورتها شركة Meta. تتميز بالسرعة وتعمل بشكل ممتاز للتطبيقات المحلية (على الخادم الشخصي أو المؤسسي). تُعد مثالية إذا كنت ترغب في التحكم الكامل ولا تحتاج إلى استضافة سحابية. تدعم ملايين المتجهات وتوفر أدوات للفهرسة والبحث بكفاءة عالية.
مثال على كيفية استخدامها:
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
# تحميل نموذج محول الجمل المحسَّن مسبقًا لتحويل الجمل إلى متجهات رقمية (Embeddings)
model = SentenceTransformer('all-MiniLM-L6-v2')
# تحديد الجملة التي نريد تخزينها في الذاكرة
sentence = "User lives in Austin, Texas"
# تحويل الجملة إلى متجه كثيف (Embedding)
embedding = model.encode(sentence)
# تحديد أبعاد المتجه (ضروري لإنشاء فهرس FAISS)
dimension = embedding.shape[0]
# إنشاء فهرس FAISS باستخدام تشابه L2 (إقليدي)
index = faiss.IndexFlatL2(dimension)
# إضافة المتجه إلى فهرس FAISS (يمثل "ذاكرتنا")
index.add(np.array([embedding]))
# ترميز استعلام جديد لمطابقته مع الذاكرة المخزنة
query = model.encode("Where is the user from?")
# البحث في الفهرس عن أقرب متجه مطابق للاستعلام
D, I = index.search(np.array([query]), k=1)
# طباعة موضع الذاكرة الأكثر صلة (هنا يوجد عنصر واحد فقط)
print("Most relevant memory index:", I[0][0])
هذا الكود يحول جملة مثل “User lives in Austin, Texas” إلى تضمين (Embedding) ويخزنها في فهرس FAISS. عند طرح سؤال مثل “Where is the user from?”، يقوم بتحويل السؤال إلى تضمين جديد ويبحث عن الجملة المخزنة الأكثر قربًا في المعنى، ثم يطبع موقعها في الذاكرة.
FAISS فعال للغاية، لكنه غير مستضاف سحابيًا، مما يعني أنك تحتاج إلى إدارة البنية التحتية بنفسك.
Pinecone
Pinecone هو قاعدة بيانات متجهات سحابية تُدار بشكل كامل، مما يجعلها مثالية للأنظمة الإنتاجية. لا تحتاج للقلق بشأن التوسعة أو صيانة الخوادم. يمكنها التعامل مع مليارات المتجهات وتوفر ميزات مثل التصفية، ودعم البيانات الوصفية، والاستعلام السريع. كما تتكامل بسلاسة مع أدوات مثل LangChain وOpenAI.
مثال على إعداد Pinecone:
import pinecone
from sentence_transformers import SentenceTransformer
# تهيئة Pinecone باستخدام مفتاح API والبيئة الخاصة بك
pinecone.init(api_key="your-api-key", environment="us-west1-gcp")
# الاتصال أو إنشاء فهرس جديد باسم "memory-store"
index = pinecone.Index("memory-store")
# تحميل نموذج لتحويل النصوص إلى تضمينات (Embeddings)
model = SentenceTransformer('all-MiniLM-L6-v2')
# تحويل معلومة/جملة إلى تضمين عددي
embedding = model.encode("User prefers vegetarian food")
# تخزين التضمين في Pinecone باستخدام معرف فريد
index.upsert([("user-pref-001", embedding.tolist())])
# ترميز جملة الاستعلام إلى تضمين
query = model.encode("What kind of food does the user like?")
# البحث عن التضمين الأكثر صلة بالاستعلام
results = index.query(queries=[query.tolist()], top_k=1)
# طباعة معرف الذاكرة المطابقة
print("Top match ID:", results['matches'][0]['id'])
تعد Pinecone مثالية إذا كنت تحتاج إلى قابلية التوسع وسهولة الاستخدام من دون إدارة الأجهزة.
مخازن متجهات أخرى شائعة:
- Weaviate – تجمع بين البحث بالمتجهات والرسوم البيانية المعرفية، وتوفر بحثًا دلاليًا قويًا مع دعم للكلمات المفتاحية.
- Chroma – سهلة الاستخدام ومناسبة للنماذج الأولية والتطبيقات الشخصية أو العروض التوضيحية.
- Qdrant – مفتوحة المصدر ومصممة للبحث عالي الأداء باستخدام التصفية.
كل واحدة منها تناسب احتياجات مختلفة، سواء كنت تبحث عن السرعة أو التوسع أو البساطة أو الميزات المتقدمة.
جعل الذكاء الاصطناعي يبدو ذكيًا باستخدام توليد معزز بالاسترجاع (RAG)
النظام الكامل – تضمين مدخلات المستخدم، تخزينها في قاعدة بيانات متجهات، واسترجاعها عند الحاجة – يُعرف باسم التوليد المعزز بالاسترجاع (Retrieval-Augmented Generation). النموذج في حد ذاته ليس لديه “دماغ”، لكنه يمكن أن يبدو وكأنه يملك ذاكرة. فأنت تختار ما يجب تذكره، ومتى يتم استدعاؤه، وكيف يُعاد إدخاله في المحادثة.
على سبيل المثال، إذا كان الذكاء الاصطناعي يساعد المستخدم في تتبع تحديثات المشاريع، يمكنك تخزين تفاصيل كل مشروع كمتجه. وعندما يسأل المستخدم لاحقًا: “ما حالة مرحلة التصميم؟”، يبحث النظام في قاعدة البيانات، يسترجع الملاحظات ذات الصلة، ويتيح للنموذج صياغة إجابة مفيدة.
حدود الذاكرة القائمة على المتجهات
رغم أن مخازن المتجهات تمنح الوكلاء الذكيين وسيلة قوية لمحاكاة الذاكرة، إلا أن هذا النهج ينطوي على قيود مهمة.
البحث القائم على المتجهات يعتمد على التشابه الرياضي، وليس الفهم الحقيقي. وهذا يعني أن أكثر التضمينات المخزنة تشابهًا قد لا تكون دائمًا الأكثر صلة أو فائدة في السياق. على سبيل المثال، قد تكون جملتان متقاربتين رياضيًا في فضاء المتجهات ولكنهما تحملان معاني مختلفة تمامًا. ونتيجة لذلك، قد يعرض الذكاء الاصطناعي أحيانًا نتائج مربكة أو غير ذات صلة، خاصة عند وجود فروقات دقيقة أو نبرة عاطفية في النصوص.
تحدٍ آخر يتمثل في أن التضمينات عبارة عن لقطات ثابتة. فبمجرد تخزينها، لا تتطور أو تتكيف إلا إذا تم تحديثها صراحةً. إذا غيّر المستخدم رأيه أو قدّم معلومات جديدة، فإن النظام لن “يتعلم” ما لم يتم حذف المتجه الأصلي أو استبداله. وعلى عكس الذاكرة البشرية، التي تتكيف وتتحسن مع مرور الوقت، تبقى الذاكرة القائمة على المتجهات ثابتة ما لم يتدخل المطورون لإدارتها يدويًا.’
هناك بعض الطرق التي يمكنك من خلالها التخفيف من هذه التحديات. إحدى الطرق هي تضمين المزيد من السياق في عملية الاسترجاع، مثل تصفية النتائج حسب البيانات الوصفية مثل الطوابع الزمنية أو الموضوعات أو نية المستخدم. هذا يساعد على تضييق نطاق النتائج لتكون ذات صلة باللحظة الحالية.
نهج آخر هو إعادة معالجة أو إعادة تضمين الذكريات القديمة بشكل دوري، لضمان أن المعلومات تعكس أحدث فهم لاحتياجات المستخدم أو تفضيلاته.
بعيدًا عن القيود التقنية، تثير مخازن المتجهات أيضًا مخاوف تتعلق بالخصوصية والأخلاقيات. الأسئلة الرئيسية هي: من يقرر ما يتم حفظه؟ كم يجب أن تستمر هذه الذاكرة؟ وهل يملك المستخدم السيطرة على ما يتم تذكره أو نسيانه؟
في الوضع المثالي، لا ينبغي أن يتخذ المطور أو النظام هذه القرارات بمفرده. النهج الأكثر وعيًا هو جعل الذاكرة صريحة. دع المستخدمين يختارون ما يتم تذكره. على سبيل المثال، من خلال وضع علامة على مدخلات معينة باعتبارها “مهمة”، يضيف ذلك طبقة من الموافقة والشفافية. وبالمثل، يجب أن تكون مدة الاحتفاظ بالذاكرة محدودة حيثما كان ذلك مناسبًا، مع سياسات انتهاء صلاحية تستند إلى مدة بقاء المعلومات مفيدة.
من المهم أيضًا أن يتمكن المستخدمون من عرض بياناتهم المخزنة أو إدارتها أو حذفها. سواء من خلال واجهة بسيطة أو واجهة برمجية، فإن أدوات إدارة الذاكرة ضرورية لبناء الثقة. ومع توسع استخدام مخازن المتجهات، تزداد التوقعات بأن أنظمة الذكاء الاصطناعي ستحترم استقلالية المستخدم وخصوصيته.
لا يزال مجتمع الذكاء الاصطناعي الأوسع يشكل أفضل الممارسات حول هذه القضايا. لكن هناك أمرًا واضحًا: يجب تصميم الذاكرة المحاكاة ليس فقط من أجل الدقة والأداء، ولكن أيضًا من أجل المساءلة. ومن خلال الجمع بين الإعدادات الافتراضية القوية وتحكم المستخدم، يمكن للمطورين ضمان أن أنظمة الذاكرة القائمة على المتجهات ذكية ومسؤولة.
في الختام، توفر مخازن المتجهات للوكلاء الذكيين طريقة لمحاكاة الذاكرة – وتقوم بذلك بشكل جيد. من خلال تضمين النصوص في متجهات واستخدام أدوات مثل FAISS أو Pinecone، نمنح النماذج القدرة على تذكر ما هو مهم. هذه ليست ذاكرة حقيقية. لكنها تجعل أنظمة الذكاء الاصطناعي تبدو أكثر شخصية وفائدة وإنسانية.
ومع تطور هذه الأدوات، يزداد هذا الوهم. لكن خلف كل ذكاء اصطناعي ذكي يوجد نظام بسيط من المتجهات والتشابه. إذا تمكنت من إتقان ذلك، يمكنك بناء مساعدين يتذكرون ويتعلمون ويتحسنون بمرور الوقت.
المصدر: FreeCodeCamp