【项目实战】Spring AI 调用 DeepSeek:全流程指引与实战解析

引言

在当今人工智能蓬勃发展的时代,大语言模型如雨后春笋般涌现,为开发者带来了前所未有的机遇和挑战。DeepSeek 作为一款具有强大性能和丰富功能的大语言模型,在自然语言处理领域展现出了卓越的能力。而 Spring AI 作为 Spring 生态系统中专注于人工智能集成的框架,为开发者提供了便捷、高效的 AI 调用方式。本文将详细介绍如何通过 Spring AI 调用 DeepSeek,帮助开发者快速上手并利用这两者的优势构建强大的 AI 应用。

1. Spring AI 与 DeepSeek 简介

1.1 Spring AI 概述

Spring AI 是 Spring 团队推出的一个全新的开源项目,旨在简化人工智能技术在 Spring 应用中的集成。它提供了统一的 API 接口,使得开发者可以方便地与各种 AI 服务进行交互,包括大语言模型、图像识别、语音识别等。Spring AI 的核心优势在于其与 Spring 框架的无缝集成,以及对多种 AI 服务的广泛支持,能够大大提高开发效率,降低开发成本。

1.2 DeepSeek 概述

DeepSeek 是一款基于先进深度学习架构(如 Transformer)的高性能大语言模型,通过千亿级参数规模的训练数据,能够高效完成文本生成、智能问答、语义理解、情感分析等多样化自然语言处理任务。其技术特点包括:

多任务支持:覆盖机器翻译、代码生成、文本摘要等复杂场景,支持零样本和小样本学习;
中文领域优势:针对中文语法、成语及文化背景进行专项优化,在语义连贯性和上下文理解上表现卓越;
工程化能力:提供低延迟推理接口和高并发处理能力,适配企业级应用需求。
密钥获取与服务稳定性

开发者可通过 DeepSeek 官方网站或 API 管理平台(如阿里云、腾讯云模型市场)申请试用密钥,国内节点保障了服务可访问性。其技术架构采用分布式计算与动态资源调度,支持 99.9% 以上的可用性承诺,且提供流量控制与异常重试机制,适合长期集成于生产环境。

推荐使用硅基流动官方提供的云化版满血deepseek, 硅基流动官网 新用户注册即可获取14元,充值也相对比较便宜,可以避免现在deepseek无法充值的情况。

2. 环境准备

2.1 Java 开发环境

确保你已经安装了 Java 开发环境,建议使用 Java 17 及以上版本。可以通过以下命令检查 Java 版本:

java -version

如果未安装 Java,可以从 Oracle 官网OpenJDK 官网 下载并安装。

2.2 Spring Boot 项目创建

