minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Memória de bate-papoÉ chamada de memória de chat, que armazena o histórico de conversas entre usuários e grandes modelos, para que os grandes modelos possam usar essas conversas históricas para entender o que os usuários disseram recentemente e o que eles querem dizer.
No entanto, se você continuar armazenando conversas históricas na Memória do Chat, o espaço de armazenamento necessário se tornará cada vez maior. Portanto, o ChatMemory também oferece suporte a funções estendidas, como limitação de janela, mecanismo de eliminação, mecanismo de persistência, etc.
De acordo com o tamanho do acervo, mensagens antigas são eliminadas.Como uma janela deslizante, mantenhaN
as últimas notícias e despejar notícias antigas que não cabem mais.No entanto, como cada mensagem pode conter um número diferente de tokens,MessageWindowChatMemory
Muito útil para prototipagem rápida.
De acordo com o tamanho do token, as mensagens antigas são eliminadas.Também funciona como uma janela deslizante, mas concentra-se em reterN
O token mais recente e remova as mensagens antigas conforme necessário. A informação é indivisível. Se a mensagem não for adequada, ela será completamente removida. TokenWindowChatMemory requer umTokenizer
calcular cadaChatMessage
token em .
TokenWindowChatMemory é semelhante a MessageWindowChatMemory. A diferença é que a forma de calcular a capacidade é diferente.<ChatMessage> size, e TokenWindowChatMemory usará o Tokenizer especificado para<ChatMessage> O número correspondente de Tokens é estimado e então comparado com o conjunto maxTokens. Se o número exceder maxTokens, ele também será eliminado e o ChatMessage mais antigo também será eliminado.
Tokenizer é uma interface. A classe de implementação OpenAiTokenizer é fornecida por padrão. Ela é usada para estimar quantos Tokens correspondem a uma API ChatMessage de muitos modelos grandes, com base no número de Tokens usados. cost é sensível. TokenWindowChatMemory é usado para controlar o número total de tokens usados em uma sessão.
Ambas as classes de implementação possuem um atributo ChatMemoryStore dentro. ChatMemoryStore também é uma interface. Há uma classe de implementação InMemoryChatMemoryStore por padrão. Com o tempo, implementações prontas para uso serão adicionadas para armazenamentos populares, como bancos de dados SQL, armazenamentos de documentos, etc.Enquanto isso, você pode implementar esta interface para conectar-se a qualquer armazenamento de sua escolha
- 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("换一个"));
- }
- }
Introduzir dependências 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>
Personalize ChatMemoryStore para obter armazenamento 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();
- }
- }
teste 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, "换一个"));
- }
- }