هندسة الطلبات

في وحدة الذكاء الاصطناعي التوليدي، تعلّمت أنّ مساحة الإدخال لنماذج الذكاء الاصطناعي التوليدي غير محدودة عمليًا. لإنتاج نتائج تتوافق مع توقعات المستخدمين، عليك إنشاء طلبات. الطلب هو عقد منظَّم بين تطبيقك والنموذج.

يجب أن يتضمّن الطلب المكتوب بشكل جيد ما يلي:

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

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

سنستخدم في هذه الوحدة مثالاً مشتركًا، وهو BlogBuddy، وهو مساعد كتابة مستند إلى الذكاء الاصطناعي ومستوحى من استخدام شركة CyberAgent لواجهة برمجة التطبيقات Prompt API.

ارجع إلى وحدة الذكاء الاصطناعي التوليدي الخاصة بمخطط نظام BlogBuddy.

مكوّنات الطلب

لكل مكوّن من مكونات الطلب دور محدّد في توجيه سلوك النموذج.

  • السياق: يحدّد دور النموذج ومجاله، ما يساعده في فهم كيفية التصرّف.
  • التعليمات: تحدّد مهمة معيّنة للنموذج.
  • متغيرات الإدخال: سياق خاص بموقف معيّن، توفّره تطبيقاتك في الوقت الفعلي.
  • تنسيق الإخراج: يحدّد بنية الإخراج المتوقّعة. على سبيل المثال، قد تحتاج إلى مخرجات بتنسيق JSON.
  • أمثلة: توضّح هذه السمة كيفية تنفيذ المهمة باستخدام قيمة إدخال واحدة أو أكثر.
  • القيود: يمكنك ضبط حدود واضحة للحفاظ على اتساق النتائج وأمانها وتوافقها مع العلامة التجارية.

قد يتضمّن طلبك بعض هذه المكوّنات أو جميعها. يوضّح المثال التالي هذه المكوّنات لميزة "مساعد الكتابة" في BlogBuddy.

### Context

You are a writing assistant for blog authors.
Your job is to generate helpful, concise, and engaging content.

### Instruction

Generate 3 alternative titles for the user's blog post with a given style.

### Input variables

Here is the content of the blog post:
${blogPostContent}

Here is the desired style:
${titleStyle}

### Output format

Return valid JSON ONLY, in the following exact structure:
{
  "titles": ["Title option 1", "Title option 2", "Title option 3"]
}

### Examples

Example input:
{
  "blogPostContent": "I finally visited the small neighborhood café I've been eyeing for months...",
  "titleStyle": "friendly"
}

Example output:
{
  "titles": [
    "A First Visit to the Neighborhood Café",
    "Trying the Café I've Wanted to Visit for Months",
    "My Experience at a Long-Awaited Local Spot"
  ]
}
### Constraints

- Each title must be under 128 characters.
- Titles must be original, not copied verbatim from the draft.
- Keep the tone natural and human. Avoid emojis unless explicitly requested.
- Avoid sensationalism or clickbait.
- If the draft includes multiple topics, choose the most prominent topic.

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

طلبات النظام مقابل طلبات المستخدم

بعض مكوّنات الطلب مبرمَجة بشكل ثابت، بينما يمكن للمستخدم النهائي توفير مكوّنات أخرى:

  • يقدّم مطوّرو التطبيقات طلب النظام الذي يحدّد السلوك العام للنموذج. يمكنه تحديد دور النموذج، ونبرته المتوقّعة، وتنسيق الإخراج (مثل مخطط JSON صارم)، وأي قيود عامة. في موجه النظام، يمكنك أيضًا ترميز متطلبات السلامة والمسؤولية. ويظلّ متسقًا في جميع الطلبات، كما يوفّر أساسًا ثابتًا لسلوك النموذج.

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

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

كيف تحدّد المكوّنات التي يجب تضمينها في طلب النظام والمكوّنات التي يجب أن يحدّدها المستخدم؟ يعتمد الجواب على مدى مرونة تجربة المستخدم ومدى قدرة النموذج.

حالات الاستخدام المحدودة

