Obrolan karakter dengan memori jangka menengah dan panjang terintegrasi
Lihat di sini!
Saya telah bereksperimen (dan menikmati) banyak layanan permainan peran karakter yang berbeda baru-baru ini. Favorit saya adalah Character.ai, Doppel.ai, dan Poly.ai oleh Cloud Whale Interactive Technology (jangan bingung dengan poly.ai, pengembang chatbot layanan pelanggan)
Namun, masing-masing sistem ini mempunyai keterbatasan yang dapat memperparah. Saya telah mencoba mengatasi beberapa di antaranya dalam proyek ini.
Obrolan berbasis karakter memang bagus dan mengasyikkan, tetapi kenangannya singkat. Mereka sering lupa akan latar, situasi, dan peristiwa penting sebelumnya. Meskipun menggunakan jendela konteks yang lebih panjang dapat membantu hal ini, harga token mahal! Bagaimana kita bisa memberikan karakter memori yang panjang, namun membatasi jumlah token yang dikirim untuk setiap penyelesaian? Namun Doppel.ai jauh lebih baik dalam hal ini daripada yang lain. Karakter mereka memiliki ingatan yang lebih panjang.
Karakter kehilangan kepribadiannya seiring berjalannya waktu atau cenderung terjebak dalam putaran respons yang berulang. Beberapa layanan lebih baik daripada yang lain dalam hal ini, tetapi saya telah melihat hal ini terjadi sampai batas tertentu pada semuanya.
Karakter bersifat statis setelah dibuat. Beberapa layanan memungkinkan Anda menambahkan 'kenangan' tambahan ke karakter, namun saya belum menemukan layanan yang memungkinkan Anda mengubah kepribadian dasar karakter tanpa memulai kembali percakapan.
Agen dilengkapi dengan "memori" bertingkat, atau prompt sistem yang berubah secara dinamis, yang mencakup tingkat informasi dari putaran percakapan sebelumnya mulai dari yang sangat spesifik untuk yang terbaru hingga yang lebih ringkas untuk sebagian besar topik dan informasi jarak jauh.
Jendela Obrolan Bergulir Memori Jangka Pendek Setiap panggilan ke model menyertakan daftar pesan sebelumnya yang cukup singkat kata demi kata. Hal ini membantu model melacak konteks percakapan saat ini dan pesan terbaru.
Scratchpad Meory Jangka Menengah Selanjutnya, saya membuat scratchpad untuk digunakan agen AI untuk membuat catatan guna melacak sorotan terkini dalam percakapan. Scratchpad ini diperbarui secara bergilir dengan informasi baru yang ditambahkan atau diperbarui dan informasi lama yang tidak lagi relevan dibuang. Namun, tidak ada informasi yang benar-benar hilang karena snapshot dari scratchpadnya disimpan sebagai entri ke dalam database vektor.
Karena informasi ini diringkas, informasi terkini akan dikompres, sehingga model dapat memperoleh manfaat dari jendela obrolan yang lebih panjang dan konteks yang lebih besar, sekaligus meminimalkan token aktual yang disertakan dalam perintah.
Nama karakter (bukan hanya 'pengguna' dan 'asisten') disertakan dalam setiap pesan untuk membantu ringkasan. Hal ini juga membantu model melacak siapa yang mengatakan apa. Hal ini membuat agen AI cenderung tidak bingung antara siapa yang mengatakan apa (yang sebenarnya merupakan masalah). Hal ini juga membantu menjaga etiket bergantian dalam dialog dan mencegah agen berbicara mewakili pengguna (yang juga bisa menjadi masalah)
Memori Penyimpanan Vektor Jangka Panjang Saya menggunakan ringkasan percakapan untuk mengekstrak informasi penting dari percakapan, dan kemudian menyimpannya dalam database vektor. Setiap permintaan pengguna memicu pencarian semantik dari database vektor untuk mengingat informasi relevan dari ringkasan percakapan sebelumnya. Informasi ini disertakan dalam pesan kepada model, serta beberapa pesan terbaru.
Dengan cara ini, ingatan agen AI bisa jauh melampaui konteksnya. Faktanya, karena penyimpanan vektor dapat memakan ruang disk yang relatif sedikit, potensi ukuran efektif memori agen secara fungsional tidak terbatas.
Ketika kenangan disimpan, mereka disimpan dengan stempel waktu dan ketika diingat kembali, mereka diurutkan secara kronologis. Agen diinstruksikan untuk memilih informasi yang lebih baru jika ingatannya bertentangan.
Hasil Model ini mampu mengingat informasi dari awal percakapan secara akurat hampir sepanjang waktu. Penelusuran penyimpanan vektor umumnya berhasil mengambil informasi yang relevan, namun model tidak selalu benar-benar memanfaatkan informasi tersebut dalam responsnya. Namun secara umum, saya senang dengan hasilnya.
Langkah Selanjutnya
Saya ingin model tersebut lebih proaktif mereferensikan peristiwa sebelumnya. Sebagian besar berhasil dalam mengingat jika saya secara langsung mengajukan pertanyaan tentang percakapan sebelumnya, namun jarang secara spontan merujuk pada kejadian sebelumnya. Ia sangat hidup pada saat ini. Saya sedang mengerjakan rekayasa cepat untuk menghasilkan perilaku ini, tetapi masih dalam pengerjaan.
Saya juga mempertimbangkan untuk menggunakan pengenalan entitas bernama untuk memungkinkan agen membuat profil karakter atau tempat dan menyimpan informasi yang relevan dengan entitas tertentu. Hal ini akan membantu model mengatur informasi berdasarkan entitas, bukan sekadar cuplikan percakapan.
Saya memperhatikan bahwa meskipun karakter sering kali dimulai dengan gaya berbicara yang unik, lama kelamaan gaya mereka memudar menjadi sangat lembut dan terdengar seperti AI dasar mereka. Saya bereksperimen dengan beberapa solusi, termasuk menuliskan karakter pemberitahuannya. Namun, hal ini membuang banyak token di memori dengan membuat catatan yang kurang padat token.
Sebagai gantinya, saya menyimpan sampel respons pertama yang diberikan model sebagai contoh gaya. Respons pertama ini kemudian diteruskan ke agen pada setiap prompt sebagai contoh gaya bicara untuk setiap prompt. Menurut saya ini SANGAT efektif dalam membantu model mempertahankan gaya berbicara secara konsisten, bahkan dalam percakapan yang panjang (100+ penyelesaian).
Langkah Selanjutnya Meskipun nada pesannya konsisten, saya ingin memberikan model kepribadian yang lebih kuat, lebih bernuansa, dan konsisten. Saya menduga ini mungkin memerlukan penyesuaian.
Dalam banyak sistem permainan peran LLM, karakter bersifat statis setelah dibuat. Namun, dalam implementasi saya, deskripsi karakter dan bahkan nama dapat diubah dengan cepat. Kegunaan spesifiknya adalah kemampuan untuk mengubah lokasi dan nama pengguna.
Deskripsi Karakter Terkadang Anda ingin perubahan Anda berdasarkan kejadian terkini atau tujuan atau motivasi mereka berkembang seiring waktu. Hal ini mudah dilakukan dengan langsung menyesuaikan deskripsi karakter dengan cepat.
Lokasi Percakapan dan permainan peran sering kali berpindah-pindah di dunia khayalan. Anda bisa pergi dari kota ke penjara bawah tanah, atau dari asrama ke kedai kopi, atau dari rumah untuk bekerja. Situs saya memungkinkan Anda mengubah lokasi percakapan dengan cepat.
Nama Pengguna Tantangan lain pada sebagian besar sistem permainan peran karakter adalah menyertakan banyak karakter. Di sistem saya, Anda dapat mengubah nama karakter yang Anda ucapkan dengan cepat. Ini memungkinkan Anda mensimulasikan banyak karakter dalam percakapan atau situasi.
Mengubah Nama Karakter ini sebenarnya tidak terlalu berguna. Membuat karakter memainkan karakter yang berbeda tidak akan berhasil dan akan menyebabkan kebingungan ketika model mencoba menghubungkan percakapan saat ini dengan ringkasan percakapan sebelumnya.
Langkah Selanjutnya