2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
चट स्मृतिइदं चॅट् मेमोरी इति कथ्यते, यत् उपयोक्तृणां बृहत् मॉडल् च मध्ये ऐतिहासिकं वार्तालापं संगृह्णाति, येन बृहत् मॉडल् एतेषां ऐतिहासिकवार्तालापानां उपयोगं कृत्वा उपयोक्तारः अद्यतने किं उक्तवन्तः, तेषां किं अर्थं च अवगन्तुं शक्नुवन्ति
परन्तु यदि भवान् ऐतिहासिकवार्तालापं Chat Memory इत्यत्र संग्रहयति तर्हि तस्य अधिकाधिकं भण्डारणस्थानस्य आवश्यकता भविष्यति अतः ChatMemory इत्यनेन विण्डो सीमा, उन्मूलनतन्त्रम्, स्थायित्वतन्त्रम् इत्यादीनि विस्तारितानि कार्याणि अपि समर्थितानि सन्ति ।
संग्रहस्य परिमाणानुसारं पुरातनसन्देशाः निराकृताः भवन्ति ।स्लाइडिंग् विण्डो इव, स्थापयन्तुN
नवीनतमवार्ताः अपि च पुरातनवार्ताः निष्कासयन्तु ये पुनः न उपयुज्यन्ते।परन्तु प्रत्येकं सन्देशे भिन्नसङ्ख्यायां टोकन-सङ्ख्या भवितुम् अर्हति इति कारणतः ।MessageWindowChatMemory
द्रुतप्रोटोटाइपिङ्ग् कृते अतीव उपयोगी।
टोकनस्य परिमाणानुसारं पुरातनसन्देशाः निराकृताः भवन्ति ।इदं स्लाइडिंग् विण्डो इव अपि चालयति परन्तु धारणं प्रति केन्द्रितं भवतिN
नवीनतमं टोकनं आवश्यकतानुसारं पुरातनसन्देशान् निष्कासयन्तु। सूचना अविभाज्यम् अस्ति। यदि सन्देशः उपयुक्तः नास्ति तर्हि सः सम्पूर्णतया निष्कासितः भविष्यति। TokenWindowChatMemory इत्यस्य कृते कTokenizer
प्रत्येकं गणयितुंChatMessage
टोकन in .
TokenWindowChatMemory MessageWindowChatMemory इत्यस्य सदृशम् अस्ति यत् क्षमतायाः गणनायाः मार्गः भिन्नः अस्ति MessageWindowChatMemory प्रत्यक्षतया List गृह्णाति ।<ChatMessage> आकारः, तथा च TokenWindowChatMemory निर्दिष्टं Tokenizer to इत्यस्य उपयोगं करिष्यति<ChatMessage> तदनुरूपं Tokens संख्या अनुमानिता भवति, ततः सेट् maxTokens इत्यनेन सह तुलना क्रियते यदि संख्या maxTokens इत्यस्मात् अतिक्रमति तर्हि इदमपि समाप्तं भविष्यति, प्राचीनतमं ChatMessage अपि निराकृतं भविष्यति ।
Tokenizer एकः अन्तरफलकः अस्ति OpenAiTokenizer कार्यान्वयनवर्गः पूर्वनिर्धारितरूपेण प्रदत्तः अस्ति यत् एतत् अनुमानं कर्तुं भवति यत् अनेकेषां बृहत् मॉडल्-समूहानां चार्जं प्रयुक्तानां Tokens -सङ्ख्यायाः आधारेण भवति, अतः तस्य उपयोगः अनुशंसितः भवति cost संवेदनशीलं भवति TokenWindowChatMemory इत्यस्य उपयोगः सत्रे उपयुज्यमानानाम् Tokens इत्यस्य कुलसङ्ख्यां नियन्त्रयितुं भवति ।
उभयत्र कार्यान्वयनवर्गेषु अन्तः ChatMemoryStore विशेषता अस्ति ChatMemoryStore अपि पूर्वनिर्धारितरूपेण InMemoryChatMemoryStore कार्यान्वयनवर्गः अस्ति । कालान्तरे 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("换一个"));
- }
- }
मवेन् आश्रितानां परिचयं कुर्वन्तु
- <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, "换一个"));
- }
- }