SpringAI接入DeepSeek

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

前言

随着人工智能技术的快速发展,大语言模型(LLM)在各种应用场景中展现出巨大潜力。本文将详细介绍如何使用Spring Boot整合Spring AI框架,并连接DeepSeek大模型,构建智能应用。

Spring AI 框架概述

Spring AI 是 Spring 官方推出的 AI 集成框架,旨在简化 Java 开发者与 大语言模型(LLM) 和 AI 服务 的交互。它提供了一套标准 API,支持 OpenAI、Azure AI、Hugging Face、DeepSeek、Ollama(本地LLM)等多种 AI 服务,让开发者可以轻松集成 AI 能力到 Spring Boot 应用中。Spring AI 提供了 ChatClient、EmbeddingClient 等统一接口,无论底层是 OpenAI、DeepSeek 还是本地 Ollama,调用方式一致,减少代码耦合。

支持的 AI 服务

1、云端 AI OpenAI (GPT-4)、DeepSeek、Azure OpenAI 企业级 AI 应用,需稳定 API 调用
2、开源模型 Llama 2、Mistral、Gemma(通过 Ollama 或 Hugging Face) 本地开发、数据隐私要求高的场景
3、向量数据库 Pinecone、Milvus、Redis AI 增强搜索(RAG)

主要模块

spring-ai-core 核心抽象接口(如 ChatClient、EmbeddingClient)
spring-ai-openai 集成 OpenAI 的 Starter(GPT-3.5/4)
spring-ai-ollama 集成本地 Ollama 运行的 Llama2、Mistral 等模型
spring-ai-azure 支持 Azure OpenAI 服务
spring-ai-pinecone 集成 Pinecone 向量数据库,用于检索增强生成(RAG)

常见模型类型

模型类型功能说明典型应用场景
Chat(对话型)对话交互(如ChatGPT)客服机器人、聊天助手
Embedding(嵌入型)将文本转换为向量(数值数组)语义搜索、RAG
+ 传统搜索基于关键词匹配(如Google早期的搜索),而语义搜索通过理解查询的语义(含义)来返回更相关的结果。
+ 它利用深度学习模型(如BERT、Embedding模型)将文本转换为向量(vector),通过向量相似度匹配内容,即使查询词和文档没有直接的关键词重叠。
Image(文生图型)生成/处理图像(如Stable Diffusion)设计辅助、内容生成
Text-to-Speech(文转语音型)将文本转为语音语音助手、有声内容
Function Calling(函数回调型)让AI调用外部函数/API实时数据查询、工作流自动化

Spring AI 接入 DeepSeek

链接: link.

获取API密钥

前往DeepSeek官网申请API访问权限,获取API Key。

依赖配置

        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
            <version>1.0.0-M6</version>
        </dependency>

编写配置文件

# Spring AI OpenAI/DeepSeek 配置
spring:
  ai:
    openai:
      api-key: apikey # 设置 DeepSeek API 的访问密钥,永远不要将密钥提交到代码仓库,建议通过环境变量注入。搞不好要花钱的。
      base-url: https://api.deepseek.com           # 指定 DeepSeek API 的基础地址,格式与OpenAI相同。
      chat:
        options:
          model: deepseek-chat                     # 选择要调用的 DeepSeek 模型名称,必须与 DeepSeek 支持的模型列表匹配(如 deepseek-chat、deepseek-coder 等),不同模型可能有不同的计费标准和能力。
          temperature: 1.3                         # temperature 值越高,AI 回答越随机和创意;值越低,回答越确定和保守。1.3 属于高值,适合需要发散性输出的场景,但可能牺牲准确性。

编写 service

import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.SystemPromptTemplate;
import org.springframework.stereotype.Service;

import java.util.Map;

@RequiredArgsConstructor
@Service
public class AiService {

    private final ChatModel chatModel;

    // 简单的直接调用
    public String generate(String message) {
        return chatModel.call(message);
    }

    // 使用系统提示模板
    public String generateWithSystemPrompt(String userMessage) {

        SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate("""
                你是一个资深{domain}专家,回答需满足以下要求:
                1. 语言风格:{tone}
                2. 回答长度:{length}
                3. 用户问题:{userMessage}
                """);

        Prompt prompt = new Prompt(
                systemPromptTemplate.createMessage(Map.of(
                        "domain", "科技",
                        "tone", "幽默",
                        "length", "不超过100字",
                        "userMessage", userMessage
                ))
        );

        return chatModel.call(prompt).getResult().getOutput().getText();
    }
}

编写 controller

import com.example.demo.service.AiService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/ai")
@RequiredArgsConstructor
public class AiController {

    private final AiService aiService;

    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        return aiService.generate(message);
    }

    @GetMapping("/chat-with-prompt")
    public String chatWithPrompt(@RequestParam String message) {
        return aiService.generateWithSystemPrompt(message);
    }
}

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值