本文是抛砖引玉,由于本人是java架构师出身,所以对java语言比较偏爱,虽然python也会使用,但是总觉得用起来不那么得心应手。
今天和群内朋友聊起是否想要一套deepseek构建的期货智能研究分析报告系统,大家私信中反响还是不错的,因此静心研究进行了测试。
今天给大家分享的不是一个完整的系统,但是它是打通deepseek的最核心的部分,未来大家只需要增加业务进行扩展即可使用。
我把client的核心代码分享给大家,感兴趣的小伙伴,可以加我V来免费索取,群内的朋友也可以免费享有未来的每日研报。
public class AIModelClient { private static final Logger log = LoggerFactory.getLogger(AIModelClient.class); private final OkHttpClient client; private final ObjectMapper objectMapper; private final String apiKey; private final String baseUrl; private static final MediaType JSON = MediaType.get("application/json; charset=utf-8"); public AIModelClient(String apiKey, String baseUrl) { this.client = new OkHttpClient.Builder() .connectTimeout(300, TimeUnit.SECONDS) .writeTimeout(300, TimeUnit.SECONDS) .readTimeout(600, TimeUnit.SECONDS) .build(); this.objectMapper = new ObjectMapper(); this.apiKey = apiKey; this.baseUrl = baseUrl; } public String createChatCompletion(String model, List<Map<String, String>> messages) { try { Map<String, Object> requestBody = new HashMap<>(); requestBody.put("model", model); requestBody.put("messages", messages); requestBody.put("stream", false); String jsonBody = objectMapper.writeValueAsString(requestBody); log.debug("发送到Deepseek的请求体: {}", jsonBody); String url = baseUrl + "/chat/completions"; Request request = new Request.Builder() .url(url) .addHeader("Content-Type", "application/json") .addHeader("Authorization", "Bearer " + apiKey) .post(RequestBody.create(jsonBody, JSON)) .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { String responseBody = response.body() != null ? response.body().string() : "无响应体"; log.error("API调用失败,状态码: {}, 响应: {}", response.code(), responseBody); throw new IOException("API调用失败,状态码: " + response.code()); } String responseBody = response.body() != null ? response.body().string() : ""; log.debug("Deepseek的响应: {}", responseBody); if (responseBody.isEmpty()) { throw new IOException("API返回了空响应"); } Map<String, Object> responseMap = objectMapper.readValue(responseBody, Map.class); List<Map<String, Object>> choices = (List<Map<String, Object>>) responseMap.get("choices"); if (choices != null && !choices.isEmpty()) { Map<String, Object> choice = choices.get(0); Map<String, Object> responseMessage = (Map<String, Object>) choice.get("message"); return (String) responseMessage.get("content"); } else { throw new IOException("API响应中没有找到有效的回复内容"); } } } catch (Exception e) { log.error("调用Deepseek API时发生错误: {}", e.getMessage(), e); return "API调用失败: " + e.getMessage(); } }
由于deepseek反应比较慢,因此这里我设置的超时时间比较长。大家实际使用中可以酌情修改。
this.client = new OkHttpClient.Builder() .connectTimeout(300, TimeUnit.SECONDS) .writeTimeout(300, TimeUnit.SECONDS) .readTimeout(600, TimeUnit.SECONDS) .build();
public static void main(String[] args) { String apiKey = "你的APIkey"; String baseUrl = "https://api.deepseek.com"; AIModelClient client = new AIModelClient(apiKey, baseUrl); List<Map<String, String>> messages = new ArrayList<>(); Map<String, String> message = new HashMap<>(); message.put("role", "user"); message.put("content", "帮我分析红枣期货,生成投资报告"); messages.add(message); String response = client.createChatCompletion("deepseek-reasoner", messages); System.out.println("Deepseek响应: " + response);
最后展现一下调用效果,由于我这个只是简单的测试和打通,里面还需要添加提示词,等功能,其实流程走通了,剩下的都很简单了。
对量化感兴趣的小伙伴还可以加入我们的社区,每个月会分享一款全自动量化程序。