这半年有点事,号都长草了,上次更新遥远到还是上次,最近得些空闲,拾掇拾掇继续。现在技术圈最热的莫过于AI,似乎除了这个其他的都已经是上古时代产物,deepseek一夜之间打开了新世界的大门,莫慌,我们也来门口晃一晃。
经常有人问:deepseek不是开源的吗?我自己部一套接入自己的应用可以不? 当然OK,但是小公司不建议,软件虽然开源,还需要硬件不是吗?以下是问deepseek部署它需要的资源建议,来源网络,老板们参考即可!
那用现成的呢?当然也可以,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】。现在接口需要收费,自己测试用充三块五块即可。
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需要转换。