informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Memori ObrolanIni disebut memori obrolan, yang menyimpan riwayat percakapan antara pengguna dan model besar, sehingga model besar dapat menggunakan percakapan historis tersebut untuk memahami apa yang baru-baru ini dikatakan pengguna dan apa maksudnya.
Namun, jika Anda terus menyimpan percakapan historis di Memori Obrolan, maka akan memerlukan lebih banyak ruang penyimpanan. Oleh karena itu, ChatMemory juga mendukung fungsi tambahan seperti batasan jendela, mekanisme eliminasi, mekanisme persistensi, dll.
Berdasarkan ukuran koleksinya, pesan-pesan lama dihilangkan.Sebagai jendela geser, simpanN
Berita terkini dan usir berita lama yang sudah tidak muat lagi.Namun, karena setiap pesan dapat berisi jumlah token yang berbeda,MessageWindowChatMemory
Sangat berguna untuk pembuatan prototipe cepat.
Berdasarkan ukuran tokennya, pesan-pesan lama akan dihilangkan.Ini juga berfungsi sebagai jendela geser tetapi berfokus pada penahanN
token terbaru dan hapus pesan lama sesuai kebutuhan. Informasi tidak dapat dipisahkan. Jika pesannya tidak sesuai maka akan diusir seluruhnya. TokenWindowChatMemory memerlukan aTokenizer
untuk menghitung masing-masingChatMessage
tanda masuk.
TokenWindowChatMemory mirip dengan MessageWindowChatMemory. Bedanya cara menghitung kapasitasnya berbeda. MessageWindowChatMemory langsung mengambil List.<ChatMessage> ukuran, dan TokenWindowChatMemory akan menggunakan Tokenizer yang ditentukan untuk<ChatMessage> Jumlah Token yang sesuai diperkirakan, dan kemudian dibandingkan dengan maxTokens yang ditetapkan. Jika jumlahnya melebihi maxTokens, maka ChatMessage terlama juga akan dihilangkan.
Tokenizer adalah sebuah antarmuka. Kelas implementasi OpenAiTokenizer disediakan secara default. Ini digunakan untuk memperkirakan berapa banyak Token yang sesuai dengan ChatMessage. API dari banyak model besar mengenakan biaya berdasarkan jumlah Token yang digunakan, jadi disarankan untuk menggunakannya saat biayanya sensitif. TokenWindowChatMemory digunakan untuk mengontrol jumlah total Token yang digunakan dalam satu sesi.
Kedua kelas implementasi memiliki atribut ChatMemoryStore di dalamnya. ChatMemoryStore juga merupakan antarmuka. Ada kelas implementasi InMemoryChatMemoryStore secara default. Seiring waktu, implementasi out-of-the-box akan ditambahkan untuk penyimpanan populer seperti database SQL, penyimpanan dokumen, dll.Sementara itu, Anda dapat mengimplementasikan antarmuka ini untuk terhubung ke penyimpanan apa pun pilihan Anda
- public class NameDemo {
-
- interface NamingMaster {
- String talk(String desc);
- }
- public static void main(String[] args) {
- ChatLanguageModel chatModel = ZhipuAiChatModel.builder()
- .apiKey("智普apikey")
- .build();
- ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(10);
-
- NamingMaster namingMaster = AiServices.builder(NamingMaster.class)
- .chatLanguageModel(chatModel)
- .chatMemory(chatMemory)
- .build();
-
- System.out.println(namingMaster.talk("我姓李,帮我取一个好听的女孩名字,就一个你觉得最好的"));
- System.out.println("---");
- System.out.println(namingMaster.talk("换一个"));
- }
- }
Perkenalkan dependensi pakar
- <dependency>
- <groupId>org.mapdb</groupId>
- <artifactId>mapdb</artifactId>
- <version>3.0.9</version>
- <exclusions>
- <exclusion>
- <groupId>org.jetbrains.kotlin</groupId>
- <artifactId>kotlin-stdlib</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
Sesuaikan ChatMemoryStore untuk mencapai penyimpanan persisten
- public class PersistentChatMemoryStore implements ChatMemoryStore {
-
- private final DB db = DBMaker.fileDB("chat-memory.db").transactionEnable().make();
- private final Map<String, String> map = db.hashMap("messages", Serializer.STRING, Serializer.STRING).createOrOpen();
-
- @Override
- public List<ChatMessage> getMessages(Object memoryId) {
- String json = map.get((String) memoryId);
- return ChatMessageDeserializer.messagesFromJson(json);
- }
-
- @Override
- public void updateMessages(Object memoryId, List<ChatMessage> messages) {
- String json = ChatMessageSerializer.messagesToJson(messages);
- map.put((String) memoryId, json);
- db.commit();
- }
-
- @Override
- public void deleteMessages(Object memoryId) {
- map.remove((String) memoryId);
- db.commit();
- }
- }
pengujian kode
- public class PersistentDemo {
-
- interface NamingMaster {
- String talk(String desc);
- }
- public static void main(String[] args) {
- ChatLanguageModel chatModel = ZhipuAiChatModel.builder()
- .apiKey("智普apikey")
- .build();
-
- ChatMemory chatMemory = MessageWindowChatMemory.builder()
- .chatMemoryStore(new PersistentChatMemoryStore())
- .maxMessages(10)
- .build();
-
- NamingMaster namingMaster = AiServices.builder(NamingMaster.class)
- .chatLanguageModel(chatModel)
- .chatMemory(chatMemory)
- .build();
-
- System.out.println(namingMaster.talk("我姓李,帮我取一个好听的女孩名字,就一个你觉得最好的"));
- System.out.println("---");
- System.out.println(namingMaster.talk("换一个"));
- }
- }
- public class NameDemo {
-
- interface NamingMaster {
- String talk(@MemoryId Integer userId, @UserMessage String desc);
- }
-
- public static void main(String[] args) {
- ChatLanguageModel chatModel = ZhipuAiChatModel.builder()
- .apiKey("智普apikey")
- .build();
-
- NamingMaster namingMaster = AiServices.builder(NamingMaster.class)
- .chatLanguageModel(chatModel)
- .chatMemoryProvider(userId -> MessageWindowChatMemory.withMaxMessages(10))
- .build();
-
- System.out.println(namingMaster.talk(1, "我姓李,帮我取一个好听的女孩名字,就一个你觉得最好的"));
- System.out.println("---");
- System.out.println(namingMaster.talk(2, "我姓赵,帮我取一个好听的男孩名字,就一个你觉得最好的"));
- System.out.println("---");
- System.out.println(namingMaster.talk(1, "换一个"));
- }
- }