هندسة السياق (context engineering) ممارسة تحديد كل ما يراه النموذج اللغوي حين يجيب: لا السؤال الذي تكتبه فقط، بل التعليمات المحيطة به، والمستندات ونتائج الأدوات المدرجة فيه، والذاكرة المحفوظة عن المستخدم، والمحادثة حتى الآن. كل ذلك يتشارك نافذة سياق واحدة، والنموذج يجيب من هذا النص ولا شيء غيره. انتشر المصطلح عام 2025، مع تحوّل مزيد من منتجات الذكاء الاصطناعي إلى وكلاء يجمعون معظم سياقهم آليًا.
هندسة الأوامر تتعلق في الغالب بطريقة صياغة الطلب. أما هندسة السياق فتتعلق بما يجب أن يكون أمام النموذج في كل استدعاء، وبأي ترتيب.
من الموجّه إلى السياق
في تطبيق المحادثة تكتب أنت معظم السياق: يضيف التطبيق موجّه نظام والسجل، وتضيف أنت الباقي. أما في التطبيقات البرمجية فينقلب التوازن. يكتب المستخدم جملة واحدة، ويضيف الكود المحيط بالنموذج تعليمات، وملفًا شخصيًا للمستخدم، وثلاث مقالات مساعدة وجدها البحث، وقائمة الأدوات المتاحة، ومخرجات آخر استدعاء أداة. قد تكون جملة المستخدم جزءًا صغيرًا مما يقرؤه النموذج.
عندما يجيب نظام كهذا إجابة سيئة، نادرًا ما يكون الإصلاح في الصياغة. السبب المعتاد أن النموذج حصل على المادة الخاطئة: حقيقة ناقصة، أو نتيجة أداة قديمة، أو مستند غير ذي صلة بدا للبحث ذا صلة.
ما الذي يدخل نافذة السياق
الاستدعاء المعتاد في تطبيق ذكاء اصطناعي يحتوي بعض هذه الأجزاء أو كلها، بهذا الترتيب تقريبًا:
- تعليمات النظام: الدور والقواعد وصيغة المخرجات، وعادةً تكون ثابتة للتطبيق كله. راجع موجّه النظام.
- تعريفات الأدوات: أسماء الأدوات التي يمكن للنموذج استدعاؤها وأوصافها ومعاملاتها.
- الأمثلة: بضعة مُدخلات ومخرجات نموذجية تُظهر السلوك المتوقع.
- الذاكرة: حقائق محفوظة من جلسات سابقة، مثل خطة المستخدم أو لغته أو تفضيلاته.
- المستندات المسترجعة: مقاطع وجدها البحث في قاعدة معرفة لهذا السؤال (التوليد المعزّز بالاسترجاع، أو RAG).
- سجل المحادثة: الأدوار السابقة، إما حرفيًا أو ملخّصة.
- نتائج الأدوات: مخرجات عمليات البحث أو تشغيل الكود أو استدعاءات API التي جرت أثناء هذه المهمة، كما في حلقة ReAct.
- الرسالة الحالية: ما سأله المستخدم للتو.
المثال التالي سياق مجمّع واحد لمساعد دعم. أوقف الأجزاء واحدًا تلو الآخر. من دون جزء السياق لا يستطيع النموذج معرفة خطة العميل، ومن دون جزء المُدخل لا توجد لديه حقائق عن المنتج، وقيوده تطلب منه أن يقول ذلك بدلًا من التخمين.
مرحبًا دانة، وضع العمل دون اتصال جزء من خطة Pro، وحسابك حاليًا على الخطة المجانية، لذا فهو غير متاح لك في الوقت الحالي. مع Pro، تتزامن الملاحظات التي تنشئينها أثناء الرحلة تلقائيًا عندما يعود هاتفك إلى الاتصال. وهناك حد يجب أن تعرفيه: المرفقات الأكبر من 20 ميغابايت غير متاحة دون اتصال.
لاحظ أن الإجابة الصحيحة تعتمد على الربط بين مصدرين: الذاكرة (الخطة المجانية) ومستند (وضع العمل دون اتصال لخطة Pro فقط). لا يكفي أي منهما وحده، وهذا معتاد. جزء كبير من هندسة السياق هو التأكد من أن القطع التي يحتاج بعضها إلى بعض تصل معًا.
أربع طرق يفسد بها السياق
- معلومات ناقصة. يملأ النموذج الفجوات بتخمينات معقولة، ومن هنا تأتي كثير من حالات الهلوسة. أضف الحقيقة، أو أخبر النموذج بما يفعله عندما تنقص حقيقة.
- مادة أكثر من اللازم. كل فقرة غير ذات صلة تكلّف توكنات وتنافس على الانتباه. وجد Liu وزملاؤه عام 2023 في بحث "Lost in the Middle: How Language Models Use Long Contexts" أن النماذج التي اختبروها استخدمت المعلومات في بداية المُدخل الطويل أو نهايته بموثوقية أكبر من المعلومات في منتصفه. النماذج الأحدث تتعامل مع المُدخلات الطويلة أفضل، لكن إرسال المقاطع القليلة التي تجيب عن السؤال ما زال أرخص وأسهل على النموذج من لصق الدليل كله.
- معلومات قديمة. نتيجة أداة من قبل عشر خطوات قد تصف ملفًا أو رصيدًا تغيّر منذ ذلك الحين. إذا رأى النموذج النسختين، فقد يستخدم القديمة.
- التعارضات. مستندان يختلفان، أو الذاكرة تقول شيئًا والمستخدم يقول آخر. أخبر النموذج أي مصدر يغلب، مثل "آخر رسالة من المستخدم تتقدم على الذاكرة المحفوظة".
ترتيب السياق
الترتيب يغيّر النتائج والتكلفة معًا.
- الأجزاء الثابتة أولًا. تعليمات النظام وتعريفات الأدوات والمواد المرجعية الثابتة نادرًا ما تتغير بين الاستدعاءات. ويقدّم عدة مزوّدين لواجهات API التخزين المؤقت للموجّهات (prompt caching)، الذي يعيد استخدام معالجة بداية متطابقة للمُدخل، فتجعل البادئة الثابتة الاستدعاءات المتكررة أرخص وأسرع.
- المادة الطويلة قبل السؤال. في المستند الطويل أو المجموعة الكبيرة من المقاطع، ضع المادة أولًا والسؤال والتعليمات النهائية بعدها. دليل Anthropic لكتابة الموجّهات، على سبيل المثال، يوصي بهذا الترتيب في المُدخلات الطويلة، بحيث يأتي السؤال مباشرة قبل أن يبدأ النموذج الكتابة.
- سمِّ كل جزء. ضع كل مصدر داخل وسوم مثل
<document>أو<memory>أو<tool_result>، مع اسم المصدر. التسميات تتيح للنموذج تمييز البيانات عن التعليمات، وتتيح لك أن تطلب منه ذكر مصدر الإجابة. تشرح صفحة الفواصل ووسوم XML الصيغ المتاحة.
اختصار السياق الطويل
كل دور في المحادثة يعيد إرسال السجل كله، فتكبر الجلسات الطويلة حتى يجب التخلي عن شيء. بحسب التطبيق، قد يلخّص الرسائل القديمة أو يحذفها، أو يطلب منك بدء محادثة جديدة. تحصل على نتائج أفضل حين تختصر عن قصد.
- احتفظ بآخر بضعة أدوار حرفيًا واستبدل بما قبلها ملخّصًا.
- بعد استخدام نتيجة أداة، استبدل بها ملاحظة من سطر واحد عما أظهرته.
- احتفظ بالمعرّفات الدقيقة في كل ملخّص: أسماء الملفات، وأسماء الدوال، والمعرّفات، ورسائل الخطأ، والأرقام. الملخّص الذي يقول "ملف الإعدادات" حيث قال السجل
settings.prod.yamlيفقد التفصيل الوحيد الذي كان مهمًا. - في تطبيق المحادثة، عندما تنحرف المحادثة، ابدأ محادثة جديدة بملاحظة تسليم. الموجّه التالي يكتب واحدة.
الهدف: استبدال الفحوص المكتوبة يدويًا في نموذج التسجيل بمخطط تحقق مشترك واحد يستخدمه المتصفح والخادم معًا.
القرارات
- ملف مخطط واحد،
signupSchema.ts، يستوردهSignupForm.tsxوapi/signup.ts، حتى لا تبتعد مجموعتا القواعد عن بعضهما. - رسائل الخطأ تبقى حرفيًا كما هي، لأن مركز المساعدة يقتبسها.
الحالة الراهنة
- التحقق في المتصفح يستخدم المخطط، والاختبار
SignupForm.test.tsxينجح. - الخادم ما زال يستدعي الدالة القديمة
validateSignup()فيapi/signup.ts.
التفاصيل الدقيقة: كلمات المرور تحتاج إلى 8 أحرف على الأقل ورقم واحد. نص خطأ البريد: "Please enter a valid email address."
الخطوة التالية: استبدال validateSignup() بالمخطط وتشغيل اختبارات API.
سؤال مفتوح: هل يجب أن يُرجع البريد المسجّل مسبقًا 409 أم 400؟
الذاكرة عبر الجلسات
الذاكرة سياق يعيش بعد انتهاء المحادثة: حقائق تُكتب في التخزين في نهاية جلسة وتُحمَّل في التالية. تقدّم تطبيقات المحادثة نسخًا من ذلك، مثل الذكريات المحفوظة أو تعليمات المشروع التي تُضاف إلى كل محادثة داخل مشروع. وفي تطبيقك الخاص، الذاكرة جدول أو ملف ملاحظات يقرؤه كودك ويدرجه. قاعدتان تبقيانها مفيدة: خزّن الحقائق التي تظل صحيحة (الخطة، واللغة، والتقنيات المفضلة)، لا نصوص المحادثات، وحمّل فقط ما يتصل بالمهمة الحالية، لأن الذاكرة تنافس على المساحة نفسها التي يحتاجها كل شيء آخر.
تجميع السياق في الكود
في التطبيق، هندسة السياق كود عادي. هذا المخطط باستخدام مكتبة Python من Anthropic يضع القواعد الثابتة والذاكرة في موجّه النظام، ويحتفظ بالسجل الحديث فقط، ويضع المستندات المسمّاة قبل السؤال.
import anthropic
client = anthropic.Anthropic()
MODEL = "your-model-id" # e.g. from your provider's model list
def build_context(question, docs, history, memory, max_messages=6):
documents = "\n".join(
f'<document source="{d["source"]}">\n{d["text"]}\n</document>' for d in docs
)
system = (
"You are the support assistant for Acme Notes. Answer only from the documents. "
"If they do not cover the question, say so.\n"
f"<memory>\n{memory}\n</memory>"
)
# history holds complete user/assistant pairs, so an even slice starts with a user turn
recent = history[-max_messages:]
user = f"<documents>\n{documents}\n</documents>\n\n{question}"
return system, recent + [{"role": "user", "content": user}]
# question, docs, history and memory come from your application
system, messages = build_context(question, docs, history, memory)
response = client.messages.create(model=MODEL, max_tokens=1024, system=system, messages=messages)
print(response.content[0].text)
كل قرار في تلك الدالة (أي المستندات، وكم رسالة، وأين توضع الذاكرة) اختيار من اختيارات هندسة السياق، وكل واحد منها يستحق الاختبار على أسئلة حقيقية بالطريقة نفسها التي تختبر بها تغييرًا في الصياغة.
الأسئلة الشائعة
ما هي هندسة السياق؟
هندسة السياق هي عمل اختيار كل ما يتلقاه النموذج اللغوي في الاستدعاء وترتيبه واختصاره: تعليمات النظام، والأمثلة، والمستندات المسترجعة، وتعريفات الأدوات ونتائجها، والذاكرة المحفوظة، وسجل المحادثة، ورسالة المستخدم. النموذج لا يجيب إلا من هذا النص، فما فيه وما يُترك خارجه يحدد جودة الإجابة.
ما الفرق بين هندسة السياق وهندسة الأوامر؟
هندسة الأوامر تتعلق في الغالب بصياغة التعليمات. أما هندسة السياق فتغطي المُدخل كله، ومعظمه يجمعه الكود لا يكتبه شخص: أي المستندات تُسترجع، وأي نتائج الأدوات تُحفظ، وكم من السجل يُضمَّن وبأي ترتيب. في المحادثة تكتب أنت معظم السياق، وفي التطبيق أو الوكيل يختار النظام المحيط بالنموذج معظمه.
هل السياق الأكثر أفضل دائمًا؟
لا. المادة غير ذات الصلة أو القديمة تنافس الأجزاء المهمة، وتكلّف توكنات، وقد تناقض الحالة الراهنة. ووجدت أبحاث المُدخلات الطويلة أن النماذج قد تغفل المعلومات الموضوعة في منتصف سياق طويل. ضمّن ما تحتاجه المهمة، وسمِّه، واحذف ما لم تعد تحتاجه.
لماذا تسوء المحادثة الطويلة مع الوقت؟
المحادثة كلها تُرسل مجددًا في كل دور، فتبقى الأخطاء القديمة والأفكار المتروكة والكود المستبدل في السياق وتظل تؤثر في الردود. وحين تتجاوز المحادثة نافذة السياق، يضطر التطبيق إلى حذف الرسائل القديمة أو تلخيصها. بدء محادثة جديدة بملخّص قصير للقرارات والحالة الراهنة ينجح غالبًا أكثر من المتابعة.
ما هو RAG في هندسة السياق؟
RAG (التوليد المعزّز بالاسترجاع) يعني البحث في مستنداتك عن مقاطع ذات صلة بالسؤال وإدراجها في السياق قبل أن يجيب النموذج. إنه من أهم أدوات هندسة السياق: يحصل النموذج على حقائق حديثة ومحددة لم يكن ليعرفها من التدريب، وتستطيع أن تطلب منه الإجابة من تلك المقاطع فقط.