AI大模型实用(一)SpringAI接入deepseek示例

一、SpringAI接入deepseek所需环境

  • JDK17+(JDK8无法支持)
  • SpringBoot 3.x
  • maven 3.6+

官网地址

https://docs.spring.io/spring-ai/reference/api/chatclient.html

SpringAI接入deepseek方式有很多。 下面演示SpringAI原生方式接入deepseek.

注:Spring AI调用Ollama+DeepSeek

二、pom依赖

1、 SpringBoot修改版本

复制代码
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

2、SpringAI通过deepseek提供的openapi接入deepseek

复制代码
<!--       springAI提供的openapi-->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
            <version>1.0.0-M6</version>
        </dependency>

三、相关配置

复制代码
spring.ai.openai.api-key=xxx(修改成自己的密匙)
spring.ai.openai.base-url=https://api.deepseek.com
spring.ai.openai.chat.options.model=deepseek-chat

四、代码

java 复制代码
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class SpringAIConfig {
    @Bean
    public ChatClient chatClient(ChatClient.Builder builder) {
        return builder.defaultSystem("你是一名资深开发工程师,你的名称叫siri").build();
    }
}

示例1:定义controller

java 复制代码
package com.ai.controller;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.model.Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/ChatController")
public class ChatController {
    private final ChatClient chatClient;

    ChatController(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
    }

    @GetMapping("/ai")
    String generation(String question) {
        return this.chatClient.prompt()
                .user(question)
                .call()
                .content();
    }


}

访问: http://127.0.0.1:8886/ChatController/ai?question=%E4%BB%8B%E7%BB%8D%E4%B8%80%E4%B8%8B%E4%BD%A0%E8%87%AA%E5%B7%B1

运行结果:

访问:

运行结果:http://127.0.0.1:8886/ChatController/chattest?question=%E4%BD%A0%E6%98%AF%E8%B0%81

示例2:定义controller(流式输出)

java 复制代码
package com.ai.controller;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.Generation;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.SystemPromptTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@RestController
@RequestMapping(value = "/SpringAIController")
public class SpringAIController {
    @Autowired
    private ChatClient chatClient;

//    private final ChatClient chatClient;
    //ChatClient底层是使用ChatModel作为属性的,在初始化ChatClient的时候可以指定ChatModel
    @Autowired
    private ChatModel chatModel;

    public SpringAIController(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.defaultSystem("你是一个AI智能应用").build();

    }

    @GetMapping("/chat")
    public String chat(@RequestParam(value = "msg",defaultValue = "介绍一下杜甫")
                        String message) {
        //prompt:提示词
        return this.chatClient.prompt()
                //用户输入的信息
                .user(message)
                //请求大模型
                .call()
                //返回文本
                .content();
    }
   //流式响应
    @GetMapping(value = "/chatstream",produces="text/html;charset=UTF-8")
    public Flux<String> chatStream(@RequestParam(value = "message") String message) {
        return chatClient.prompt().user(message).stream().content();
    }
}

访问:

http://127.0.0.1:8886/SpringAIController/chatstream?message=%E4%BB%8B%E7%BB%8D%E4%B8%80%E4%B8%8B%E4%BD%A0%E8%87%AA%E5%B7%B1

注意: 不使用流式输出时,访问http://127.0.0.1:8886/SpringAIController/chat?question=%E4%BD%A0%E6%98%AF%E8%B0%81

结果出现超时: TimeoutException: Total timeout 10000 ms elapsed

相关推荐
大模型真好玩2 天前
大模型训练全流程实战指南工具篇(七)——EasyDataset文档处理流程
人工智能·langchain·deepseek
Rockbean2 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
爱吃的小肥羊3 天前
DeepSeek V4 细节曝光:100 万上下文 + 原生多模态
人工智能·aigc·deepseek
AC赳赳老秦3 天前
云原生AI故障排查新趋势:利用DeepSeek实现高效定位部署报错与性能瓶颈
ide·人工智能·python·云原生·prometheus·ai-native·deepseek
AI大模型..3 天前
Dify 本地部署安装教程(Windows + Docker),大模型入门到精通,收藏这篇就足够了!
人工智能·程序员·开源·llm·github·deepseek·本地化部署
AC赳赳老秦4 天前
预见2026:DeepSeek与云平台联动的自动化流程——云原生AI工具演进的核心引擎
人工智能·安全·云原生·架构·自动化·prometheus·deepseek
AC赳赳老秦4 天前
DeepSeek助力云原生AI降本:容器化部署资源优化与算力利用率提升技巧
网络·python·django·prompt·tornado·ai-native·deepseek
AC赳赳老秦5 天前
多模态 AI 驱动办公智能化变革:DeepSeek 赋能图文转写与视频摘要的高效实践
java·ide·人工智能·python·prometheus·ai-native·deepseek
AC赳赳老秦5 天前
2026云原生AI规模化趋势预测:DeepSeek在K8s集群中的部署与运维实战
运维·人工智能·云原生·架构·kubernetes·prometheus·deepseek
码农小韩6 天前
AIAgent应用开发——大模型理论基础与应用(六)
人工智能·python·提示词工程·aiagent·deepseek