قالب‌های Few-shot prompt

اضافه کردن نمونه‌های تعاملی در الگوها به مدل کمک می‌کند که قصد کاربر را بهتر درک کند و پاسخ‌های بهتری ارائه یا وظایف را انجام دهد. قالب‌های Few-shot prompt به استفاده از یک مجموعه کوچکی از نمونه‌ها برای هدایت مدل در انجام ورودی‌های جدید اشاره دارد. این نمونه‌ها می‌توانند برای آموزش مدل استفاده شوند تا بهتر بتواند سوالات مشابه را درک کند و پاسخ دهد.

مثال:

Q: Batman چیست؟
A: Batman یک شخصیت فیکشنال کمیک است.

Q: Torsalplexity چیست؟
A: نامعلوم.

Q: مدل زبان چیست؟
A:

به مدل بگویید که Q سوال و A پاسخ است، و در این فرمت تعامل کند.

توضیحات کلاس ابزار ارائه شده توسط Lanchain برای درج چند نمونه تعاملی در الگو را می‌توانید در زیر بیابید.

استفاده از مجموعه مثال

ساختن مجموعه نمونه

مجموعه‌ای از نمونه‌های سوال و جواب‌ها را در زیر تعریف کنید.

from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate

examples = [
  {
    "question": "عمر کدامیک از محمد علی یا آلن تورینگ بیشتر است؟",
    "answer":
"""
آیا می‌خواهیم سوال را پیگیری کنیم؟: بله.
پیگیری: محمد علی چند ساله بود که مرگ کرد؟
پاسخ میانی: محمد علی وقتی مرد ۷۴ سال داشت.
پیگیری: آلن تورینگ چند ساله بود که مرگ کرد؟
پاسخ میانی: آلن تورینگ وقتی مرد ۴۱ سال داشت.
پس جواب نهایی: محمد علی است.
"""
  },
  {
    "question": "موسس craigslist کی متولد شد؟",
    "answer":
"""
آیا می‌خواهیم سوال را پیگیری کنیم؟: بله.
پیگیری: موسس craigslist کیست؟
پاسخ میانی: craigslist توسط Craig Newmark تأسیس شد.
پیگیری: Craig Newmark کی متولد شد؟
پاسخ میانی: Craig Newmark در ۶ دسامبر ۱۹۵۲ متولد شد.
پس جواب نهایی: ۶ دسامبر ۱۹۵۲ است.
"""
  },
  {
    "question": "مادر جد و پدربزرگان جرج واشنگتن چه کسانی بودند؟",
    "answer":
"""
آیا می‌خواهیم سوال را پیگیری کنیم؟: بله.
پیگیری: مادر جرج واشنگتن کیست؟
پاسخ میانی: مادر جرج واشنگتن مری بال واشنگتن بود.
پیگیری: پدر مری بال واشنگتن کیست؟
پاسخ میانی: پدر مری بال واشنگتن جوزف بال بود.
پس جواب نهایی: جوزف بال است.
"""
  },
  {
    "question": "آیا کارگردانان 'Jaws' و 'Casino Royale' از یک کشور هستند؟",
    "answer":
"""
آیا می‌خواهیم سوال را پیگیری کنیم؟: بله.
پیگیری: کارگردان 'Jaws' کیست؟
پاسخ میانی: کارگردان 'Jaws' استیون اسپیلبرگ است.
پیگیری: او اهل کجا هست؟
پاسخ میانی: ایالات متحده.
پیگیری: کارگردان 'Casino Royale' کیست؟
پاسخ میانی: کارگردان 'Casino Royale' مارتین کمپبل است.
پیگیری: او اهل کجا هست؟
پاسخ میانی: نیوزیلند.
پس جواب نهایی: نه
"""
  }
]

ایجاد قالب برای نمونه‌های کوچک

با استفاده از شیء PromptTemplate، به راحتی می‌توان نمونه‌ها را در قالب الگو درج کرد.

example_prompt = PromptTemplate(input_variables=["question", "answer"], template="سوال: {question}\\n{answer}")

