springboot 项目一行代码集成 DeepSeek 完整代码示例(DeepSeek4j )

DeepSeek R1 凭借其强大的 思维链 能力在开发者中广受欢迎,但 Spring AI 等主流框架对其支持不足,特别是在 思维链内容保留流式输出 方面存在诸多限制。最新发布的 DeepSeek4j 1.4 版本,针对这些限制带来了重要更新。

项目地址:https://github.com/pig-mesh/deepseek4j

图片

相关阅读:

为什么需要 DeepSeek4j?

DeepSeek4J 是专为 Java 生态打造的 DeepSeek 模型集成框架。其 API 设计简洁优雅,仅需一行代码,即可完成 DeepSeek 的接入。

现有框架的局限性

  • 思维链内容丢失:R1 最核心的推理过程完全被忽略。
  • 响应模式不兼容:无法处理“思考在前、结论在后”的输出模式。
  • 参数限制temperaturetop_p 等关键参数设置失效。
  • 流式处理不完善:用户体验欠佳。

解决方案

开源项目 Pig 的作者基于 OpenAI4J 项目的优秀架构,打造了一个专门面向 DeepSeek 的开箱即用方案——DeepSeek4j

  • 增强支持 DeepSeek 独有的思维链和账单特性。
  • 增加 Project Reactor 的全面响应式支持。
  • 提供集成 Spring Boot Starter,支持自动配置。

核心特性

  • 完整保留思维链能力和账单
  • 🚀 响应式流式处理
  • 🛠 简单优雅的 API 设计
  • 📦 开箱即用的 Spring Boot 集成**,支持 2.x / 3.x。**
  • 💡 内置调试页面
  • 🔍 详细的请求响应日志
  • 🔧 灵活的代理配置
  • ⚡️ 响应式编程支持

快速开始

添加依赖

<dependency>
    <groupId>io.github.pig-mesh.ai</groupId>
    <artifactId>deepseek-spring-boot-starter</artifactId>
    <version>1.1.0</version>
</dependency>

配置参数

application.yml 中添加以下配置:

deepseek:
  api-key: your-api-key-here
  base-url: https://api.deepseek.com/v1  # 可选,默认为官方 API 地址,支持火山、gitee、硅基流动

基础使用

@Autowired
private DeepSeekClient deepSeekClient;

// sse 流式返回
@GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ChatCompletionResponse> chat(String prompt) {
    return deepSeekClient.chatFluxCompletion(prompt);
}

进阶配置:

public Flux<ChatCompletionResponse> chat(String prompt) {
    ChatCompletionRequest request = ChatCompletionRequest.builder()
            // 模型选择,支持 DEEPSEEK_CHAT、DEEPSEEK_REASONER 等
            .model(ChatCompletionModel.DEEPSEEK_CHAT)
            // 添加用户消息
            .addUserMessage(prompt)
            // 添加助手消息,用于多轮对话
            .addAssistantMessage("上轮结果")
            // 添加系统消息,用于设置角色和行为
            .addSystemMessage("你是一个专业的助手")
            // 设置最大生成 token 数,默认 2048
            .maxTokens(1000)
            // 设置响应格式,支持 JSON 结构化输出
            .responseFormat()
            .tools() // function calling
            .build();

    return deepSeekClient.chatFluxCompletion(request);
}

开发者专享彩蛋:

内置可视化调试页面 http://try.pig4cloud.com/sse.html,双击 sse.html 即可开启实时对话监控,完整呈现思维链演进过程!页面提供了完整的前端实现代码,可作为集成参考。

图片

用 DeepSeek4j 开发私有大模型知识库

背景

DeepSeek4j 提供了一套强大的 API,涵盖 ReasonerFunction CallingJSON 解析等特性。本工具旨在简化 DeepSeek API 的集成,让开发者能够快速调用相关能力并集成到自己的应用中。

然而,DeepSeek 官方并未提供向量模型,因此本工具在最初设计时未考虑向量搜索的集成。

解决方案

经过深入的技术方案评估,我们选择了一个优雅的解决方案:通过兼容 OpenAI 协议标准来集成向量模型能力。这种方案具有以下优势:

  1. 零额外依赖:无需引入新的依赖包,保持框架轻量。
  2. 完美兼容性:与现有架构无缝衔接,确保向后兼容。
  3. 标准化接入:采用业界通用的 OpenAI 协议,降低学习成本。

快速上手

下面将带领大家从零开始构建一个基础 RAG 系统。通过白盒编码的方式,不仅能深入理解 RAG 的核心原理,还可以根据实际需求灵活调整和优化各个环节。相比直接使用现有的开源 RAG 产品,这种方式能让我们更好地掌控系统行为,实现更精准的知识检索和问答效果。

1739407145

环境准备

在开始构建 RAG 系统之前,我们需要准备以下环境:

Ollama 模型准备

首先安装 Ollama,然后下载以下必要的模型:

# 下载推理模型 - 用于理解和生成回答
ollama run deepseek-r1:14b

# 下载向量模型 - 用于文本向量化
ollama run bge-m3:latest
向量数据库准备

本文使用 Milvus 作为向量数据库,你可以选择以下两种方式之一进行安装:

方式一:使用 milvus 测试环境

  • 访问 Zilliz Cloud 中文版:https://cloud.zilliz.com.cn
  • 获取连接信息(后续配置需要用到)

方式二:Docker 安装

# 1. 下载安装脚本
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh

# 2. 启动 Docker 容器
bash standalone_embed.sh start

