2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Chat-muistiSitä kutsutaan chat-muistiksi, joka tallentaa historialliset keskustelut käyttäjien ja suurten mallien välillä, jotta suuret mallit voivat käyttää näitä historiallisia keskusteluja ymmärtääkseen, mitä käyttäjät ovat hiljattain sanoneet ja mitä he tarkoittavat.
Kuitenkin, jos jatkat historiallisten keskustelujen tallentamista Chat-muistiin, se vaatii yhä enemmän tallennustilaa. Siksi ChatMemory tukee myös laajennettuja toimintoja, kuten ikkunarajoituksia, poistomekanismia, pysyvyysmekanismia jne.
Kokoelman koon mukaan vanhat viestit poistetaan.Pidä liukuikkunanaN
Viimeisimmät uutiset ja häädä vanhat uutiset, jotka eivät enää sovi.Koska jokainen viesti voi kuitenkin sisältää eri määrän tunnuksia,MessageWindowChatMemory
Erittäin hyödyllinen nopeaan prototyyppien valmistukseen.
Tokenin koon mukaan vanhat viestit poistetaan.Se toimii myös liukuvana ikkunana, mutta keskittyy säilyttämiseenN
uusin tunnus ja häätä vanhat viestit tarvittaessa. Tieto on jakamaton. Jos viesti ei ole sopiva, se häädetään kokonaan. TokenWindowChatMemory vaatii aTokenizer
laskea jokainenChatMessage
merkki sisään.
TokenWindowChatMemory on samanlainen kuin MessageWindowChatMemory. Erona on, että MessageWindowChatMemoryn kapasiteetti on erilainen.<ChatMessage> kokoa, ja TokenWindowChatMemory käyttää määritettyä Tokenizeria<ChatMessage> Vastaava Tokenien määrä arvioidaan ja sitä verrataan asetettuihin maxTokeneihin.
Tokenizer on käyttöliittymä oletuksena. Sitä käytetään arvioimaan, kuinka monta merkkiä vastaa useiden suurten mallien sovellusliittymiä, joten on suositeltavaa käyttää sitä hinta on herkkä TokenWindowChatMemoryn avulla ohjaamaan istunnossa käytettyjen Tokenien kokonaismäärää.
Molemmissa toteutusluokissa on ChatMemoryStore-attribuutti, joka on myös InMemoryChatMemoryStore-toteutusluokka. Ajan myötä valmiita toteutuksia lisätään suosittuihin kauppoihin, kuten SQL-tietokantoihin, dokumenttivarastoihin jne.Sillä välin voit ottaa tämän käyttöliittymän käyttöön ja muodostaa yhteyden mihin tahansa valitsemaasi tallennustilaan
- 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("换一个"));
- }
- }
Ota käyttöön hirveitä riippuvuuksia
- <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>
Mukauta ChatMemoryStorea jatkuvan tallennustilan saavuttamiseksi
- 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();
- }
- }
koodin testaus
- 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, "换一个"));
- }
- }