【AI应用开发捷径之路】第二课:SpringAi接入Deepseek

2025-12-29 17:56:18
文章摘要
本文主要介绍SpringAi接入Deepseek的一些核心及参数: 1、接入和配置步骤 2、模型通用参数详解 3、deepseek深度思考及流式输出 4、请求deepseek大模型的通信原理

文章转载自[ DAT数智AI技术 ]

原创 小数先生

摘要

本文主要介绍SpringAi接入Deepseek的一些核心及参数:

1、接入和配置步骤
2、模型通用参数详解
3、deepseek深度思考及流式输出
4、请求deepseek大模型的通信原理

一、接入Deepseek

1. 引入BOM进行版本管理


首先,在你的pom.xml的 <dependencyManagement> 部分引入Spring AI的BOM。强烈推荐使用当时最新的稳定版本。

xml

<dependencyManagement>

  <dependencies>

    <dependency>

      <groupId>org.springframework.ai</groupId>

      <artifactId>spring-ai-bom</artifactId>

      <version>1.0.3</version> <!-- 建议使用最新稳定版 –>

      <type>pom</type>

      <scope>import</scope>

    </dependency>

  </dependencies>

</dependencyManagement>

引入BOM后,在添加其他Spring AI组件依赖时就可以省略<version>标签了,所有版本都由BOM统一管理。


2. 添加模型Starter依赖


接下来,在<dependencies>部分添加你所需模型的Starter。例如,集成OpenAI和Ollama可以这样配置:

  <!–接入deepseek,由于使用是spring-ai-bom,所有不需要添加版本号–>

        <dependency>

            <groupId>org.springframework.ai</groupId>

            <artifactId>spring-ai-starter-model-deepseek</artifactId>

        </dependency>

3.配置文件

依赖添加完成后,你需要在:

 application.yml 或 application.properties 中进行配置。

spring:

  ai:

    deepseek:

      api-key: sk-xxx # 替换为你的DeepSeek API密钥

      # base-url: https://api.deepseek.com # 可省略,使用默认值

      chat:

        options:

          model: deepseek-chat # 可选:deepseek-chat 或 deepseek-reasoner (R1模型)[citation:3]

          temperature: 0.8 # 可选,控制输出随机性

api-key可以通过官网注册获取:

https://platform.deepseek.com/api_keys


4.测试

①阻断性返回测试

package com.example;


import cn.myeasyai.FaceApplication;

import org.junit.jupiter.api.Test;

import org.springframework.ai.deepseek.DeepSeekChatModel;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest(classes = FaceApplication.class)

public class TestDeepseek {


    @Test

    public void rest(@Autowired DeepSeekChatModel deepSeekChatModel) {

        String call = deepSeekChatModel.call("你好,你是谁");

        System.out.println(call);

    }

}

②流式返回测试

package com.example;


import cn.myeasyai.FaceApplication;

import org.junit.jupiter.api.Test;

import org.springframework.ai.deepseek.DeepSeekChatModel;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import reactor.core.publisher.Flux;


@SpringBootTest(classes = FaceApplication.class)

public class TestDeepseek {

    /**

     * 测试流式

     * @param deepSeekChatModel

     */

    @Test

    public void testDeepseekStream(@Autowired DeepSeekChatModel deepSeekChatModel) {

        Flux<String> stream = deepSeekChatModel.stream("你好,你是谁");

        stream.toIterable().forEach(System.out::println);

    }


}

二、模型通用配置参数

temperature(温度)   --性格

0-2 浮点数值

数值越高 更有创造性 热情

数值越低 保守

各业务场景适合的温度取值建议:

 @Test

public void testChatWithTemperature(@Autowired DeepSeekChatModel deepSeekChatModel) {

        // 创建带有温度参数的选项

        DeepSeekChatOptions options = DeepSeekChatOptions.builder()

                .temperature(0.9d)  // 温度参数范围通常是 0.0 到 2.0

                .maxTokens(500)     // 限制最大token数

                .build();

        // 创建提示

        Prompt prompt = new Prompt("请写一首表达爱意的诗词", options);

        // 调用模型

        ChatResponse response = deepSeekChatModel.call(prompt);

        String content = response.getResult().getOutput().getText();

        // 打印结果

        System.out.println("=== AI 响应 ===");

        System.out.println(content);

        System.out.println("===============");

    }

 @Test

    public void testChatWithTemperature(@Autowired DeepSeekChatModel deepSeekChatModel) {

        // 创建带有温度参数的选项

        DeepSeekChatOptions options = DeepSeekChatOptions.builder()

                .temperature(0.2d)  // 温度参数范围通常是 0.0 到 2.0

                .maxTokens(500)     // 限制最大token数

                .build();

        // 创建提示

        Prompt prompt = new Prompt("请写一首表达爱意的诗词", options);

        // 调用模型

        ChatResponse response = deepSeekChatModel.call(prompt);

        String content = response.getResult().getOutput().getText();

        // 打印结果

        System.out.println("=== AI 响应 ===");

        System.out.println(content);

        System.out.println("===============");

    }

model(模型)–主体

deepseek-chat 或 deepseek-reasoner (R1模型)[citation:3]

deepseek-reasoner