注意:如果选择 Docker 安装方式,请确保你的网络环境能够正常访问 Github。

初始化向量数据:创建本次知识库存储、获取链接信息和表信息:

1739410521

项目依赖

在你的 Maven 项目中添加以下依赖:

<dependency>
    <groupId>io.github.pig-mesh.ai</groupId>
    <artifactId>deepseek-spring-boot-starter</artifactId>
    <version>1.4.0</version>
</dependency>
<!-- 链接 milvus SDK-->
<dependency>
    <groupId>io.milvus</groupId>
    <artifactId>milvus-sdk-java</artifactId>
    <version>2.5.3</version>
</dependency>
*application.yml 配置*
# 推理模型链接信息
deepseek:
  base-url: http://127.0.0.1:11434/v1
  model: deepseek-r1:14b
  api-key: ollama-local
# 向量模型链接信息
embedding:
  api-key: ${deepseek.api-key}
  base-url: ${deepseek.base-url}
  model: bge-m3:latest

初始化私有知识

在构建 RAG 系统时,第一步是将已有的知识内容转换为向量形式并存储到向量数据库中。

创建链接客户端
// 1. Connect to Milvus server
ConnectConfig connectConfig = ConnectConfig.builder()
        .uri(CLUSTER_ENDPOINT) // 1.2 获取的 Milvus 链接端点
        .token(TOKEN)  // 1.2 获取的 Milvus 链接信息
        .build();

MilvusClientV2 milvusClientV2 = new MilvusClientV2(connectConfig);
准备资料并向量化上传

以下示例为了节约篇幅,以处理纯文本资料。对于 Office 文档、图片、PDF、音视频等其他格式的文件处理,deepseek4j 提供了完整的解决方案,可点击查看 Pig 项目作者开源的 office2md 项目

图片

office2md 2.0 发布,支持并发视觉理解和图片自我矫正

@Autowired
EmbeddingClient embeddingClient;

{
    // 这里以 2025最新的我司保密条例演示,可以换成你自己的
    String law = FileUtil.readString("/Users/lengleng/Downloads/law.txt", Charset.defaultCharset());
    String[] lawSplits = StrUtil.split(law, 400);


    List<JsonObject> data = new ArrayList<>();
    for (String lawSplit : lawSplits) {
        List<Float> floatList = embeddingClient.embed(lawSplit);

        JsonObject jsonObject = new JsonObject();

        // 将 List<Float> 转换为 JsonArray
        JsonArray jsonArray = new JsonArray();
        for (Float value : floatList) {
            jsonArray.add(value);
        }
        jsonObject.add("vector", jsonArray);
        jsonObject.addProperty("text", lawSplit);

        data.add(jsonObject);
    }

    InsertReq insertReq = InsertReq.builder()
            .collectionName("deepseek4j_test")
            .data(data)
            .build();

    milvusClientV2.insert(insertReq);
}

创建 RAG 接口

@GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ChatCompletionResponse> chat(String prompt) {
    MilvusClientV2 milvusClientV2 = new MilvusClientV2(connectConfig);

    List<Float> floatList = embeddingClientOptional.get().embed(prompt);

    SearchReq searchReq = SearchReq.builder()
            .collectionName("deepseek4j_test")
            .data(Collections.singletonList(new FloatVec(floatList)))
            .outputFields(Collections.singletonList("text"))
            .topK(3)
            .build();

    SearchResp searchResp = milvusClientV2.search(searchReq);

    List<String> resultList = new ArrayList<>();
    List<List<SearchResp.SearchResult>> searchResults = searchResp.getSearchResults();
    for (List<SearchResp.SearchResult> results : searchResults) {
        System.out.println("TopK results:");
        for (SearchResp.SearchResult result : results) {
            resultList.add(result.getEntity().get("text").toString());
        }
    }


    ChatCompletionRequest request = ChatCompletionRequest.builder()
            // 根据渠道模型名称动态修改这个参数
            .model("deepseek-r1:14b")
            .addUserMessage(String.format("你要根据用户输入的问题:%s \n \n 参考如下内容: %s  \n\n 整理处理最终结果", prompt, resultList)).build();

    return deepSeekClient.chatFluxCompletion(request);
}

前端测试

图片

总结

本文围绕 DeepSeek4j 1.4 的最新发布,详细介绍了其在构建私有知识库和增强 RAG(检索增强生成)系统方面的功能与应用。

通过以下核心步骤快速构建了基础 RAG 系统:

  1. 环境准备:部署推理模型和向量模型
  2. 知识库构建:向量化存储
  3. 检索增强:通过语义搜索获取关联知识
  4. 推理生成:结合上下文生成最终回答

要让 RAG 系统达到生产可用水平,每个环节都需要进一步优化和完善:

  1. 检索策略优化:结合关键词和语义的混合检索,提高召回准确度
  2. 重排序优化:对检索结果进行二次排序,确保最相关内容排在前面
  3. 提示词工程:优化 Prompt 模板,引导模型生成更准确的回答
  4. 知识库管理:定期更新和维护知识库,保证数据时效性
  5. 性能调优:优化向量检索和模型推理的性能

更多高级特性和最佳实践可以参考:

  • 官方文档:https://javaai.pig4cloud.com/deepseek
  • 问题反馈:https://github.com/pig-mesh/deepseek4j

links:

https://mp.weixin.qq.com/s/cwJAMVMz-awlzXZ1RL-s7A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学亮编程手记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值