مقیاس خلاصه سازی سمت مشتری در پنجره های زمینه کوچک

تاریخ انتشار: 12 مارس 2025، آخرین به روز رسانی: 28 می 2025

توضیح دهنده وب برنامه های افزودنی وضعیت کروم قصد
MDN پشت پرچم کروم 138 بتا پشت پرچم کروم 138 بتا مشاهده کنید قصد حمل

Summarizer API به شما کمک می کند تا خلاصه ای از اطلاعات را در طول ها و قالب های مختلف تولید کنید. از آن با Gemini Nano در کروم یا سایر مدل‌های زبانی که در مرورگرها ساخته شده‌اند، برای توضیح مختصر متن طولانی یا پیچیده استفاده کنید.

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

خلاصه خلاصه چیست؟

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

به عنوان مثال، اگر یک سند به سه قسمت تقسیم شود، هر قسمت خلاصه می شود. این سه خلاصه در کنار هم قرار می گیرند و دوباره برای نتیجه نهایی خلاصه می شوند.

به طور متفکرانه محتوای خود را تقسیم کنید

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

راه های زیادی وجود دارد که می توانید این کار را انجام دهید. در مثال زیر، ما از شکاف متن بازگشتی از LangChain.js استفاده کردیم که عملکرد و کیفیت خروجی را متعادل می کند. این باید برای اکثر بارهای کاری کار کند.

هنگام ایجاد یک نمونه جدید، دو پارامتر کلیدی وجود دارد:

  • chunkSize حداکثر تعداد کاراکترهای مجاز در هر تقسیم است.
  • chunkOverlap مقدار کاراکترهایی است که بین دو تقسیم متوالی همپوشانی دارند. این تضمین می کند که هر تکه دارای مقداری از زمینه مربوط به قسمت قبلی است.

متن را با splitText() تقسیم کنید تا آرایه ای از رشته ها را با هر تکه برگردانید.

اکثر LLM ها پنجره زمینه خود را به عنوان تعدادی نشانه بیان می کنند، نه تعدادی کاراکتر. به طور متوسط، یک نشانه شامل 4 کاراکتر است. در مثال ما، chunkSize 3000 کاراکتر است و تقریباً 750 توکن است.

در دسترس بودن توکن را تعیین کنید

برای تعیین اینکه چه تعداد نشانه برای استفاده برای ورودی موجود است، از متد measureInputUsage() و ویژگی inputQuota استفاده کنید. در این مورد، پیاده‌سازی نامحدود است، زیرا نمی‌توانید بدانید که خلاصه‌کننده چند بار برای پردازش تمام متن اجرا می‌شود.

ایجاد خلاصه برای هر تقسیم

هنگامی که نحوه تقسیم محتوا را تنظیم کردید، می توانید برای هر قسمت با Summarizer API خلاصه تولید کنید.

با تابع create() create یک نمونه از خلاصه کننده ایجاد کنید. برای حفظ هرچه بیشتر متن، پارامتر format را روی plain-text ، type را روی tldr و length را روی long تنظیم کرده‌ایم.

سپس، خلاصه‌ای را برای هر تقسیم ایجاد شده توسط RecursiveCharacterTextSplitter ایجاد کنید و نتایج را در یک رشته جدید الحاق کنید. ما هر خلاصه را با یک خط جدید جدا کردیم تا خلاصه هر قسمت را به وضوح مشخص کنیم.

در حالی که این خط جدید هنگام اجرای این حلقه فقط یک بار مهم نیست، برای تعیین اینکه چگونه هر خلاصه به مقدار توکن برای خلاصه نهایی اضافه می کند مفید است. در بیشتر موارد، این راه حل باید برای محتوای متوسط ​​و طولانی کار کند.

خلاصه بازگشتی از خلاصه

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

اگر خلاصه خلاصه های شما هنوز خیلی طولانی است، می توانید این روند را تکرار کنید. در تئوری، می‌توانید این فرآیند را به‌طور نامحدود تکرار کنید، تا زمانی که طول مناسبی دریافت کنید.

ما هنوز تقسیم‌های اولیه ایجاد شده توسط RecursiveCharacterTextSplitter را جمع‌آوری می‌کنیم. سپس در تابع recursiveSummarizer() ، فرآیند خلاصه‌سازی را بر اساس طول کاراکتر تقسیم‌های پیوسته حلقه می‌کنیم. اگر طول کاراکترهای خلاصه‌ها از 3000 تجاوز کند، آنگاه به fullSummaries متصل می‌شویم. اگر به حد مجاز نرسیده باشد، خلاصه به عنوان partialSummaries ذخیره می شود.

هنگامی که همه خلاصه ها تولید شدند، خلاصه های جزئی نهایی به خلاصه کامل اضافه می شوند. اگر فقط 1 خلاصه در fullSummaries وجود داشته باشد، نیازی به بازگشت اضافی نیست. تابع یک خلاصه نهایی را برمی گرداند. اگر بیش از یک خلاصه وجود داشته باشد، تابع تکرار می شود و به خلاصه کردن خلاصه های جزئی ادامه می دهد.

ما این راه حل را با اینترنت رله چت (IRC) RFC آزمایش کردیم که دارای 110030 کاراکتر است که شامل 17560 کلمه است. Summarizer API خلاصه زیر را ارائه کرد:

چت رله اینترنتی (IRC) راهی برای برقراری ارتباط آنلاین در زمان واقعی با استفاده از پیام های متنی است. می توانید در کانال ها چت کنید یا پیام خصوصی ارسال کنید و می توانید از دستورات برای کنترل چت و تعامل با سرور استفاده کنید. این مانند یک اتاق گفتگو در اینترنت است که می توانید پیام های دیگران را فوراً تایپ کرده و ببینید.

این بسیار موثر است! و فقط 309 کاراکتر دارد.

محدودیت ها

تکنیک خلاصه خلاصه ها به شما کمک می کند تا در پنجره زمینه یک مدل به اندازه مشتری کار کنید. اگرچه مزایای زیادی برای هوش مصنوعی سمت مشتری وجود دارد، ممکن است با موارد زیر روبرو شوید:

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

ما یک نسخه ی نمایشی خلاصه کننده در دسترس داریم و می توانید کد منبع کامل را مشاهده کنید.

بازخورد خود را به اشتراک بگذارید

سعی کنید با استفاده از Summarizer API از تکنیک خلاصه خلاصه‌ها با طول‌های مختلف متن ورودی، اندازه‌های تقسیم‌بندی متفاوت و طول‌های همپوشانی متفاوت استفاده کنید.