大模型应用开发-SpringAI框架

1.DeepSeek官方给出的API调用大模型代码

python 复制代码
from openai import OpenAI

# 1.初始化OpenAI客户端
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")

# 2.发送http请求到大模型
response = client.chat.completions.create(
    model="deepseek-r1",
    messages=[
        {"role": "system", "content": "你是一个热心的AI助手,你的名字叫小团团"},
        {"role": "user", "content": "你好,你是谁?"},
    ],
    stream=False
)

# 3.打印返回结果
print(response.choices[0].message.content)

2.大模型应用开发过程

3.SpringAI对话机器人入门

①引入 Maven 依赖 → ②yml 配置模型地址与模型名 →③写 @Bean 配置 ChatClient 客户端,调用对话(普通阻塞调用 / Flux 流式输出)

pom.xml 引入依赖

html 复制代码
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring‑ai‑bom</artifactId>
            <version>${spring‑ai.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Ollama 的 starter 启动依赖

html 复制代码
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring‑ai‑ollama‑spring‑boot‑starter</artifactId>
</dependency>

application.yml(配置模型)

java 复制代码
spring:
  ai:
    ollama:
      base‑url: http://localhost:11434
      chat:
        model: deepseek‑r1:7b

解释:

  1. base‑url:本地 Ollama 后台服务地址,默认端口就是 11434;如果 ollama 部署别的机器就改成对应 ip。
  2. model:指定使用本地已经下载好的大模型名字;注意模型名字必须和 ollama pull 下载的完全一致。
java 复制代码
spring:
  ai:
    openai:
      base‑url: https://dashscope.aliyuncs.com/compatible‑mode
      api‑key: ${OPENAI_API_KEY}
      chat:
        options:
          model: qwen‑max
          temperature: 0.8

配置 ChatClient 客户端 + 调用(Java 代码)

@Bean 生成 ChatClient 对象

java 复制代码
@Configuration
public class AiConfig {

    @Bean
    public ChatClient chatClient(OllamaChatModel model){
        return ChatClient.builder(model)
                // defaultSystem:全局系统提示词,设定AI角色(人设)
                .defaultSystem("你是可爱的助手,名字叫小团团")
                .build();
    }
}

解释关键点:

  1. OllamaChatModel:由 starter 自动创建,直接作为方法入参注入进来。
  2. ChatClient.builder(model) 使用构造器模式构建客户端实例。
  3. defaultSystem():全局系统提示词,设置 AI 助手的身份人设;后面每一次对话默认都会带上这条角色指令。

① call () 普通阻塞调用(一次性返回全部回答字符串)在controller里面

java 复制代码
// user("你是谁?") 用户提问;call()阻塞等待全部结果返回;content拿到回答文本
String content = chatClient.prompt()
        .user("你是谁?")
        .call()
        .content();

阻塞式;等大模型完整生成完所有文字之后一次性返回结果;前端看到的是一下子整段回复。

② stream () 流式输出(Flux<String>,打字机效果,一段一段返回)

java 复制代码
import reactor.core.publisher.Flux;

Flux<String> content = chatClient.prompt()
        .user("你是谁?")
        .stream()
        .content();

4.会话日志

java 复制代码
    @Bean
    public ChatClient chatClient(AlibabaOpenAiChatModel model, ChatMemory chatMemory) {
        return ChatClient
                .builder(model)//绑定大模型model 
                .defaultSystem("你是一个热心、可爱的智能助手,你的名字叫小团团,请以小团团的身份和语气回答问题。")
                .defaultAdvisors(//拦截器
                        new SimpleLoggerAdvisor(),//日志打印
                        new MessageChatMemoryAdvisor(chatMemory)//会话记忆
                )
                .build();
    }

日志配置

bash 复制代码
logging:
  level:
    org.springframework.ai: debug
    com.itheima.ai: debug
  • 发给通义模型完整 Prompt(包含 system 角色词 + chatMemory 拼接的历史上下文)
  • 大模型返回原始 JSON 响应内容。

5.会话记忆

相关推荐
YDS8292 小时前
Small Spring IOC篇:实现 Bean 的定义、注册、获取
java·spring
边境悍匪2 小时前
蜗牛学苑 Java 智能体学习 Day45|Knife4j+SpringBoot3、书城项目整合 MyBatis 思维导图复盘
java·开发语言·vue.js·学习·spring
蜡台2 小时前
向量数据库完全解析:原理、核心指标、RAG工作流 \+ Milvus实战Demo
ai·agent
云烟成雨TD2 小时前
LlamaIndex 系列【32】检索增强策略:自问自答(Self Ask)
ai·agent·rag·llamaindex
slacker-kian2 小时前
[实践]-让 SAP 工程 Skill 脱离 opencode跑在自定义Agent 上
ai·llm·sap·agent·abap·adt·opencode
合米AI SOP系统2 小时前
人工巡检的局限性,正在悄悄消耗工厂利润,合米科技AI SOP视觉防错怎么破?
人工智能·ai
需要8262 小时前
Arthas 一个命令排查线上问题
java·jvm·spring·spring cloud
云烟成雨TD2 小时前
LlamaIndex 系列【35】节点后处理器(Node Postprocessor)
ai·agent·rag·llamaindex
骑着蜗牛撵大象3272 小时前
告别内存泄漏:LLMManager架构设计与智能指针在AI SDK中的智慧选型
c++·ai·架构