当前位置: 首页 > news >正文

在Java中集成DeepSeek的详细步骤

在Java中集成DeepSeek的详细步骤

DeepSeek提供了强大的语言模型API,但目前DeepSeek的官方SDK主要支持JavaScript/TypeScript环境 。要在Java应用程序中集成DeepSeek,我们需要通过REST API调用的方式来实现。以下是详细的集成步骤:

1. 创建Maven项目并添加依赖

首先,创建一个Maven项目并添加必要的依赖:

<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.example</groupId>
    <artifactId>deepseek-java-client</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- HTTP客户端 -->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.12.0</version>
        </dependency>
        
        <!-- JSON处理 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.16.1</version>
        </dependency>
        
        <!-- 日志 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.9</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.4.14</version>
        </dependency>
    </dependencies>
</project>

2. 创建DeepSeek客户端类

接下来,创建一个Java客户端类来处理与DeepSeek API的通信:

package com.example.deepseek;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class DeepSeekClient {
   
    private static final Logger logger = LoggerFactory.getLogger(DeepSeekClient.class);
    private static final String BASE_URL = "https://api.deepseek.com/v1";
    
    private final OkHttpClient httpClient;
    private final ObjectMapper objectMapper;
    private final String apiKey;
    
    public DeepSeekClient(String apiKey) {
   
        this.apiKey = apiKey;
        this.objectMapper = new ObjectMapper();
        
        // 配置HTTP客户端,设置超时
        this.httpClient = new OkHttpClient.Builder()
                .connectTimeout(30, TimeUnit.SECONDS)
                .readTimeout(90, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS)
                .build();
    }
    
    /**
     * 生成文本(非流式)
     */
    public String generateText(String model, String prompt, String systemPrompt) throws IOException {
   
        // 构建请求体
        ObjectNode requestBody = objectMapper.createObjectNode();
        requestBody.put("model", model);
        
        ArrayNode messagesArray = requestBody.putArray("messages");
        
        // 添加系统消息(如果有)
        if (systemPrompt != null && !systemPrompt.isEmpty()) {
   
            ObjectNode systemMessage = messagesArray.addObject();
            systemMessage.put("role", "system");
            systemMessage.put("content", systemPrompt);
        }
        
        // 添加用户消息
        ObjectNode userMessage = messagesArray.addObject();
        userMessage.put("role", "user");
        userMessage.put("content", prompt);
        
        // 构建请求
        Request request = new Request.Builder()
                .url(BASE_URL + "/chat/completions")
                .header("Authorization", "Bearer " + apiKey)
                .header("Content-Type", "application/json")
                .post(RequestBody.create(
                        requestBody.toString(),
                        MediaType.parse("application/json")))
                .build();
        
        // 发送请求
        try (Response response = httpClient.newCall(request).execute()) {
   
            if (!response.isSuccessful()) {
   
                throw new IOException("API调用失败: " + response.code() + " " + response.message());
            }
            
            String responseBody = response.body().string();
            JsonNode jsonResponse = objectMapper.readTree(responseBody);
            
            // 解析响应
            JsonNode choices = jsonResponse.get("choices");
            if (choices != null && choices.isArray() && choices.size() > 0) {
   
                JsonNode message = choices.get(0).get("message");
                if (message != null) {
   
                    return message.get("content").asText();
                }
            }
            
            throw new IOException("无法解析API响应: " + responseBody)

相关文章:

  • ADAS智能驾驶功能
  • 前端 VSCODE 插件开发总结 (后续将出专栏详细讲解开发的细节...)
  • 【性能优化点滴】odygrd/quill 中将 MacroMetadata 变量声明为 constexpr
  • 蓝桥杯 双子数
  • Go 语言标准库中Channels,Goroutines详细功能介绍与示例
  • 2025AWE观察:“无AI不家电”,但“AI”还是“AL”仍是个问题
  • OpenCV图像拼接(10)用于实现图像拼接过程中的时间流逝(timelapse)效果的一个类cv::detail::Timelapser
  • 【产品小白】产品视角的RAG
  • 进程状态:Linux的幕后指挥管理,穿越操作系统进程的静与动
  • 自然语言处理|高效法律助手:AI如何解析合同条款?
  • ChatBI的流程图
  • 深入探究成都国际数字影像产业园的运营模式
  • 一周掌握Flutter开发--9. 与原生交互(上)
  • Spring-boot引入nacos但未生效
  • 如何使用RK平台的spi驱动 spidev
  • 检查指定的IP地址和端口号是否可以连接
  • Vue与Supabase交互文档
  • 【MySQL基础】数据库及表基本操作
  • HarmonyOS NEXT——【鸿蒙原生应用加载Web页面】
  • ThreadLocal与Cookie + Session?
  • mui做浏览器网站跳转/seo排名工具有哪些
  • 网站充值接口怎么做/优化大师班级
  • 有人做家具网站中介吗/东莞优化排名公司
  • 东莞一站式网站推广运营/百度推广客服投诉电话
  • 专业建设物流行业网站/百度风云榜
  • 网站建设免费代理/站长域名查询