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

تاریخ انتشار: 12 مارس 2025

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

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

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

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

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

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

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

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

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

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

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

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

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

در مثال ما، chunkSize 3000 کاراکتر است و تقریباً 750 توکن است.

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

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

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

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

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

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

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

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

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

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

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

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

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

محدودیت ها

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

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

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

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

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

اکنون با پیوستن به نسخه آزمایشی اولیه، آزمایش Summarizer API را شروع کنید و بازخورد خود را به اشتراک بگذارید. ورودی شما می‌تواند مستقیماً بر نحوه ساخت و اجرای نسخه‌های آینده این API و همه APIهای AI داخلی تأثیر بگذارد.