本文介绍了一个专门面向 DeepSeek R1 的 Java 集成方案 deepseek4j。它完整保留了模型的思维链能力,提供响应式流式处理,并通过 Spring Boot Starter 实现开箱即用。相比直接调用 API 或使用其他框架,deepseek4j 提供了更优雅的开发体验和更完整的功能支持。

一、为什么需要 deepseek4j?

1.1 现有框架的局限性

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

虽然笔者上篇博客介绍了如何使用 WebFlux 直接调用 DeepSeek API,但这种方式存在一些问题:

开发成本高:直接调用 API 或改造现有框架需要处理大量细节,包括请求构建、响应解析、错误处理等。一不做二不休,为了彻底解决这些问题,笔者基于 OpenAI4J 项目的优秀架构,打造了一个专门面向 DeepSeek 的开箱即用方案 DeepSeek4J,主要特点包括:

  • 完整支持 DeepSeek 独有的思维链和高级特性
  • 支持 DeepSeek 联网搜索
  • 提供 Project Reactor 的全面响应式支持
  • 提供集成 Spring Boot Starter,提供自动配置

二、核心特性

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

三、快速开始

3.1 添加依赖

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

3.2 配置参数

deepseek:
  api-key: your-api-key-here
  base-url: https://api.deepseek.com  # 可选,默认为官方 API 地址

3.3 基础使用

@Autowired
private DeepSeekClient deepSeekClient;

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

3.4 进阶配置

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);
}

3.5 前端调试

双击运行根目录的 sse.html 文件,即可打开调试页面。在页面中输入后端 SSE 接口地址,点击发送后可实时查看推理过程和最终结果。页面提供了完整的前端实现代码,可作为集成参考。

欢迎关注公众号【JAVA架构日记】,获取更多 AI 开发实践干货!