public Mono<SseEmitter> streamAliAppDialogue(SendDialogueContentDTO sendDialogueContentDTO) {
log.info("streamAliAppDialogue:{}", JSONUtil.toJsonStr(sendDialogueContentDTO));
//阿里千问应用ID
String appId = "";
//阿里千问apikey
String apiKey = "";
ApplicationParam param = ApplicationParam.builder()
.appId(appId)
.apiKey(apiKey)
.sessionId(sendDialogueContentDTO.getSessionId())
.prompt(sendDialogueContentDTO.getUserContent())
.incrementalOutput(true)
.build();
Application application = new Application();
return Mono.just(new SseEmitter(Long.MAX_VALUE)).flatMap(emitter -> {
try {
application.streamCall(param)
.doOnNext(result -> {
// 将结果发送给前端
ApplicationOutput output = result.getOutput();
if(output == null){
throw new BusinessException("调用应用异常");
}
String resultContent = output.getText();
String sessionId = dialogueRecordDO.getSessionId();
//自定义前端返回实体类
DialogueContentVO dialogueContentVO = new DialogueContentVO();
dialogueContentVO.setResultContent(resultContent);
List<ApplicationOutput.DocReference> docReferences = output.getDocReferences();
dialogueContentVO.setDocReferences(docReferences);
emitter.send(SseEmitter.event().data(dialogueContentVO));
})
.doOnError(emitter::completeWithError)
.doOnComplete(emitter::complete)
.subscribe(); // 触发订阅
return Mono.just(emitter);
}catch (Exception e){
log.error(e.getMessage(),e);
}
return null;
});
}
http接口流式调用阿里千问应用,并将数据流式输出-亲测有效
最新推荐文章于 2025-03-06 11:23:09 发布