مهندسی سریع عملی برای LLM های کوچکتر

مود نالپاس
Maud Nalpas

اثربخشی یک مدل زبان بزرگ به شدت به دستورالعمل‌هایی که به آن می‌دهیم متکی است. مهندسی سریع فرآیند ایجاد سؤالات به روشی است که بهترین خروجی را از یک LLM می گیرد. این یک گام مهم در اجرای یک ویژگی مبتنی بر LLM است.

مهندسی سریع یک فرآیند تکراری است. اگر با LLM های مختلف آزمایش کرده اید، احتمالاً متوجه شده اید که برای دستیابی به نتیجه بهتر باید دستور خود را تغییر دهید.

این موضوع برای مدل های با اندازه های مختلف نیز صادق است.

رابط‌های چت که توسط LLM‌های بزرگ، مانند Gemini یا ChatGPT ارائه می‌شوند، اغلب می‌توانند نتایج رضایت‌بخشی را با کمترین تلاش برای تحریک ایجاد کنند. با این حال، هنگام کار با یک LLM پیش فرض و کوچکتر که به خوبی تنظیم نشده است، باید رویکرد خود را تطبیق دهید.

LLMهای کوچکتر قدرت کمتری دارند و اطلاعات کوچکتری برای استخراج دارند.

منظور ما از "LLM های کوچکتر" چیست؟

تعریف اندازه های LLM پیچیده است و سازندگان همیشه آن ها را فاش نمی کنند.

در این سند، "LLM های کوچکتر" به معنای هر مدلی با پارامترهای 30B است. از امروز، مدل‌هایی با چند میلیون تا چند میلیارد پارامتر می‌توانند به طور واقعی در مرورگر، روی دستگاه‌های درجه مصرف‌کننده اجرا شوند.

LLM های کوچکتر کجا استفاده می شوند؟

  • هوش مصنوعی مولد روی دستگاه/در مرورگر ، برای مثال اگر از Gemma 2B با MediaPipe's LLM Inference API (حتی مناسب برای دستگاه‌های فقط CPU) یا DistilBert در مرورگر با Transformers.js استفاده می‌کنید. دانلود یک مدل و اجرای استنباط روی دستگاه کاربر فقط با این LLM های کوچکتر امکان پذیر است تا بارگیری های وب معقول بماند و با محدودیت های حافظه و GPU/CPU دستگاه مطابقت داشته باشد.
  • هوش مصنوعی مولد سمت سرور سفارشی . مدل‌های کوچک وزن باز مانند Gemma 2B، Gemma 7B یا Gemma 27B برای اجرا در سرور خود (و به صورت اختیاری تنظیم دقیق) در دسترس شما هستند.

شروع کنید

رابط‌های چت که توسط LLM‌های بزرگ، مانند Gemini یا ChatGPT ارائه می‌شوند، اغلب می‌توانند نتایج رضایت‌بخشی را با کمترین تلاش تحریک‌کننده ایجاد کنند. با این حال، هنگام کار با LLM های کوچکتر، باید رویکرد خود را تطبیق دهید. LLMهای کوچکتر قدرت کمتری دارند و اطلاعات کوچکتری برای استخراج دارند.

چارچوب و دستورالعمل های قالب دقیق را ارائه دهید

برای دستیابی به نتایج بهینه با LLM های کوچک، اعلان های دقیق تر و خاص تر ایجاد کنید.

به عنوان مثال:

Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.

Review: "${review}"
Rating:
ورودی (بررسی) خروجی (رده بندی)
LLM بزرگتر (Gemini 1.5) LLM کوچکتر (Gemma 2B)
کاملاً عاشق تناسب اندام! وزن را به خوبی توزیع می کند و حتی در سفرهای تمام روز به طرز شگفت انگیزی راحت است. توصیه می کند. 5 4 از 5 ستاره**
تسمه ها سست هستند و زیر بارهای سنگین شروع به فرو بردن شانه هایم کردند. 1 2/5

در حالی که Gemini 1.5 خروجی مورد نظر را با این دستور ساده ارائه می دهد، خروجی Gemma راضی کننده نیست:

  • قالب نادرست است. ما یک عدد صحیح برای رتبه بندی درخواست کردیم.
  • رتبه بندی چندان دقیق به نظر نمی رسد. بررسی اول به اندازه کافی مشتاقانه است که نشان دهنده یک بررسی 5 ستاره است.

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

به عنوان مثال:

`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
    \n\n
    Here are some examples of reviews and their corresponding analyses and
    ratings:
    \n\n
    Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
    use, but it's perfect for urban exploring.'
    Analysis: The reviewer appreciates the product's style and basic
    functionality. They express some uncertainty about its ruggedness but
    overall find it suitable for their intended use, resulting in a positive,
    but not top-tier rating.
    Rating (integer): 4
    \n\n
    Review: 'It's a solid backpack at a decent price. Does the job, but nothing
    particularly amazing about it.'
    Analysis: This reflects an average opinion. The backpack is functional and
    fulfills its essential purpose. However, the reviewer finds it unremarkable
    and lacking any standout features deserving of higher praise.
    Rating (integer): 3
    \n\n
    Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
    Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
    Rating (integer): 1
    \n\n
    Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
    Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
    Rating (integer): 5
    \n\n
    Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
    Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
    Rating (integer): 1
    \n\n
    Now, here is the review you need to assess:
    \n
    Review: "${review}" \n`;
ورودی (بررسی) خروجی با LLM کوچکتر (Gemma 2B)