可以使用 Spring Initializr(https://start.spring.io/ ) 快速创建一个 Spring Boot 项目。在创建项目时,选择以下依赖:

  • Spring Web
  • Spring AI Core

或者使用 Maven 或 Gradle 手动添加依赖:

Maven 依赖

<dependencies> 
    <dependency> 
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
        <groupId>org.springframework.ai</groupId>  
        <artifactId>spring-ai-core</artifactId> 
        <version>0.7.0</version> 
    </dependency> 
</dependencies> 

2.3 DeepSeek API 密钥获取

要使用 DeepSeek 服务,需要先获取 API 密钥。可以访问 DeepSeek 的官方网站,按照注册流程完成账号注册,并申请 API 密钥。但官网的deepseek经常出现服务不可用,所以这里我们选用硅基流动的deepseek。可以在官网进行注册,硅基流动官网 。将获取到的 API 密钥妥善保管,后续调用 DeepSeek 服务时会用到。

3. 配置 Spring AI 以调用 DeepSeek

3.1 配置 DeepSeek 客户端

在 Spring Boot 项目中,创建一个配置类来配置 DeepSeek 客户端。以下是一个示例配置类:

import org.springframework.ai.client.AiClient;  
import org.springframework.ai.client.DefaultAiClient;  
import org.springframework.ai.deepseek.client.DeepSeekAiClient;  
import org.springframework.ai.deepseek.client.DeepSeekAiClientConfig;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
 
@Configuration 
public class DeepSeekConfig { 
 
    @Bean 
    public AiClient deepSeekAiClient() { 
        // 替换为你自己的 DeepSeek API 密钥 
        String apiKey = "your-deepseek-api-key"; 
        DeepSeekAiClientConfig config = new DeepSeekAiClientConfig(apiKey); 
        return new DeepSeekAiClient(config); 
    } 
} 

3.2 配置 AI 服务

创建一个 AI 服务类,用于封装与 DeepSeek 的交互逻辑。以下是一个示例服务类:

import org.springframework.ai.client.AiClient;  
import org.springframework.ai.client.AiResponse;  
import org.springframework.ai.prompt.Prompt;  
import org.springframework.ai.prompt.messages.UserMessage;  
import org.springframework.stereotype.Service;  
 
import java.util.List;  
 
@Service 
public class DeepSeekAiService { 
 
    private final AiClient aiClient; 
 
    public DeepSeekAiService(AiClient aiClient) { 
        this.aiClient  = aiClient; 
    } 
 
    public String generateText(String input) { 
        UserMessage userMessage = new UserMessage(input); 
        Prompt prompt = new Prompt(List.of(userMessage));  
        AiResponse response = aiClient.generate(prompt);  
        return response.getGeneration().getText();  
    } 
} 

4. 实现基本的文本生成功能

4.1 创建控制器

创建一个 Spring 控制器,用于处理客户端的请求并调用 AI 服务。以下是一个示例控制器:

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RequestParam;  
import org.springframework.web.bind.annotation.RestController;  
 
@RestController 
public class DeepSeekController { 
 
    @Autowired 
    private DeepSeekAiService deepSeekAiService; 
 
    @GetMapping("/generate") 
    public String generate(@RequestParam String input) { 
        return deepSeekAiService.generateText(input);  
    } 
} 

4.2 测试文本生成功能

启动 Spring Boot 项目,使用浏览器或工具(如 Postman)访问以下 URL:

http://localhost:8080/generate?input=你好
如果一切配置正确,你将看到 DeepSeek 生成的文本响应。

5. 高级功能:定制请求参数

5.1 调整温度参数

温度参数(temperature)用于控制生成文本的随机性。值越高,生成的文本越随机;值越低,生成的文本越确定。可以在请求中设置温度参数:

import org.springframework.ai.client.AiClient;  
import org.springframework.ai.client.AiResponse;  
import org.springframework.ai.prompt.Prompt;  
import org.springframework.ai.prompt.messages.UserMessage;  
import org.springframework.stereotype.Service;  
 
import java.util.List;  
 
@Service 
public class DeepSeekAiService { 
 
    private final AiClient aiClient; 
 
    public DeepSeekAiService(AiClient aiClient) { 
        this.aiClient  = aiClient; 
    } 
 
    public String generateText(String input, double temperature) { 
        UserMessage userMessage = new UserMessage(input); 
        Prompt prompt = new Prompt(List.of(userMessage));  
        AiResponse response = aiClient.generate(prompt,  temperature); 
        return response.getGeneration().getText();  
    } 
} 

5.2 控制生成文本的长度

可以通过设置最大令牌数(maxTokens)来控制生成文本的长度:

import org.springframework.ai.client.AiClient;  
import org.springframework.ai.client.AiResponse;  
import org.springframework.ai.prompt.Prompt;  
import org.springframework.ai.prompt.messages.UserMessage;  
import org.springframework.stereotype.Service;  
 
import java.util.List;  
 
@Service 
public class DeepSeekAiService { 
 
    private final AiClient aiClient; 
 
    public DeepSeekAiService(AiClient aiClient) { 
        this.aiClient  = aiClient; 
    } 
 
    public String generateText(String input, double temperature, int maxTokens) { 
        UserMessage userMessage = new UserMessage(input); 
        Prompt prompt = new Prompt(List.of(userMessage));  
        AiResponse response = aiClient.generate(prompt,  temperature, maxTokens); 
        return response.getGeneration().getText();  
    } 
} 

6. 处理错误和异常

6.1 网络异常处理

在调用 DeepSeek 服务时,可能会遇到网络异常,如连接超时、请求失败等。可以在代码中捕获这些异常并进行相应的处理:

import org.springframework.ai.client.AiClient;  
import org.springframework.ai.client.AiResponse;  
import org.springframework.ai.prompt.Prompt;  
import org.springframework.ai.prompt.messages.UserMessage;  
import org.springframework.stereotype.Service;  
 
import java.io.IOException;  
import java.net.SocketTimeoutException;  
import java.util.List;  
 
@Service 
public class DeepSeekAiService { 
 
    private final AiClient aiClient; 
 
    public DeepSeekAiService(AiClient aiClient) { 
        this.aiClient  = aiClient; 
    } 
 
    public String generateText(String input) { 
        try { 
            UserMessage userMessage = new UserMessage(input); 
            Prompt prompt = new Prompt(List.of(userMessage));  
            AiResponse response = aiClient.generate(prompt);  
            return response.getGeneration().getText();  
        } catch (SocketTimeoutException e) { 
            System.err.println(" 请求超时: " + e.getMessage());  
            return "请求超时,请稍后重试"; 
        } catch (IOException e) { 
            System.err.println(" 网络异常: " + e.getMessage());  
            return "网络异常,请检查网络连接"; 
        } catch (Exception e) { 
            System.err.println(" 发生未知错误: " + e.getMessage());  
            return "发生未知错误,请联系管理员"; 
        } 
    } 
} 

6.2 API 密钥验证失败处理

如果 API 密钥验证失败,DeepSeek 服务会返回相应的错误信息。可以在代码中解析这些错误信息并进行处理:

import org.springframework.ai.client.AiClient;  
import org.springframework.ai.client.AiResponse;  
import org.springframework.ai.prompt.Prompt;  
import org.springframework.ai.prompt.messages.UserMessage;  
import org.springframework.stereotype.Service;  
 
import java.util.List;  
 
@Service 
public class DeepSeekAiService { 
 
    private final AiClient aiClient; 
 
    public DeepSeekAiService(AiClient aiClient) { 
        this.aiClient  = aiClient; 
    } 
 
    public String generateText(String input) { 
        UserMessage userMessage = new UserMessage(input); 
        Prompt prompt = new Prompt(List.of(userMessage));  
        try { 
            AiResponse response = aiClient.generate(prompt);  
            return response.getGeneration().getText();  
        } catch (Exception e) { 
            if (e.getMessage().contains("API  key is invalid")) { 
                System.err.println("API  密钥无效,请检查密钥配置"); 
                return "API 密钥无效,请检查密钥配置"; 
            } else { 
                System.err.println(" 发生错误: " + e.getMessage());  
                return "发生错误,请联系管理员"; 
            } 
        } 
    } 
} 

7. 性能优化与扩展

7.1 缓存机制

为了提高性能,可以使用缓存机制来减少对 DeepSeek 服务的重复调用。例如,可以使用 Spring Cache 来实现缓存功能:

import org.springframework.ai.client.AiClient;  
import org.springframework.ai.client.AiResponse;  
import org.springframework.ai.prompt.Prompt;  
import org.springframework.ai.prompt.messages.UserMessage;  
import org.springframework.cache.annotation.Cacheable;  
import org.springframework.stereotype.Service;  
 
import java.util.List;  
 
@Service 
public class DeepSeekAiService { 
 
    private final AiClient aiClient; 
 
    public DeepSeekAiService(AiClient aiClient) { 
        this.aiClient  = aiClient; 
    } 
 
    @Cacheable("deepSeekCache") 
    public String generateText(String input) { 
        UserMessage userMessage = new UserMessage(input); 
        Prompt prompt = new Prompt(List.of(userMessage));  
        AiResponse response = aiClient.generate(prompt);  
        return response.getGeneration().getText();  
    } 
} 

7.2 并发处理

如果应用需要处理大量的请求,可以使用多线程或异步处理来提高并发性能。例如,可以使用 Spring 的异步方法来实现异步处理:

import org.springframework.ai.client.AiClient;  
import org.springframework.ai.client.AiResponse;  
import org.springframework.ai.prompt.Prompt;  
import org.springframework.ai.prompt.messages.UserMessage;  
import org.springframework.scheduling.annotation.Async;  
import org.springframework.stereotype.Service;  
import org.springframework.util.concurrent.ListenableFuture;  
import org.springframework.util.concurrent.SettableListenableFuture;  
 
import java.util.List;  
 
@Service 
public class DeepSeekAiService { 
 
    private final AiClient aiClient; 
 
    public DeepSeekAiService(AiClient aiClient) { 
        this.aiClient  = aiClient; 
    } 
 
    @Async 
    public ListenableFuture<String> generateTextAsync(String input) { 
        SettableListenableFuture<String> future = new SettableListenableFuture<>(); 
        try { 
            UserMessage userMessage = new UserMessage(input); 
            Prompt prompt = new Prompt(List.of(userMessage));  
            AiResponse response = aiClient.generate(prompt);  
            future.set(response.getGeneration().getText());  
        } catch (Exception e) { 
            future.setException(e);  
        } 
        return future; 
    } 
} 

8. 安全与合规

8.1 数据安全

在调用 DeepSeek 服务时,要确保用户数据的安全。避免在请求中包含敏感信息,如用户的身份证号、银行卡号等。如果需要处理敏感数据,建议先对数据进行脱敏处理。

8.2 合规性

确保使用 DeepSeek 服务符合相关法律法规和服务条款。遵守数据保护、隐私政策等规定,避免因违规使用而导致的法律风险。

9. 总结与展望

通过本文的介绍,我们详细了解了如何通过 Spring AI 调用 DeepSeek 服务。从环境准备、配置客户端、实现基本功能到处理错误、优化性能等方面,都进行了全面的阐述。Spring AI 为开发者提供了便捷的 AI 集成方式,而 DeepSeek 则提供了强大的自然语言处理能力。未来,随着人工智能技术的不断发展,我们可以期待更多的创新应用和功能的出现。同时,开发者也可以进一步探索 Spring AI 和 DeepSeek 的更多高级特性,构建更加智能、高效的 AI 应用。

希望本文能够帮助开发者快速上手并掌握通过 Spring AI 调用 DeepSeek 的方法,在人工智能领域取得更多的成果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxg45

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值