τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Μνήμη συνομιλίαςΟνομάζεται μνήμη συνομιλίας, η οποία αποθηκεύει τις ιστορικές συνομιλίες μεταξύ χρηστών και μεγάλων μοντέλων, έτσι ώστε τα μεγάλα μοντέλα να μπορούν να χρησιμοποιήσουν αυτές τις ιστορικές συνομιλίες για να κατανοήσουν τι είπαν πρόσφατα οι χρήστες και τι εννοούν.
Ωστόσο, εάν συνεχίσετε να αποθηκεύετε τις ιστορικές συνομιλίες στη Μνήμη συνομιλίας, θα απαιτεί όλο και περισσότερο χώρο αποθήκευσης, επομένως, το ChatMemory υποστηρίζει επίσης εκτεταμένες λειτουργίες όπως ο περιορισμός παραθύρου, ο μηχανισμός εξάλειψης, ο μηχανισμός εμμονής κ.λπ.
Ανάλογα με το μέγεθος της συλλογής, τα παλιά μηνύματα εξαλείφονται.Ως συρόμενο παράθυρο, κρατήστεN
Τα τελευταία νέα και έξωση παλιών ειδήσεων που δεν ταιριάζουν πλέον.Ωστόσο, δεδομένου ότι κάθε μήνυμα μπορεί να περιέχει διαφορετικό αριθμό διακριτικών,MessageWindowChatMemory
Πολύ χρήσιμο για γρήγορη δημιουργία πρωτοτύπων.
Ανάλογα με το μέγεθος του διακριτικού, τα παλιά μηνύματα εξαλείφονται.Λειτουργεί επίσης ως συρόμενο παράθυρο, αλλά εστιάζει στη συγκράτησηN
το πιο πρόσφατο διακριτικό και διώξτε τα παλιά μηνύματα όπως χρειάζεται. Η πληροφορία είναι αδιαίρετη. Εάν το μήνυμα δεν είναι κατάλληλο, θα αποβληθεί εντελώς. TokenWindowChatMemory απαιτεί αTokenizer
για να υπολογίσετε το καθέναChatMessage
token in .
Το TokenWindowChatMemory είναι παρόμοιο με το MessageWindowChatMemory Η διαφορά είναι ότι ο τρόπος υπολογισμού της χωρητικότητας είναι διαφορετικός από το MessageWindowChatMemory.<ChatMessage> μέγεθος και το TokenWindowChatMemory θα χρησιμοποιήσει το καθορισμένο Tokenizer<ChatMessage> Ο αντίστοιχος αριθμός των Tokens υπολογίζεται και, στη συνέχεια, συγκρίνεται με το σύνολο maxTokens, εάν ο αριθμός υπερβαίνει τα maxTokens, θα εξαλειφθεί επίσης και το παλαιότερο μήνυμα συνομιλίας.
Το Tokenizer είναι μια διεπαφή Η κλάση υλοποίησης OpenAiTokenizer χρησιμοποιείται για να εκτιμήσει πόσα Tokens αντιστοιχούν σε ένα ChatMessage με βάση τον αριθμό των Tokens που χρησιμοποιούνται Το κόστος είναι ευαίσθητο Το TokenWindowChatMemory χρησιμοποιείται για τον έλεγχο του συνολικού αριθμού των Tokens που χρησιμοποιούνται σε μια περίοδο λειτουργίας.
Και οι δύο κλάσεις υλοποίησης έχουν μια ιδιότητα ChatMemoryStore στο εσωτερικό του. Με την πάροδο του χρόνου, θα προστεθούν εκ των υστέρων υλοποιήσεις για δημοφιλή καταστήματα όπως βάσεις δεδομένων SQL, καταστήματα εγγράφων κ.λπ.Εν τω μεταξύ, μπορείτε να εφαρμόσετε αυτήν τη διεπαφή για να συνδεθείτε σε οποιοδήποτε χώρο αποθήκευσης της επιλογής σας
- 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("换一个"));
- }
- }
Εισαγάγετε τις εξαρτήσεις 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>
Προσαρμόστε το ChatMemoryStore για να επιτύχετε μόνιμο χώρο αποθήκευσης
- 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();
- }
- }
δοκιμή κώδικα
- 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, "换一个"));
- }
- }