Orange 开源项目 - 集成阿里云大模型
@Override
public Flux<Result<ConversationReplyVO>> conversationStream(ConversationParam param, List<ChatSessionRecordVO> contextMessageList) {
List<Message> messages = new ArrayList<>(MessageConverter.toMessageList(contextMessageList));
messages.add(new UserMessage(param.getPrompt()));
Prompt prompt = new Prompt(messages, DashScopeChatOptions.builder()
.withModel(param.getModelCode())
.build());
Flux<ChatResponse> stream = chatModel.stream(prompt);
return stream
.takeWhile(chatResponse -> Objects.nonNull(chatResponse) && Objects.nonNull(chatResponse.getResult())
&& Objects.nonNull(chatResponse.getResult().getOutput()))
.map(chatResponse -> {
if (log.isDebugEnabled()) {
log.debug("chatResponse: {}", chatResponse);
}
Usage usage = chatResponse.getMetadata().getUsage();
String content = chatResponse.getResult().getOutput().getContent();
String finishReason = chatResponse.getResult().getMetadata().getFinishReason();
ConversationReplyVO replyVO = ConversationReplyVO.builder()
.event("STOP".equalsIgnoreCase(finishReason) ? ConverstationEventEnum.FINISHED : ConverstationEventEnum.REPLY)
.content(content)
.tokenUsage(TokenUsageVO.builder()
.promptTokens(usage.getPromptTokens())
.generationTokens(usage.getGenerationTokens())
.totalTokens(usage.getTotalTokens())
.build())
.build();
return ResultWrapper.ok(replyVO);
});
}