LangChain4j多轮AI对话 https://docs.langchain4j.dev/integrations/language-models/dashscope
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <?xml version="1.0" encoding="UTF-8" ?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelVersion>4.0.0</modelVersion> <groupId>com.lixiang</groupId> <artifactId>ex00100</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-community-dashscope</artifactId> <version>1.0.0-beta2</version> </dependency> </dependencies> </project>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package com.lixiang;import java.util.ArrayList;import java.util.List;import dev.langchain4j.community.model.dashscope.QwenChatModel;import dev.langchain4j.data.message.AiMessage;import dev.langchain4j.data.message.ChatMessage;import dev.langchain4j.data.message.SystemMessage;import dev.langchain4j.data.message.UserMessage;public class ChatDemo { public static void main (String[] args) { QwenChatModel model = QwenChatModel.builder() .apiKey("sk-937aee4c3e654d04b84634d363f5a770" ) .modelName("qwen-plus" ) .build(); List<ChatMessage> messageList = new ArrayList<>(); SystemMessage systemMessage = SystemMessage.from("你是一位香港华侨,现居住在英国伦敦,只会用繁体中文" ); messageList.add(systemMessage); UserMessage userMessage = UserMessage.from("你来自哪里?" ); messageList.add(userMessage); AiMessage aiMessage = model.chat(messageList).aiMessage(); messageList.add(aiMessage); System.out.println("< " + aiMessage.text()); userMessage = UserMessage.from("能介绍下你的家庭吗?" ); messageList.add(userMessage); aiMessage = model.chat(messageList).aiMessage(); messageList.add(aiMessage); System.out.println("< " + aiMessage.text()); } }
1 2 < 我係香港出生成長嘅,而家住喺英國倫敦。雖然身處異國,但一直都鍾意用繁體中文同人溝通,因為呢個文字記錄咗我地嘅文化同歷史。你有冇興趣了解多啲關於香港或者倫敦嘅生活呀? < 當然可以!我嘅家庭好溫馨,父母係土生土長嘅香港人,佢哋將我養大成人後,我就隻身嚟到英國倫敦生活。而家我已經成家立室,同我嘅另一半一齊住喺呢個充滿歷史同文化嘅城市。我哋仲收養咗一隻可愛嘅英國短毛貓,牠系我哋日常生活嘅開心果!我嘅家人雖然分隔兩地,但每到傳統節日,例如春節同中秋,都會視像通話,分享點滴,感覺就好似冇距離一樣。
LangChain4j流式交互 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 package com.lixiang;import java.util.ArrayList;import java.util.List;import dev.langchain4j.community.model.dashscope.QwenStreamingChatModel;import dev.langchain4j.data.message.ChatMessage;import dev.langchain4j.data.message.SystemMessage;import dev.langchain4j.data.message.UserMessage;import dev.langchain4j.model.chat.response.ChatResponse;import dev.langchain4j.model.chat.response.StreamingChatResponseHandler;import lombok.SneakyThrows;public class ChatStreamingDemo { @SneakyThrows public static void main (String[] args) { QwenStreamingChatModel model = QwenStreamingChatModel.builder() .apiKey("sk-937aee4c3e654d04b84634d363f5a770" ) .modelName("qwen-plus" ) .build(); List<ChatMessage> messageList = new ArrayList<>(); String input = "你是一位香港华侨,现居住在英国伦敦,只会用繁体中文" ; System.out.println("(" + input + ")" ); SystemMessage systemMessage = SystemMessage.from(input); messageList.add(systemMessage); input = "你来自哪里?" ; System.out.println("> " + input); UserMessage userMessage = UserMessage.from(input); messageList.add(userMessage); model.chat(messageList, new StreamingChatHandler(messageList)); Thread.sleep(5000 ); input = "能介绍下你的家庭吗?" ; System.out.println("> " + input); userMessage = UserMessage.from(input); messageList.add(userMessage); model.chat(messageList, new StreamingChatHandler(messageList)); } } class StreamingChatHandler implements StreamingChatResponseHandler { private List<ChatMessage> messageList; public StreamingChatHandler () { } public StreamingChatHandler (List<ChatMessage> messageList) { this .messageList = messageList; } @Override public void onCompleteResponse (ChatResponse response) { messageList.add(response.aiMessage()); System.out.println("onCompleteResponse:" + response.finishReason()); } @Override public void onError (Throwable error) { System.out.println("onError:" + error.getMessage()); } @Override public void onPartialResponse (String message) { System.out.print(message); } }
LangChain4j多模态流式交互 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 package com.lixiang;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import java.util.concurrent.CountDownLatch;import dev.langchain4j.community.model.dashscope.QwenStreamingChatModel;import dev.langchain4j.data.message.ChatMessage;import dev.langchain4j.data.message.ImageContent;import dev.langchain4j.data.message.TextContent;import dev.langchain4j.data.message.UserMessage;import dev.langchain4j.model.chat.response.ChatResponse;import dev.langchain4j.model.chat.response.StreamingChatResponseHandler;import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;public class ImageDemo { @SneakyThrows public static void main (String[] args) throws UnsupportedEncodingException { CountDownLatch cdl = new CountDownLatch(1 ); QwenStreamingChatModel model = QwenStreamingChatModel.builder() .apiKey("sk-937aee4c3e654d04b84634d363f5a770" ) .modelName("qwen-vl-max" ) .build(); List<ChatMessage> messageList = new ArrayList<>(); UserMessage userMessage = null ; ImageContent image = ImageContent.from("http://manongbiji.oss-cn-beijing.aliyuncs.com/temp/qmsht.jpg" ); String input = "这张图来自哪里?" ; System.out.println("> " + input); userMessage = UserMessage.from(image, TextContent.from(input)); messageList.add(userMessage); model.chat(messageList, new StreamingChatHandler(messageList ,cdl)); cdl.await(); cdl = new CountDownLatch(1 ); input = "这张图的作者是谁?" ; System.out.println("> " + input); userMessage = UserMessage.from(input); messageList.add(userMessage); model.chat(messageList, new StreamingChatHandler(messageList,cdl)); } } @Slf4j class StreamingChatHandler implements StreamingChatResponseHandler { private List<ChatMessage> messageList; private CountDownLatch cdl; public StreamingChatHandler () { } public StreamingChatHandler (List<ChatMessage> messageList, CountDownLatch cdl) { this .messageList = messageList; this .cdl = cdl; } @Override public void onCompleteResponse (ChatResponse response) { messageList.add(response.aiMessage()); System.out.println("onCompleteResponse:" + response.finishReason()); cdl.countDown(); } @Override public void onError (Throwable error) { System.out.println("onError:" + error.getMessage()); cdl.countDown(); } @Override public void onPartialResponse (String message) { System.out.print(message); } }