diff --git a/.classpath b/.classpath index 9e4c6d7..9706fd2 100644 --- a/.classpath +++ b/.classpath @@ -13,11 +13,15 @@ - - + + + + + + diff --git a/WebContent/default/index.jsp b/WebContent/default/index.jsp index d6314b2..6d52543 100644 --- a/WebContent/default/index.jsp +++ b/WebContent/default/index.jsp @@ -295,4 +295,4 @@ String todaydate = sdf.format(date); - \ No newline at end of file + diff --git a/WebContent/default/js/script.js b/WebContent/default/js/script.js index 38f2e19..6447e09 100644 --- a/WebContent/default/js/script.js +++ b/WebContent/default/js/script.js @@ -21,7 +21,7 @@ function sendMessage() { function addMessageToChat(sender, message) { const messageElement = document.createElement('div'); messageElement.classList.add('message', `${sender}-message`); - messageElement.textContent = message; + messageElement.innerHTML = message; // 使用innerHTML以支持HTML格式 chatHistory.appendChild(messageElement); chatHistory.scrollTop = chatHistory.scrollHeight; } @@ -41,10 +41,13 @@ async function callAIAPI(prompt) { } const result = await response.json(); - const aiResponse = result.output.text; + console.log('API响应:', result); // 添加这行来查看完整的响应 + + // 直接使用result.text,因为服务器返回的JSON结构中text是在顶层 + const aiResponse = result.text || '抱歉,我无法理解您的问题。'; addMessageToChat('ai', aiResponse); } catch (error) { console.error('Error:', error); - addMessageToChat('ai', '抱歉,出现了一些问题。请稍后再试。'); + addMessageToChat('ai', '抱歉,出现了一些问题。请稍后再试123。'); } -} \ No newline at end of file +} diff --git a/src/javabean/db_conn.java b/src/javabean/db_conn.java index 980cd5f..c370afe 100644 --- a/src/javabean/db_conn.java +++ b/src/javabean/db_conn.java @@ -13,7 +13,7 @@ public class db_conn { //ݿʼ public db_conn() { - String URL="jdbc:mysql://localhost:3306/fly_ticket?useSSL=false&useUnicode=true&characterEncoding=UTF8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"; //ݿ3306 + String URL="jdbc:mysql://localhost:3307/fly_ticket?useSSL=false&useUnicode=true&characterEncoding=UTF8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"; //ݿ3306 String USER="root"; //ݿû String PWD="123456"; //ݿ try{ diff --git a/src/servlet/ChatServlet.java b/src/servlet/ChatServlet.java index 9ba5057..7fe662a 100644 --- a/src/servlet/ChatServlet.java +++ b/src/servlet/ChatServlet.java @@ -11,13 +11,14 @@ import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import org.json.JSONObject; import java.util.logging.Logger; import java.util.logging.Level; public class ChatServlet extends HttpServlet { - private static final String API_KEY = "sk-0ad1eaf5194249439f82698893607bef"; // 滻Ϊʵ API Կ - private static final String APP_ID = "1d2b00751a914efd84ea4b354fffd962"; // 滻ΪʵӦ ID + private static final String API_KEY = "sk-0ad1eaf5194249439f82698893607bef"; // 请替换为您的实际 API 密钥 + private static final String APP_ID = "1d2b00751a914efd84ea4b354fffd962"; // 请替换为您的实际应用 ID private static final String API_URL = "https://dashscope.aliyuncs.com/api/v1/apps/" + APP_ID + "/completion"; private static final Logger LOGGER = Logger.getLogger(ChatServlet.class.getName()); @@ -27,12 +28,17 @@ public class ChatServlet extends HttpServlet { response.setCharacterEncoding("UTF-8"); String prompt = request.getParameter("prompt"); + HttpSession session = request.getSession(); + String sessionId = (String) session.getAttribute("chatSessionId"); try { HttpClient client = HttpClient.newHttpClient(); JSONObject requestBody = new JSONObject(); JSONObject input = new JSONObject(); input.put("prompt", prompt); + if (sessionId != null) { + input.put("session_id", sessionId); + } requestBody.put("input", input); requestBody.put("parameters", new JSONObject()); @@ -44,38 +50,44 @@ public class ChatServlet extends HttpServlet { .build(); HttpResponse apiResponse = client.send(apiRequest, HttpResponse.BodyHandlers.ofString()); - /* - if (apiResponse.statusCode() == 200) { - PrintWriter out = response.getWriter(); - out.print(apiResponse.body()); - out.flush(); - */ + if (apiResponse.statusCode() == 200) { String responseBody = apiResponse.body(); - String formattedResponse = formatResponse(responseBody); // ʽӦ + JSONObject jsonResponse = new JSONObject(responseBody); + String newSessionId = jsonResponse.getJSONObject("output").getString("session_id"); + session.setAttribute("chatSessionId", newSessionId); + + String formattedResponse = formatResponse(responseBody); PrintWriter out = response.getWriter(); out.print(formattedResponse); out.flush(); } else { - LOGGER.log(Level.SEVERE, "API request failed with status code: " + apiResponse.statusCode()); + LOGGER.log(Level.SEVERE, "API请求失败,状态码: " + apiResponse.statusCode()); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.getWriter().write("{\"error\":\"APIʧ\"}"); + response.getWriter().write("{\"error\":\"API请求失败\"}"); } } catch (Exception e) { - LOGGER.log(Level.SEVERE, "Error in ChatServlet", e); + LOGGER.log(Level.SEVERE, "ChatServlet出错", e); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.getWriter().write("{\"error\":\": " + e.getMessage() + "\"}"); + response.getWriter().write("{\"error\":\"服务器错误: " + e.getMessage() + "\"}"); } } - // ʽ + + // 格式化响应 private String formatResponse(String responseBody) { - // responseBodyַʽJSONҪȽ - // ʾַ滻͸ʽ - return responseBody - .replaceAll("\\*\\*(.*?)\\*\\*", "$1") // Ӵı - .replaceAll("\\n", "
") // 滻з - .replaceAll("(\\d+\\. )", "
  • $1") // б - .replaceAll("\\s+", " "); // ȥհ + JSONObject jsonResponse = new JSONObject(responseBody); + String text = jsonResponse.getJSONObject("output").getString("text"); + + // 格式化文本 + text = text.replaceAll("\\*\\*(.*?)\\*\\*", "$1") // 加粗文本 + .replaceAll("\\n", "
    ") // 替换换行符 + .replaceAll("(\\d+\\. )", "
  • $1") // 列表项目 + .replaceAll("\\s+", " "); // 去除多余空白 + + JSONObject formattedResponse = new JSONObject(); + formattedResponse.put("text", text); + formattedResponse.put("session_id", jsonResponse.getJSONObject("output").getString("session_id")); + + return formattedResponse.toString(); } } - diff --git a/target/classes/META-INF/MANIFEST.MF b/target/classes/META-INF/MANIFEST.MF index 38f1f7e..9bdf3b1 100644 --- a/target/classes/META-INF/MANIFEST.MF +++ b/target/classes/META-INF/MANIFEST.MF @@ -1,4 +1,4 @@ Manifest-Version: 1.0 -Build-Jdk-Spec: 22 +Build-Jdk-Spec: 21 Created-By: Maven Integration for Eclipse diff --git a/target/classes/META-INF/maven/air_ticket_book/air_ticket_book/pom.properties b/target/classes/META-INF/maven/air_ticket_book/air_ticket_book/pom.properties index c1dbc80..194bf34 100644 --- a/target/classes/META-INF/maven/air_ticket_book/air_ticket_book/pom.properties +++ b/target/classes/META-INF/maven/air_ticket_book/air_ticket_book/pom.properties @@ -1,7 +1,7 @@ #Generated by Maven Integration for Eclipse -#Tue Oct 22 14:56:12 CST 2024 +#Sat Oct 26 20:26:49 CST 2024 artifactId=air_ticket_book groupId=air_ticket_book -m2e.projectLocation=C\:\\Users\\RichardWang\\Desktop\\ai_agent +m2e.projectLocation=D\:\\college\\SE2\\air_ticket_book-master\\\u8F6F\u4EF6\u5DE5\u7A0B\u8BFE\u7A0B\u8BBE\u8BA1\\air_ticket_book m2e.projectName=air_ticket_book version=0.0.1-SNAPSHOT diff --git a/target/classes/javabean/db_conn.class b/target/classes/javabean/db_conn.class index 8f493cb..8d11bcd 100644 Binary files a/target/classes/javabean/db_conn.class and b/target/classes/javabean/db_conn.class differ diff --git a/target/classes/servlet/ChatServlet.class b/target/classes/servlet/ChatServlet.class index 9eb97a9..72726cb 100644 Binary files a/target/classes/servlet/ChatServlet.class and b/target/classes/servlet/ChatServlet.class differ