请教几个问题

请教大家几个问题。

1、用到了deepseek4j非spring版,如何流式输出到前端

Service:
public Flux<ChatCompletionResponse> chatLocalOllama(String prompt) {
    DeepSeekClient.Builder conf = DeepSeekClient.builder().baseUrl(URL).model(MODEL_NAME).openAiApiKey(DS_API_KEY)
				.logRequests(true);
    DeepSeekClient client = conf.build();

    Flux<ChatCompletionResponse> flux = client.chatFluxCompletion(prompt);
    return flux;
}

Controller:
public void chat() {
   try {
	String prompt = getJSONObject().getStr("content", "你是谁?");
	SseEmitter sse = new SseEmitter(getResponse());
	srv.chatLocalOllama(prompt);

	sse.waiting(100);
	System.out.println("sse comlete");
	renderNull();
   } catch (Exception e) {
	renderErr(e);
   }
}

这们做无法流式输出到页面。

2、前端如何设计流畅的聊天模式?

image.png

1)分角色显示对话模式

2)如何体现出<think>部分内容?

image.png

3)主体部分内容,如何使用markdown即时展示?因为是流式输出,不知道后面输出的内容是不是符合markdown格式的。


问了deepseek,暂时没有找到好的解决方案。

评论区

杜福忠

2025-03-02 17:22

DeepSeekClient client = conf.build();

Flux<ChatCompletionResponse> flux = client.chatFluxCompletion("你好 deepseek");
SseEmitter sseEmitter = new SseEmitter(getResponse());
flux.subscribe(d -> d.choices().forEach(v ->
sseEmitter.sendMessage(v.delta().content())));
sseEmitter.complete();
renderNull();


前端 你搜 const eventSource = new EventSource('/sse'); 的用法就知道了。
可以参考一下前端部分(对于你的业务这个例子稍复杂了,可以直接问deepseek JS EventSource 的用法):
https://jfinal.com/share/2770

杜福忠

2025-03-02 17:25

PS: DeepSeekClient 做好单例,可以弄一个静态变量,或者弄个静态 MAP 装载不同类型的DeepSeekClient

北流家园网

2025-03-02 21:53

谢谢杜总,我研究了2天,根据你的思路已解决问题。

热门反馈

扫码入社