惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
MyScale Blog
MyScale Blog
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
U
Unit 42
Blog — PlanetScale
Blog — PlanetScale
L
LangChain Blog
C
Check Point Blog
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
Vercel News
Vercel News
腾讯CDC
GbyAI
GbyAI
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
H
Help Net Security
博客园 - 三生石上(FineUI控件)
D
DataBreaches.Net
Microsoft Security Blog
Microsoft Security Blog
小众软件
小众软件

博客园 - 幽州散人

SQL优化案例 synchronized 为啥会让虚拟线程卸载失效 主线任务和使命 温州3日之旅 CompletableFuture + 异步Servlet:同步的姿势、异步的效果 Snowflake雪花算法与发号器的应用 windows Java 幽灵转发壳进程 也谈MySQL limit offset深翻页问题 SHOW SESSION STATUS 与 Handler 变量 MySQL 5.7 Profiles 执行性能分析 MySQL临时表与文件排序 MySQL 5.7 MRR多范围读优化 MySQL 5.7 ICP索引条件下推优化 MySQL符合索引与最左前缀原则 从I/O 的物理成本理解回表和索引覆盖 第4个电瓶以及补漆 Flink原理:并行度与keyGroup桶 什么是数字批发银行 Java虚拟线程(三)实现原理 Java虚拟线程(二) Java虚拟线程(一) 大模型推理层服务化架构 传奇调查员之路:理智值-99,但我必须听懂深渊的语言 js里调用智能合约读/写函数的方法的区别 字节与其16进制字符表示转换的bug Redisson分布式锁 交易心得 DexScreener接口初探 某安全软件跑飞了。。 Ed25519算法签名与验签的Java实现
使用Deepseek4j接入阿里云百炼DeepSeek R1
幽州散人 · 2025-09-08 · via 博客园 - 幽州散人

Spring有Spring AI这个项目,不过这里找到了另一个项目Deepseek4j,也是个Spring starter,提供了一个基础框架用来承接各种ds大模型,可以对接包括本地部署的Ollama r1,腾讯、硅基流动、阿里、火山引擎这些版本的R1模型或V3模型,比较方便。以下是一个简单实践。

前端ai.html --> 后端SpringBoot + Deepseek4j --> 阿里云大模型服务平台百炼上的Deepseek R1满血版

实践过程

  1. 先去阿里云大模型服务平台“百炼”上进行注册,获得API_KEY
  2. 本地搭建SpringBoot + Deepseek4j,通过API_KEY去调用百炼大模型服务。

pom.xml 增加如下依赖,其他依赖略,SpringMVC项目或WebFlux都可以。

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

controller

import io.github.pigmesh.ai.deepseek.core.DeepSeekClient;
import io.github.pigmesh.ai.deepseek.core.chat.ChatCompletionResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

@Slf4j
@RestController
@RequestMapping("ai")
public class AiController {

    @Autowired
    private DeepSeekClient deepSeekClient;

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

application.properties配置文件

deepseek.base-url=https://dashscope.aliyuncs.com/compatible-mode/v1
deepseek.model=deepseek-r1
deepseek.api-key=百炼上申请的API_KEY
deepseek.log-requests=true
deepseek.log-responses=true
deepseek.connect-timeout=10
deepseek.read-timeout=30
deepseek.call-timeout=60
  1. 简单写个测试问答api页面ai.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>AI 问答测试页面(优化版)</title>
    <style>
    body {
      font-family: Arial, sans-serif;
      margin: 20px;
      max-width: 800px;
    }
    textarea {
      width: 100%;
      height: 100px;
      margin: 10px 0;
      padding: 8px;
      box-sizing: border-box;
    }
    .response-area {
      border: 1px solid #ddd;
      border-radius: 4px;
      margin: 10px 0;
      padding: 10px;
      background-color: #f8f9fa;
    }
    #reasoning {
      background-color: #fff;
      max-height: 200px;
      overflow-y: auto;
    }
    #answer {
      white-space: pre-wrap;
      min-height: 100px;
    }
    .toggle-header {
      cursor: pointer;
      color: #666;
      padding: 5px;
      background-color: #f0f0f0;
      border-radius: 3px;
      margin: 5px 0;
    }
    button {
      padding: 10px 20px;
      background-color: #007bff;
      color: white;
      border: none;
      border-radius: 4px;
      cursor: pointer;
    }
    button:hover {
      background-color: #0056b3;
    }
  </style>
</head>
<body>
<h1>AI 问答 API 测试</h1>
<textarea id="prompt" placeholder="请输入问题..."></textarea><br>
<button id="send">发送</button>

<h2>回答结果:</h2>
<div class="response-area" id="answer"></div>

<details>
    <summary class="toggle-header">推理过程(点击展开)</summary>
    <div class="response-area" id="reasoning"></div>
</details>

<script>
    let eventSource = null;

    document.getElementById('send').addEventListener('click', function() {
      const prompt = document.getElementById('prompt').value;
      if (!prompt) {
        alert("请输入问题");
        return;
      }

      // 关闭已有连接
      if (eventSource) {
        eventSource.close();
      }

      // 清空显示区域
      document.getElementById('answer').textContent = "";
      document.getElementById('reasoning').textContent = "";

      const url = `/ai/chat?prompt=${encodeURIComponent(prompt)}`;
      eventSource = new EventSource(url);

      eventSource.onmessage = (e) => {
        try {
          const data = JSON.parse(e.data);
          const delta = data.choices[0].delta;

          // 处理推理内容
          if (delta.reasoning_content !== undefined) {
            const reasoningElement = document.getElementById('reasoning');
            reasoningElement.textContent += delta.reasoning_content;
            reasoningElement.scrollTop = reasoningElement.scrollHeight;
          }

          // 处理最终回答
          if (delta.content !== undefined) {
            const answerElement = document.getElementById('answer');
            answerElement.textContent += delta.content;
            answerElement.scrollTop = answerElement.scrollHeight;
          }
        } catch (err) {
          console.error('数据解析错误:', err);
        }
      };

      eventSource.onerror = (e) => {
        console.error("SSE连接错误:", e);
        if (eventSource) {
          eventSource.close();
          eventSource = null;
        }
      };
    });
  </script>
</body>
</html>

效果:
ai-api

参考

前端如何与后端响应式类型API交互
https://blog.csdn.net/waiter456/article/details/141114447
https://www.ruanyifeng.com/blog/2017/05/server-sent_events.html

Spring AI整合
https://javaai.pig4cloud.com/deepseek/bailian
https://www.cnblogs.com/guoxiaoyu/p/18700826

通过阿里云百炼平台调用DeepSeek-R1 满血版 API
https://www.aliyun.com/solution/tech-solution/deepseek-r1-for-platforms

Spring AI 从Java视角下学习大模型的不错的切入口
https://www.zhihu.com/column/c_1853261396491517952