بالنسبة إلى حالات الاستخدام المحدّدة جدًا، يمكن تحديد معظم الطلب مسبقًا في طلب النظام. على سبيل المثال، في BlogBuddy، يمكن للمستخدمين النقر على عرض العناوين لعرض قائمة باقتراحات العناوين التي تم إنشاؤها لمسودتهم.

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

لإنشاء ذلك باستخدام Prompt API، سنستخدم initialPrompts لتحديد السلوك على مستوى النظام للجلسة بأكملها:

// Defines stable behavior for the entire session
const session = await LanguageModel.create({
  initialPrompts: [
    {
      role: "system",
      content: `You are a blog-writing assistant.
      Your task is to generate high-quality titles for blog posts.
      Always respond in concise, friendly language.
      Return exactly 3 alternative titles.
      Produce valid JSON with a "titles" array of strings.`
    }
  ]
});

عندما ينقر المستخدم على عرض العناوين، يتم استدعاء الطلب للمحتوى الحالي:

// The only variable input is the blog content
const result = await session.prompt(blogContent);

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

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

تعتمد المهام المرنة على طلبات مفصّلة من المستخدمين

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

في المهام المرنة، يحتاج المستخدم إلى تحديد المزيد من المعلومات، لأنّ النطاق المحتمل للخيارات أوسع بكثير. لا يزال طلب النظام يتحكّم في السلوك العام.

في ما يلي أفضل الممارسات:

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

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

أساليب توجيه الطلبات الشائعة

يحاول المطوّرون عادةً استخدام عدة تقنيات لإنشاء الطلبات للعثور على ما يناسب حالة الاستخدام والنموذج.

التلقين بلا أمثلة

تصف المهمة للنموذج وتأمل في الحصول على أفضل النتائج. على سبيل المثال:

"What is the capital of France?"

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

التلقين ببضعة أمثلة

في حالة التلقين ببضعة أمثلة، تقدّمون أمثلة لتوضيح السلوك الصحيح والأسلوب والبنية والمتغيرات المهمة الأخرى. في ما يلي مثال على طلب لتصنيف المشاعر:

You classify user messages into one of the following categories:
- "positive"
- "negative"
- "neutral"
Here are examples to guide your classifications:
Input: "I love this product! It works perfectly."
Output: { "label": "positive" }

Input: "This is terrible. I want a refund."
Output: { "label": "negative" }

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

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

توجيه سلسلة الأفكار

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

"Think step-by-step to identify the main idea of this paragraph. Then produce a
short heading under 60 characters."

يعمل أسلوب "سلسلة الأفكار" بشكل رائع مع المهام التي تتطلّب استدلالاً وتنفيذًا متعدّد الخطوات، مثل وضع مخطط تفصيلي لمنشور مدوّنة أو اتخاذ قرارات معقّدة. وهي التقنية الأساسية التي تستند إليها ما يُعرف بنماذج الاستدلال.

وقد يكون ذلك مكلفًا. تؤدي عملية إنشاء آثار الاستدلال التفصيلية إلى زيادة وقت المعالجة والتكلفة ووقت الاستجابة. لا تستخدِمها إلا عندما تتطلّب حالة الاستخدام تخطيطًا واستدلالاً معقّدَين.

مطالبة بالتفكير الذاتي

بعد عملية الإنشاء الأولية، تطلب من النموذج تقييم ومراجعة النتائج التي قدّمها. على سبيل المثال:

"Review your previous output.
Identify unclear phrasing and rewrite it more concisely."

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

الخلاصات الرئيسية

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

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

الموارد

ويأتي كل أسلوب من هذه الأساليب مع صيغه المختلفة وأفضل الممارسات المتَّبعة فيه. تتوفّر مجموعة كبيرة من المراجع الخارجية المفصّلة، مثل:

راجِع مستندات النموذج الذي اخترته، فقد تتضمّن نصائح محدّدة لمساعدتك في الحصول على أفضل النتائج الممكنة.

اختبِر معلوماتك

ما هي أنواع القواعد التي يمكنك تحديدها في طلب النظام؟

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

ما هي التقنية التي يجب استخدامها عندما تريد أن يقدّم النموذج استنتاجًا خطوة بخطوة قبل تقديم الإجابة؟

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

متى يكون التلقين ببضعة أمثلة مفيدًا للغاية؟

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

ما هي تقنية توجيه الطلبات المستندة إلى التفكير الذاتي؟

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