对接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);
}
}
步骤三
验证