deepseek-chat

  @Test

    public void testChatWithTemperature(@Autowired DeepSeekChatModel deepSeekChatModel) {

        // 创建带有温度参数的选项

        DeepSeekChatOptions options = DeepSeekChatOptions.builder()

                .temperature(0.2d)  // 温度参数范围通常是 0.0 到 2.0

                .maxTokens(500)     // 限制最大token数

                .model("deepseek-reasoner")  //深度思考模型

                .build();

        // 创建提示

        Prompt prompt = new Prompt("请写一首表达爱意的诗词", options);

        // 调用模型

        ChatResponse response = deepSeekChatModel.call(prompt);

        String content = response.getResult().getOutput().getText();

        // 打印结果

        System.out.println("=== AI 响应 ===");

        System.out.println(content);

        System.out.println("===============");

    }

提示词–要求

在调用大模型的时候,也可以通过提示词降低他的主观臆想,例如在提示词中输入:

1、只引用可靠来源中的信息,不做任何假设或扩展描述。

2、请只基于已知事实回答,不要主观臆想或添加额外内容

3、请简明、客观地给出答案,不要进行修饰或补充未经请求的信息

   @Test

    public void testChatWithTemperature(@Autowired DeepSeekChatModel deepSeekChatModel) {

        // 创建带有温度参数的选项

        DeepSeekChatOptions options = DeepSeekChatOptions.builder()

                .temperature(0.2d)  // 温度参数范围通常是 0.0 到 2.0

                .maxTokens(500)     // 限制最大token数

                .model("deepseek-reasoner")  //深度思考模型

                .build();

        // 创建提示

        Prompt prompt = new Prompt("请写一首表达爱意的诗词,请简明、客观地给出答案,不要进行修饰或补充未经请求的信息", options);

        // 调用模型

        ChatResponse response = deepSeekChatModel.call(prompt);

        String content = response.getResult().getOutput().getText();

        // 打印结果

        System.out.println("=== AI 响应 ===");

        System.out.println(content);

        System.out.println("===============");

    }




}

maxToken -限制输出长度

maxTokens:限制Al模型生成的最大token数(近似理解为字数上限)

需要简洁回复、打分、列表、短摘要等,建议设置小值(如10~50)

防止用户跑长对话导致无关内容花费过多token费用。

如果遇到生成内容经常被截断,可以适当配置更大maxTokens。

@Test

public void testChatWithTemperature(@Autowired DeepSeekChatModel deepSeekChatModel) {

    // 创建带有温度参数的选项

    DeepSeekChatOptions options = DeepSeekChatOptions.builder()

    .temperature(0.2d)  // 温度参数范围通常是 0.0 到 2.0

    .maxTokens(500)     // 限制最大token数

    .model("deepseek-reasoner")  //深度思考模型

    .build();

    // 创建提示

    Prompt prompt = new Prompt("请写一首表达爱意的诗词,请简明、客观地给出答案,不要进行修饰或补充未经请求的信息", options);

    // 调用模型

    ChatResponse response = deepSeekChatModel.call(prompt);

    String content = response.getResult().getOutput().getText();

    // 打印结果

    System.out.println("=== AI 响应 ===");

    System.out.println(content);

    System.out.println("===============");

}

stop-截断输出内容

当触发设置的敏感关键词时,可以通过该参数进行截断输出

 @Test

    public void testChatWithTemperature(@Autowired DeepSeekChatModel deepSeekChatModel) {

        //设置截断关键词

        ArrayList<String> stopList = new ArrayList<>();

        stopList.add("。");

        // 创建带有温度参数的选项

        DeepSeekChatOptions options = DeepSeekChatOptions.builder()

                .temperature(0.2d)  // 温度参数范围通常是 0.0 到 2.0

                .maxTokens(500)     // 限制最大token数

                .model("deepseek-reasoner")  //深度思考模型

                .stop(stopList)


                .build();

        // 创建提示

        Prompt prompt = new Prompt("请写一首表达爱意的诗词", options);

        // 调用模型

        ChatResponse response = deepSeekChatModel.call(prompt);

        String content = response.getResult().getOutput().getText();

        // 打印结果

        System.out.println("=== AI 响应 ===");

        System.out.println(content);

        System.out.println("===============");

    }

可以看到输出一句诗词就没有再继续输出了(被截断丢弃了)

三、deepseek深度思考-流式输出

deepseek的深度思考内容和结果是分2个字段返回的,因此可以根据业务场景需求来决定是否需要获取到思维链。但需要注意的是,如果开启了深度思考模式,那么返回的方式必须是流式,否则会超时。

 @Test

    public void testOptimizedReasoningStream(@Autowired DeepSeekChatModel deepSeekChatModel) {

        DeepSeekChatOptions options = DeepSeekChatOptions.builder()

                .temperature(0.2d)

                .maxTokens(2000)

                .model("deepseek-reasoner")

                .build();

        Flux<ChatResponse> stream = deepSeekChatModel.stream(new Prompt("请写一首表达爱意的诗词",options));

        stream.toIterable().forEach(chatResponse ->  {

            DeepSeekAssistantMessage assistantMessage = (DeepSeekAssistantMessage) chatResponse.getResult().getOutput();

            System.out.println(assistantMessage.getReasoningContent()==null? "":assistantMessage.getReasoningContent());

        });


        System.out.println("输出结果==============================================================");

        stream.toIterable().forEach(chatResponse ->  {

            DeepSeekAssistantMessage assistantMessage = (DeepSeekAssistantMessage) chatResponse.getResult().getOutput();

            System.out.println(assistantMessage.getText()==null? "":assistantMessage.getText());

        });


    }




声明:该内容由作者自行发布,观点内容仅供参考,不代表平台立场;如有侵权,请联系平台删除。
标签:
模型部署
开源大模型