Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/chenxunkun_chataiweb.json
T

1 line
34 KiB
JSON

{"repo": "chenxunkun/chataiweb", "files": {"src/main/java/com/example/test/controller/ChatController.java": {"b266577dbfae69dd3db361925c25b2367a26503e": {"t": 1785745676.3082237, "n": 10501, "h": "f1f3d11aa2e910e7", "c": "package com.example.test.controller;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.volcengine.ark.runtime.model.completion.chat.ChatCompletionRequest;\nimport com.volcengine.ark.runtime.model.completion.chat.ChatMessage;\nimport com.volcengine.ark.runtime.model.completion.chat.ChatMessageRole;\nimport com.volcengine.ark.runtime.service.ArkService;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.RestController;\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.InputStreamReader;\nimport java.io.OutputStream;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\nimport java.util.*;\n@RestController\npublic class ChatController {\n // 豆包相关 API 配置\n private static final String DOUBAO_API_KEY = \"2349380f-2041-48bb-b086-94f808770fc9\";\n private static final String DOUBAO_MODEL = \"ep-20241208151426-sfpsg\";\n // DeepSeek 相关 API 配置\n private static final String DEEPSEEK_API_KEY = \"sk-70adfb265b0c47aba80969993fe13d2f\";\n private static final String DEEPSEEK_API_URL = \"https://api.deepseek.com/chat/completions\";\n private static final String DEEPSEEK_MODEL = \"deepseek-chat\";\n // 文生图相关 API 配置\n private static final String IMAGE_GENERATION_API_URL = \"https://visual.volcengineapi.com?Action=CVProcess&Version=2022-08-31\";\n private static final String ACCESS_KEY_ID = \"AKLTZGMwMGQ4ZjQ0MjA2NDAwMDk4YzNiODcwNDM3MTEwOTM\";\n private static final String SECRET_ACCESS_KEY = \"TXpBM01qWTRPV1ZoWVRSa05ETTJZVGhrWmpFME9XWTRObUprTURjeVlXSQ==\";\n private static final String ENDPOINT = \"visual.volcengineapi.com\";\n private static final String PATH = \"/\";\n private static final String SERVICE = \"cv\";\n private static final String REGION = \"cn-north-1\";\n private static final String SCHEMA = \"https\";\n private static final String IMAGE_GENERATION_MODEL = \"high_aes_general_v21_L\";\n // 存储每个用户的对话历史,以用户ID为键\n private static Map<String, List<ChatMessage>> userConversations = new HashMap<>();\n @GetMapping(value = \"/chat\", produces = \"text/plain; charset=UTF-8\")\n public String chat(@RequestParam String userMessage,\n @RequestParam(required = false, defaultValue = \"doubao\") String model,\n @RequestParam(required = false, defaultValue = \"default_user_id\") String userId) {\n // 获取用户的对话历史,如果没有则创建一个新的\n List<ChatMessage> messages = userConversations.getOrDefault(userId, new ArrayList<>());\n // 添加系统消息(首次对话时添加)\n if (messages.isEmpty()) {\n ChatMessage systemMessage = ChatMessage.builder()\n .role(ChatMessageRole.SYSTEM)\n .content(\"回答问题。\")\n .build();\n messages.add(systemMessage);\n }\n // 添加用户消息\n ChatMessage userChatMessage = ChatMessage.builder()\n .role(ChatMessageRole.USER)\n .content(userMessage)\n .build();\n messages.add(userChatMessage);\n String botResponse = \"\";\n try {\n switch (model) {\n case \"doubao\":\n botResponse = getDoubaoResponse(messages);\n break;\n case \"deepseek\":\n botResponse = getDeepSeekResponse(messages);\n break;\n case \"image-generation\":\n botResponse = getImageGenerationResponse(userMessage);\n break;\n default:\n throw new IllegalArgumentException(\"无效的模型名称,请选择 'doubao'、'deepseek' 或 'image-generation'。\");\n }\n } catch (IllegalArgumentException e) {\n // 处理非法参数异常\n botResponse = e.getMessage();\n System.err.println(botResponse);\n } catch (IOException e) {\n // 处理 I/O 异常,如网络连接问题、读取响应失败等\n botResponse = \"发生 I/O 错误,请检查网络连接或稍后重试。\";\n System.err.println(\"I/O 错误: \" + e.getMessage());\n } catch (Exception e) {\n // 处理其他未知异常\n botResponse = \"发生未知错误,请稍后重试。\";\n System.err.println(\"未知错误: \" + e.getMessage());\n }\n // 添加机器人回复到对话历史\n ChatMessage botChatMessage = ChatMessage.builder()\n .role(ChatMessageRole.ASSISTANT)\n .content(botResponse)\n .build();\n messages.add(botChatMessage);\n // 更新用户的对话历史\n userConversations.put(userId, messages);\n System.out.println(\"Bot response: \" + botResponse);\n return botResponse;\n }\n\n\n\n\n private String getDoubaoResponse(List<ChatMessage> messages) throws Exception {\n ArkService doubaoService = ArkService.builder().apiKey(DOUBAO_API_KEY).build();\n ChatCompletionRequest doubaoRequest = ChatCompletionRequest.builder()\n .model(DOUBAO_MODEL)\n .messages(messages)\n .build();\n String response = (String) doubaoService.createChatCompletion(doubaoRequest).getChoices().get(0).getMessage().getContent();\n doubaoService.shutdownExecutor();\n return response;\n }\n\n\n\n // 其他方法(getDeepSeekResponse 和 getImageGenerationResponse)保持不变\n private String getDeepSeekResponse(List<ChatMessage> messages) throws IOException {\n URL url = new URL(DEEPSEEK_API_URL);\n HttpURLConnection connection = (HttpURLConnection) url.openConnection();\n connection.setRequestMethod(\"POST\");\n connection.setRequestProperty(\"Content-Type\", \"application/json\");\n connection.setRequestProperty(\"Authorization\", \"Bearer \" + DEEPSEEK_API_KEY);\n connection.setDoOutput(true);\n ObjectMapper objectMapper = new ObjectMapper();\n // 构建请求体对象\n Map<String, Object> requestBodyMap = Map.of(\n \"model\", DEEPSEEK_MODEL,\n \"messages\", messages.stream()\n .map(message -> Map.of(\n \"role\", message.getRole().toString().toLowerCase(),\n \"content\", message.getContent()\n ))\n .toList()\n );\n // 将请求体对象转换为 JSON 字符串\n String requestBody = objectMapper.writeValueAsString(requestBodyMap);\n try (OutputStream os = connection.getOutputStream()) {\n os.write(requestBody.getBytes(\"utf-8\"));\n }\n int responseCode = connection.getResponseCode();\n if (responseCode == HttpURLConnection.HTTP_OK) {\n try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), \"utf-8\"))) {\n StringBuilder response = new StringBuilder();\n String responseLine;\n while ((responseLine = br.readLine()) != null) {\n response.append(responseLine.trim());\n }\n Map<String, Object> responseMap = objectMapper.readValue(response.toString(), Map.class);\n if (responseMap.containsKey(\"choices\") &&!((List<?>) responseMap.get(\"choices\")).isEmpty()) {\n Map<String, Object> firstChoice = (Map<String, Object>) ((List<?>) responseMap.get(\"choices\")).get(0);\n if (firstChoice.containsKey(\"message\")) {\n Map<String, Object> message = (Map<String, Object>) firstChoice.get(\"message\");\n if (message.containsKey(\"content\")) {\n return message.get(\"content\").toString();\n }\n }\n }\n return \"无法解析 DeepSeek 的响应\";\n }\n } else {\n try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getErrorStream(), \"utf-8\"))) {\n StringBuilder errorResponse = new StringBuilder();\n String errorLine;\n while ((errorLine = br.readLine()) != null) {\n errorResponse.append(errorLine.trim());\n }\n throw new IOException(\"DeepSeek API 返回错误状态码: \" + responseCode + \", 错误信息: \" + errorResponse.toString());\n }\n }\n }\n\n\n\n private String getImageGenerationResponse(String userMessage) throws IOException {\n com.volcengine.example.cv.Sign sign = new com.volcengine.example.cv.Sign(REGION, SERVICE, SCHEMA, ENDPOINT, PATH, ACCESS_KEY_ID, SECRET_ACCESS_KEY);\n // 构建请求体参数\n Map<String, Object> requestBodyMap = Map.ofEntries(\n Map.entry(\"req_key\", IMAGE_GENERATION_MODEL),\n Map.entry(\"prompt\", userMessage),\n Map.entry(\"req_schedule_conf\", \"general_v20_9B_pe\"),\n Map.entry(\"seed\", -1),\n Map.entry(\"scale\", 3.5),\n Map.entry(\"ddim_steps\", 25),\n Map.entry(\"width\", 512),\n Map.entry(\"height\", 512),\n Map.entry(\"use_pre_llm\", true),\n Map.entry(\"use_sr\", true),\n Map.entry(\"return_url\", true),\n Map.entry(\"logo_info\", Map.ofEntries(\n Map.entry(\"add_logo\", false),\n Map.entry(\"position\", 0),\n Map.entry(\"language\", 0),\n Map.entry(\"opacity\", 0.3),\n Map.entry(\"logo_text_content\", \"\")\n ))\n );\n try {\n Date date = new Date();\n sign.doRequest(\"POST\", new java.util.HashMap<>(), new ObjectMapper().writeValueAsString(requestBodyMap).getBytes(), date, \"CVProcess\", \"2022-08-31\");\n // 这里可以进一步处理响应,获取实际的图片 URL 等信息\n // 假设响应格式正确,且包含 image_urls 字段,我们取第一个图片 URL 作为返回值\n // 实际情况可能需要更复杂的错误处理和解析逻辑\n Map<String, Object> responseMap = new ObjectMapper().readValue(sign.getLastResponseBody(), Map.class);\n if (responseMap.containsKey(\"data\") && responseMap.get(\"data\") instanceof Map) {\n Map<String, Object> dataMap = (Map<String, Object>) responseMap.get(\"data\");\n if (dataMap.containsKey(\"image_urls\") && dataMap.get(\"image_urls\") instanceof List) {\n List<String> imageUrls = (List<String>) dataMap.get(\"image_urls\");\n if (!imageUrls.isEmpty()) {\n return imageUrls.get(0);\n }\n }\n }\n return \"无法获取生成的图片 URL\";\n } catch (Exception e) {\n e.printStackTrace();\n return \"请求失败,请检查配置\";\n }\n }\n\n\n}"}, "d7697f6890e438727ef7e140c15ba7555b2c40a3": {"t": 1785755665.5956426, "n": 10501, "h": "f1f3d11aa2e910e7", "c": "package com.example.test.controller;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.volcengine.ark.runtime.model.completion.chat.ChatCompletionRequest;\nimport com.volcengine.ark.runtime.model.completion.chat.ChatMessage;\nimport com.volcengine.ark.runtime.model.completion.chat.ChatMessageRole;\nimport com.volcengine.ark.runtime.service.ArkService;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.RestController;\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.InputStreamReader;\nimport java.io.OutputStream;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\nimport java.util.*;\n@RestController\npublic class ChatController {\n // 豆包相关 API 配置\n private static final String DOUBAO_API_KEY = \"2349380f-2041-48bb-b086-94f808770fc9\";\n private static final String DOUBAO_MODEL = \"ep-20241208151426-sfpsg\";\n // DeepSeek 相关 API 配置\n private static final String DEEPSEEK_API_KEY = \"sk-70adfb265b0c47aba80969993fe13d2f\";\n private static final String DEEPSEEK_API_URL = \"https://api.deepseek.com/chat/completions\";\n private static final String DEEPSEEK_MODEL = \"deepseek-chat\";\n // 文生图相关 API 配置\n private static final String IMAGE_GENERATION_API_URL = \"https://visual.volcengineapi.com?Action=CVProcess&Version=2022-08-31\";\n private static final String ACCESS_KEY_ID = \"AKLTZGMwMGQ4ZjQ0MjA2NDAwMDk4YzNiODcwNDM3MTEwOTM\";\n private static final String SECRET_ACCESS_KEY = \"TXpBM01qWTRPV1ZoWVRSa05ETTJZVGhrWmpFME9XWTRObUprTURjeVlXSQ==\";\n private static final String ENDPOINT = \"visual.volcengineapi.com\";\n private static final String PATH = \"/\";\n private static final String SERVICE = \"cv\";\n private static final String REGION = \"cn-north-1\";\n private static final String SCHEMA = \"https\";\n private static final String IMAGE_GENERATION_MODEL = \"high_aes_general_v21_L\";\n // 存储每个用户的对话历史,以用户ID为键\n private static Map<String, List<ChatMessage>> userConversations = new HashMap<>();\n @GetMapping(value = \"/chat\", produces = \"text/plain; charset=UTF-8\")\n public String chat(@RequestParam String userMessage,\n @RequestParam(required = false, defaultValue = \"doubao\") String model,\n @RequestParam(required = false, defaultValue = \"default_user_id\") String userId) {\n // 获取用户的对话历史,如果没有则创建一个新的\n List<ChatMessage> messages = userConversations.getOrDefault(userId, new ArrayList<>());\n // 添加系统消息(首次对话时添加)\n if (messages.isEmpty()) {\n ChatMessage systemMessage = ChatMessage.builder()\n .role(ChatMessageRole.SYSTEM)\n .content(\"回答问题。\")\n .build();\n messages.add(systemMessage);\n }\n // 添加用户消息\n ChatMessage userChatMessage = ChatMessage.builder()\n .role(ChatMessageRole.USER)\n .content(userMessage)\n .build();\n messages.add(userChatMessage);\n String botResponse = \"\";\n try {\n switch (model) {\n case \"doubao\":\n botResponse = getDoubaoResponse(messages);\n break;\n case \"deepseek\":\n botResponse = getDeepSeekResponse(messages);\n break;\n case \"image-generation\":\n botResponse = getImageGenerationResponse(userMessage);\n break;\n default:\n throw new IllegalArgumentException(\"无效的模型名称,请选择 'doubao'、'deepseek' 或 'image-generation'。\");\n }\n } catch (IllegalArgumentException e) {\n // 处理非法参数异常\n botResponse = e.getMessage();\n System.err.println(botResponse);\n } catch (IOException e) {\n // 处理 I/O 异常,如网络连接问题、读取响应失败等\n botResponse = \"发生 I/O 错误,请检查网络连接或稍后重试。\";\n System.err.println(\"I/O 错误: \" + e.getMessage());\n } catch (Exception e) {\n // 处理其他未知异常\n botResponse = \"发生未知错误,请稍后重试。\";\n System.err.println(\"未知错误: \" + e.getMessage());\n }\n // 添加机器人回复到对话历史\n ChatMessage botChatMessage = ChatMessage.builder()\n .role(ChatMessageRole.ASSISTANT)\n .content(botResponse)\n .build();\n messages.add(botChatMessage);\n // 更新用户的对话历史\n userConversations.put(userId, messages);\n System.out.println(\"Bot response: \" + botResponse);\n return botResponse;\n }\n\n\n\n\n private String getDoubaoResponse(List<ChatMessage> messages) throws Exception {\n ArkService doubaoService = ArkService.builder().apiKey(DOUBAO_API_KEY).build();\n ChatCompletionRequest doubaoRequest = ChatCompletionRequest.builder()\n .model(DOUBAO_MODEL)\n .messages(messages)\n .build();\n String response = (String) doubaoService.createChatCompletion(doubaoRequest).getChoices().get(0).getMessage().getContent();\n doubaoService.shutdownExecutor();\n return response;\n }\n\n\n\n // 其他方法(getDeepSeekResponse 和 getImageGenerationResponse)保持不变\n private String getDeepSeekResponse(List<ChatMessage> messages) throws IOException {\n URL url = new URL(DEEPSEEK_API_URL);\n HttpURLConnection connection = (HttpURLConnection) url.openConnection();\n connection.setRequestMethod(\"POST\");\n connection.setRequestProperty(\"Content-Type\", \"application/json\");\n connection.setRequestProperty(\"Authorization\", \"Bearer \" + DEEPSEEK_API_KEY);\n connection.setDoOutput(true);\n ObjectMapper objectMapper = new ObjectMapper();\n // 构建请求体对象\n Map<String, Object> requestBodyMap = Map.of(\n \"model\", DEEPSEEK_MODEL,\n \"messages\", messages.stream()\n .map(message -> Map.of(\n \"role\", message.getRole().toString().toLowerCase(),\n \"content\", message.getContent()\n ))\n .toList()\n );\n // 将请求体对象转换为 JSON 字符串\n String requestBody = objectMapper.writeValueAsString(requestBodyMap);\n try (OutputStream os = connection.getOutputStream()) {\n os.write(requestBody.getBytes(\"utf-8\"));\n }\n int responseCode = connection.getResponseCode();\n if (responseCode == HttpURLConnection.HTTP_OK) {\n try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), \"utf-8\"))) {\n StringBuilder response = new StringBuilder();\n String responseLine;\n while ((responseLine = br.readLine()) != null) {\n response.append(responseLine.trim());\n }\n Map<String, Object> responseMap = objectMapper.readValue(response.toString(), Map.class);\n if (responseMap.containsKey(\"choices\") &&!((List<?>) responseMap.get(\"choices\")).isEmpty()) {\n Map<String, Object> firstChoice = (Map<String, Object>) ((List<?>) responseMap.get(\"choices\")).get(0);\n if (firstChoice.containsKey(\"message\")) {\n Map<String, Object> message = (Map<String, Object>) firstChoice.get(\"message\");\n if (message.containsKey(\"content\")) {\n return message.get(\"content\").toString();\n }\n }\n }\n return \"无法解析 DeepSeek 的响应\";\n }\n } else {\n try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getErrorStream(), \"utf-8\"))) {\n StringBuilder errorResponse = new StringBuilder();\n String errorLine;\n while ((errorLine = br.readLine()) != null) {\n errorResponse.append(errorLine.trim());\n }\n throw new IOException(\"DeepSeek API 返回错误状态码: \" + responseCode + \", 错误信息: \" + errorResponse.toString());\n }\n }\n }\n\n\n\n private String getImageGenerationResponse(String userMessage) throws IOException {\n com.volcengine.example.cv.Sign sign = new com.volcengine.example.cv.Sign(REGION, SERVICE, SCHEMA, ENDPOINT, PATH, ACCESS_KEY_ID, SECRET_ACCESS_KEY);\n // 构建请求体参数\n Map<String, Object> requestBodyMap = Map.ofEntries(\n Map.entry(\"req_key\", IMAGE_GENERATION_MODEL),\n Map.entry(\"prompt\", userMessage),\n Map.entry(\"req_schedule_conf\", \"general_v20_9B_pe\"),\n Map.entry(\"seed\", -1),\n Map.entry(\"scale\", 3.5),\n Map.entry(\"ddim_steps\", 25),\n Map.entry(\"width\", 512),\n Map.entry(\"height\", 512),\n Map.entry(\"use_pre_llm\", true),\n Map.entry(\"use_sr\", true),\n Map.entry(\"return_url\", true),\n Map.entry(\"logo_info\", Map.ofEntries(\n Map.entry(\"add_logo\", false),\n Map.entry(\"position\", 0),\n Map.entry(\"language\", 0),\n Map.entry(\"opacity\", 0.3),\n Map.entry(\"logo_text_content\", \"\")\n ))\n );\n try {\n Date date = new Date();\n sign.doRequest(\"POST\", new java.util.HashMap<>(), new ObjectMapper().writeValueAsString(requestBodyMap).getBytes(), date, \"CVProcess\", \"2022-08-31\");\n // 这里可以进一步处理响应,获取实际的图片 URL 等信息\n // 假设响应格式正确,且包含 image_urls 字段,我们取第一个图片 URL 作为返回值\n // 实际情况可能需要更复杂的错误处理和解析逻辑\n Map<String, Object> responseMap = new ObjectMapper().readValue(sign.getLastResponseBody(), Map.class);\n if (responseMap.containsKey(\"data\") && responseMap.get(\"data\") instanceof Map) {\n Map<String, Object> dataMap = (Map<String, Object>) responseMap.get(\"data\");\n if (dataMap.containsKey(\"image_urls\") && dataMap.get(\"image_urls\") instanceof List) {\n List<String> imageUrls = (List<String>) dataMap.get(\"image_urls\");\n if (!imageUrls.isEmpty()) {\n return imageUrls.get(0);\n }\n }\n }\n return \"无法获取生成的图片 URL\";\n } catch (Exception e) {\n e.printStackTrace();\n return \"请求失败,请检查配置\";\n }\n }\n\n\n}"}, "a983092d53f8c98dfb1debe9204010e53a23811d": {"t": 1785755666.8538215, "n": 10489, "h": "36a1345810f63e78", "c": "package com.example.test.controller;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.volcengine.ark.runtime.model.completion.chat.ChatCompletionRequest;\nimport com.volcengine.ark.runtime.model.completion.chat.ChatMessage;\nimport com.volcengine.ark.runtime.model.completion.chat.ChatMessageRole;\nimport com.volcengine.ark.runtime.service.ArkService;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.RestController;\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.InputStreamReader;\nimport java.io.OutputStream;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\nimport java.util.*;\n@RestController\npublic class ChatController {\n // 豆包相关 API 配置\n private static final String DOUBAO_API_KEY = \"2349380f-2041-48bb-b086-94f808770fc9\";\n private static final String DOUBAO_MODEL = \"ep-20241208151426-sfpsg\";\n // DeepSeek 相关 API 配置\n private static final String DEEPSEEK_API_KEY = \"sk-70adfb265b0c47aba80969993fe13d2f\";\n private static final String DEEPSEEK_API_URL = \"https://api.deepseek.com/chat/completions\";\n private static final String DEEPSEEK_MODEL = \"deepseek-chat\";\n // 文生图相关 API 配置\n private static final String IMAGE_GENERATION_API_URL = \"https://visual.volcengineapi.com?Action=CVProcess&Version=2022-08-31\";\n private static final String ACCESS_KEY_ID = \"AKLTZGMwMGQ4ZjQ0MjA2NDAwMDk4YzNiODcwNDM3MTEwOTM\";\n private static final String SECRET_ACCESS_KEY = \"TXpBM01qWTRPV1ZoWVRSa05ETTJZVGhrWmpFME9XWTRObUprTURjeVlXSQ==\";\n private static final String ENDPOINT = \"visual.volcengineapi.com\";\n private static final String PATH = \"/\";\n private static final String SERVICE = \"cv\";\n private static final String REGION = \"cn-north-1\";\n private static final String SCHEMA = \"https\";\n private static final String IMAGE_GENERATION_MODEL = \"high_aes_general_v21_L\";\n // 存储每个用户的对话历史,以用户ID为键\n private static Map<String, List<ChatMessage>> userConversations = new HashMap<>();\n @GetMapping(value = \"/chat\", produces = \"text/plain; charset=UTF-8\")\n public String chat(@RequestParam String userMessage,\n @RequestParam(required = false, defaultValue = \"doubao\") String model,\n @RequestParam(required = false, defaultValue = \"default_user_id\") String userId) {\n // 获取用户的对话历史,如果没有则创建一个新的\n List<ChatMessage> messages = userConversations.getOrDefault(userId, new ArrayList<>());\n // 添加系统消息(首次对话时添加)\n if (messages.isEmpty()) {\n ChatMessage systemMessage = ChatMessage.builder()\n .role(ChatMessageRole.SYSTEM)\n .content(\"回答问题。\")\n .build();\n messages.add(systemMessage);\n }\n // 添加用户消息\n ChatMessage userChatMessage = ChatMessage.builder()\n .role(ChatMessageRole.USER)\n .content(userMessage)\n .build();\n messages.add(userChatMessage);\n String botResponse = \"\";\n try {\n switch (model) {\n case \"doubao\":\n botResponse = getDoubaoResponse(messages);\n break;\n case \"deepseek\":\n botResponse = getDeepSeekResponse(messages);\n break;\n case \"image-generation\":\n botResponse = getImageGenerationResponse(userMessage);\n break;\n default:\n throw new IllegalArgumentException(\"无效的模型名称,请选择 'doubao'、'deepseek' 或 'image-generation'。\");\n }\n } catch (IllegalArgumentException e) {\n // 处理非法参数异常\n botResponse = e.getMessage();\n System.err.println(botResponse);\n } catch (IOException e) {\n // 处理 I/O 异常,如网络连接问题、读取响应失败等\n botResponse = \"发生 I/O 错误,请检查网络连接或稍后重试。\";\n System.err.println(\"I/O 错误: \" + e.getMessage());\n } catch (Exception e) {\n // 处理其他未知异常\n botResponse = \"发生未知错误,请稍后重试。\";\n System.err.println(\"未知错误: \" + e.getMessage());\n }\n // 添加机器人回复到对话历史\n ChatMessage botChatMessage = ChatMessage.builder()\n .role(ChatMessageRole.ASSISTANT)\n .content(botResponse)\n .build();\n messages.add(botChatMessage);\n // 更新用户的对话历史\n userConversations.put(userId, messages);\n System.out.println(\"Bot response: \" + botResponse);\n return botResponse;\n }\n private String getDoubaoResponse(List<ChatMessage> messages) throws Exception {\n ArkService doubaoService = ArkService.builder().apiKey(DOUBAO_API_KEY).build();\n ChatCompletionRequest doubaoRequest = ChatCompletionRequest.builder()\n .model(DOUBAO_MODEL)\n .messages(messages)\n .build();\n String response = (String) doubaoService.createChatCompletion(doubaoRequest).getChoices().get(0).getMessage().getContent();\n doubaoService.shutdownExecutor();\n return response;\n }\n // 其他方法(getDeepSeekResponse 和 getImageGenerationResponse)保持不变\n private String getDeepSeekResponse(List<ChatMessage> messages) throws IOException {\n URL url = new URL(DEEPSEEK_API_URL);\n HttpURLConnection connection = (HttpURLConnection) url.openConnection();\n connection.setRequestMethod(\"POST\");\n connection.setRequestProperty(\"Content-Type\", \"application/json\");\n connection.setRequestProperty(\"Authorization\", \"Bearer \" + DEEPSEEK_API_KEY);\n connection.setDoOutput(true);\n ObjectMapper objectMapper = new ObjectMapper();\n // 构建请求体对象\n Map<String, Object> requestBodyMap = Map.of(\n \"model\", DEEPSEEK_MODEL,\n \"messages\", messages.stream()\n .map(message -> Map.of(\n \"role\", message.getRole().toString().toLowerCase(),\n \"content\", message.getContent()\n ))\n .toList()\n );\n // 将请求体对象转换为 JSON 字符串\n String requestBody = objectMapper.writeValueAsString(requestBodyMap);\n try (OutputStream os = connection.getOutputStream()) {\n os.write(requestBody.getBytes(\"utf-8\"));\n }\n int responseCode = connection.getResponseCode();\n if (responseCode == HttpURLConnection.HTTP_OK) {\n try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), \"utf-8\"))) {\n StringBuilder response = new StringBuilder();\n String responseLine;\n while ((responseLine = br.readLine()) != null) {\n response.append(responseLine.trim());\n }\n Map<String, Object> responseMap = objectMapper.readValue(response.toString(), Map.class);\n if (responseMap.containsKey(\"choices\") &&!((List<?>) responseMap.get(\"choices\")).isEmpty()) {\n Map<String, Object> firstChoice = (Map<String, Object>) ((List<?>) responseMap.get(\"choices\")).get(0);\n if (firstChoice.containsKey(\"message\")) {\n Map<String, Object> message = (Map<String, Object>) firstChoice.get(\"message\");\n if (message.containsKey(\"content\")) {\n return message.get(\"content\").toString();\n }\n }\n }\n return \"无法解析 DeepSeek 的响应\";\n }\n } else {\n try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getErrorStream(), \"utf-8\"))) {\n StringBuilder errorResponse = new StringBuilder();\n String errorLine;\n while ((errorLine = br.readLine()) != null) {\n errorResponse.append(errorLine.trim());\n }\n throw new IOException(\"DeepSeek API 返回错误状态码: \" + responseCode + \", 错误信息: \" + errorResponse.toString());\n }\n }\n }\n private String getImageGenerationResponse(String userMessage) throws IOException {\n com.volcengine.example.cv.Sign sign = new com.volcengine.example.cv.Sign(REGION, SERVICE, SCHEMA, ENDPOINT, PATH, ACCESS_KEY_ID, SECRET_ACCESS_KEY);\n // 构建请求体参数\n Map<String, Object> requestBodyMap = Map.ofEntries(\n Map.entry(\"req_key\", IMAGE_GENERATION_MODEL),\n Map.entry(\"prompt\", userMessage),\n Map.entry(\"req_schedule_conf\", \"general_v20_9B_pe\"),\n Map.entry(\"seed\", -1),\n Map.entry(\"scale\", 3.5),\n Map.entry(\"ddim_steps\", 25),\n Map.entry(\"width\", 512),\n Map.entry(\"height\", 512),\n Map.entry(\"use_pre_llm\", true),\n Map.entry(\"use_sr\", true),\n Map.entry(\"return_url\", true),\n Map.entry(\"logo_info\", Map.ofEntries(\n Map.entry(\"add_logo\", false),\n Map.entry(\"position\", 0),\n Map.entry(\"language\", 0),\n Map.entry(\"opacity\", 0.3),\n Map.entry(\"logo_text_content\", \"\")\n ))\n );\n try {\n Date date = new Date();\n sign.doRequest(\"POST\", new java.util.HashMap<>(), new ObjectMapper().writeValueAsString(requestBodyMap).getBytes(), date, \"CVProcess\", \"2022-08-31\");\n // 这里可以进一步处理响应,获取实际的图片 URL 等信息\n // 假设响应格式正确,且包含 image_urls 字段,我们取第一个图片 URL 作为返回值\n // 实际情况可能需要更复杂的错误处理和解析逻辑\n Map<String, Object> responseMap = new ObjectMapper().readValue(sign.getLastResponseBody(), Map.class);\n if (responseMap.containsKey(\"data\") && responseMap.get(\"data\") instanceof Map) {\n Map<String, Object> dataMap = (Map<String, Object>) responseMap.get(\"data\");\n if (dataMap.containsKey(\"image_urls\") && dataMap.get(\"image_urls\") instanceof List) {\n List<String> imageUrls = (List<String>) dataMap.get(\"image_urls\");\n if (!imageUrls.isEmpty()) {\n return imageUrls.get(0);\n }\n }\n }\n return \"无法获取生成的图片 URL\";\n } catch (Exception e) {\n e.printStackTrace();\n return \"请求失败,请检查配置\";\n }\n }\n}"}}}}