1.申请apikey
登录 硅基流动 https://siliconflow.cn/ 注册账号 申请apikey
2.添加依赖
<dependency> <groupId>com.litongjava</groupId> <artifactId>java-openai</artifactId> <version>1.1.4</version> </dependency> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.52</version> </dependency></dependencies>
3.将apikey添加到配置文件
src/main/java/app.properties
SILICONFLOW_API_KEY=
3.编写代码
http请求
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.litongjava.openai.chat.OpenAiChatMessage;
import com.litongjava.openai.chat.OpenAiChatRequestVo;
import com.litongjava.openai.chat.OpenAiChatResponseVo;
import com.litongjava.openai.client.OpenAiClient;
import com.litongjava.siliconflow.SiliconFlowConsts;
import com.litongjava.siliconflow.SiliconFlowModels;
import com.litongjava.tio.utils.environment.EnvUtils;
import com.litongjava.tio.utils.json.JsonUtils;
import okhttp3.Response;
public class SiliconFlowDeepSeekTest {
public static void main(String[] args) {
// 从配置中加载 SILICONFLOW_API_KEY
EnvUtils.load();
String apiKey = EnvUtils.getStr("SILICONFLOW_API_KEY");
// 创建消息列表
List<OpenAiChatMessage> messages = new ArrayList<>();
messages.add(new OpenAiChatMessage("user", "How are you?"));
// 创建聊天请求
OpenAiChatRequestVo chatRequestVo = new OpenAiChatRequestVo();
chatRequestVo.setStream(false);
chatRequestVo.setModel(SiliconFlowModels.DEEPSEEK_R1);
chatRequestVo.setMessages(messages);
String json = JsonUtils.toSkipNullJson(chatRequestVo);
System.out.println("请求 JSON:\n" + json);
// 发送 HTTP 请求
try (Response response = OpenAiClient.chatCompletions(SiliconFlowConsts.SELICONFLOW_API_BASE, apiKey, json)) {
if (response.isSuccessful()) {
String responseBody = response.body().string();
OpenAiChatResponseVo chatCompletions = JsonUtils.parse(responseBody, OpenAiChatResponseVo.class);
System.out.println("响应:\n" + JsonUtils.toSkipNullJson(chatCompletions));
} else {
System.err.println("请求失败: " + response);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}sse请求
package com.litongjava.perplexica.services;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.litongjava.openai.chat.ChatResponseDelta;
import com.litongjava.openai.chat.Choice;
import com.litongjava.openai.chat.OpenAiChatMessage;
import com.litongjava.openai.chat.OpenAiChatRequestVo;
import com.litongjava.openai.chat.OpenAiChatResponseVo;
import com.litongjava.openai.client.OpenAiClient;
import com.litongjava.siliconflow.SiliconFlowConsts;
import com.litongjava.siliconflow.SiliconFlowModels;
import com.litongjava.tio.utils.environment.EnvUtils;
import com.litongjava.tio.utils.json.FastJson2Utils;
import com.litongjava.tio.utils.json.JsonUtils;
import lombok.extern.slf4j.Slf4j;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okio.BufferedSource;
@Slf4j
public class SiliconFlowDeepSeekStreamTest {
public static void main(String[] args) {
// 从配置中加载 OPENAI_API_KEY
EnvUtils.load();
String apiKey = EnvUtils.getStr("SILICONFLOW_API_KEY");
// 创建消息列表
List<OpenAiChatMessage> messages = new ArrayList<>();
messages.add(new OpenAiChatMessage("user", "How are you?"));
// 创建聊天请求
OpenAiChatRequestVo chatRequestVo = new OpenAiChatRequestVo();
chatRequestVo.setStream(true);
chatRequestVo.setModel(SiliconFlowModels.DEEPSEEK_R1);
chatRequestVo.setMessages(messages);
String json = JsonUtils.toSkipNullJson(chatRequestVo);
System.out.println("请求 JSON:\n" + json);
Call call = OpenAiClient.chatCompletions(SiliconFlowConsts.SELICONFLOW_API_BASE, apiKey, json, new Callback() {
@Override
public void onResponse(Call arg0, Response response) throws IOException {
if (!response.isSuccessful()) {
String string = response.body().string();
String message = "Chat model response an unsuccessful message:" + string;
log.error("message:{}", message);
return;
}
onResponseSuccess(response);
}
@Override
public void onFailure(Call arg0, IOException arg1) {
}
});
log.info("call:{}", call);
}
private static void onResponseSuccess(Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
StringBuffer completionContent = new StringBuffer();
BufferedSource source = responseBody.source();
String line;
while ((line = source.readUtf8Line()) != null) {
if (line.length() < 1) {
continue;
}
// 处理数据行
if (line.length() > 6) {
String data = line.substring(6);
if (data.endsWith("}")) {
OpenAiChatResponseVo chatResponse = FastJson2Utils.parse(data, OpenAiChatResponseVo.class);
List<Choice> choices = chatResponse.getChoices();
if (!choices.isEmpty()) {
ChatResponseDelta delta = choices.get(0).getDelta();
String part = delta.getContent();
if (part != null && !part.isEmpty()) {
completionContent.append(part);
}
String reasoning_content = delta.getReasoning_content();
if (reasoning_content != null && !reasoning_content.isEmpty()) {
log.info("reasoning_content:{}",reasoning_content);
}
}
} else if (": keep-alive".equals(line)) {
log.info("keep-alive");
} else {
log.info("Data does not end with }:{}", line);
}
}
}
log.info("completionContent:{}",completionContent);
}
}
}输出示例
请求 JSON:
{"stream":true,"model":"deepseek-ai/DeepSeek-R1","messages":[{"role":"user","content":[{"type":"text","text":"How are you?"}]}]}
2025-02-09 16:07:23.344 [main] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.main:65 - call:okhttp3.internal.connection.RealCall@3f57bcad
2025-02-09 16:08:04.394 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content:Alright
2025-02-09 16:08:04.396 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content:, someone
2025-02-09 16:08:04.398 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: asked
2025-02-09 16:08:04.400 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content:,
2025-02-09 16:08:04.401 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: "How
2025-02-09 16:08:04.403 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: are you
2025-02-09 16:08:04.405 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content:?" H
2025-02-09 16:08:04.406 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content:mm,
2025-02-09 16:08:04.408 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: I need
2025-02-09 16:08:04.410 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: to consider
2025-02-09 16:08:04.412 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: how
2025-02-09 16:08:04.414 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: to respond
2025-02-09 16:08:04.415 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: appropriately
2025-02-09 16:08:04.417 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content:. Since
2025-02-09 16:08:04.419 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: I'm
2025-02-09 16:08:04.420 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: an AI
2025-02-09 16:08:04.422 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content:, I
2025-02-09 16:08:04.424 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: don't
2025-02-09 16:08:04.426 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: have feelings
2025-02-09 16:08:04.428 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content:,
2025-02-09 16:08:04.430 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: so
2025-02-09 16:08:04.431 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: I should
2025-02-09 16:08:04.433 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: clarify
2025-02-09 16:08:04.434 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: that.
2025-02-09 16:08:04.436 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: But I
2025-02-09 16:08:04.439 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: also want
2025-02-09 16:08:04.440 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: to be
2025-02-09 16:08:04.442 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: helpful and
2025-02-09 16:08:04.444 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: friendly.
2025-02-09 16:08:04.446 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: Maybe start
2025-02-09 16:08:04.447 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: by thanking
2025-02-09 16:08:04.448 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: them for
2025-02-09 16:08:04.450 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: asking,
2025-02-09 16:08:04.452 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: then explain
2025-02-09 16:08:04.453 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: my status
2025-02-09 16:08:04.455 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: as an
2025-02-09 16:08:04.457 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: AI,
2025-02-09 16:08:04.460 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: and offer
2025-02-09 16:08:04.462 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: assistance.
2025-02-09 16:08:04.464 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: Let
2025-02-09 16:08:04.465 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: me check
2025-02-09 16:08:04.467 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: if that
2025-02-09 16:08:04.468 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: makes
2025-02-09 16:08:04.470 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: sense.
2025-02-09 16:08:04.472 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: Also
2025-02-09 16:08:04.473 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content:, make
2025-02-09 16:08:04.475 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: sure the
2025-02-09 16:08:04.477 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: tone is
2025-02-09 16:08:04.479 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: positive and
2025-02-09 16:08:04.480 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: not
2025-02-09 16:08:04.482 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: too robotic
2025-02-09 16:08:04.483 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content:. Y
2025-02-09 16:08:04.485 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content:ep,
2025-02-09 16:08:04.487 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: that should
2025-02-09 16:08:04.488 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: work.
2025-02-09 16:08:04.521 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: Let me
2025-02-09 16:08:04.755 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: put that
2025-02-09 16:08:05.006 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content: together smoothly
2025-02-09 16:08:05.240 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:92 - reasoning_content:.
2025-02-09 16:08:11.186 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:98 - Data does not end with }:data: [DONE]
2025-02-09 16:08:11.188 [OkHttp https://api.siliconflow.cn/...] INFO c.l.p.s.SiliconFlowDeepSeekStreamTest.onResponseSuccess:103 - completionContent:
Thanks for asking! I'm just a computer program, so I don't have feelings, but I'm here and ready to help with any questions or tasks you have. What can I assist you with today? 😊完毕
项目:java-openai