对接deepseek api接口

1、登录deepseek 创建API key

2、查阅deepseek官方文档的对话接口

3、创建demo项目

步骤一

pom引用okhttp

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.2.0</version>
</dependency>
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp-sse</artifactId>
    <version>4.2.0</version>
</dependency>

步骤二

非流式调用

@Override
public JSONObject chat(DeepSeekQuestion question) {
    OkHttpClient client = OkHttpClientUtil.getHttpClient();
    MediaType mediaType = MediaType.parse("application/json");
    DeepSeekRequest deepSeekRequest = createRequest(question, false);
    RequestBody body = RequestBody.create(JSON.toJSONString(deepSeekRequest), mediaType);
    Request request = new Request.Builder()
            .url(url)
            .method("POST", body)
            .addHeader("Content-Type", "application/json")
            .addHeader("Accept", "application/json")
            .addHeader("Authorization", "Bearer " + token)
            .build();
    try {
        Response response = client.newCall(request).execute();
        String respBody = response.body().string();
        log.info("deepseek resp={}", respBody);
        return JSON.parseObject(respBody);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

流失调用

@Override
public SseEmitter sseChat(DeepSeekQuestion question) {
    SseEmitter sseEmitter = new SseEmitter(30000L);
    OkHttpClient client = OkHttpClientUtil.getHttpClient();
    MediaType mediaType = MediaType.parse("application/json");
    DeepSeekRequest deepSeekRequest = createRequest(question, true);
    RequestBody body = RequestBody.create(JSON.toJSONString(deepSeekRequest), mediaType);
    Request request = new Request.Builder()
            .url(url)
            .method("POST", body)
            .addHeader("Content-Type", "application/json")
            .addHeader("Accept", "application/json")
            .addHeader("Authorization", "Bearer " + token)
            .build();
    EventSource.Factory factory = EventSources.createFactory(client);
    factory.newEventSource(request, new SSEListener(sseEmitter));
    return sseEmitter;
}
@Slf4j
public class SSEListener extends EventSourceListener {

    private SseEmitter sseEmitter;

    public SSEListener(SseEmitter sseEmitter) {
        this.sseEmitter = sseEmitter;
    }

    @Override
    public void onClosed(@NotNull EventSource eventSource) {
        sseEmitter.complete();
    }

    @Override
    public void onEvent(@NotNull EventSource eventSource, @Nullable String id, @Nullable String type, @NotNull String data) {
        log.info("sse send data ={}", data);
        try {
            sseEmitter.send(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onFailure(@NotNull EventSource eventSource, @Nullable Throwable t, @Nullable Response response) {
        log.info("sse failure");
        sseEmitter.complete();
    }

    @Override
    public void onOpen(@NotNull EventSource eventSource, @NotNull Response response) {
        log.info("sse open");
    }
}

controller部分

@RestController
@RequestMapping("/ai/chat")
public class DeepSeekDemoController {

    @Autowired
    private DeepSeekService deepSeekService;

    @PostMapping("/generate")
    public JSONObject generate(@RequestBody DeepSeekQuestion question) {
        return deepSeekService.chat(question);
    }


    @PostMapping(value = "/sseGenerate", produces = {MediaType.TEXT_EVENT_STREAM_VALUE})
    public SseEmitter sseGenerate(@RequestBody DeepSeekQuestion question) {
        return deepSeekService.sseChat(question);
    }

}

步骤三

验证

image-20250305191459591

image-20250305191701102

results matching ""

    No results matching ""