le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Memoria di chatSi chiama memoria di chat, che memorizza le conversazioni storiche tra utenti e modelli di grandi dimensioni, in modo che i modelli di grandi dimensioni possano utilizzare queste conversazioni storiche per capire cosa hanno detto di recente gli utenti e cosa intendono.
Tuttavia, se continui a memorizzare le conversazioni storiche in Chat Memory, lo spazio di archiviazione richiesto diventerà sempre più grande. Pertanto, ChatMemory supporta anche funzioni estese come la limitazione delle finestre, il meccanismo di eliminazione, il meccanismo di persistenza, ecc.
A seconda della dimensione della raccolta, i vecchi messaggi vengono eliminati.Come finestra scorrevole, mantieniN
le ultime notizie e sfrattare quelle vecchie che non vanno più bene.Tuttavia, poiché ciascun messaggio può contenere un numero diverso di token,MessageWindowChatMemory
Molto utile per la prototipazione rapida.
A seconda della dimensione del token, i vecchi messaggi vengono eliminati.Funziona anche come una finestra scorrevole ma si concentra sulla ritenzioneN
Il token più recente ed elimina i vecchi messaggi secondo necessità. Le informazioni sono indivisibili. Se il messaggio non è adatto, verrà completamente sfrattato. TokenWindowChatMemory richiede un fileTokenizer
per calcolare ciascunoChatMessage
gettone dentro.
TokenWindowChatMemory è simile a MessageWindowChatMemory. La differenza è che il modo di calcolare la capacità è diverso. MessageWindowChatMemory utilizza direttamente List.<ChatMessage> size e TokenWindowChatMemory utilizzerà il Tokenizer specificato<ChatMessage> Il numero corrispondente di Token viene stimato e poi confrontato con i maxTokens impostati. Se il numero supera i maxTokens, verrà eliminato anche il ChatMessage più vecchio.
Tokenizer è un'interfaccia. La classe di implementazione OpenAiTokenizer viene fornita per impostazione predefinita. Viene utilizzata per stimare quanti token corrispondono a un ChatMessage di molti modelli di grandi dimensioni addebitati in base al numero di token utilizzati, quindi è consigliabile utilizzarlo quando il costo è sensibile. TokenWindowChatMemory viene utilizzato per controllare il numero totale di token utilizzati in una sessione.
Entrambe le classi di implementazione hanno un attributo ChatMemoryStore al suo interno. ChatMemoryStore è anche un'interfaccia. Per impostazione predefinita è presente una classe di implementazione InMemoryChatMemoryStore. Nel corso del tempo, verranno aggiunte implementazioni pronte all'uso per archivi popolari come database SQL, archivi di documenti, ecc.Nel frattempo, puoi implementare questa interfaccia per connetterti a qualsiasi spazio di archiviazione di tua scelta
- 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("换一个"));
- }
- }
Introduci le dipendenze di Maven
- <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>
Personalizza ChatMemoryStore per ottenere un'archiviazione persistente
- 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();
- }
- }
test del codice
- 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, "换一个"));
- }
- }