浅谈人工智能之大模型的多轮对话:Java版
背景
在之前的文章中,我们已经介绍了如何使用python语言进行大模型的多轮对话,本文将介绍如何使用Java构建一个基于大模型的多轮对话系统,并通过实际代码示例来展示其工作流程。
应用实例
引用依赖
pom.xml中引入如下依赖
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version>
</dependency><!--Http相关-->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.6.3</version>
</dependency>
代码实现
实现代码如下
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;import java.util.*;public class QwenMuChat {private static final String OPENAI_API_BASE = "http://XXX.XXX.XXX.XXX:8889/v1";private static final String OPENAI_API_KEY = "none";private static final String MODEL_NAME = "QWen";private static List<JSONObject> chatHistory = new ArrayList<>();public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (true) {System.out.print("你:");String userInput = scanner.nextLine();if ("quit".equalsIgnoreCase(userInput)) {System.out.println("退出多轮聊天");break;}JSONObject message = new JSONObject();message.put("role", "user");message.put("content", userInput);chatHistory.add(message);try {String response = sendChatRequest(chatHistory);System.out.println("大模型回答:\n" + response);// 更新对话历史JSONObject assistantMessage = new JSONObject();assistantMessage.put("role", "assistant");assistantMessage.put("content", response);chatHistory.add(assistantMessage);} catch (Exception e) {System.out.println("系统错误");break;}}scanner.close();}private static String sendChatRequest(List<JSONObject> chatHistory) throws Exception {JSONObject data = new JSONObject();data.put("model", MODEL_NAME);data.put("messages", chatHistory);//如果需要流式的,需要传送参数stream并且设置为true,但是如果设置以后下面response.isOk()里面的解析内容需要进行修改
// data.put("stream", true);data.put("temperature", 0);Map<String, String> map = new HashMap<>();map.put("Content-Type", "application/json");map.put("Authorization", "Bearer " + OPENAI_API_KEY);HttpResponse response = HttpUtil.createPost(OPENAI_API_BASE + "/chat/completions").body(data.toJSONString()).addHeaders(map).execute();if (response.isOk()) {// 解析并获取内容JSONObject jsonResponse = JSON.parseObject(response.body());JSONObject choice = jsonResponse.getJSONArray("choices").getJSONObject(0);JSONObject message = choice.getJSONObject("message");return message.getString("content");} else {throw new Exception("Unexpected HTTP status: " + response.getStatus());}}
}
测试验证
结果如下:
你:写一首描述工作辛苦的五言绝句
大模型回答:
灯火映夜深,案牍劳形频。
身疲心未歇,只为稻粱辛。
你:把第一句换了
大模型回答:
月升星伴辉,案牍劳形频。
身疲心未歇,只为生活奔。
总结
通过以上步骤,你可以构建一个基于java的多轮对话系统,利用大模型的强大能力,为用户提供更加智能和自然的交互体