کاملاً عاشق تناسب اندام! وزن را به خوبی توزیع می کند و حتی در سفرهای تمام روز به طرز شگفت انگیزی راحت است. توصیه می کند.

تجزیه و تحلیل: این بررسی بسیار مثبت است و بر تناسب و راحتی محصول تأکید دارد که نشان دهنده رضایت زیاد از محصول است. این امتیاز بالا را توجیه می کند.

رتبه (عدد صحیح): 5

تسمه ها سست هستند و زیر بارهای سنگین شروع به فرو بردن شانه هایم کردند.

**تحلیل:** بررسی مشکل راحتی قابل توجهی را در تسمه ها نشان می دهد. همچنین نشان می دهد که این محصول ممکن است برای بارهای سنگین یا گردش های طولانی مدت مناسب نباشد.

**امتیاز:** 1 (بدترین)

اعلان دقیق‌تر ما، همراه با تکنیک‌های تحریک چند عکس و زنجیره‌ای از فکر، رتبه‌بندی دقیق‌تری ارائه می‌دهد.

انتظار تجزیه دستی خروجی را داشته باشید

در حالی که همیشه باید خروجی LLM را به صورت دستی پاکسازی و تفسیر کنید، این امر به ویژه برای LLM های کوچکتر که ممکن است نتایج صیقلی کمتری تولید کنند و ممکن است به درخواست زنجیره ای نیاز داشته باشند صادق است.

در مثال اول، از اعلان زنجیره‌ای از فکر استفاده کردیم، بنابراین خروجی شامل تجزیه و تحلیل و رتبه‌بندی می‌شود و باید به صورت دستی برای رتبه‌بندی تجزیه و تحلیل کنیم. همچنین به قالب بندی متناقض در خروجی قسمت قبل توجه کنید: مدل گاهی اوقات نشانه گذاری را خروجی می دهد، اما نه هر بار.

// Use try/catch to catch (parsing) errors
try {
  // Parse the output for a rating
  const int = /[1-5]/;
  const ratingAsString = llmOutput.match(int)[0];
  // Parse as int
  const ratingAsInt = parseInt(ratingAsString);
  // `checkRating` checks the rating is a number between 1 and 5, since the
  // regEx may catch a number like "100"
  const finalRating = checkRating(ratingAsInt);
} catch (e) {
  console.error('Error', e);
}

تفاوت های ذهنی API

API های ابری LLM مانند Gemini API یا OpenAI، که معمولاً نقطه ورود به LLM های بزرگتر هستند، ویژگی های سریع و مفیدی را ارائه می دهند. به عنوان مثال، Gemini 1.5 Pro دستورالعمل های سیستم و حالت JSON را ارائه می دهد.

در حال حاضر، این ویژگی‌ها همیشه برای استفاده از مدل سفارشی یا برای LLM‌های کوچک‌تر که با استفاده از APIهای هوش مصنوعی درون مرورگر قابل دسترسی هستند، مانند MediaPipe LLM Inference API یا Transformers.js در دسترس نیستند. در حالی که این لزوماً یک محدودیت فنی نیست، APIهای هوش مصنوعی درون مرورگر کم‌تر هستند.

محدودیت های رمزی ذهن

از آنجایی که درخواست شما برای LLM های کوچکتر باید شامل مثال ها یا دستورالعمل های دقیق تری باشد، احتمالا طولانی تر خواهد بود و در صورت وجود محدودیت توکن ورودی شما، بیشتر خواهد بود.

علاوه بر این، مدل‌های کوچک‌تر معمولاً محدودیت رمز ورودی کوچک‌تری دارند. به عنوان مثال، Gemini 1.5 Pro دارای محدودیت رمز ورودی 1 میلیونی است در حالی که مدل‌های Gemma دارای یک پنجره زمینه 8K هستند.

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

برآورد زمان خود را تطبیق دهید

طراحی و آزمایش سریع را در برآوردهای زمانی مهندسی خود در نظر بگیرید.

با توجه به تفاوت‌های API و محدودیت‌های توکن، احتمالاً به زمان و تلاش بیشتری برای ایجاد درخواست خود برای یک LLM کوچکتر از یک بزرگتر نیاز دارید. آزمایش و اعتبارسنجی خروجی LLM نیز ممکن است تلاش بیشتری باشد.

مهندس سریع در مقابل تنظیم دقیق؟

برای توسعه دهندگان وب، مهندسی سریع روش ترجیحی ما برای استفاده از هوش مصنوعی مولد نسبت به آموزش سفارشی و تنظیم دقیق است. اما حتی مهندسی سریع پیشرفته ممکن است در برخی موارد استفاده کافی نباشد، به خصوص اگر از یک LLM کوچکتر استفاده می کنید.

از تنظیم دقیق زمانی استفاده کنید که:

  • شما برای یک کار خاص به دقت و عملکرد درجه یک نیاز دارید. تنظیم دقیق به طور مستقیم پارامترهای داخلی مدل را برای نتایج بهینه تنظیم می کند.
  • شما داده های به خوبی تنظیم شده، مرتبط با وظیفه خود، که قبلاً با خروجی های ترجیحی برچسب گذاری شده اند، دارید. برای تنظیم دقیق به این داده ها نیاز دارید.
  • شما به طور مکرر از مدل برای همان هدف استفاده می کنید. تنظیم دقیق را می توان یک بار انجام داد و دوباره برای یک کار خاص استفاده کرد.