Java的SpringAI+Deepseek大模型实战【二】

文章目录

背景

上篇【Java的SpringAI+Deepseek大模型实战【一】】搭建起浏览器交互的环境,如何进行流式问答,控制台打印日志

交互方式

1、等待式问答

java 复制代码
    // 等待式
    @RequestMapping("/chat")
    public String chat(String str){
        return chatClient.prompt().user(str).call().content();
    }

浏览器输入【http://localhost:8080/ai/chat?str=你是谁?】,访问结果如下所示。

2、流式问答

java 复制代码
    @RequestMapping(value = "/chatting",produces = "text/html;charset=utf-8")
    public Flux<String> chatting(String str){
        return chatClient.prompt().user(str).stream().content();
    }

浏览器输入【http://localhost:8080/ai/chatting?str=你是谁?】,访问结果如下所示。

设置角色

设置角色可 使用 defaultSystem 属性,指明角色

java 复制代码
@Configuration
public class CommomConfiguration {

 @Bean
 public ChatClient chatClient(OllamaChatModel model){
     return ChatClient
             .builder(model)
             .defaultSystem("你是一个可爱热心的智能助手,你的名字叫小爱,请以小爱的口吻回答问题")
             .build();
 }
}

设置完毕,问答会有思考的过程

环绕增强

利用AOP原理提供AI会话,使用Advisors,实现控制台日志打印。

1)修改controller

使用 defaultAdvisors属性,

java 复制代码
@Configuration
public class CommomConfiguration {

    @Bean
    public ChatClient chatClient(OllamaChatModel model){
        return ChatClient
                .builder(model)
                .defaultSystem("你是一个可爱热心的智能助手,你的名字叫小爱,请以小爱的口吻回答问题")
                .defaultAdvisors(new SimpleLoggerAdvisor())
                .build();
    }
}

2)修改配置日志级别

修改yaml文件 ,配置日志logging的级别为debug。

powershell 复制代码
spring:
  application:
    name: learn-springai
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: deepseek-r1:1.5b
logging:
  level:
    org.springframework.ai.chat.client.advisor: debug
    com.henu.learnspringai: debug

控制台打印日志

处理跨域

java 复制代码
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @auth wang
 * @Date 2025/6/23 21:53
 **/
public class MvcConfiguration implements WebMvcConfigurer {

    // 处理跨域
    @Override
    public void addCorsMappings(CorsRegistry registry){
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET","PSOT","PUT","DELETE","OPTIONS")
                .allowedHeaders("*");
    }
}
相关推荐
weixin_440784111 小时前
【HandlerThread实现原理】
android·java·开发语言
天空'之城1 小时前
C 语言工业级通用组件手写 24:互补滤波
c语言·开发语言·互补滤波·嵌入式算法·工业级组件
leoZ2311 小时前
本地跑大模型实战(七):llama.cpp 性能调优,让推理更快更省
java·人工智能·spring·生成对抗网络·语言模型·自然语言处理·llama
XR1234567881 小时前
工厂车间无线网络方案对比:AGV漫游哪家强?
开发语言·php
傻啦嘿哟2 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
現実君3 小时前
【硬件进阶】AD22上位替换JLEDA教程
开发语言·php
mubei-1233 小时前
SpringDAO的用法
java·开发语言·数据库
happymagic3 小时前
java spring boot做的jar包程序,如何实现自动运行启动
java·运维·服务器·spring boot·jar
格林威5 小时前
多相机微秒级对齐:硬件触发 vs PTP(IEEE 1588)方案实战对比
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉
都叫我大帅哥5 小时前
给 Java 程序员的 CSRF 攻击详解:从原理到防御实战
java