العودة إلى المدونة

الذكاء الاصطناعي للمبتدئيندليل

few-shot prompting: اعرض على النموذج 3–5 أمثلة للحصول على تنسيقك

كيف تجعل 3–5 أمثلة موسومة النموذج يجيب بتصنيفاتك أو JSON، مع طلب Python وتكلفة الإدخال الإضافية لكل طلب.

بواسطة CheapTokens Teamنُشر في 5 دقيقة قراءة

الغلاف: برومبت few-shot مع تذكرة مثال وتصنيفها
في هذه الصفحة
  1. ماذا يعني "few-shot"
  2. ثلاث قواعد لأمثلة ناجحة
  3. أرسله عبر الـ API
  4. ماذا تضيف خمسة أمثلة إلى الفاتورة
  5. JSON والنبرة وفحص أمثلتك

يجب أن يجيب بوت التذاكر الخاص بك بكلمة واحدة: billing أو bug أو other. معظم الردود تكون كذلك تمامًا. ثم يصل رد بصيغة "Label: billing — the customer seems upset about a refund"، فيتعثر الكود الذي يقرأ التصنيف.

الحل المعتاد ليس تعليمات أطول، بل بضعة أمثلة: ضع 3–5 تذاكر منتهية مع تصنيفاتها في الـ prompt، فينسخ النموذج النمط. هذا هو few-shot prompting. يصف دليل الـ prompting من Anthropic (قسم "Use examples effectively"، تم التحقق في 3 نوفمبر 2026) الأمثلة بأنها من أكثر الطرق موثوقية لتوجيه التنسيق والنبرة والبنية، ويوصي بـ 3–5 منها. المشكلة: كل مثال هو إدخال تدفع مقابله مجددًا مع كل طلب. يحسبه قسم التكلفة أدناه لبوت يعالج 2,000 تذكرة يوميًا.

ماذا يعني "few-shot"#

تخيل زميلًا جديدًا في يومه الأول على مكتب الدعم. تقول له "صنّف كل تذكرة billing أو bug أو other" ثم تنصرف. بعض التصنيفات ستطابق فكرتك وبعضها لن يطابقها. الآن اترك ثلاث تذاكر مصنفة مسبقًا وقل "مثل هذه". نفس الزميل، مفاجآت أقل بكثير.

تتصرف النماذج بالطريقة نفسها. التعليمات وحدها تسمى zero-shot. التعليمات مع عدة أمثلة محلولة هي few-shot (تذكر صفحة Anthropic أيضًا اسم multishot). "Shot" مجرد مثال.

قارن

نفس المهمة، برومبتان

تعليمات فقط

text
Label the support ticket as billing, bug or other.

تعليمات مع أمثلة

text
Label the support ticket with one word: billing, bug or other.

Ticket: I was charged twice for one top-up.
Label: billing

Ticket: The export button does nothing.
Label: bug

Ticket: Do you have a dark theme?
Label: other

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

ثلاث قواعد لأمثلة ناجحة#

تلخص صفحة Anthropic الأمثلة الجيدة في ثلاث كلمات:

  • ذات صلة: قريبة من التذاكر التي تستقبلها فعلًا، لا من مهمة أخرى.
  • متنوعة: تغطي الحالات الحدية وتختلف عن بعضها، حتى لا يتعلق النموذج بنمط عارض.
  • منظمة: ملفوفة بوسوم (<example>، وعدة داخل <examples>) حتى يميز النموذج الأمثلة عن التعليمات. تذكر الصفحة نفسها الحفاظ على اتساق أسماء الوسوم.

إليك برومبتًا كاملًا مبنيًا بهذه الطريقة. احفظه باسم prompt.txt:

text
<instructions>
Label the support ticket with exactly one word: billing, bug or other.
Reply with the label only.
</instructions>

<examples>
<example>
<ticket>I was charged twice for the same top-up.</ticket>
<label>billing</label>
</example>
<example>
<ticket>The export button does nothing when I click it.</ticket>
<label>bug</label>
</example>
<example>
<ticket>Do you have a dark theme?</ticket>
<label>other</label>
</example>
<example>
<ticket>Please refund me. Also, the page crashes on login.</ticket>
<label>billing</label>
</example>
<example>
<ticket>Is there an API for exporting reports?</ticket>
<label>other</label>
</example>
</examples>

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

طابق الأزواج

أي قاعدة مخالفة؟

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

أرسله عبر الـ API#

البرومبت هو النص نفسه في كل طلب، والتذكرة الجديدة وحدها تتغير. تمر كل تذكرة في الرحلة القصيرة نفسها:

التعليمات والأمثلة والتذكرة الجديدة تدخل في طلب واحد؛ يعود تصنيف واحد
طلب واحد لكل تذكرة: التعليمات والأمثلة تبقى، والتذكرة تتغير

إليك الكود بلغة Python مع حزمة openai. العنوان هو CheapTokens API، والمفتاح في متغير بيئة (انظر كيف تخزن مفتاحًا بأمان)، ومعرّف النموذج هو الكامل من التوثيق:

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

PROMPT = open("prompt.txt", encoding="utf-8").read()


