Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Memoria de chatSe llama memoria de chat y almacena las conversaciones históricas entre usuarios y modelos grandes, de modo que los modelos grandes puedan usar estas conversaciones históricas para comprender lo que los usuarios dijeron recientemente y lo que quieren decir.
Sin embargo, si sigue almacenando conversaciones históricas en Chat Memory, necesitará cada vez más espacio de almacenamiento. Por lo tanto, ChatMemory también admite funciones extendidas como limitación de ventanas, mecanismo de eliminación, mecanismo de persistencia, etc.
Según el tamaño de la colección se eliminan los mensajes antiguos.Como ventana corredera, mantengaN
Las últimas novedades y desalojar noticias viejas que ya no encajan.Sin embargo, dado que cada mensaje puede contener una cantidad diferente de tokens,MessageWindowChatMemory
Muy útil para la creación rápida de prototipos.
Según el tamaño del token se eliminan los mensajes antiguos.También funciona como una ventana corredera pero se centra en retenerN
el token más reciente y expulsar los mensajes antiguos según sea necesario. La información es indivisible. Si el mensaje no es adecuado, será desalojado por completo. TokenWindowChatMemory requiere unaTokenizer
para calcular cadaChatMessage
ficha en .
TokenWindowChatMemory es similar a MessageWindowChatMemory. La diferencia es que la forma de calcular la capacidad es diferente. MessageWindowChatMemory toma directamente la Lista.<ChatMessage> tamaño, y TokenWindowChatMemory utilizará el Tokenizer especificado para<ChatMessage> Se estima la cantidad correspondiente de Tokens y luego se compara con los maxTokens establecidos. Si el número excede maxTokens, también se eliminará y el ChatMessage más antiguo también se eliminará.
Tokenizer es una interfaz. La clase de implementación OpenAiTokenizer se proporciona de forma predeterminada. Se utiliza para estimar cuántos tokens corresponden a una API de ChatMessage de muchos modelos grandes en función de la cantidad de tokens utilizados, por lo que se recomienda usarlo cuando el. El costo es sensible. TokenWindowChatMemory se usa para controlar la cantidad total de tokens utilizados en una sesión.
Ambas clases de implementación tienen un atributo ChatMemoryStore en su interior. ChatMemoryStore también es una interfaz. Hay una clase de implementación InMemoryChatMemoryStore de forma predeterminada. Con el tiempo, se agregarán implementaciones listas para usar para tiendas populares como bases de datos SQL, almacenes de documentos, etc.Mientras tanto, puede implementar esta interfaz para conectarse a cualquier almacenamiento de su elección.
- 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("换一个"));
- }
- }
Introducir dependencias de 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>
Personalice ChatMemoryStore para lograr un almacenamiento 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();
- }
- }
prueba de código
- 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, "换一个"));
- }
- }