Menskalakan ringkasan sisi klien di jendela konteks kecil

Dipublikasikan: 12 Maret 2025, Terakhir diperbarui: 28 Mei 2025

Penjelasan Web Ekstensi Status Chrome Intent
MDN Chrome 138 Chrome 138 View Intent to Ship

The Summarizer API membantu Anda membuat ringkasan informasi dalam berbagai panjang dan format. Gunakan dengan model dasar di Chrome, atau model bahasa lain yang terintegrasi ke dalam browser, untuk menjelaskan teks panjang atau rumit secara ringkas.

Saat dilakukan di sisi klien, Anda dapat mengolah data secara lokal, yang memungkinkan Anda menjaga keamanan data sensitif dan dapat menawarkan ketersediaan dalam skala besar. Namun, jendela konteks jauh lebih kecil daripada model sisi server, yang berarti dokumen yang sangat besar mungkin sulit diringkas. Untuk mengatasi masalah ini, Anda dapat menggunakan teknik ringkasan ringkasan.

Apa yang dimaksud dengan ringkasan ringkasan?

Untuk menggunakan teknik ringkasan ringkasan, pisahkan konten input pada poin-poin penting, lalu ringkas setiap bagian secara terpisah. Anda dapat menggabungkan output dari setiap bagian, lalu meringkas teks gabungan ini menjadi satu ringkasan akhir.

Misalnya, jika dokumen dibagi menjadi tiga bagian, setiap bagian akan diringkas. Ketiga ringkasan tersebut digabungkan dan diringkas lagi untuk hasil akhir.

Membagi konten dengan cermat

Penting untuk mempertimbangkan cara Anda membagi teks yang besar, karena strategi yang berbeda dapat menghasilkan output yang berbeda di seluruh LLM. Idealnya, teks harus dibagi saat ada perubahan topik, seperti bagian baru dari artikel atau di paragraf. Penting untuk menghindari pemisahan teks di tengah kata atau kalimat, yang berarti Anda tidak dapat menggunakan jumlah karakter sebagai satu-satunya panduan pemisahan.

Ada banyak cara untuk melakukannya. Pada contoh berikut, kami menggunakan Pemisah Teks Rekursif dari LangChain.js, yang menyeimbangkan performa dan kualitas output. Hal ini akan berfungsi untuk sebagian besar beban kerja.

Saat membuat instance baru, ada dua parameter utama:

  • chunkSize adalah jumlah karakter maksimum yang diizinkan di setiap pemisahan.
  • chunkOverlap adalah jumlah karakter yang akan tumpang tindih antara dua pemisahan berurutan. Hal ini memastikan bahwa setiap bagian memiliki beberapa konteks dari bagian sebelumnya.

Pisahkan teks dengan splitText() untuk menampilkan array string dengan setiap bagian.

Sebagian besar LLM memiliki jendela konteks yang dinyatakan sebagai jumlah token, bukan jumlah karakter. Rata-rata, token berisi 4 karakter. Dalam contoh kami, chunkSize adalah 3.000 karakter dan kira-kira 750 token.

Menentukan ketersediaan token

Untuk menentukan jumlah token yang tersedia untuk digunakan sebagai input, gunakan metode measureInputUsage() dan propertiinputQuota. Dalam hal ini, implementasinya tidak terbatas, karena Anda tidak dapat mengetahui berapa kali perangkum akan berjalan untuk memproses semua teks.

Membuat ringkasan untuk setiap pemisahan

Setelah menyiapkan cara konten dibagi, Anda dapat membuat ringkasan untuk setiap bagian dengan Summarizer API.

Buat instance perangkum dengan fungsi create(). Untuk mempertahankan konteks sebanyak mungkin, kami telah menetapkan parameter format ke plain-text, type ke tldr, dan length ke long.

Kemudian, buat ringkasan untuk setiap pemisahan yang dibuat oleh RecursiveCharacterTextSplitter dan gabungkan hasilnya ke dalam string baru. Kami memisahkan setiap ringkasan dengan baris baru untuk mengidentifikasi ringkasan untuk setiap bagian dengan jelas.

Meskipun baris baru ini tidak masalah saat menjalankan loop ini hanya sekali, baris ini berguna untuk menentukan bagaimana setiap ringkasan menambahkan nilai token untuk ringkasan akhir. Dalam sebagian besar kasus, solusi ini akan berfungsi untuk konten sedang dan panjang.

Ringkasan ringkasan rekursif

Jika Anda memiliki teks yang sangat panjang, panjang ringkasan gabungan mungkin lebih besar daripada jendela konteks yang tersedia, sehingga menyebabkan ringkasan gagal. Untuk mengatasi hal ini, Anda dapat meringkas ringkasan secara rekursif.

Jika ringkasan ringkasan Anda masih terlalu panjang, Anda dapat mengulangi prosesnya. Secara teori, Anda dapat mengulangi proses ini tanpa batas, hingga Anda menerima panjang yang sesuai.

Kami masih mengumpulkan pemisahan awal yang dihasilkan oleh RecursiveCharacterTextSplitter. Kemudian, dalam fungsi recursiveSummarizer(), kami mengulang proses ringkasan berdasarkan panjang karakter pemisahan gabungan. Jika panjang karakter ringkasan melebihi 3000, kami akan menggabungkannya ke dalam fullSummaries. Jika batas tidak tercapai, ringkasan akan disimpan sebagai partialSummaries.

Setelah semua ringkasan dibuat, ringkasan parsial akhir akan ditambahkan ke ringkasan lengkap. Jika hanya ada 1 ringkasan di fullSummaries, tidak diperlukan rekursi tambahan. Fungsi ini menampilkan ringkasan akhir. Jika ada lebih dari satu ringkasan, fungsi akan diulang dan terus meringkas ringkasan parsial.

Kami menguji solusi ini dengan RFC Internet Relay Chat (IRC), yang memiliki 110.030 karakter yang mencakup 17.560 kata. Summarizer API memberikan ringkasan berikut:

Internet Relay Chat (IRC) adalah cara untuk berkomunikasi secara online secara real-time menggunakan pesan teks. Anda dapat melakukan chat di saluran atau mengirim pesan pribadi, dan Anda dapat menggunakan perintah untuk mengontrol chat dan berinteraksi dengan server. Ini seperti ruang chat di internet tempat Anda dapat mengetik dan melihat pesan orang lain secara instan.

Cukup efektif! Dan, hanya 309 karakter.

Batasan

Teknik ringkasan ringkasan membantu Anda beroperasi dalam jendela konteks model ukuran klien. Meskipun ada banyak manfaat untuk AI sisi klien, Anda mungkin mengalami hal berikut:

  • Ringkasan yang kurang akurat: Dengan rekursi, pengulangan proses ringkasan mungkin tidak terbatas, dan setiap ringkasan semakin jauh dari teks asli. Artinya, model dapat membuat ringkasan akhir yang terlalu dangkal untuk berguna.
  • Performa lebih lambat: Setiap ringkasan memerlukan waktu untuk dibuat. Sekali lagi, dengan jumlah ringkasan yang mungkin tidak terbatas dalam teks yang lebih besar, pendekatan ini mungkin memerlukan waktu beberapa menit untuk diselesaikan.

Kami memiliki demo perangkum yang tersedia, dan Anda dapat melihat kode sumber lengkap.

Beri masukan

Coba gunakan teknik ringkasan ringkasan dengan berbagai panjang teks input teks, ukuran pemisahan yang berbeda, dan panjang tumpang tindih yang berbeda, dengan Summarizer API.