def label(ticket: str) -> str:
    response = client.chat.completions.create(
        model="deepseek-ai/DeepSeek-V4-Flash-0731",
        max_tokens=64,
        messages=[
            {"role": "system", "content": PROMPT},
            {"role": "user", "content": f"<ticket>{ticket}</ticket>"},
        ],
    )
    print(response.usage.prompt_tokens, response.usage.completion_tokens)
    return response.choices[0].message.content.strip()


print(label("The app shows a blank screen after the update."))

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

الرقم الأول هو ما يجب مراقبته. إنه البرومبت كله، التعليمات زائد الأمثلة زائد التذكرة، وينمو مع كل مثال تضيفه. شغّل السكربت مرة مع prompt.txt الكامل ومرة مع جزء <instructions> فقط: الفرق بين الرقمين الأولين هو ما تكلفه أمثلتك لكل طلب.

DeepSeek-V4-Flash مناسب لهذا النوع من التصنيف الجماعي: سعر واحد في أي وقت من اليوم، وسياق 380K token (فيتسع بلوك الأمثلة الطويل بسهولة) وحتى 32,768 token لكل إجابة. GLM-5.3-Flash، بسياق 390K، يصلح لمهام التصنيف القصيرة أيضًا. كلاهما على صفحة النماذج، خلف رصيد واحد.

ماذا تضيف خمسة أمثلة إلى الفاتورة#

لنفترض أن البوت يعالج 2,000 تذكرة يوميًا. افترض أن التذكرة نحو 120 token والتعليمات نحو 80، فطلب بلا أمثلة هو 80 + 120 = 200 token إدخال. خمسة أمثلة بنحو 60 token لكل منها تضيف 5 × 60 = 300، فطلب معها هو 200 + 300 = 500. الإجابة كلمة واحدة، لنقل 3 token إخراج في الحالتين. هذه افتراضات: استبدل بها prompt_tokens التي طبعها سكربتك.

على مدى يوم، يصبح 200 × 2,000 = 400,000 token إدخال 500 × 2,000 = 1,000,000، بينما يبقى الإخراج عند 3 × 2,000 = 6,000 token. على DeepSeek-V4-Flash هذا $0.0066 يوميًا بلا أمثلة و$0.0156 معها. تكلفك الأمثلة الفرق بين هذين الرقمين، ووفق Anthropic تشتري لك إخراجًا أكثر اتساقًا.

ثابت في كل طلب: التعليمات وخمسة أمثلة. جديد كل مرة: التذكرة
التذكرة وحدها تتغير بين الطلبات

تخفي هذه الصورة تفصيلًا مفيدًا. بلوك الأمثلة متطابق في كل طلب، وهو بالضبط نوع البداية المتكررة التي يتناولها prompt caching؛ ما هو prompt caching يشرح كيف يعمل ذلك.

إليك الحمل نفسه، 500 token إدخال و3 token إخراج لكل طلب، و2,000 طلب، عبر النماذج. يعيد الجدول الحساب من الأسعار الحالية:

النموذج لكل طلب 2,000 طلبات OpenRouter، 2,000 طلبات
GLM-5.3-Flash $0.00001 $0.0202 $0.034
DeepSeek-V4-Flash $0.0000078 $0.0156 $0.0708
MiniMax-M2.7 $0.000025 $0.0509 $0.611

500 رمز إدخال و3 رمز إخراج لكل طلب. الأسعار لكل مليون رمز حالية وتتغير مع تعريفاتنا؛ يعرض عمود OpenRouter أسعارًا مرجعية لنفس حجم العمل.

بحساب الإدخال والإخراج معًا، يخرج DeepSeek-V4-Flash وGLM-5.3-Flash أرخص من OpenRouter عند هذا الحمل. قائمة الأسعار الكاملة على صفحة الأسعار.

JSON والنبرة وفحص أمثلتك#

تغطي الحيلة نفسها الحالتين الأخريين اللتين ستصادفهما. تحتاج حقول JSON نفسها كل مرة؟ اجعل المثال يجيب بـ JSON نفسه:

text
<example>
<ticket>I was charged twice for the same top-up.</ticket>
<output>{"label": "billing", "urgent": true}</output>
</example>

بخصوص response_format وما تفعله عندما يظل الرد غير صالح، انظر احصل على JSON صالح من LLM API. تريد إعادة كتابة نص بنبرة واحدة؟ صفات مثل "ودود لكن موجز" غامضة؛ زوجان من قبل وبعد يوضحانها أفضل.

قبل أن تثق بأي مجموعة أمثلة، خذ 20 تذكرة صنفتها يدويًا، شغّلها، وقارن. جولة واحدة تخبرك أكثر من أي قاعدة. تضيف صفحة Anthropic اختصارًا: اطلب من النموذج تقييم أمثلتك من حيث الصلة والتنوع، أو كتابة المزيد من الأمثلة التي لديك.

قائمة التحقق

قبل أن تثق بأمثلتك

بمجرد أن تنجح الأمثلة، السؤال التالي هو كيف تمنع عدة مستندات من التداخل في برومبت واحد. صنّف كل مستند في برومبت يتناول ذلك.