Commit 4fdc510f by zhangxingmin

push

parent 18044d65
...@@ -92,27 +92,34 @@ public class ApiAiStreamServiceImpl implements ApiAiStreamService { ...@@ -92,27 +92,34 @@ public class ApiAiStreamServiceImpl implements ApiAiStreamService {
Publisher<GenerationResult> publisher = null; Publisher<GenerationResult> publisher = null;
try { try {
publisher = gen.streamCall(param); publisher = gen.streamCall(param);
} catch (NoApiKeyException e) { } catch (NoApiKeyException | InputRequiredException e) {
e.printStackTrace(); log.error("流式调用初始化失败", e);
} catch (InputRequiredException e) { sink.error(e);
e.printStackTrace(); return;
} }
Flowable<GenerationResult> flowable = Flowable.fromPublisher(publisher) Flowable<GenerationResult> flowable = Flowable.fromPublisher(publisher)
.subscribeOn(Schedulers.io()); // 使用 RxJava3 的 Schedulers.io() .subscribeOn(Schedulers.io());
// 用于累计完整文本的 StringBuilder
StringBuilder fullContent = new StringBuilder();
flowable.subscribe( flowable.subscribe(
result -> { result -> {
String delta = result.getOutput().getChoices().get(0).getMessage().getContent(); String delta = result.getOutput().getChoices().get(0).getMessage().getContent();
// 实时着色并打印 // 拼接到累计文本中
printWithStyle(delta); fullContent.append(delta);
System.out.flush(); // 将当前完整内容发送给前端
sink.next(delta); sink.next(fullContent.toString());
}, },
error -> { error -> {
log.error("流式调用出错", error); log.error("流式调用出错", error);
sink.error(error); sink.error(error);
}, },
sink::complete () -> {
log.info("流式输出完成,总长度: {}", fullContent.length());
sink.complete();
}
); );
}); });
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment