Skip to content

集成 DeepSeek

集成 DeepSeek 有 2 种方案,一种是本地通过 Ollama 部署开源的 R1 版本,一种是直接调用 DeepSeek 的在线 API 的方式。相对来说,第二种更加简单。

集成在线 API

首先要去 DeepSeek 官网去申请 API Key,然后修改项目后台配置文件。

application.yml

yml
spring:
  ai:
    openai:
      api-key: #你申请的api key
      base-url: https://api.deepseek.com
      chat:
        options:
          model: deepseek-chat

修改代码ChatController,注销函数调用相关声明。

java
@OperationLog("发起对话")
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> stream(@RequestParam String message,
                            @RequestParam String conversationId,
                            @RequestParam(required = false) String files,
                            @RequestHeader("Authorization") String authHeader) throws JsonProcessingException {

       ...
// 注销函数调用
    return chatClient.prompt()
//                .functions("currentTasks", "sendMail", "getNewMails", "getDepartments")
            .toolContext(Map.of("username", username))
            .advisors(advisor -> advisor.param("chat_memory_conversation_id", conversationId)
                    .param("chat_memory_response_size", 100))
            .user(prompt)
            .stream()
            .content()
            .filter(Objects::nonNull)
            .map(content -> "'" + content); // 添加结束标识符
    }

通过 Ollama 集成

首先需要在本地使用 Ollama 部署 DeepSeek r1 版本,如果需要可以远程访问,开启 Ollama 的远程访问设置。

确保可以访问到 Ollama 部署的 DS 大模型后。就可以在项目中进行集成了。

首先需要下载 Ollama 依赖: pom.xml

xml
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>

application.yml中配置 Ollama:

yml
spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: deepseek-r1:32b

修改ChatController.java代码,注入 OllamaChatModel。

java
//    private final OpenAiChatModel chatModel;
private final OllamaChatModel ollamaChatModel;
private final ChatClient chatClient;

public ChatController(OllamaChatModel ollamaChatModel) {
    this.ollamaChatModel = ollamaChatModel;
    String systemPrompt = """
            你是一个非常有帮助的智能助手.
            """;
    this.chatClient = ChatClient.builder(ollamaChatModel)
            .defaultSystem(systemPrompt)
            .defaultAdvisors(new MessageChatMemoryAdvisor(new InMemoryChatMemory()))
            .build();
}

在使用的时候,同样需要删除掉函数调用相关的声明,因为 DeepSeek 目前对函数调用(Function Call)支持不好。