قوالب الموجَّهة لمجموعة أمثلة محدودة
يُساعد تضمين الأمثلة التفاعلية في القوالب الموجَّهة الطراز العصري على فهم نية المستخدم بشكل أفضل وتوفير إجابات أفضل أو أداء المهام بشكل أفضل. تُشير قوالب الموجَّهة لمجموعة أمثلة إلى استخدام مجموعة صغيرة من الأمثلة لتوجيه النموذج في معالجة المدخلات الجديدة. يمكن استخدام هذه الأمثلة لتدريب النموذج بحيث يمكنه فهم الأسئلة المماثلة والرد عليها بشكل أفضل.
مثال:
س: ما هو باتمان؟
ج: باتمان شخصية كوميكس خيالية.
س: ما هو torsalplexity؟
ج: غير معروف.
س: ما هو نموذج اللغة؟
ج:
قُم بإخبار النموذج بأن الس هو السؤال و الج هو الجواب، وتفاعل في هذا الشكل.
وفيما يلي شرح لفئة الأدوات التي يقدمها لانتشين لإدراج عدد صغير من الأمثلة التفاعلية في النص الموجَّه.
استخدام مجموعة الأمثلة
إنشاء مجموعة أمثلة
قم بتحديد مصفوفة "examples" أدناه، التي تحتوي على مجموعة من الأمثلة السؤالية والجوابية.
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate
examples = [
{
"question": "من الذي يعيش لفترة أطول، محمد علي أم آلان تورينغ؟",
"answer":
"""
هل نحتاج إلى متابعة السؤال: نعم.
متابعة: ما هو عمر محمد علي عند وفاته؟
جواب متوسط: كان عمر محمد علي 74 عامًا عند وفاته.
متابعة: ما هو عمر آلان تورينغ عند وفاته؟
جواب متوسط: كان عمر آلان تورينغ 41 عامًا عند وفاته.
لذلك الجواب النهائي هو: محمد علي
"""
},
{
"question": "متى وُلِدَ مؤسس موقع كريغزلست؟",
"answer":
"""
هل نحتاج إلى متابعة السؤال: نعم.
متابعة: من هو مؤسس موقع كريغزلست؟
جواب متوسط: تأسس كريغزلست من قبل كريغ نيومارك.
متابعة: متى وُلِدَ كريغ نيومارك؟
جواب متوسط: وُلِد كريغ نيومارك في 6 ديسمبر 1952.
لذلك الجواب النهائي هو: 6 ديسمبر 1952
"""
},
{
"question": "من كانت الجدة لجورج واشنطن؟",
"answer":
"""
هل نحتاج إلى متابعة السؤال: نعم.
متابعة: من هي الأم لجورج واشنطن؟
جواب متوسط: والدة جورج واشنطن هي ماري بول واشنطن.
متابعة: من هو الأب لماري بول واشنطن؟
جواب متوسط: والد ماري بول واشنطن هو جوزيف بول.
لذلك الجواب النهائي هو: جوزيف بول
"""
},
{
"question": "هل مديرو 'فك الفكرة' و'كازينو رويال' من نفس البلد؟",
"answer":
"""
هل نحتاج إلى متابعة السؤال: نعم.
متابعة: من هو مدير 'فك الفكرة'؟
جواب متوسط: المدير ل 'فك الفكرة' هو ستيفن سبيلبرغ.
متابعة: من أين هو ستيفن سبيلبرغ؟
جواب متوسط: الولايات المتحدة.
متابعة: من هو مدير 'كازينو رويال'؟
جواب متوسط: المدير ل 'كازينو رويال' هو مارتن كامبل.
متابعة: من أين هو مارتن كامبل؟
جواب متوسط: نيوزيلاندا.
لذلك الجواب النهائي هو: لا
"""
}
]
إنشاء منسّق لأمثلة الصغيرة
قم ببساطة بإدراج الأمثلة في قالب الموجَّه باستخدام كائن PromptTemplate
.
example_prompt = PromptTemplate(input_variables=["question", "answer"], template="Question: {question}\\n{answer}")
print(example_prompt.format(**examples[0]))
الإخراج:
سؤال: من الذي يعيش لفترة أطول، محمد علي أم آلان تورينغ؟
هل نحتاج إلى متابعة السؤال: نعم.
متابعة: ما هو عمر محمد علي عند وفاته؟
جواب متوسط: كان عمر محمد علي 74 عامًا عند وفاته.
متابعة: ما هو عمر آلان تورينغ عند وفاته؟
جواب متوسط: كان عمر آلان تورينغ 41 عامًا عند وفاته.
لذلك الجواب النهائي هو: محمد علي
توفير عينات وتنسيق لـ FewShotPromptTemplate
مع كائن FewShotPromptTemplate
، يمكنك إدراج محتوى عينة بشكل جماعي.
prompt = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
suffix="السؤال: {input}",
input_variables=["input"]
)
print(prompt.format(input="من هو والد جورج واشنطن؟"))
النتيجة:
السؤال: هل يعيش محمد علي أطول من عُمر ألان تورينغ؟
هل نحتاج لمتابعة هذا السؤال: نعم.
المتابعة: كم كان عمر محمد علي عند وفاته؟
الجواب الوسيط: كان عمر محمد علي 74 عامًا عند وفاته.
المتابعة: كم كان عمر ألان تورينغ عند وفاته؟
الجواب الوسيط: كان عمر ألان تورينغ 41 عامًا عند وفاته.
لذا الجواب النهائي هو: محمد علي
السؤال: متى وُلِد مؤسس موقع كريغزلست؟
هل نحتاج لمتابعة هذا السؤال: نعم.
المتابعة: من هو مؤسس موقع كريغزلست؟
الجواب الوسيط: تأسس موقع كريغزلست بواسطة كريغ نيومارك.
المتابعة: متى وُلِد كريغ نيومارك؟
الجواب الوسيط: وُلِد كريغ نيومارك في 6 ديسمبر 1952.
لذا الجواب النهائي هو: 6 ديسمبر 1952
السؤال: من هي أم جدود جورج واشنطن؟
هل نحتاج لمتابعة هذا السؤال: نعم.
المتابعة: من هي أم جورج واشنطن؟
الجواب الوسيط: أم جورج واشنطن هي ماري بول واشنطن.
المتابعة: من هو والد ماري بول واشنطن؟
الجواب الوسيط: والد ماري بول واشنطن هو جوزيف بول.
لذا الجواب النهائي هو: جوزيف بول
السؤال: هل مُخرجا أفلام "Jaws" و"Casino Royale" من نفس البلد؟
هل نحتاج لمتابعة هذا السؤال: نعم.
المتابعة: من هو مُخرج فيلم "Jaws"؟
الجواب الوسيط: مُخرج فيلم "Jaws" هو ستيفن سبيلبرغ.
المتابعة: من أين يأتي ستيفن سبيلبرغ؟
الجواب الوسيط: الولايات المتحدة.
المتابعة: من هو مُخرج فيلم "Casino Royale"؟
الجواب الوسيط: مُخرج فيلم "Casino Royale" هو مارتن كامبل.
المتابعة: من أين يأتي مارتن كامبل؟
الجواب الوسيط: نيوزيلندا.
لذا الجواب النهائي هو: لا
السؤال: من هو والد جورج واشنطن؟
استخدام محدِّدات العينة
توفير أمثلة إلى ExampleSelector
هنا نعيد استخدام مجموعة الأمثلة وقالب الاستفسار من القسم السابق. ومع ذلك، بدلاً من تقديم الأمثلة مباشرة إلى كائن FewShotPromptTemplate
وإدراج جميع الأمثلة في القالب، سنقدمها إلى كائن ExampleSelector
لإدراج جزء من الأمثلة.
سنستخدم هنا فئة SemanticSimilarityExampleSelector
. تقوم هذه الفئة باختيار مثال عيني صغير بناءً على تشابهه مع الإدخال. تستخدم نموذج تضمين لحساب التشابه بين الإدخال ومثال العينة الصغير، ثم تستخدم قاعدة بيانات ناقلة لتنفيذ البحث عن التشابه واسترداد أمثلة مماثلة للإدخال.
- ملاحظة: ينطوي ذلك على حسابات الناقل وقاعدة بيانات الناقل، والتي تستخدم أساسًا في مجال الذكاء الاصطناعي للبحث عن التشابه في البيانات، مثل الاستعلام عن محتوى المقالات المماثلة، الصور المماثلة، مقاطع الفيديو، إلخ. دعنا نحصل على فهم بسيط هنا في الوقت الحالي.
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
example_selector = SemanticSimilarityExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
Chroma,
k=1
)
question = "من هو والد جورج واشنطن؟"
selected_examples = example_selector.select_examples({"question": question})
print(f"المثال الأكثر تشابهاً: {question}")
for example in selected_examples:
print("\\n")
for k, v in example.items():
print(f"{k}: {v}")
هنا، يتم تطابق الأمثلة المماثلة للسؤال، ويعود المخرج بالتالي:
يتم تشغيل Chroma مباشرة باستخدام واجهة برمجة التطبيقات المحلية.
يتم استخدام قاعدة البيانات في ذاكرة DuckDB. ستكون البيانات زاخرة.
المثال الأكثر تشابهاً: من هي أم جدود جورج واشنطن؟
السؤال: من هي أم جورج واشنطن؟
الجواب:
هل نحتاج للمتابعة مع هذا السؤال: نعم.
المتابعة: من هي أم جورج واشنطن؟
الجواب الوسيط: أم جورج واشنطن هي ماري بول واشنطن.
المتابعة: من هو والد ماري بول واشنطن؟
الجواب الوسيط: والد ماري بول واشنطن هو جوزيف بول.
لذا الجواب النهائي هو: جوزيف بول
قم بتوفير محدد المثال لـ FewShotPromptTemplate
أخيرًا، قم بإنشاء كائن FewShotPromptTemplate
. استنادًا إلى محدد المثال من المثال السابق، قم باختيار مثال مماثل للسؤال.
prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
suffix="السؤال: {input}",
input_variables=["input"]
)
print(prompt.format(input="من هو والد جورج واشنطن؟"))
الناتج:
السؤال: من هي أم أجداد جورج واشنطن؟
هل نحتاج إلى متابعة لهذا السؤال: نعم.
متابعة: من هي أم جورج واشنطن؟
الإجابة المتوسطة: أم جورج واشنطن هي ماري بول واشنطن.
متابعة: من هو والد ماري بول واشنطن؟
الإجابة المتوسطة: والد ماري بول واشنطن هو جوزيف بول.
إذا الإجابة النهائية هي: جوزيف بول
السؤال: من هو والد جورج واشنطن؟