print(example_prompt.format(**examples[0]))

خروجی:

سوال: عمر کدامیک از محمد علی یا آلن تورینگ بیشتر است؟

آیا می‌خواهیم سوال را پیگیری کنیم؟: بله.
پیگیری: محمد علی چند ساله بود که مرگ کرد؟
پاسخ میانی: محمد علی وقتی مرد ۷۴ سال داشت.
پیگیری: آلن تورینگ چند ساله بود که مرگ کرد؟
پاسخ میانی: آلن تورینگ وقتی مرد ۴۱ سال داشت.
پس جواب نهایی: محمد علی است.

ارائه نمونه‌ها و قالب‌بندی برای FewShotPromptTemplate

با استفاده از شی FewShotPromptTemplate، می‌توانید محتوای نمونه را به صورت گروهی وارد کنید.

prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    suffix="سوال: {input}",
    input_variables=["input"]
)

print(prompt.format(input="پدر جرج واشنگتن کیست؟"))

Returns:

سوال: که عمر بیشتری داشته است، محمد علی یا آلن تورینگ؟

آیا ما باید از این سوال پیگیری کنیم: بله. 
پیگیری: چند سال بود محمد علی وقتی که مرد؟ 
جواب میانی: محمد علی 74 سال داشت وقتی که مرد.
پیگیری: چند سال بود آلن تورینگ وقتی که مرد؟ 
جواب میانی: آلن تورینگ 41 سال داشت وقتی که مرد.
پس جواب نهایی: محمد علی

سوال: موسس craigslist چه زمانی متولد شد؟ 

آیا ما باید از این سوال پیگیری کنیم: بله. 
پیگیری: موسس craigslist کیست؟ 
جواب میانی: craigslist توسط کریگ نیومارک تاسیس شد.
پیگیری: کریگ نیومارک چه زمانی متولد شد؟ 
جواب میانی: کریگ نیومارک در 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"The most similar example: {question}")
for example in selected_examples:
    print("\\n")
    for k, v in example.items():
        print(f"{k}: {v}")

در اینجا، نمونه‌های مشابه سوال مطابقت داده شده و خروجی زیر برگردانده می‌شود:

اجرای Chroma به صورت مستقیم با استفاده از API محلی.
    استفاده از پایگاه داده در حافظه DuckDB. داده‌ها خواهند بود فرار.
    The most similar example: پدر جرج واشنگتن کیست؟
    question: پدر جرج واشنگتن کیست؟
    جواب: 
    آیا ما باید از این سوال پیگیری کنیم: بله.
    پیگیری: مادر جرج واشنگتن کیست؟
    جواب میانی: مادر جرج واشنگتن مری بال واشنگتن است.
    پیگیری: پدر مری بال واشنگتن کیست؟
    جواب میانی: پدر مری بال واشنگتن جوزف بال است.
    پس جواب نهایی: جوزف بال

ارائه‌دهنده‌ی انتخاب نمونه برای FewShotPromptTemplate

سرانجام، یک شی FewShotPromptTemplate بسازید. بر اساس انتخاب_نمونه از مثال قبلی، یک مثال مشابه به سوال انتخاب کنید.

prompt = FewShotPromptTemplate(
    example_selector=example_selector,
    example_prompt=example_prompt,
    suffix="سوال: {input}",
    input_variables=["input"]
)

print(prompt.format(input="پدر جرج واشنگتن کیست؟"))

بازمیگرداند:

سوال: پدر پدربزرگ‌های جرج واشنگتن کیست؟

آیا ما باید از این سوال پیگیری کنیم: بله.
پیگیری: پدر مادر جرج واشنگتن کیست؟
پاسخ میانی: مادر جرج واشنگتن مری بال واشنگتن است.
پیگیری: پدر مادر مری بال واشنگتن کیست؟
پاسخ میانی: پدر مری بال واشنگتن جوزف بال است.
پس پاسخ نهایی: جوزف بال

سوال: پدر جرج واشنگتن کیست؟