Orange 开源项目 - 集成DeepSeek大模型

1 DeepSeek大模型

DeepSeek 是一家专注实现AGI的中国公司,如果你还想了解更多关于DeepSeek的信息,可以前往【官方网站】查询

2 集成DeepSeek大模型

2.1 获取API-KEY

获取DeepSeek API-KEY,请参考DeepSeek官网「获取DeepSeek API-KEY」

Orange 开源项目 - 集成DeepSeek大模型_第1张图片

2.2 集成对话模型(Chat Model)

public class DeepSeekChatModelServiceImpl implements ChatModelService {

    private final DeepSeekStorageProperties deepSeekStorageProperties;

    @Override
    public PlatformEnum getPlatform() {
        return PlatformEnum.DEEP_SEEK;
    }

    @Override
    public Flux<Result<ConversationReplyVO>> conversationStream(ConversationParam param) {
        return conversationStream(param, List.of());
    }

    @Override
    public Flux<Result<ConversationReplyVO>> conversationStream(ConversationParam param, List<ChatSessionRecordVO> contextMessageList) {
        OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.get("application/json");
        ChatCompletionsParam reqBody = generateChatRequestBody(param, contextMessageList);

        Request request = new Request.Builder()
                .url(deepSeekStorageProperties.getChatUrl())
                .addHeader(SecurityConstant.AUTHORIZATION, "Bearer " + deepSeekStorageProperties.getToken())
                .post(RequestBody.create(JSONUtil.toJsonStr(reqBody), mediaType))
                .build();


        return Flux.create(emitter -> {
            EventSourceListener listener = new EventSourceListener() {
                @Override
                public void onOpen(@NotNull EventSource eventSource, @NotNull Response response) {
                    System.out.println("SSE connection opened");
                }

                @Override
                public void onClosed(@NotNull EventSource eventSource) {
                    emitter.complete();
                    System.out.println("SSE connection closed");
                }

                @Override
                public void onEvent(@NotNull EventSource eventSource, String id, String type, @NotNull String data) {
                    if (log.isDebugEnabled()) {
                        log.debug("data:{}", data);
                    }
                    if (StrUtil.isBlank(data) || DeepSeekContent.DONE.equalsIgnoreCase(data)) {
                        emitter.complete();
                        return;
                    }
                    ChatCompletionsResponse response = JSONUtil.toBean(data, ChatCompletionsResponse.class);
                    StringBuilder content = new StringBuilder();
                    for (ChatCompletionsResponse.ChoiceItem choice : response.getChoices()) {
                        content.append(choice.getDelta().getContent());
                    }
                    emitter.next(ResultWrapper.ok(ConversationReplyVO.builder().content(content.toString()).build()));
                }

                @Override
                public void onFailure(@NotNull EventSource eventSource, Throwable t, Response response) {
                    System.err.println("Error occurred: " + t);
                }
            };
            EventSource.Factory factory = EventSources.createFactory(client);
            factory.newEventSource(request, listener);
        });
    }

    private ChatCompletionsParam generateChatRequestBody(ConversationParam param, List<ChatSessionRecordVO> contextMessageList) {
        List<MessageItem> messages = new ArrayList<>();
        if (CollUtil.isNotEmpty(contextMessageList)) {
            for (ChatSessionRecordVO record : contextMessageList) {
                if (MessageTypeEnum.USER.equals(record.getMessageType())) {
                    messages.add(MessageItem.builder().role(MessageType.USER.getValue()).content(record.getContent()).build());
                    continue;
                }
                if (MessageTypeEnum.ASSISTANT.equals(record.getMessageType())) {
                    messages.add(MessageItem.builder().role(MessageType.ASSISTANT.getValue()).content(record.getContent()).build());
                }
            }
        }
        messages.add(MessageItem.builder().role(MessageType.USER.getValue()).content(param.getPrompt()).build());

        return ChatCompletionsParam.builder()
                .model(param.getModelCode())
                .messages(messages)
                .stream(Boolean.TRUE)
                .build();
    }

}
  • 项目源码:https://github.com/hengzq/orange-ai

2.3 在线体验

  • 在线体验: http://tiny.hengzq.cn
    Orange 开源项目 - 集成DeepSeek大模型_第2张图片

3 项目体验

  • Orange 官网: http://hengzq.cn
  • 在线体验: http://tiny.hengzq.cn
  • 项目文档: http://hengzq.cn/orange-monomer/
  • 单体架构-后端源码下载【GitHub】: https://github.com/hengzq/orange-monomer
  • 单体架构-后端源码下载【Gitee】: https://gitee.com/hengzq/orange-monomer
  • 微服务版本-后端源码下载【GitHub】: https://github.com/hengzq/orange-cloud
  • 微服务版本-后端源码下载【Gitee】: https://gitee.com/hengzq/orange-cloud
  • 前端源码下载【GitHub】: https://github.com/hengzq/orange-cloud
  • 前端源码下载【Gitee】: https://gitee.com/hengzq/orange-cloud

注:前端项目设计灵活,能够同时兼容后端的单体架构和微服务架构

4 相关文档

  • Orange 开源项目介绍
  • Orange 单体架构 - 快速启动
  • Orange 开源项目 - 集成阿里云大模型
  • Orange 开源项目 - 集成智谱AI大模型
  • Orange 开源项目 - 集成DeepSeek大模型
  • Orange 开源项目 - 集成百度智能云-千帆大模型

你可能感兴趣的:(Orange,开源项目,开源,Deepseek,orange,AI编程)