【AI尝鲜】springboot接入deepseek-极简接入

263 阅读2分钟

这半年有点事,号都长草了,上次更新遥远到还是上次,最近得些空闲,拾掇拾掇继续。现在技术圈最热的莫过于AI,似乎除了这个其他的都已经是上古时代产物,deepseek一夜之间打开了新世界的大门,莫慌,我们也来门口晃一晃。

经常有人问:deepseek不是开源的吗?我自己部一套接入自己的应用可以不? 当然OK,但是小公司不建议,软件虽然开源,还需要硬件不是吗?以下是问deepseek部署它需要的资源建议,来源网络,老板们参考即可!

image.png 那用现成的呢?当然也可以,deepseek本身提供的有api,按需接入即可,本文即做这种最简单的接入介绍,至于有的道友可能会说“有知识库个性化需求”、“甲方爸爸不差钱,就是要私有化”······没关系,有需求就有解决方案,deepseek也提供了好几个蒸馏模型,满血版不行我们也可以部残血版,ollama部署一个7b的本机自己研究也可以,本文仅做最简单的API集成说明,笔者本地做了7b模型的部署,确实差点意思,不建议强上。

1、准备工作

  • springboot 3.3.3
  • spring-ai-openai-spring-boot-starter 1.1.0
  • deepseek api key 主要pom如下
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
</dependency>
<dependency>  
    <groupId>org.projectlombok</groupId>  
    <artifactId>lombok</artifactId>  
    <optional>true</optional>  
</dependency>  
<dependency>  
    <groupId>cn.hutool</groupId>  
    <artifactId>hutool-all</artifactId>  
    <version>5.8.32</version>  
</dependency>
<dependency>  
    <groupId>group.springframework.ai</groupId>  
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>  
    <version>1.1.0</version>  
</dependency>

2、DeepSeek Key 申请

申请很简单,去deepseek开放平台注册账号,创建API key即可,【API keys】--【创建API key】。现在接口需要收费,自己测试用充三块五块即可。

image.png

3、接入配置

程序主要使用Spring AI接入,spring ai旨在简化将人工智能功能开发并集成到现有或新的 Spring 应用程序中的过程,提供高级接口(如 ChatModel、ImageModel、VectorStore 等),并将这些接口实现到不同的模块中,而每个模块都为特定的语言模型提供集成点。在你项目的application.yml中添加如下配置:

spring:      
  ai:  
    openai:  
      api-key: {{上面申请的key}}  
      base-url: https://api.deepseek.com  
      chat:  
        options:  
          model: deepseek-chat  
          temperature: 1.3

deepseek推荐的temperature设置建议:

场景temperature
代码生成/数学解题0.0
数据抽取/分析1.0
通用对话1.3
翻译1.3
创意类写作/诗歌创作1.5

4、接口开发

  • service
@Service  
public class DeepSeekServiceImpl implements IDeepSeekService {  
  
    @Resource  
    private OpenAiChatModel chatModel;  
  
    @Override  
    public String chat(String message) {  
        return chatModel.call(message);  
    }  
  
    @Override  
    public Flux<ChatResponse> chatFlux(String message) {  
        Prompt prompt = new Prompt(new UserMessage(message));  
//        Flux<ChatResponse> flux = chatModel.stream(prompt);  
        return chatModel.stream(prompt);  
    }  
}
  • contronller
@Controller  
@RequestMapping("ai")  
public class DeepSeekController {  
  
    @Resource  
    private IDeepSeekService deepSeekService;  
  
    @ResponseBody  
    @PostMapping(value = "/chat", produces = MediaType.APPLICATION_JSON_VALUE)  
    public ResultModel<String> chat(@RequestParam(value = "message") String message) {  
        return ResultModel.successResult(deepSeekService.chat(message));  
    }  
  
    @ResponseBody  
    @PostMapping(value = "/chatFlux", produces = MediaType.TEXT_EVENT_STREAM_VALUE)  
    public Flux<ChatResponse> chatFlux(@RequestParam(value = "message") String message) {  
        return deepSeekService.chatFlux(message);  
    }  
  
    @RequestMapping("/index")  
    public String index() {  
        return "ai/index";  
    }  
  
}

4、接入测试

使用http接口工具(postman等)测试接口即可,为了展示方便,做了个简单的页面,需要注意api返回的结果是markdown格式,渲染到html需要转换。

结果.png